From 3dfd184ee5c48234e3528b7e6b68c6eac22a7adf Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 01:23:36 +0200 Subject: [PATCH 01/25] Setup openapi-decorators and openapi-adonis --- package.json | 1 + packages/openapi-adonis/.npmignore | 5 + packages/openapi-adonis/biome.json | 21 + packages/openapi-adonis/example/.editorconfig | 22 + packages/openapi-adonis/example/.env.example | 6 + packages/openapi-adonis/example/.gitignore | 25 + packages/openapi-adonis/example/ace.js | 28 + packages/openapi-adonis/example/adonisrc.ts | 69 + .../app/controllers/users_controller.ts | 18 + .../example/app/exceptions/handler.ts | 28 + .../container_bindings_middleware.ts | 19 + .../force_json_response_middleware.ts | 16 + .../openapi-adonis/example/app/models/user.ts | 16 + .../openapi-adonis/example/bin/console.ts | 47 + packages/openapi-adonis/example/bin/server.ts | 45 + packages/openapi-adonis/example/bin/test.ts | 62 + packages/openapi-adonis/example/config/app.ts | 40 + .../example/config/bodyparser.ts | 55 + .../openapi-adonis/example/config/cors.ts | 19 + .../openapi-adonis/example/config/hash.ts | 24 + .../openapi-adonis/example/config/logger.ts | 35 + packages/openapi-adonis/example/package.json | 69 + packages/openapi-adonis/example/start/env.ts | 20 + .../openapi-adonis/example/start/kernel.ts | 41 + .../openapi-adonis/example/start/routes.ts | 25 + .../openapi-adonis/example/tests/bootstrap.ts | 38 + packages/openapi-adonis/example/tsconfig.json | 7 + packages/openapi-adonis/package.json | 76 + .../openapi-adonis/src/decorators/index.ts | 1 + packages/openapi-adonis/src/index.ts | 29 + .../src/loaders/loadController.ts | 57 + .../openapi-adonis/src/loaders/loadRoute.ts | 39 + .../openapi-adonis/src/loaders/loadRouter.ts | 16 + packages/openapi-adonis/src/types.ts | 4 + .../src/utils/normalizeRoutePattern.ts | 13 + packages/openapi-adonis/tsconfig.json | 32 + packages/openapi-adonis/tsup.config.ts | 8 + packages/openapi-adonis/vitest.config.ts | 12 + packages/openapi-decorators/.npmignore | 4 + packages/openapi-decorators/biome.json | 19 + packages/openapi-decorators/package.json | 75 + .../src/builders/base-builder.ts | 3 + .../src/builders/document-builder.ts | 65 + .../openapi-decorators/src/builders/index.ts | 4 + .../src/builders/operation-builder.ts | 37 + .../src/builders/schema-builder.ts | 49 + .../src/decorators/api-body.ts | 19 + .../src/decorators/api-operation.ts | 13 + .../src/decorators/api-param.ts | 22 + .../src/decorators/api-property.ts | 35 + .../src/decorators/api-query.ts | 22 + .../src/decorators/api-response.ts | 26 + .../src/decorators/api-tags.ts | 12 + .../src/decorators/index.ts | 7 + .../src/fixtures/document-base.ts | 17 + packages/openapi-decorators/src/index.ts | 1 + .../openapi-decorators/src/loaders/index.ts | 9 + .../src/loaders/loadApiBody.ts | 19 + .../src/loaders/loadApiOperation.ts | 6 + .../src/loaders/loadApiParam.ts | 16 + .../src/loaders/loadApiProperty.ts | 17 + .../src/loaders/loadApiQuery.ts | 16 + .../src/loaders/loadApiResponse.ts | 23 + .../src/loaders/loadApiTags.ts | 5 + .../src/loaders/loadSchema.ts | 25 + .../src/loaders/loadType.ts | 39 + packages/openapi-decorators/src/types.ts | 9 + packages/openapi-decorators/src/ui/index.ts | 1 + packages/openapi-decorators/src/ui/scalar.ts | 21 + .../openapi-decorators/src/utils/deepmerge.ts | 6 + .../openapi-decorators/src/utils/metadata.ts | 13 + .../test/decorators.test.ts | 132 + .../openapi-decorators/test/loaders.test.ts | 221 + packages/openapi-decorators/tsconfig.json | 33 + packages/openapi-decorators/tsup.config.ts | 8 + packages/openapi-decorators/vitest.config.ts | 12 + pnpm-lock.yaml | 5327 ++++++++++++++--- 77 files changed, 6720 insertions(+), 756 deletions(-) create mode 100644 packages/openapi-adonis/.npmignore create mode 100644 packages/openapi-adonis/biome.json create mode 100644 packages/openapi-adonis/example/.editorconfig create mode 100644 packages/openapi-adonis/example/.env.example create mode 100644 packages/openapi-adonis/example/.gitignore create mode 100644 packages/openapi-adonis/example/ace.js create mode 100644 packages/openapi-adonis/example/adonisrc.ts create mode 100644 packages/openapi-adonis/example/app/controllers/users_controller.ts create mode 100644 packages/openapi-adonis/example/app/exceptions/handler.ts create mode 100644 packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts create mode 100644 packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts create mode 100644 packages/openapi-adonis/example/app/models/user.ts create mode 100644 packages/openapi-adonis/example/bin/console.ts create mode 100644 packages/openapi-adonis/example/bin/server.ts create mode 100644 packages/openapi-adonis/example/bin/test.ts create mode 100644 packages/openapi-adonis/example/config/app.ts create mode 100644 packages/openapi-adonis/example/config/bodyparser.ts create mode 100644 packages/openapi-adonis/example/config/cors.ts create mode 100644 packages/openapi-adonis/example/config/hash.ts create mode 100644 packages/openapi-adonis/example/config/logger.ts create mode 100644 packages/openapi-adonis/example/package.json create mode 100644 packages/openapi-adonis/example/start/env.ts create mode 100644 packages/openapi-adonis/example/start/kernel.ts create mode 100644 packages/openapi-adonis/example/start/routes.ts create mode 100644 packages/openapi-adonis/example/tests/bootstrap.ts create mode 100644 packages/openapi-adonis/example/tsconfig.json create mode 100644 packages/openapi-adonis/package.json create mode 100644 packages/openapi-adonis/src/decorators/index.ts create mode 100644 packages/openapi-adonis/src/index.ts create mode 100644 packages/openapi-adonis/src/loaders/loadController.ts create mode 100644 packages/openapi-adonis/src/loaders/loadRoute.ts create mode 100644 packages/openapi-adonis/src/loaders/loadRouter.ts create mode 100644 packages/openapi-adonis/src/types.ts create mode 100644 packages/openapi-adonis/src/utils/normalizeRoutePattern.ts create mode 100644 packages/openapi-adonis/tsconfig.json create mode 100644 packages/openapi-adonis/tsup.config.ts create mode 100644 packages/openapi-adonis/vitest.config.ts create mode 100644 packages/openapi-decorators/.npmignore create mode 100644 packages/openapi-decorators/biome.json create mode 100644 packages/openapi-decorators/package.json create mode 100644 packages/openapi-decorators/src/builders/base-builder.ts create mode 100644 packages/openapi-decorators/src/builders/document-builder.ts create mode 100644 packages/openapi-decorators/src/builders/index.ts create mode 100644 packages/openapi-decorators/src/builders/operation-builder.ts create mode 100644 packages/openapi-decorators/src/builders/schema-builder.ts create mode 100644 packages/openapi-decorators/src/decorators/api-body.ts create mode 100644 packages/openapi-decorators/src/decorators/api-operation.ts create mode 100644 packages/openapi-decorators/src/decorators/api-param.ts create mode 100644 packages/openapi-decorators/src/decorators/api-property.ts create mode 100644 packages/openapi-decorators/src/decorators/api-query.ts create mode 100644 packages/openapi-decorators/src/decorators/api-response.ts create mode 100644 packages/openapi-decorators/src/decorators/api-tags.ts create mode 100644 packages/openapi-decorators/src/decorators/index.ts create mode 100644 packages/openapi-decorators/src/fixtures/document-base.ts create mode 100644 packages/openapi-decorators/src/index.ts create mode 100644 packages/openapi-decorators/src/loaders/index.ts create mode 100644 packages/openapi-decorators/src/loaders/loadApiBody.ts create mode 100644 packages/openapi-decorators/src/loaders/loadApiOperation.ts create mode 100644 packages/openapi-decorators/src/loaders/loadApiParam.ts create mode 100644 packages/openapi-decorators/src/loaders/loadApiProperty.ts create mode 100644 packages/openapi-decorators/src/loaders/loadApiQuery.ts create mode 100644 packages/openapi-decorators/src/loaders/loadApiResponse.ts create mode 100644 packages/openapi-decorators/src/loaders/loadApiTags.ts create mode 100644 packages/openapi-decorators/src/loaders/loadSchema.ts create mode 100644 packages/openapi-decorators/src/loaders/loadType.ts create mode 100644 packages/openapi-decorators/src/types.ts create mode 100644 packages/openapi-decorators/src/ui/index.ts create mode 100644 packages/openapi-decorators/src/ui/scalar.ts create mode 100644 packages/openapi-decorators/src/utils/deepmerge.ts create mode 100644 packages/openapi-decorators/src/utils/metadata.ts create mode 100644 packages/openapi-decorators/test/decorators.test.ts create mode 100644 packages/openapi-decorators/test/loaders.test.ts create mode 100644 packages/openapi-decorators/tsconfig.json create mode 100644 packages/openapi-decorators/tsup.config.ts create mode 100644 packages/openapi-decorators/vitest.config.ts diff --git a/package.json b/package.json index 0662645e7..cca2ef4af 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "build": "pnpm run -r --filter \"!*docs\" --aggregate-output build", "lint": "pnpm run -r --parallel --aggregate-output lint", + "dev": "pnpm run -r --parallel --filter \"{packages/*}\" --aggregate-output dev", "format": "pnpm run -r --parallel --aggregate-output format", "test": "pnpm run -r --parallel --aggregate-output test", "test-e2e": "pnpm run -r --parallel --aggregate-output test-e2e", diff --git a/packages/openapi-adonis/.npmignore b/packages/openapi-adonis/.npmignore new file mode 100644 index 000000000..a673d1305 --- /dev/null +++ b/packages/openapi-adonis/.npmignore @@ -0,0 +1,5 @@ +example +test +tsconfig*.json +vitest.config.ts +biome.json diff --git a/packages/openapi-adonis/biome.json b/packages/openapi-adonis/biome.json new file mode 100644 index 000000000..c07a9da68 --- /dev/null +++ b/packages/openapi-adonis/biome.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", + "extends": [ + "../../biome.json" + ], + "files": { + "ignore": [ + "./test/fixtures/" + ] + }, + "linter": { + "rules": { + "complexity": { + "noBannedTypes": "off" + }, + "suspicious": { + "noConfusingVoidType": "off" + } + } + } +} diff --git a/packages/openapi-adonis/example/.editorconfig b/packages/openapi-adonis/example/.editorconfig new file mode 100644 index 000000000..f830f4041 --- /dev/null +++ b/packages/openapi-adonis/example/.editorconfig @@ -0,0 +1,22 @@ +# http://editorconfig.org + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.json] +insert_final_newline = unset + +[**.min.js] +indent_style = unset +insert_final_newline = unset + +[MakeFile] +indent_style = space + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/openapi-adonis/example/.env.example b/packages/openapi-adonis/example/.env.example new file mode 100644 index 000000000..2aa8f14b7 --- /dev/null +++ b/packages/openapi-adonis/example/.env.example @@ -0,0 +1,6 @@ +TZ=UTC +PORT=3333 +HOST=localhost +LOG_LEVEL=info +APP_KEY=30kuDPpn6wxNER9r0phf-cfQTMT2h_n_ +NODE_ENV=development \ No newline at end of file diff --git a/packages/openapi-adonis/example/.gitignore b/packages/openapi-adonis/example/.gitignore new file mode 100644 index 000000000..4e9b44526 --- /dev/null +++ b/packages/openapi-adonis/example/.gitignore @@ -0,0 +1,25 @@ +# Dependencies and AdonisJS build +node_modules +build +tmp + +# Secrets +.env +.env.local +.env.production.local +.env.development.local + +# Frontend assets compiled code +public/assets + +# Build tools specific +npm-debug.log +yarn-error.log + +# Editors specific +.fleet +.idea +.vscode + +# Platform specific +.DS_Store diff --git a/packages/openapi-adonis/example/ace.js b/packages/openapi-adonis/example/ace.js new file mode 100644 index 000000000..d47f53aaf --- /dev/null +++ b/packages/openapi-adonis/example/ace.js @@ -0,0 +1,28 @@ +/* +|-------------------------------------------------------------------------- +| JavaScript entrypoint for running ace commands +|-------------------------------------------------------------------------- +| +| DO NOT MODIFY THIS FILE AS IT WILL BE OVERRIDDEN DURING THE BUILD +| PROCESS. +| +| See docs.adonisjs.com/guides/typescript-build-process#creating-production-build +| +| Since, we cannot run TypeScript source code using "node" binary, we need +| a JavaScript entrypoint to run ace commands. +| +| This file registers the "ts-node/esm" hook with the Node.js module system +| and then imports the "bin/console.ts" file. +| +*/ + +/** + * Register hook to process TypeScript files using ts-node + */ +import { register } from 'node:module' +register('ts-node/esm', import.meta.url) + +/** + * Import ace console entrypoint + */ +await import('./bin/console.js') diff --git a/packages/openapi-adonis/example/adonisrc.ts b/packages/openapi-adonis/example/adonisrc.ts new file mode 100644 index 000000000..a17f48b24 --- /dev/null +++ b/packages/openapi-adonis/example/adonisrc.ts @@ -0,0 +1,69 @@ +import { defineConfig } from '@adonisjs/core/app' + +export default defineConfig({ + /* + |-------------------------------------------------------------------------- + | Commands + |-------------------------------------------------------------------------- + | + | List of ace commands to register from packages. The application commands + | will be scanned automatically from the "./commands" directory. + | + */ + commands: [() => import('@adonisjs/core/commands')], + + /* + |-------------------------------------------------------------------------- + | Service providers + |-------------------------------------------------------------------------- + | + | List of service providers to import and register when booting the + | application + | + */ + providers: [ + () => import('@adonisjs/core/providers/app_provider'), + () => import('@adonisjs/core/providers/hash_provider'), + { + file: () => import('@adonisjs/core/providers/repl_provider'), + environment: ['repl', 'test'], + }, + () => import('@adonisjs/core/providers/vinejs_provider'), + () => import('@adonisjs/cors/cors_provider'), + ], + + /* + |-------------------------------------------------------------------------- + | Preloads + |-------------------------------------------------------------------------- + | + | List of modules to import before starting the application. + | + */ + preloads: [() => import('#start/routes'), () => import('#start/kernel')], + + /* + |-------------------------------------------------------------------------- + | Tests + |-------------------------------------------------------------------------- + | + | List of test suites to organize tests by their type. Feel free to remove + | and add additional suites. + | + */ + tests: { + suites: [ + { + files: ['tests/unit/**/*.spec(.ts|.js)'], + name: 'unit', + timeout: 2000, + }, + { + files: ['tests/functional/**/*.spec(.ts|.js)'], + name: 'functional', + timeout: 30000, + }, + ], + forceExit: false, + }, +}) diff --git a/packages/openapi-adonis/example/app/controllers/users_controller.ts b/packages/openapi-adonis/example/app/controllers/users_controller.ts new file mode 100644 index 000000000..fec83573c --- /dev/null +++ b/packages/openapi-adonis/example/app/controllers/users_controller.ts @@ -0,0 +1,18 @@ +import User from "#models/user"; +import { apiBody, apiOperation, apiResponse, apiParam, apiQuery } from "openapi-adonis/decorators"; + +export default class UsersController { + @apiOperation({ summary: "Get users", tags: ["User"] }) + @apiResponse({ type: User }) + @apiParam({ name: "id" }) + @apiQuery({ name: "query" }) + public async index(): Promise { + return new User(); + } + + @apiOperation({ summary: "Create new user", tags: ["User"] }) + @apiBody({ type: User }) + public async create(): Promise { + return new User(); + } +} diff --git a/packages/openapi-adonis/example/app/exceptions/handler.ts b/packages/openapi-adonis/example/app/exceptions/handler.ts new file mode 100644 index 000000000..367898fc4 --- /dev/null +++ b/packages/openapi-adonis/example/app/exceptions/handler.ts @@ -0,0 +1,28 @@ +import app from '@adonisjs/core/services/app' +import { HttpContext, ExceptionHandler } from '@adonisjs/core/http' + +export default class HttpExceptionHandler extends ExceptionHandler { + /** + * In debug mode, the exception handler will display verbose errors + * with pretty printed stack traces. + */ + protected debug = !app.inProduction + + /** + * The method is used for handling errors and returning + * response to the client + */ + async handle(error: unknown, ctx: HttpContext) { + return super.handle(error, ctx) + } + + /** + * The method is used to report error to the logging service or + * the third party error monitoring service. + * + * @note You should not attempt to send a response from this method. + */ + async report(error: unknown, ctx: HttpContext) { + return super.report(error, ctx) + } +} diff --git a/packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts b/packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts new file mode 100644 index 000000000..97abc835b --- /dev/null +++ b/packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts @@ -0,0 +1,19 @@ +import { Logger } from '@adonisjs/core/logger' +import { HttpContext } from '@adonisjs/core/http' +import type { NextFn } from '@adonisjs/core/types/http' + +/** + * The container bindings middleware binds classes to their request + * specific value using the container resolver. + * + * - We bind "HttpContext" class to the "ctx" object + * - And bind "Logger" class to the "ctx.logger" object + */ +export default class ContainerBindingsMiddleware { + handle(ctx: HttpContext, next: NextFn) { + ctx.containerResolver.bindValue(HttpContext, ctx) + ctx.containerResolver.bindValue(Logger, ctx.logger) + + return next() + } +} diff --git a/packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts b/packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts new file mode 100644 index 000000000..58022e7a8 --- /dev/null +++ b/packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts @@ -0,0 +1,16 @@ +import type { HttpContext } from '@adonisjs/core/http' +import type { NextFn } from '@adonisjs/core/types/http' + +/** + * Updating the "Accept" header to always accept "application/json" response + * from the server. This will force the internals of the framework like + * validator errors or auth errors to return a JSON response. + */ +export default class ForceJsonResponseMiddleware { + async handle({ request }: HttpContext, next: NextFn) { + const headers = request.headers() + headers.accept = 'application/json' + + return next() + } +} diff --git a/packages/openapi-adonis/example/app/models/user.ts b/packages/openapi-adonis/example/app/models/user.ts new file mode 100644 index 000000000..8fdefd755 --- /dev/null +++ b/packages/openapi-adonis/example/app/models/user.ts @@ -0,0 +1,16 @@ +import { BaseModel } from "@adonisjs/lucid/orm"; +import { apiProperty } from "openapi-adonis/decorators"; + +export default class User extends BaseModel { + @apiProperty({ example: "5" }) + declare id: string; + + @apiProperty() + declare name: number; + + @apiProperty() + declare hey: string; + + @apiProperty({ type: User }) + declare user: User; +} diff --git a/packages/openapi-adonis/example/bin/console.ts b/packages/openapi-adonis/example/bin/console.ts new file mode 100644 index 000000000..4b102ee86 --- /dev/null +++ b/packages/openapi-adonis/example/bin/console.ts @@ -0,0 +1,47 @@ +/* +|-------------------------------------------------------------------------- +| Ace entry point +|-------------------------------------------------------------------------- +| +| The "console.ts" file is the entrypoint for booting the AdonisJS +| command-line framework and executing commands. +| +| Commands do not boot the application, unless the currently running command +| has "options.startApp" flag set to true. +| +*/ + +import 'reflect-metadata' +import { Ignitor, prettyPrintError } from '@adonisjs/core' + +/** + * URL to the application root. AdonisJS need it to resolve + * paths to file and directories for scaffolding commands + */ +const APP_ROOT = new URL('../', import.meta.url) + +/** + * The importer is used to import files in context of the + * application. + */ +const IMPORTER = (filePath: string) => { + if (filePath.startsWith('./') || filePath.startsWith('../')) { + return import(new URL(filePath, APP_ROOT).href) + } + return import(filePath) +} + +new Ignitor(APP_ROOT, { importer: IMPORTER }) + .tap((app) => { + app.booting(async () => { + await import('#start/env') + }) + app.listen('SIGTERM', () => app.terminate()) + app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate()) + }) + .ace() + .handle(process.argv.splice(2)) + .catch((error) => { + process.exitCode = 1 + prettyPrintError(error) + }) diff --git a/packages/openapi-adonis/example/bin/server.ts b/packages/openapi-adonis/example/bin/server.ts new file mode 100644 index 000000000..fe0fefbaf --- /dev/null +++ b/packages/openapi-adonis/example/bin/server.ts @@ -0,0 +1,45 @@ +/* +|-------------------------------------------------------------------------- +| HTTP server entrypoint +|-------------------------------------------------------------------------- +| +| The "server.ts" file is the entrypoint for starting the AdonisJS HTTP +| server. Either you can run this file directly or use the "serve" +| command to run this file and monitor file changes +| +*/ + +import 'reflect-metadata' +import { Ignitor, prettyPrintError } from '@adonisjs/core' + +/** + * URL to the application root. AdonisJS need it to resolve + * paths to file and directories for scaffolding commands + */ +const APP_ROOT = new URL('../', import.meta.url) + +/** + * The importer is used to import files in context of the + * application. + */ +const IMPORTER = (filePath: string) => { + if (filePath.startsWith('./') || filePath.startsWith('../')) { + return import(new URL(filePath, APP_ROOT).href) + } + return import(filePath) +} + +new Ignitor(APP_ROOT, { importer: IMPORTER }) + .tap((app) => { + app.booting(async () => { + await import('#start/env') + }) + app.listen('SIGTERM', () => app.terminate()) + app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate()) + }) + .httpServer() + .start() + .catch((error) => { + process.exitCode = 1 + prettyPrintError(error) + }) diff --git a/packages/openapi-adonis/example/bin/test.ts b/packages/openapi-adonis/example/bin/test.ts new file mode 100644 index 000000000..d759efe42 --- /dev/null +++ b/packages/openapi-adonis/example/bin/test.ts @@ -0,0 +1,62 @@ +/* +|-------------------------------------------------------------------------- +| Test runner entrypoint +|-------------------------------------------------------------------------- +| +| The "test.ts" file is the entrypoint for running tests using Japa. +| +| Either you can run this file directly or use the "test" +| command to run this file and monitor file changes. +| +*/ + +process.env.NODE_ENV = 'test' + +import 'reflect-metadata' +import { Ignitor, prettyPrintError } from '@adonisjs/core' +import { configure, processCLIArgs, run } from '@japa/runner' + +/** + * URL to the application root. AdonisJS need it to resolve + * paths to file and directories for scaffolding commands + */ +const APP_ROOT = new URL('../', import.meta.url) + +/** + * The importer is used to import files in context of the + * application. + */ +const IMPORTER = (filePath: string) => { + if (filePath.startsWith('./') || filePath.startsWith('../')) { + return import(new URL(filePath, APP_ROOT).href) + } + return import(filePath) +} + +new Ignitor(APP_ROOT, { importer: IMPORTER }) + .tap((app) => { + app.booting(async () => { + await import('#start/env') + }) + app.listen('SIGTERM', () => app.terminate()) + app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate()) + }) + .testRunner() + .configure(async (app) => { + const { runnerHooks, ...config } = await import('../tests/bootstrap.js') + + processCLIArgs(process.argv.splice(2)) + configure({ + ...app.rcFile.tests, + ...config, + ...{ + setup: runnerHooks.setup, + teardown: runnerHooks.teardown.concat([() => app.terminate()]), + }, + }) + }) + .run(() => run()) + .catch((error) => { + process.exitCode = 1 + prettyPrintError(error) + }) diff --git a/packages/openapi-adonis/example/config/app.ts b/packages/openapi-adonis/example/config/app.ts new file mode 100644 index 000000000..1292af792 --- /dev/null +++ b/packages/openapi-adonis/example/config/app.ts @@ -0,0 +1,40 @@ +import env from '#start/env' +import app from '@adonisjs/core/services/app' +import { Secret } from '@adonisjs/core/helpers' +import { defineConfig } from '@adonisjs/core/http' + +/** + * The app key is used for encrypting cookies, generating signed URLs, + * and by the "encryption" module. + * + * The encryption module will fail to decrypt data if the key is lost or + * changed. Therefore it is recommended to keep the app key secure. + */ +export const appKey = new Secret(env.get('APP_KEY')) + +/** + * The configuration settings used by the HTTP server + */ +export const http = defineConfig({ + generateRequestId: true, + allowMethodSpoofing: false, + + /** + * Enabling async local storage will let you access HTTP context + * from anywhere inside your application. + */ + useAsyncLocalStorage: false, + + /** + * Manage cookies configuration. The settings for the session id cookie are + * defined inside the "config/session.ts" file. + */ + cookie: { + domain: '', + path: '/', + maxAge: '2h', + httpOnly: true, + secure: app.inProduction, + sameSite: 'lax', + }, +}) diff --git a/packages/openapi-adonis/example/config/bodyparser.ts b/packages/openapi-adonis/example/config/bodyparser.ts new file mode 100644 index 000000000..f3d1ead9d --- /dev/null +++ b/packages/openapi-adonis/example/config/bodyparser.ts @@ -0,0 +1,55 @@ +import { defineConfig } from '@adonisjs/core/bodyparser' + +const bodyParserConfig = defineConfig({ + /** + * The bodyparser middleware will parse the request body + * for the following HTTP methods. + */ + allowedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'], + + /** + * Config for the "application/x-www-form-urlencoded" + * content-type parser + */ + form: { + convertEmptyStringsToNull: true, + types: ['application/x-www-form-urlencoded'], + }, + + /** + * Config for the JSON parser + */ + json: { + convertEmptyStringsToNull: true, + types: [ + 'application/json', + 'application/json-patch+json', + 'application/vnd.api+json', + 'application/csp-report', + ], + }, + + /** + * Config for the "multipart/form-data" content-type parser. + * File uploads are handled by the multipart parser. + */ + multipart: { + /** + * Enabling auto process allows bodyparser middleware to + * move all uploaded files inside the tmp folder of your + * operating system + */ + autoProcess: true, + convertEmptyStringsToNull: true, + processManually: [], + + /** + * Maximum limit of data to parse including all files + * and fields + */ + limit: '20mb', + types: ['multipart/form-data'], + }, +}) + +export default bodyParserConfig diff --git a/packages/openapi-adonis/example/config/cors.ts b/packages/openapi-adonis/example/config/cors.ts new file mode 100644 index 000000000..328934b3d --- /dev/null +++ b/packages/openapi-adonis/example/config/cors.ts @@ -0,0 +1,19 @@ +import { defineConfig } from '@adonisjs/cors' + +/** + * Configuration options to tweak the CORS policy. The following + * options are documented on the official documentation website. + * + * https://docs.adonisjs.com/guides/security/cors + */ +const corsConfig = defineConfig({ + enabled: true, + origin: true, + methods: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE'], + headers: true, + exposeHeaders: [], + credentials: true, + maxAge: 90, +}) + +export default corsConfig diff --git a/packages/openapi-adonis/example/config/hash.ts b/packages/openapi-adonis/example/config/hash.ts new file mode 100644 index 000000000..ab1030084 --- /dev/null +++ b/packages/openapi-adonis/example/config/hash.ts @@ -0,0 +1,24 @@ +import { defineConfig, drivers } from '@adonisjs/core/hash' + +const hashConfig = defineConfig({ + default: 'scrypt', + + list: { + scrypt: drivers.scrypt({ + cost: 16384, + blockSize: 8, + parallelization: 1, + maxMemory: 33554432, + }), + }, +}) + +export default hashConfig + +/** + * Inferring types for the list of hashers you have configured + * in your application. + */ +declare module '@adonisjs/core/types' { + export interface HashersList extends InferHashers {} +} diff --git a/packages/openapi-adonis/example/config/logger.ts b/packages/openapi-adonis/example/config/logger.ts new file mode 100644 index 000000000..b96130040 --- /dev/null +++ b/packages/openapi-adonis/example/config/logger.ts @@ -0,0 +1,35 @@ +import env from '#start/env' +import app from '@adonisjs/core/services/app' +import { defineConfig, targets } from '@adonisjs/core/logger' + +const loggerConfig = defineConfig({ + default: 'app', + + /** + * The loggers object can be used to define multiple loggers. + * By default, we configure only one logger (named "app"). + */ + loggers: { + app: { + enabled: true, + name: env.get('APP_NAME'), + level: env.get('LOG_LEVEL'), + transport: { + targets: targets() + .pushIf(!app.inProduction, targets.pretty()) + .pushIf(app.inProduction, targets.file({ destination: 1 })) + .toArray(), + }, + }, + }, +}) + +export default loggerConfig + +/** + * Inferring types for the list of loggers you have configured + * in your application. + */ +declare module '@adonisjs/core/types' { + export interface LoggersList extends InferLoggers {} +} diff --git a/packages/openapi-adonis/example/package.json b/packages/openapi-adonis/example/package.json new file mode 100644 index 000000000..cf5995223 --- /dev/null +++ b/packages/openapi-adonis/example/package.json @@ -0,0 +1,69 @@ +{ + "name": "@example/openapi-adonis", + "version": "0.0.0", + "private": true, + "type": "module", + "license": "UNLICENSED", + "scripts": { + "start": "node bin/server.js", + "build": "node ace build", + "dev": "node ace serve --watch", + "test": "node ace test", + "lint": "eslint .", + "format": "prettier --write .", + "typecheck": "tsc --noEmit" + }, + "imports": { + "#controllers/*": "./app/controllers/*.js", + "#exceptions/*": "./app/exceptions/*.js", + "#models/*": "./app/models/*.js", + "#mails/*": "./app/mails/*.js", + "#services/*": "./app/services/*.js", + "#listeners/*": "./app/listeners/*.js", + "#events/*": "./app/events/*.js", + "#middleware/*": "./app/middleware/*.js", + "#validators/*": "./app/validators/*.js", + "#providers/*": "./providers/*.js", + "#policies/*": "./app/policies/*.js", + "#abilities/*": "./app/abilities/*.js", + "#database/*": "./database/*.js", + "#start/*": "./start/*.js", + "#tests/*": "./tests/*.js", + "#config/*": "./config/*.js" + }, + "devDependencies": { + "@adonisjs/assembler": "^7.7.0", + "@adonisjs/eslint-config": "^1.3.0", + "@adonisjs/http-server": "^7.2.3", + "@adonisjs/prettier-config": "^1.3.0", + "@adonisjs/tsconfig": "^1.3.0", + "@swc/core": "^1.6.5", + "@types/node": "^20.14.9", + "eslint": "^8.57.0", + "hot-hook": "^0.2.6", + "pino-pretty": "^11.2.1", + "prettier": "^3.3.2", + "ts-node": "^10.9.2", + "typescript": "~5.4" + }, + "dependencies": { + "@adonisjs/auth": "^9.2.3", + "@adonisjs/core": "^6.12.1", + "@adonisjs/cors": "^2.2.1", + "@adonisjs/lucid": "^21.1.0", + "@vinejs/vine": "^2.1.0", + "luxon": "^3.5.0", + "openapi-adonis": "workspace:^", + "reflect-metadata": "^0.2.2" + }, + "hotHook": { + "boundaries": [ + "./app/controllers/**/*.ts", + "./app/middleware/*.ts" + ] + }, + "eslintConfig": { + "extends": "@adonisjs/eslint-config/app" + }, + "prettier": "@adonisjs/prettier-config" +} diff --git a/packages/openapi-adonis/example/start/env.ts b/packages/openapi-adonis/example/start/env.ts new file mode 100644 index 000000000..3676c3525 --- /dev/null +++ b/packages/openapi-adonis/example/start/env.ts @@ -0,0 +1,20 @@ +/* +|-------------------------------------------------------------------------- +| Environment variables service +|-------------------------------------------------------------------------- +| +| The `Env.create` method creates an instance of the Env service. The +| service validates the environment variables and also cast values +| to JavaScript data types. +| +*/ + +import { Env } from '@adonisjs/core/env' + +export default await Env.create(new URL('../', import.meta.url), { + NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const), + PORT: Env.schema.number(), + APP_KEY: Env.schema.string(), + HOST: Env.schema.string({ format: 'host' }), + LOG_LEVEL: Env.schema.enum(['fatal', 'error', 'warn', 'info', 'debug', 'trace']), +}) diff --git a/packages/openapi-adonis/example/start/kernel.ts b/packages/openapi-adonis/example/start/kernel.ts new file mode 100644 index 000000000..865831760 --- /dev/null +++ b/packages/openapi-adonis/example/start/kernel.ts @@ -0,0 +1,41 @@ +/* +|-------------------------------------------------------------------------- +| HTTP kernel file +|-------------------------------------------------------------------------- +| +| The HTTP kernel file is used to register the middleware with the server +| or the router. +| +*/ + +import router from '@adonisjs/core/services/router' +import server from '@adonisjs/core/services/server' + +/** + * The error handler is used to convert an exception + * to a HTTP response. + */ +server.errorHandler(() => import('#exceptions/handler')) + +/** + * The server middleware stack runs middleware on all the HTTP + * requests, even if there is no route registered for + * the request URL. + */ +server.use([ + () => import('#middleware/container_bindings_middleware'), + () => import('#middleware/force_json_response_middleware'), + () => import('@adonisjs/cors/cors_middleware'), +]) + +/** + * The router middleware stack runs middleware on all the HTTP + * requests with a registered route. + */ +router.use([() => import('@adonisjs/core/bodyparser_middleware')]) + +/** + * Named middleware collection must be explicitly assigned to + * the routes or the routes group. + */ +export const middleware = router.named({}) diff --git a/packages/openapi-adonis/example/start/routes.ts b/packages/openapi-adonis/example/start/routes.ts new file mode 100644 index 000000000..3babeee09 --- /dev/null +++ b/packages/openapi-adonis/example/start/routes.ts @@ -0,0 +1,25 @@ +/* +|-------------------------------------------------------------------------- +| Routes file +|-------------------------------------------------------------------------- +| +| The routes file is used for defining the HTTP routes. +| +*/ + +import router from "@adonisjs/core/services/router"; +import AdonisOpenAPI from "openapi-adonis"; + +const UsersController = () => import("#controllers/users_controller"); + +router.get("/", async () => { + return { + hello: "world", + }; +}); + +router.get("/users/:id", [UsersController, "index"]); +router.post("/users", [UsersController, "create"]); + +const builder = AdonisOpenAPI.document().setTitle("OpenAPI Adonis Example"); +AdonisOpenAPI.setup("/docs", router, builder); diff --git a/packages/openapi-adonis/example/tests/bootstrap.ts b/packages/openapi-adonis/example/tests/bootstrap.ts new file mode 100644 index 000000000..39aa4c7cf --- /dev/null +++ b/packages/openapi-adonis/example/tests/bootstrap.ts @@ -0,0 +1,38 @@ +import { assert } from '@japa/assert' +import { apiClient } from '@japa/api-client' +import app from '@adonisjs/core/services/app' +import type { Config } from '@japa/runner/types' +import { pluginAdonisJS } from '@japa/plugin-adonisjs' +import testUtils from '@adonisjs/core/services/test_utils' + +/** + * This file is imported by the "bin/test.ts" entrypoint file + */ + +/** + * Configure Japa plugins in the plugins array. + * Learn more - https://japa.dev/docs/runner-config#plugins-optional + */ +export const plugins: Config['plugins'] = [assert(), apiClient(), pluginAdonisJS(app)] + +/** + * Configure lifecycle function to run before and after all the + * tests. + * + * The setup functions are executed before all the tests + * The teardown functions are executer after all the tests + */ +export const runnerHooks: Required> = { + setup: [], + teardown: [], +} + +/** + * Configure suites by tapping into the test suite instance. + * Learn more - https://japa.dev/docs/test-suites#lifecycle-hooks + */ +export const configureSuite: Config['configureSuite'] = (suite) => { + if (['browser', 'functional', 'e2e'].includes(suite.name)) { + return suite.setup(() => testUtils.httpServer().start()) + } +} diff --git a/packages/openapi-adonis/example/tsconfig.json b/packages/openapi-adonis/example/tsconfig.json new file mode 100644 index 000000000..e05703c28 --- /dev/null +++ b/packages/openapi-adonis/example/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@adonisjs/tsconfig/tsconfig.app.json", + "compilerOptions": { + "rootDir": "./", + "outDir": "./build", + }, +} diff --git a/packages/openapi-adonis/package.json b/packages/openapi-adonis/package.json new file mode 100644 index 000000000..8feb33846 --- /dev/null +++ b/packages/openapi-adonis/package.json @@ -0,0 +1,76 @@ +{ + "name": "openapi-adonis", + "description": "Auto-Generate OpenAPI specifications for AdonisJS", + "version": "0.0.1", + "author": { + "name": "Martin PAUCOT", + "email": "contact@martin-paucot.Fr" + }, + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./*": "./*", + "./decorators": { + "types": "./dist/decorators/index.d.ts", + "default": "./dist/decorators/index.js" + } + }, + "homepage": "https://openapi-ts.dev", + "repository": { + "type": "git", + "url": "https://github.com/openapi-ts/openapi-typescript", + "directory": "packages/openapi-adonis" + }, + "bugs": { + "url": "https://github.com/openapi-ts/openapi-typescript/issues" + }, + "keywords": [ + "openapi", + "swagger", + "rest", + "api", + "oapi_3", + "oapi_3_1", + "typescript", + "adonis" + ], + "scripts": { + "build": "pnpm run build:clean && pnpm run build:esm && pnpm run build:cjs", + "build:clean": "del-cli dist", + "build:esm": "tsc -p tsconfig.json", + "build:cjs": "esbuild --bundle --platform=node --target=es2019 --outfile=dist/index.cjs --external:typescript src/index.ts", + "dev": "tsup --watch", + "format": "biome format . --write", + "lint": "biome check .", + "test": "pnpm run \"/^test:/\"", + "test:js": "vitest run", + "test:ts": "tsc --noEmit", + "version": "pnpm run prepare && pnpm run build" + }, + "dependencies": { + "@fastify/deepmerge": "^2.0.0", + "@vinejs/vine": "^2.1.0", + "lodash": "^4.17.21", + "openapi-decorators": "workspace:^", + "openapi-types": "^12.1.3", + "reflect-metadata": "^0.2.2" + }, + "devDependencies": { + "@adonisjs/core": "^6.12.1", + "@adonisjs/http-server": "^7.2.3", + "@types/lodash": "^4.17.7", + "@types/node": "^22.1.0", + "del-cli": "^5.1.0", + "esbuild": "^0.20.2", + "execa": "^8.0.1", + "tsup": "^8.2.4", + "typescript": "^5.4.5", + "unplugin-swc": "^1.5.1" + } +} diff --git a/packages/openapi-adonis/src/decorators/index.ts b/packages/openapi-adonis/src/decorators/index.ts new file mode 100644 index 000000000..49ccd8402 --- /dev/null +++ b/packages/openapi-adonis/src/decorators/index.ts @@ -0,0 +1 @@ +export * from "openapi-decorators"; diff --git a/packages/openapi-adonis/src/index.ts b/packages/openapi-adonis/src/index.ts new file mode 100644 index 000000000..c1894991d --- /dev/null +++ b/packages/openapi-adonis/src/index.ts @@ -0,0 +1,29 @@ +import type { OpenAPIV3 } from "openapi-types"; + +import type { Router } from "@adonisjs/http-server"; +import { DocumentBuilder } from "openapi-decorators/builders"; +import { generateScalarUI } from "openapi-decorators/ui"; +import { loadRouter } from "./loaders/loadRouter"; + +// biome-ignore lint/complexity/noStaticOnlyClass: TODO: move out of class +export default class AdonisOpenAPI { + public static document() { + return new DocumentBuilder(); + } + + public static async load(builder: DocumentBuilder, router: Router): Promise { + await loadRouter(builder, router); + return builder.build(); + } + + public static setup(pattern: string, router: Router, builder: DocumentBuilder) { + router.get(pattern, () => { + return generateScalarUI("/docs.json"); + }); + + router.get(`${pattern}.json`, async () => { + await AdonisOpenAPI.load(builder, router); + return builder.build(); + }); + } +} diff --git a/packages/openapi-adonis/src/loaders/loadController.ts b/packages/openapi-adonis/src/loaders/loadController.ts new file mode 100644 index 000000000..e678e0f77 --- /dev/null +++ b/packages/openapi-adonis/src/loaders/loadController.ts @@ -0,0 +1,57 @@ +import type { DocumentBuilder, OperationBuilder } from "openapi-decorators/builders"; +import { + getApiBody, + getApiOperation, + getApiParams, + getApiQueries, + getApiResponses, + getApiTags, +} from "openapi-decorators"; +import { + loadApiBody, + loadApiOperation, + loadApiParam, + loadApiQuery, + loadApiResponse, + loadApiTags, +} from "openapi-decorators/loaders"; + +/** + * Enrich operation from Adonis Controller function + */ +export function loadController( + document: DocumentBuilder, + operation: OperationBuilder, + target: any, + propertyKey: string, +) { + const apiOperation = getApiOperation(target, propertyKey); + if (apiOperation) { + loadApiOperation(operation, apiOperation); + } + + const apiTags = getApiTags(target, propertyKey); + if (apiTags) { + loadApiTags(operation, apiTags); + } + + const apiBody = getApiBody(target, propertyKey); + if (apiBody) { + loadApiBody(document, operation, apiBody); + } + + const apiResponses = getApiResponses(target, propertyKey); + for (const apiResponse of apiResponses) { + loadApiResponse(document, operation, apiResponse); + } + + const apiParams = getApiParams(target, propertyKey); + for (const apiParam of apiParams) { + loadApiParam(document, operation, apiParam); + } + + const apiQueries = getApiQueries(target, propertyKey); + for (const apiQuery of apiQueries) { + loadApiQuery(document, operation, apiQuery); + } +} diff --git a/packages/openapi-adonis/src/loaders/loadRoute.ts b/packages/openapi-adonis/src/loaders/loadRoute.ts new file mode 100644 index 000000000..a283d7bd3 --- /dev/null +++ b/packages/openapi-adonis/src/loaders/loadRoute.ts @@ -0,0 +1,39 @@ +import type { OpenAPIV3 } from "openapi-types"; +import { OperationBuilder, type DocumentBuilder } from "openapi-decorators/builders"; +import type { AdonisRoute } from "../types"; +import { loadController } from "./loadController"; +import { getApiTags } from "openapi-decorators"; +import { loadApiTags } from "openapi-decorators/loaders"; +import { normalizeRoutePattern } from "../utils/normalizeRoutePattern"; + +export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { + if (typeof route.handler !== "object" || !Array.isArray(route.handler.reference)) { + return; + } + + const importer = route.handler.reference[0] as Function; + const propertyKey = route.handler.reference[1] as string; + + const target = (await importer().then((t: any) => t.default)) as any; + + const operation = new OperationBuilder(); + + const apiTags = getApiTags(target); + if (apiTags) { + loadApiTags(operation, apiTags); + } + + loadController(document, operation, target.prototype, propertyKey); + + for (const method of route.methods) { + if (method === "HEAD") { + continue; + } + + document.setOperation( + method.toLowerCase() as OpenAPIV3.HttpMethods, + normalizeRoutePattern(route.pattern), + operation.build(), + ); + } +} diff --git a/packages/openapi-adonis/src/loaders/loadRouter.ts b/packages/openapi-adonis/src/loaders/loadRouter.ts new file mode 100644 index 000000000..251be6212 --- /dev/null +++ b/packages/openapi-adonis/src/loaders/loadRouter.ts @@ -0,0 +1,16 @@ +import type { Router } from "@adonisjs/http-server"; +import type { DocumentBuilder } from "openapi-decorators/builders"; +import { loadRoute } from "./loadRoute"; + +/** + * Enrich document from Adonis Router. + */ +export async function loadRouter(document: DocumentBuilder, router: Router) { + const routerJson = router.toJSON(); + + for (const [_, routes] of Object.entries(routerJson)) { + for (const route of routes) { + await loadRoute(document, route); + } + } +} diff --git a/packages/openapi-adonis/src/types.ts b/packages/openapi-adonis/src/types.ts new file mode 100644 index 000000000..b1b24181f --- /dev/null +++ b/packages/openapi-adonis/src/types.ts @@ -0,0 +1,4 @@ +import type { Router } from "@adonisjs/http-server"; + +export type AdonisRoutes = ReturnType[string]; +export type AdonisRoute = AdonisRoutes[number]; diff --git a/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts b/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts new file mode 100644 index 000000000..dd1687a28 --- /dev/null +++ b/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts @@ -0,0 +1,13 @@ +export const normalizeRoutePattern = (pattern: string) => { + const segments = pattern.split("/"); + + return segments + .map((s) => { + if (s.startsWith(":")) { + return `{${s.replace(":", "")}}`; + } + + return s; + }) + .join("/"); +}; diff --git a/packages/openapi-adonis/tsconfig.json b/packages/openapi-adonis/tsconfig.json new file mode 100644 index 000000000..477f8a606 --- /dev/null +++ b/packages/openapi-adonis/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "declaration": true, + "downlevelIteration": false, + "esModuleInterop": true, + "lib": [ + "ESNext", + "DOM" + ], + "module": "ESNext", + "moduleResolution": "Bundler", + "noUncheckedIndexedAccess": true, + "outDir": "dist", + "skipLibCheck": false, + "strict": true, + "target": "ESNext", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "types": [ + "vitest/globals" + ] + }, + "include": [ + "src", + "test" + ], + "exclude": [ + "example", + "node_modules" + ] +} diff --git a/packages/openapi-adonis/tsup.config.ts b/packages/openapi-adonis/tsup.config.ts new file mode 100644 index 000000000..818264f7b --- /dev/null +++ b/packages/openapi-adonis/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm"], + dts: true, + sourcemap: true, +}); diff --git a/packages/openapi-adonis/vitest.config.ts b/packages/openapi-adonis/vitest.config.ts new file mode 100644 index 000000000..8debcd30d --- /dev/null +++ b/packages/openapi-adonis/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vitest/config"; +import swc from "unplugin-swc"; + +export default defineConfig({ + plugins: [ + // Required to have typescript metadata working. See https://github.com/vitest-dev/vitest/discussions/3320 + swc.vite(), + ], + test: { + globals: true, + }, +}); diff --git a/packages/openapi-decorators/.npmignore b/packages/openapi-decorators/.npmignore new file mode 100644 index 000000000..215f90603 --- /dev/null +++ b/packages/openapi-decorators/.npmignore @@ -0,0 +1,4 @@ +test +tsconfig*.json +vitest.config.ts +biome.json diff --git a/packages/openapi-decorators/biome.json b/packages/openapi-decorators/biome.json new file mode 100644 index 000000000..ac5658f00 --- /dev/null +++ b/packages/openapi-decorators/biome.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", + "extends": [ + "../../biome.json" + ], + "linter": { + "rules": { + "performance": { + "noAccumulatingSpread": "off" + }, + "complexity": { + "noBannedTypes": "off" + }, + "suspicious": { + "noConfusingVoidType": "off" + } + } + } +} diff --git a/packages/openapi-decorators/package.json b/packages/openapi-decorators/package.json new file mode 100644 index 000000000..8ae0ce364 --- /dev/null +++ b/packages/openapi-decorators/package.json @@ -0,0 +1,75 @@ +{ + "name": "openapi-decorators", + "description": "Auto-Generate OpenAPI specifications from Typescript decorators", + "version": "0.0.1", + "author": { + "name": "Martin PAUCOT", + "email": "contact@martin-paucot.Fr" + }, + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./builders": { + "types": "./dist/builders/index.d.ts", + "import": "./dist/builders/index.js" + }, + "./loaders": { + "types": "./dist/loaders/index.d.ts", + "import": "./dist/loaders/index.js" + }, + "./ui": { + "types": "./dist/ui/index.d.ts", + "import": "./dist/ui/index.js" + } + }, + "homepage": "https://openapi-ts.dev", + "repository": { + "type": "git", + "url": "https://github.com/openapi-ts/openapi-typescript", + "directory": "packages/openapi-decorators" + }, + "bugs": { + "url": "https://github.com/openapi-ts/openapi-typescript/issues" + }, + "keywords": [ + "openapi", + "swagger", + "rest", + "api", + "oapi_3", + "oapi_3_1", + "typescript" + ], + "scripts": { + "build": "pnpm run build:clean && pnpm run build:esm && pnpm run build:cjs", + "build:clean": "del-cli dist", + "build:esm": "tsc -p tsconfig.json", + "build:cjs": "esbuild --bundle --platform=node --target=es2019 --outfile=dist/index.cjs --external:typescript src/index.ts", + "dev": "tsup --watch", + "format": "biome format . --write", + "lint": "biome check .", + "test": "pnpm run \"/^test:/\"", + "test:js": "vitest run", + "test:ts": "tsc --noEmit", + "version": "pnpm run prepare && pnpm run build" + }, + "dependencies": { + "@fastify/deepmerge": "^2.0.0", + "lodash": "^4.17.21", + "openapi-types": "^12.1.3", + "reflect-metadata": "^0.2.2" + }, + "devDependencies": { + "@types/lodash": "^4.17.7", + "@types/node": "^22.1.0", + "del-cli": "^5.1.0", + "esbuild": "^0.20.2", + "execa": "^8.0.1", + "tsup": "^8.2.4", + "typescript": "^5.4.5", + "unplugin-swc": "^1.5.1" + } +} diff --git a/packages/openapi-decorators/src/builders/base-builder.ts b/packages/openapi-decorators/src/builders/base-builder.ts new file mode 100644 index 000000000..42feac807 --- /dev/null +++ b/packages/openapi-decorators/src/builders/base-builder.ts @@ -0,0 +1,3 @@ +export abstract class BaseBuilder { + public abstract build(): T; +} diff --git a/packages/openapi-decorators/src/builders/document-builder.ts b/packages/openapi-decorators/src/builders/document-builder.ts new file mode 100644 index 000000000..3ba08f047 --- /dev/null +++ b/packages/openapi-decorators/src/builders/document-builder.ts @@ -0,0 +1,65 @@ +import type { OpenAPIV3 } from "openapi-types"; +import { buildDocumentBase } from "../fixtures/document-base"; +import { BaseBuilder } from "./base-builder"; +import { generateScalarUI } from "../ui/scalar"; +import { SchemaBuilder } from "./schema-builder"; + +export class DocumentBuilder extends BaseBuilder { + private readonly document: OpenAPIV3.Document = buildDocumentBase(); + private readonly schemas: Record = {}; + + public setTitle(title: string): this { + this.document.info.title = title; + return this; + } + + public setDescription(description: string): this { + this.document.info.description = description; + return this; + } + + public createSchema(name: string): SchemaBuilder { + const builder = new SchemaBuilder(name); + this.schemas[name] = builder; + return builder; + } + + public hasSchema(name: string): OpenAPIV3.ReferenceObject | false { + const schema = this.schemas[name]; + if (!schema) { + return false; + } + return schema.ref; + } + + public setOperation(method: OpenAPIV3.HttpMethods, pattern: string, operation: OpenAPIV3.OperationObject) { + if (!this.document.paths[pattern]) { + this.document.paths[pattern] = {}; + } + + // biome-ignore lint/style/noNonNullAssertion: Defined two lines above + this.document.paths[pattern]![method] = operation; + } + + public scalar(url: string) { + return generateScalarUI(url); + } + + public build(): OpenAPIV3.Document { + const schemas = Object.entries(this.schemas).reduce( + (a, [name, builder]) => ({ ...a, [name]: builder.build() }), + {}, + ); + + return { + ...this.document, + components: { + ...this.document.components, + schemas: { + ...schemas, + ...this.document.components?.schemas, + }, + }, + }; + } +} diff --git a/packages/openapi-decorators/src/builders/index.ts b/packages/openapi-decorators/src/builders/index.ts new file mode 100644 index 000000000..466ef8da2 --- /dev/null +++ b/packages/openapi-decorators/src/builders/index.ts @@ -0,0 +1,4 @@ +export * from "./base-builder"; +export * from "./document-builder"; +export * from "./operation-builder"; +export * from "./schema-builder"; diff --git a/packages/openapi-decorators/src/builders/operation-builder.ts b/packages/openapi-decorators/src/builders/operation-builder.ts new file mode 100644 index 000000000..0943770e4 --- /dev/null +++ b/packages/openapi-decorators/src/builders/operation-builder.ts @@ -0,0 +1,37 @@ +import type { OpenAPIV3 } from "openapi-types"; +import { BaseBuilder } from "./base-builder"; +import { deepmerge } from "../utils/deepmerge"; + +export class OperationBuilder extends BaseBuilder { + private operation: OpenAPIV3.OperationObject = { + responses: {}, + }; + + public setRequestBody(body: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject) { + this.operation.requestBody = body; + return this; + } + + public addTags(...tags: string[]) { + this.operation.tags = [...(this.operation.tags ?? []), ...tags]; + return this; + } + + public setResponse(code: string, response: OpenAPIV3.ResponseObject) { + this.operation.responses[code] = response; + return this; + } + + public addParameter(parameter: OpenAPIV3.ParameterObject) { + this.operation.parameters = [...(this.operation.parameters ?? []), parameter]; + } + + public merge(operation: Partial) { + this.operation = deepmerge(this.operation, operation); + return this; + } + + public build(): OpenAPIV3.OperationObject { + return this.operation; + } +} diff --git a/packages/openapi-decorators/src/builders/schema-builder.ts b/packages/openapi-decorators/src/builders/schema-builder.ts new file mode 100644 index 000000000..f66d5183d --- /dev/null +++ b/packages/openapi-decorators/src/builders/schema-builder.ts @@ -0,0 +1,49 @@ +import type { OpenAPIV3 } from "openapi-types"; +import { BaseBuilder } from "./base-builder"; +import { deepmerge } from "../utils/deepmerge"; + +export class SchemaBuilder extends BaseBuilder { + private schema: OpenAPIV3.SchemaObject = {}; + + constructor(private readonly name: string) { + super(); + } + + public setType(type: "array" | OpenAPIV3.NonArraySchemaObjectType) { + this.schema.type = type; + return this; + } + + public setProperty(name: string, schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject, required: boolean) { + if (!this.schema.properties) { + this.schema.properties = {}; + } + + this.schema.properties[name] = schema; + + if (required) { + if (!this.schema.required) { + this.schema.required = []; + } + + this.schema.required.push(name); + } + + return this; + } + + public merge(schema: Partial) { + this.schema = deepmerge(this.schema, schema); + return this; + } + + public get ref(): OpenAPIV3.ReferenceObject { + return { + $ref: `#/components/schemas/${this.name}`, + }; + } + + public build(): OpenAPIV3.SchemaObject { + return this.schema; + } +} diff --git a/packages/openapi-decorators/src/decorators/api-body.ts b/packages/openapi-decorators/src/decorators/api-body.ts new file mode 100644 index 000000000..581a4ad91 --- /dev/null +++ b/packages/openapi-decorators/src/decorators/api-body.ts @@ -0,0 +1,19 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { SchemaType } from "../types"; + +export const ApiBodyMetadataKey = Symbol("apiBodyKey"); + +export type ApiBodyMetadata = Omit & { + type?: SchemaType; + isArray?: boolean; +}; + +export type ApiBodyOptions = ApiBodyMetadata; + +export function apiBody(options: ApiBodyMetadata): MethodDecorator { + return Reflect.metadata(ApiBodyMetadataKey, options); +} + +export function getApiBody(target: any, propertyKey: string): ApiBodyMetadata | undefined { + return Reflect.getMetadata(ApiBodyMetadataKey, target, propertyKey); +} diff --git a/packages/openapi-decorators/src/decorators/api-operation.ts b/packages/openapi-decorators/src/decorators/api-operation.ts new file mode 100644 index 000000000..52bebaf82 --- /dev/null +++ b/packages/openapi-decorators/src/decorators/api-operation.ts @@ -0,0 +1,13 @@ +import type { OpenAPIV3 } from "openapi-types"; + +export const ApiOperationMetadataKey = Symbol("ApiOperation"); + +export type ApiOperationOptions = Partial; + +export function apiOperation(options: ApiOperationOptions): MethodDecorator { + return Reflect.metadata(ApiOperationMetadataKey, options); +} + +export function getApiOperation(target: any, propertyKey: string) { + return Reflect.getMetadata(ApiOperationMetadataKey, target, propertyKey) as ApiOperationOptions | undefined; +} diff --git a/packages/openapi-decorators/src/decorators/api-param.ts b/packages/openapi-decorators/src/decorators/api-param.ts new file mode 100644 index 000000000..17da18b04 --- /dev/null +++ b/packages/openapi-decorators/src/decorators/api-param.ts @@ -0,0 +1,22 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { MetadataKey, SchemaType } from "../types"; + +export const ApiParamMetadataKeyPrefix = "__api_param"; + +export type ApiParamOptions = Omit & { + type?: SchemaType; +}; + +export function apiParam(options: ApiParamOptions): MethodDecorator { + return Reflect.metadata(`${ApiParamMetadataKeyPrefix}${options.name}`, options); +} + +export function getApiParams(target: any, propertyKey: string): ApiParamOptions[] { + const keys = Reflect.getMetadataKeys(target, propertyKey) as MetadataKey[]; + + return keys + .filter((k) => typeof k === "string" && k.startsWith(ApiParamMetadataKeyPrefix)) + .map((key) => { + return Reflect.getMetadata(key.toString(), target, propertyKey); + }); +} diff --git a/packages/openapi-decorators/src/decorators/api-property.ts b/packages/openapi-decorators/src/decorators/api-property.ts new file mode 100644 index 000000000..70523d7bc --- /dev/null +++ b/packages/openapi-decorators/src/decorators/api-property.ts @@ -0,0 +1,35 @@ +import type { MetadataKey, SchemaType } from "../types"; +import type { OpenAPIV3 } from "openapi-types"; +import { getMetadataPropertyType } from "../utils/metadata"; + +export type ApiPropertyOptions = Omit & { + type?: SchemaType; + required?: boolean; +}; + +const ApiPropertyMetadataKeyPrefix = "__api_property_"; + +export function apiProperty(options: ApiPropertyOptions = {}): PropertyDecorator { + return (target: any, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => { + if (!options.type) { + options.type = getMetadataPropertyType(target, propertyKey, descriptor); + } + + Reflect.defineMetadata(`${ApiPropertyMetadataKeyPrefix}${propertyKey.toString()}`, options, target); + return target; + }; +} + +export function getApiProperties(target: any) { + const keys = Reflect.getMetadataKeys(target) as MetadataKey[]; + const properties: Record = {}; + + for (const key of keys.filter( + (k) => typeof k === "string" && k.startsWith(ApiPropertyMetadataKeyPrefix), + ) as string[]) { + const propertyKey = key.replace(ApiPropertyMetadataKeyPrefix, ""); + properties[propertyKey] = Reflect.getMetadata(key, target); + } + + return properties; +} diff --git a/packages/openapi-decorators/src/decorators/api-query.ts b/packages/openapi-decorators/src/decorators/api-query.ts new file mode 100644 index 000000000..18a09449d --- /dev/null +++ b/packages/openapi-decorators/src/decorators/api-query.ts @@ -0,0 +1,22 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { MetadataKey, SchemaType } from "../types"; + +export const ApiQueryMetadataKeyPrefix = "__api_query"; + +export type ApiQueryOptions = Omit & { + type?: SchemaType; +}; + +export function apiQuery(options: ApiQueryOptions): MethodDecorator { + return Reflect.metadata(`${ApiQueryMetadataKeyPrefix}${options.name}`, options); +} + +export function getApiQueries(target: any, propertyKey: string): ApiQueryOptions[] { + const keys = Reflect.getMetadataKeys(target, propertyKey) as MetadataKey[]; + + return keys + .filter((k) => typeof k === "string" && k.startsWith(ApiQueryMetadataKeyPrefix)) + .map((key) => { + return Reflect.getMetadata(key.toString(), target, propertyKey); + }); +} diff --git a/packages/openapi-decorators/src/decorators/api-response.ts b/packages/openapi-decorators/src/decorators/api-response.ts new file mode 100644 index 000000000..7f6cbfd92 --- /dev/null +++ b/packages/openapi-decorators/src/decorators/api-response.ts @@ -0,0 +1,26 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { MetadataKey, SchemaType } from "../types"; + +const ApiResponseMetadataKeyPrefix = "__api_response_"; + +export type ApiResponseMetadata = { + status?: number; + type?: SchemaType; +} & Omit; + +export type ApiResponseOptions = ApiResponseMetadata; + +export function apiResponse(options: ApiResponseOptions): MethodDecorator { + const status = options.status ?? "default"; + return Reflect.metadata(`${ApiResponseMetadataKeyPrefix}${status}`, options); +} + +export function getApiResponses(target: any, propertyKey: string): ApiResponseOptions[] { + const keys = Reflect.getMetadataKeys(target, propertyKey) as MetadataKey[]; + + return keys + .filter((k) => typeof k === "string" && k.startsWith(ApiResponseMetadataKeyPrefix)) + .map((key) => { + return Reflect.getMetadata(key.toString(), target, propertyKey); + }); +} diff --git a/packages/openapi-decorators/src/decorators/api-tags.ts b/packages/openapi-decorators/src/decorators/api-tags.ts new file mode 100644 index 000000000..e22e3d993 --- /dev/null +++ b/packages/openapi-decorators/src/decorators/api-tags.ts @@ -0,0 +1,12 @@ +export const ApiTagsMetadataKey = Symbol("ApiTags"); + +export function apiTags(...tags: string[]): ClassDecorator & MethodDecorator { + return Reflect.metadata(ApiTagsMetadataKey, tags); +} + +export function getApiTags(target: any, propertyKey?: string): string[] | undefined { + if (propertyKey) { + return Reflect.getMetadata(ApiTagsMetadataKey, target, propertyKey); + } + return Reflect.getMetadata(ApiTagsMetadataKey, target); +} diff --git a/packages/openapi-decorators/src/decorators/index.ts b/packages/openapi-decorators/src/decorators/index.ts new file mode 100644 index 000000000..97a6fb419 --- /dev/null +++ b/packages/openapi-decorators/src/decorators/index.ts @@ -0,0 +1,7 @@ +export * from "./api-body"; +export * from "./api-operation"; +export * from "./api-property"; +export * from "./api-response"; +export * from "./api-tags"; +export * from "./api-param"; +export * from "./api-query"; diff --git a/packages/openapi-decorators/src/fixtures/document-base.ts b/packages/openapi-decorators/src/fixtures/document-base.ts new file mode 100644 index 000000000..1445f73c0 --- /dev/null +++ b/packages/openapi-decorators/src/fixtures/document-base.ts @@ -0,0 +1,17 @@ +import type { OpenAPIV3 } from "openapi-types"; + +export const buildDocumentBase = (): OpenAPIV3.Document => ({ + openapi: "3.0.0", + info: { + title: "", + description: "", + version: "1.0.0", + contact: {}, + }, + tags: [], + servers: [], + paths: {}, + components: { + schemas: {}, + }, +}); diff --git a/packages/openapi-decorators/src/index.ts b/packages/openapi-decorators/src/index.ts new file mode 100644 index 000000000..37b909e72 --- /dev/null +++ b/packages/openapi-decorators/src/index.ts @@ -0,0 +1 @@ +export * from "./decorators"; diff --git a/packages/openapi-decorators/src/loaders/index.ts b/packages/openapi-decorators/src/loaders/index.ts new file mode 100644 index 000000000..c5aa63d4e --- /dev/null +++ b/packages/openapi-decorators/src/loaders/index.ts @@ -0,0 +1,9 @@ +export * from "./loadApiBody"; +export * from "./loadApiOperation"; +export * from "./loadApiParam"; +export * from "./loadApiProperty"; +export * from "./loadApiQuery"; +export * from "./loadApiResponse"; +export * from "./loadApiTags"; +export * from "./loadSchema"; +export * from "./loadType"; diff --git a/packages/openapi-decorators/src/loaders/loadApiBody.ts b/packages/openapi-decorators/src/loaders/loadApiBody.ts new file mode 100644 index 000000000..e4aaf4124 --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadApiBody.ts @@ -0,0 +1,19 @@ +import type { DocumentBuilder } from "../builders/document-builder"; +import type { OperationBuilder } from "../builders/operation-builder"; +import type { ApiBodyOptions } from "../decorators"; +import { resolveType } from "./loadType"; + +export function loadApiBody(document: DocumentBuilder, operation: OperationBuilder, apiBody: ApiBodyOptions) { + const { type, isArray, ...rest } = apiBody; + + const schema = type ? resolveType(document, type) : undefined; + + operation.setRequestBody({ + ...rest, + content: { + "application/json": { + schema, + }, + }, + }); +} diff --git a/packages/openapi-decorators/src/loaders/loadApiOperation.ts b/packages/openapi-decorators/src/loaders/loadApiOperation.ts new file mode 100644 index 000000000..bbb8a8f51 --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadApiOperation.ts @@ -0,0 +1,6 @@ +import type { OperationBuilder } from "../builders/operation-builder"; +import type { ApiOperationOptions } from "../decorators/api-operation"; + +export function loadApiOperation(operation: OperationBuilder, apiOperation: ApiOperationOptions) { + operation.merge(apiOperation); +} diff --git a/packages/openapi-decorators/src/loaders/loadApiParam.ts b/packages/openapi-decorators/src/loaders/loadApiParam.ts new file mode 100644 index 000000000..9f786ec57 --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadApiParam.ts @@ -0,0 +1,16 @@ +import type { DocumentBuilder } from "../builders/document-builder"; +import type { OperationBuilder } from "../builders/operation-builder"; +import type { ApiParamOptions } from "../decorators/api-param"; +import { resolveType } from "./loadType"; + +export function loadApiParam(document: DocumentBuilder, operation: OperationBuilder, apiParam: ApiParamOptions) { + const { type, ...rest } = apiParam; + + const schema = resolveType(document, type ?? "string"); + + operation.addParameter({ + in: "path", + schema, + ...rest, + }); +} diff --git a/packages/openapi-decorators/src/loaders/loadApiProperty.ts b/packages/openapi-decorators/src/loaders/loadApiProperty.ts new file mode 100644 index 000000000..98d798b4e --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadApiProperty.ts @@ -0,0 +1,17 @@ +import type { DocumentBuilder } from "../builders/document-builder"; +import type { SchemaBuilder } from "../builders/schema-builder"; +import type { ApiPropertyOptions } from "../decorators/api-property"; +import { resolveType } from "./loadType"; + +export function loadApiProperty( + document: DocumentBuilder, + schema: SchemaBuilder, + name: string, + apiProperty: ApiPropertyOptions, +) { + const { type, required, ...rest } = apiProperty; + + const resolved = type ? resolveType(document, type) : undefined; + + schema.setProperty(name, { ...resolved, ...rest }, required ?? true); +} diff --git a/packages/openapi-decorators/src/loaders/loadApiQuery.ts b/packages/openapi-decorators/src/loaders/loadApiQuery.ts new file mode 100644 index 000000000..9b38e40c3 --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadApiQuery.ts @@ -0,0 +1,16 @@ +import type { DocumentBuilder } from "../builders/document-builder"; +import type { OperationBuilder } from "../builders/operation-builder"; +import type { ApiQueryOptions } from "../decorators/api-query"; +import { resolveType } from "./loadType"; + +export function loadApiQuery(document: DocumentBuilder, operation: OperationBuilder, apiQuery: ApiQueryOptions) { + const { type, ...rest } = apiQuery; + + const schema = resolveType(document, type ?? "string"); + + operation.addParameter({ + in: "query", + schema, + ...rest, + }); +} diff --git a/packages/openapi-decorators/src/loaders/loadApiResponse.ts b/packages/openapi-decorators/src/loaders/loadApiResponse.ts new file mode 100644 index 000000000..7a6707d2c --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadApiResponse.ts @@ -0,0 +1,23 @@ +import type { DocumentBuilder } from "../builders/document-builder"; +import type { OperationBuilder } from "../builders/operation-builder"; +import type { ApiResponseOptions } from "../decorators/api-response"; +import { resolveType } from "./loadType"; + +export function loadApiResponse( + document: DocumentBuilder, + operation: OperationBuilder, + apiResponse: ApiResponseOptions, +) { + const { type, status, ...rest } = apiResponse; + const schema = type ? resolveType(document, type) : undefined; + + operation.setResponse(status?.toString() ?? "200", { + description: "OK", // TODO: Depends on status, + content: { + "application/json": { + schema, + }, + }, + ...rest, + }); +} diff --git a/packages/openapi-decorators/src/loaders/loadApiTags.ts b/packages/openapi-decorators/src/loaders/loadApiTags.ts new file mode 100644 index 000000000..16e889aa0 --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadApiTags.ts @@ -0,0 +1,5 @@ +import type { OperationBuilder } from "../builders/operation-builder"; + +export function loadApiTags(operation: OperationBuilder, apiTags: string[]) { + return operation.addTags(...apiTags); +} diff --git a/packages/openapi-decorators/src/loaders/loadSchema.ts b/packages/openapi-decorators/src/loaders/loadSchema.ts new file mode 100644 index 000000000..26c11264a --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadSchema.ts @@ -0,0 +1,25 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { DocumentBuilder } from "../builders/document-builder"; +import { getApiProperties } from "../decorators/api-property"; +import { loadApiProperty } from "./loadApiProperty"; + +export function loadSchema(document: DocumentBuilder, target: any): OpenAPIV3.ReferenceObject { + const name = target.constructor.name; + + const existing = document.hasSchema(name); + if (existing) { + return existing; + } + + const schema = document.createSchema(name); + + schema.setType("object"); + + const properties = getApiProperties(target); + + for (const [name, apiProperty] of Object.entries(properties)) { + loadApiProperty(document, schema, name, apiProperty); + } + + return schema.ref; +} diff --git a/packages/openapi-decorators/src/loaders/loadType.ts b/packages/openapi-decorators/src/loaders/loadType.ts new file mode 100644 index 000000000..fcb8cfd7e --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadType.ts @@ -0,0 +1,39 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { DocumentBuilder } from "../builders/document-builder"; +import type { SchemaType } from "../types"; +import { loadSchema } from "./loadSchema"; + +export function resolveType( + document: DocumentBuilder, + type: SchemaType, +): OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject { + if (typeof type === "string") { + return { + type, + }; + } + + if (type === String) { + return { + type: "string", + }; + } + + if (type === Number) { + return { + type: "number", + }; + } + + if (type === Boolean) { + return { + type: "boolean", + }; + } + + if (typeof type === "object") { + return type; + } + + return loadSchema(document, type.prototype); +} diff --git a/packages/openapi-decorators/src/types.ts b/packages/openapi-decorators/src/types.ts new file mode 100644 index 000000000..7fc982f0a --- /dev/null +++ b/packages/openapi-decorators/src/types.ts @@ -0,0 +1,9 @@ +import type { OpenAPIV3 } from "openapi-types"; + +export interface Type extends Function { + new (...args: any[]): T; +} + +export type MetadataKey = string | Symbol; + +export type SchemaType = Type | OpenAPIV3.NonArraySchemaObjectType | OpenAPIV3.ReferenceObject; diff --git a/packages/openapi-decorators/src/ui/index.ts b/packages/openapi-decorators/src/ui/index.ts new file mode 100644 index 000000000..c9b39ccbf --- /dev/null +++ b/packages/openapi-decorators/src/ui/index.ts @@ -0,0 +1 @@ +export * from "./scalar"; diff --git a/packages/openapi-decorators/src/ui/scalar.ts b/packages/openapi-decorators/src/ui/scalar.ts new file mode 100644 index 000000000..4dce298b8 --- /dev/null +++ b/packages/openapi-decorators/src/ui/scalar.ts @@ -0,0 +1,21 @@ +export function generateScalarUI(url: string) { + return ` + + + + API Reference + + + + + + + + + `; +} diff --git a/packages/openapi-decorators/src/utils/deepmerge.ts b/packages/openapi-decorators/src/utils/deepmerge.ts new file mode 100644 index 000000000..c6cf0b8c2 --- /dev/null +++ b/packages/openapi-decorators/src/utils/deepmerge.ts @@ -0,0 +1,6 @@ +import deepmergeBase from "@fastify/deepmerge"; + +export function deepmerge(target: T, source: Partial): T { + const dm = deepmergeBase(); + return dm(target, source) as T; +} diff --git a/packages/openapi-decorators/src/utils/metadata.ts b/packages/openapi-decorators/src/utils/metadata.ts new file mode 100644 index 000000000..ee4513578 --- /dev/null +++ b/packages/openapi-decorators/src/utils/metadata.ts @@ -0,0 +1,13 @@ +import type { Type } from "../types"; + +export function getMetadataPropertyType( + target: any, + propertyKey: string | symbol, + descriptor?: PropertyDescriptor, +): Type | undefined { + if (descriptor?.get || descriptor?.value) { + return Reflect.getMetadata("design:returntype", target, propertyKey); + } + + return Reflect.getMetadata("design:type", target, propertyKey); +} diff --git a/packages/openapi-decorators/test/decorators.test.ts b/packages/openapi-decorators/test/decorators.test.ts new file mode 100644 index 000000000..491b4402d --- /dev/null +++ b/packages/openapi-decorators/test/decorators.test.ts @@ -0,0 +1,132 @@ +import "reflect-metadata"; +import { + apiBody, + apiOperation, + apiParam, + apiProperty, + apiQuery, + apiResponse, + apiTags, + getApiBody, + getApiOperation, + getApiParams, + getApiProperties, + getApiQueries, + getApiResponses, + getApiTags, +} from "../src/decorators"; + +describe("decorators", () => { + describe("apiBody", () => { + it("should apply decorator properly", () => { + class TestController { + @apiBody({ type: "string" }) + public index() {} + } + + expect(getApiBody(TestController.prototype, "index")).toEqual({ type: "string" }); + }); + }); + + describe("apiOperation", () => { + it("should apply decorator properly", () => { + class TestController { + @apiOperation({ summary: "TEST", tags: ["Test"] }) + public index() {} + } + + expect(getApiOperation(TestController.prototype, "index")).toEqual({ summary: "TEST", tags: ["Test"] }); + }); + }); + + describe("apiParam", () => { + it("should apply decorator properly", () => { + class TestController { + @apiParam({ name: "test", type: "string" }) + @apiParam({ name: "hello" }) + public index() {} + } + + const apiParams = getApiParams(TestController.prototype, "index"); + expect(apiParams).toContainEqual({ name: "test", type: "string" }); + expect(apiParams).toContainEqual({ name: "hello" }); + }); + }); + + describe("apiProperty", () => { + it("should apply decorator properly", () => { + class User { + @apiProperty({ type: String }) + exampleProperty = "test"; + + @apiProperty() + declare exampleDeclared: number; + + @apiProperty() + public exampleMethod(): string { + return this.exampleProperty; + } + + @apiProperty() + public get exampleGetter(): number { + return this.exampleDeclared; + } + } + + expect(getApiProperties(User.prototype)).toEqual({ + exampleProperty: { type: String }, + exampleDeclared: { type: Number }, + exampleMethod: { type: String }, + exampleGetter: { type: Number }, + }); + }); + }); + + describe("apiQuery", () => { + it("should apply decorator properly", () => { + class TestController { + @apiQuery({ name: "query" }) + @apiQuery({ name: "filter" }) + public index() {} + } + + const apiQueries = getApiQueries(TestController.prototype, "index"); + expect(apiQueries).toContainEqual({ name: "query" }); + expect(apiQueries).toContainEqual({ name: "filter" }); + }); + }); + + describe("apiResponse", () => { + it("should apply decorator properly", () => { + class TestController { + @apiResponse({ status: 200, type: String }) + @apiResponse({ status: 400 }) + public index() {} + } + + const apiResponses = getApiResponses(TestController.prototype, "index"); + expect(apiResponses).toContainEqual({ status: 200, type: String }); + expect(apiResponses).toContainEqual({ status: 400 }); + }); + }); + + describe("apiTags", () => { + it("should apply decorator on methods", () => { + class TestController { + @apiTags("test") + public index() {} + } + + expect(getApiTags(TestController.prototype, "index")).toContainEqual("test"); + }); + + it("should apply decorator on classes", () => { + @apiTags("test") + class TestController { + public index() {} + } + + expect(getApiTags(TestController)).toContainEqual("test"); + }); + }); +}); diff --git a/packages/openapi-decorators/test/loaders.test.ts b/packages/openapi-decorators/test/loaders.test.ts new file mode 100644 index 000000000..0409a2a33 --- /dev/null +++ b/packages/openapi-decorators/test/loaders.test.ts @@ -0,0 +1,221 @@ +import "reflect-metadata"; +import { DocumentBuilder, apiProperty } from "../src"; +import { OperationBuilder } from "../src/builders/operation-builder"; +import { loadApiBody } from "../src/loaders/loadApiBody"; +import { loadApiOperation } from "../src/loaders/loadApiOperation"; +import { loadApiParam } from "../src/loaders/loadApiParam"; +import { loadApiProperty } from "../src/loaders/loadApiProperty"; +import { loadApiQuery } from "../src/loaders/loadApiQuery"; +import { loadApiResponse } from "../src/loaders/loadApiResponse"; +import { loadApiTags } from "../src/loaders/loadApiTags"; +import { loadSchema } from "../src/loaders/loadSchema"; +import { resolveType } from "../src/loaders/loadType"; + +describe("loaders", () => { + describe("loadApiBody", () => { + it("should properly enrich operation", () => { + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + loadApiBody(document, operation, { + type: "string", + }); + + expect(operation.build().requestBody).toEqual({ + content: { + "application/json": { + schema: { + type: "string", + }, + }, + }, + }); + }); + }); + + describe("loadApiOperation", () => { + it("should properly enrich operation", () => { + const operation = new OperationBuilder(); + + loadApiOperation(operation, { + summary: "Test summary", + }); + + expect(operation.build()).toEqual({ + summary: "Test summary", + responses: {}, + }); + }); + + it("should properly merge tags", () => { + const operation = new OperationBuilder().addTags("Hello"); + + loadApiOperation(operation, { + tags: ["World"], + }); + + expect(operation.build()).toEqual({ + tags: ["Hello", "World"], + responses: {}, + }); + }); + }); + + describe("loadApiParam", () => { + it("should properly enrich operation", () => { + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + loadApiParam(document, operation, { + name: "userId", + }); + + loadApiParam(document, operation, { + name: "collectionId", + type: "number", + }); + + const parameters = operation.build().parameters; + expect(parameters).toContainEqual({ name: "userId", in: "path", schema: { type: "string" } }); + expect(parameters).toContainEqual({ name: "collectionId", in: "path", schema: { type: "number" } }); + }); + }); + + describe("loadApiProperty", () => { + it("should properly enrich schema", () => { + const document = new DocumentBuilder(); + const schema = document.createSchema("Test"); + + loadApiProperty(document, schema, "id", {}); + loadApiProperty(document, schema, "name", { type: "string" }); + loadApiProperty(document, schema, "notRequired", { type: "number", required: false }); + + const output = schema.build(); + + expect(output.required).toContainEqual("id"); + expect(output.required).toContainEqual("name"); + expect(output.required).not.toContainEqual("notRequired"); + + expect(output.properties?.id).toEqual({}); + expect(output.properties?.name).toEqual({ type: "string" }); + expect(output.properties?.notRequired).toEqual({ type: "number" }); + }); + }); + + describe("loadApiQuery", () => { + it("should properly enrich operation", () => { + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + loadApiQuery(document, operation, { + name: "userId", + }); + + loadApiQuery(document, operation, { + name: "collectionId", + type: "number", + }); + + const parameters = operation.build().parameters; + expect(parameters).toContainEqual({ name: "userId", in: "query", schema: { type: "string" } }); + expect(parameters).toContainEqual({ name: "collectionId", in: "query", schema: { type: "number" } }); + }); + }); + + describe("loadApiResponse", () => { + it("should properly enrich operation", () => { + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + loadApiResponse(document, operation, { + status: 200, + type: "string", + }); + + loadApiResponse(document, operation, { + status: 500, + type: "number", + }); + + const responses = operation.build().responses; + expect(responses[200]).toEqual({ + description: "OK", + content: { + "application/json": { + schema: { + type: "string", + }, + }, + }, + }); + + expect(responses[500]).toEqual({ + description: "OK", // TODO: Wrong description + content: { + "application/json": { + schema: { + type: "number", + }, + }, + }, + }); + }); + }); + + describe("loadApiTags", () => { + it("should properly enrich operation", () => { + const operation = new OperationBuilder(); + + loadApiTags(operation, ["hello"]); + + const tags = operation.build().tags; + + expect(tags).toContain("hello"); + }); + }); + + describe("loadSchema", () => { + it("should properly add the schema to the document", () => { + const document = new DocumentBuilder(); + + class Test { + @apiProperty() + declare helloworld: string; + } + + const ref = loadSchema(document, Test.prototype); + const build = document.build(); + + expect(ref).toEqual({ $ref: "#/components/schemas/Test" }); + expect(build.components?.schemas?.Test).toEqual({ + type: "object", + properties: { helloworld: { type: "string" } }, + required: ["helloworld"], + }); + }); + }); + + describe("loadType", () => { + it("should accept string types", () => { + const document = new DocumentBuilder(); + expect(resolveType(document, "boolean")).toEqual({ type: "boolean" }); + expect(resolveType(document, "integer")).toEqual({ type: "integer" }); + expect(resolveType(document, "number")).toEqual({ type: "number" }); + expect(resolveType(document, "string")).toEqual({ type: "string" }); + }); + + it("should accept schema reference", () => { + const document = new DocumentBuilder(); + expect(resolveType(document, { $ref: "#/components/schemas/User" })).toEqual({ + $ref: "#/components/schemas/User", + }); + }); + + it("should accept function types", () => { + const document = new DocumentBuilder(); + expect(resolveType(document, Boolean)).toEqual({ type: "boolean" }); + expect(resolveType(document, Number)).toEqual({ type: "number" }); + expect(resolveType(document, String)).toEqual({ type: "string" }); + }); + }); +}); diff --git a/packages/openapi-decorators/tsconfig.json b/packages/openapi-decorators/tsconfig.json new file mode 100644 index 000000000..5d58f7566 --- /dev/null +++ b/packages/openapi-decorators/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "declaration": true, + "downlevelIteration": false, + "esModuleInterop": true, + "lib": [ + "ESNext", + "DOM" + ], + "module": "ESNext", + "moduleResolution": "Bundler", + "noUncheckedIndexedAccess": true, + "outDir": "dist", + "skipLibCheck": false, + "strict": true, + "target": "ESNext", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "types": [ + "vitest/globals", + "reflect-metadata" + ] + }, + "include": [ + "src", + "test" + ], + "exclude": [ + "example", + "node_modules" + ] +} diff --git a/packages/openapi-decorators/tsup.config.ts b/packages/openapi-decorators/tsup.config.ts new file mode 100644 index 000000000..857b52ef6 --- /dev/null +++ b/packages/openapi-decorators/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts", "src/builders/index.ts", "src/loaders/index.ts", "src/ui/index.ts"], + format: ["esm"], + dts: true, + sourcemap: true, +}); diff --git a/packages/openapi-decorators/vitest.config.ts b/packages/openapi-decorators/vitest.config.ts new file mode 100644 index 000000000..59723706a --- /dev/null +++ b/packages/openapi-decorators/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vitest/config"; +import swc from "unplugin-swc"; + +export default defineConfig({ + plugins: [ + // Required to have typescript metadata working. See https://github.com/vitest-dev/vitest/discussions/3320 + swc.vite(), + ], + test: { + globals: true, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8f282ffc..450669478 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,13 +19,13 @@ importers: version: 2.27.9 '@playwright/test': specifier: ^1.48.1 - version: 1.48.1 + version: 1.48.2 '@size-limit/preset-small-lib': specifier: ^11.1.6 version: 11.1.6(size-limit@11.1.6) '@types/node': specifier: ^22.8.0 - version: 22.8.0 + version: 22.9.0 del-cli: specifier: ^5.1.0 version: 5.1.0 @@ -40,13 +40,172 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.8.0)(jsdom@20.0.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3)) + version: 2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)) docs: devDependencies: vitepress: specifier: 1.3.2 - version: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.8.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3) + version: 1.3.2(@algolia/client-search@4.23.3)(@types/node@22.9.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3) + + packages/openapi-adonis: + dependencies: + '@fastify/deepmerge': + specifier: ^2.0.0 + version: 2.0.0 + '@vinejs/vine': + specifier: ^2.1.0 + version: 2.1.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + openapi-decorators: + specifier: workspace:^ + version: link:../openapi-decorators + openapi-types: + specifier: ^12.1.3 + version: 12.1.3 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + devDependencies: + '@adonisjs/core': + specifier: ^6.12.1 + version: 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.6.3))(@vinejs/vine@2.1.0) + '@adonisjs/http-server': + specifier: ^7.2.3 + version: 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) + '@types/lodash': + specifier: ^4.17.7 + version: 4.17.7 + '@types/node': + specifier: ^22.1.0 + version: 22.9.0 + del-cli: + specifier: ^5.1.0 + version: 5.1.0 + esbuild: + specifier: ^0.20.2 + version: 0.20.2 + execa: + specifier: ^8.0.1 + version: 8.0.1 + tsup: + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1) + typescript: + specifier: ^5.4.5 + version: 5.6.3 + unplugin-swc: + specifier: ^1.5.1 + version: 1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0) + + packages/openapi-adonis/example: + dependencies: + '@adonisjs/auth': + specifier: ^9.2.3 + version: 9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0)) + '@adonisjs/core': + specifier: ^6.12.1 + version: 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) + '@adonisjs/cors': + specifier: ^2.2.1 + version: 2.2.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)) + '@adonisjs/lucid': + specifier: ^21.1.0 + version: 21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0) + '@vinejs/vine': + specifier: ^2.1.0 + version: 2.1.0 + luxon: + specifier: ^3.5.0 + version: 3.5.0 + openapi-adonis: + specifier: workspace:^ + version: link:.. + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + devDependencies: + '@adonisjs/assembler': + specifier: ^7.7.0 + version: 7.8.2(typescript@5.4.5) + '@adonisjs/eslint-config': + specifier: ^1.3.0 + version: 1.3.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5) + '@adonisjs/http-server': + specifier: ^7.2.3 + version: 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) + '@adonisjs/prettier-config': + specifier: ^1.3.0 + version: 1.4.0 + '@adonisjs/tsconfig': + specifier: ^1.3.0 + version: 1.4.0 + '@swc/core': + specifier: ^1.6.5 + version: 1.7.4(@swc/helpers@0.5.13) + '@types/node': + specifier: ^20.14.9 + version: 20.14.14 + eslint: + specifier: ^8.57.0 + version: 8.57.1 + hot-hook: + specifier: ^0.2.6 + version: 0.2.6 + pino-pretty: + specifier: ^11.2.1 + version: 11.3.0 + prettier: + specifier: ^3.3.2 + version: 3.3.3 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.7.4(@swc/helpers@0.5.13))(@types/node@20.14.14)(typescript@5.4.5) + typescript: + specifier: ~5.4 + version: 5.4.5 + + packages/openapi-decorators: + dependencies: + '@fastify/deepmerge': + specifier: ^2.0.0 + version: 2.0.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + openapi-types: + specifier: ^12.1.3 + version: 12.1.3 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + devDependencies: + '@types/lodash': + specifier: ^4.17.7 + version: 4.17.7 + '@types/node': + specifier: ^22.1.0 + version: 22.9.0 + del-cli: + specifier: ^5.1.0 + version: 5.1.0 + esbuild: + specifier: ^0.20.2 + version: 0.20.2 + execa: + specifier: ^8.0.1 + version: 8.0.1 + tsup: + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1) + typescript: + specifier: ^5.4.5 + version: 5.6.3 + unplugin-swc: + specifier: ^1.5.1 + version: 1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0) packages/openapi-fetch: dependencies: @@ -86,13 +245,13 @@ importers: version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.8.0) + version: 5.4.10(@types/node@22.9.0) packages/openapi-fetch/examples/nextjs: dependencies: next: specifier: 15.0.1 - version: 15.0.1(@playwright/test@1.48.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.0.1(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) openapi-fetch: specifier: workspace:^ version: link:../.. @@ -120,7 +279,7 @@ importers: dependencies: '@tanstack/react-query': specifier: ^5.59.16 - version: 5.59.16(react@18.3.1) + version: 5.59.20(react@18.3.1) openapi-fetch: specifier: workspace:^ version: link:../.. @@ -142,13 +301,13 @@ importers: version: 18.3.0 '@vitejs/plugin-react-swc': specifier: ^3.7.1 - version: 3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.8.0)) + version: 3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.9.0)) typescript: specifier: ^5.6.3 version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.8.0) + version: 5.4.10(@types/node@22.9.0) packages/openapi-fetch/examples/sveltekit: dependencies: @@ -158,13 +317,13 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.3.1 - version: 3.3.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))) + version: 3.3.1(@sveltejs/kit@2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))) '@sveltejs/kit': specifier: ^2.7.3 - version: 2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) + version: 2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.2 - version: 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) + version: 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) openapi-typescript: specifier: workspace:^ version: link:../../../openapi-typescript @@ -176,13 +335,13 @@ importers: version: 3.8.6(@babel/core@7.26.0)(postcss@8.4.47)(svelte@4.2.19) tslib: specifier: ^2.8.0 - version: 2.8.0 + version: 2.8.1 typescript: specifier: ^5.6.3 version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.8.0) + version: 5.4.10(@types/node@22.9.0) packages/openapi-fetch/examples/vue-3: dependencies: @@ -198,7 +357,7 @@ importers: version: 20.1.4 '@vitejs/plugin-vue': specifier: ^5.1.4 - version: 5.1.4(vite@5.4.10(@types/node@22.8.0))(vue@3.5.12(typescript@5.6.3)) + version: 5.1.4(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3)) '@vue/tsconfig': specifier: ^0.5.1 version: 0.5.1 @@ -210,10 +369,10 @@ importers: version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.8.0) + version: 5.4.10(@types/node@22.9.0) vue-tsc: specifier: ^2.1.6 - version: 2.1.6(typescript@5.6.3) + version: 2.1.10(typescript@5.6.3) packages/openapi-react-query: dependencies: @@ -223,7 +382,7 @@ importers: devDependencies: '@tanstack/react-query': specifier: ^5.59.16 - version: 5.59.16(react@18.3.1) + version: 5.59.20(react@18.3.1) '@testing-library/react': specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.1.0)(@types/react-dom@18.3.1)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -232,7 +391,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.3.3(vite@5.4.10(@types/node@22.8.0)) + version: 4.3.3(vite@5.4.10(@types/node@22.9.0)) del-cli: specifier: ^5.1.0 version: 5.1.0 @@ -244,7 +403,7 @@ importers: version: 8.0.1 msw: specifier: ^2.5.1 - version: 2.5.1(@types/node@22.8.0)(typescript@5.6.3) + version: 2.6.0(@types/node@22.9.0)(typescript@5.6.3) openapi-fetch: specifier: workspace:^ version: link:../openapi-fetch @@ -262,7 +421,7 @@ importers: dependencies: '@redocly/openapi-core': specifier: ^1.25.9 - version: 1.25.9(supports-color@9.4.0) + version: 1.25.11(supports-color@9.4.0) ansi-colors: specifier: ^4.1.3 version: 4.1.3 @@ -305,13 +464,13 @@ importers: version: 5.6.3 vite-node: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.8.0)(supports-color@9.4.0) + version: 2.1.4(@types/node@22.9.0)(supports-color@9.4.0) packages/openapi-typescript-helpers: devDependencies: typescript: specifier: ^5.5.4 - version: 5.5.4 + version: 5.6.3 packages/swr-openapi: dependencies: @@ -360,10 +519,177 @@ importers: version: 5.5.4 vitest: specifier: 2.0.5 - version: 2.0.5(@types/node@22.8.0)(jsdom@20.0.3) + version: 2.0.5(@types/node@22.9.0)(jsdom@20.0.3) packages: + '@adonisjs/ace@13.3.0': + resolution: {integrity: sha512-68dveDFd766p69cBvK/MtOrOP0+YKYLeHspa9KLEWcWk9suPf3pbGkHQ2pwDnvLJxBPHk4932KbbSSzzpGNZGw==} + engines: {node: '>=18.16.0'} + + '@adonisjs/application@8.3.1': + resolution: {integrity: sha512-hfZBgZ23BQAXvoSHDkc/I0hTSXyFVxypNqHPQ/WCk4VoWlBVWVgGaGnHLvIGhrZ3RMvyoC5NBgC0PR5G+/fGSw==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/config': ^5.0.0 + '@adonisjs/fold': ^10.0.0 + + '@adonisjs/assembler@7.8.2': + resolution: {integrity: sha512-csLdMW58cwuRjdPEDE0dqwHZCT5snCh+1sQ19HPnQ/BLKPPAvQdDRdw0atoC8LVmouB8ghXVHp3SxnVxlvXYWQ==} + engines: {node: '>=20.6.0'} + peerDependencies: + typescript: ^4.0.0 || ^5.0.0 + + '@adonisjs/auth@9.2.3': + resolution: {integrity: sha512-my/dqQJo1LQRhT3bW0RuK/1BhDTWcY3tVrGZmVMedCRBfYGt91OAreMy0muukJcWr8AkXBtbBsju2D+myaDa4Q==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/core': ^6.11.0 + '@adonisjs/lucid': ^20.0.0 || ^21.0.1 + '@adonisjs/session': ^7.4.1 + '@japa/api-client': ^2.0.3 + '@japa/browser-client': ^2.0.3 + '@japa/plugin-adonisjs': ^3.0.1 + peerDependenciesMeta: + '@adonisjs/lucid': + optional: true + '@adonisjs/session': + optional: true + '@japa/api-client': + optional: true + '@japa/browser-client': + optional: true + '@japa/plugin-adonisjs': + optional: true + + '@adonisjs/bodyparser@10.0.2': + resolution: {integrity: sha512-dkbn+DK5B1dODTwk5367gHPhaD4ZIoGon/jvq47iX2cnHjk3a0SyQrBEjoFhnrNkVOJZ76I3OJ3oixqgMcE+yA==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/http-server': ^7.0.2 + + '@adonisjs/config@5.0.2': + resolution: {integrity: sha512-NXjFqDHNGRTZ1EnA4zr20GFEt7qw/JvZ4ZV8/PzFyVc7dPoFprpoyE3bw7kmlKHhcQdBbF7YXCGB4q+HQUnqiQ==} + engines: {node: '>=18.16.0'} + + '@adonisjs/core@6.14.1': + resolution: {integrity: sha512-pwQ57tWYBMtc3LP7/eIkQuK/Ag9RrDFmcjjj04XSHR+ormeC/I94EwH89EJ0f4ejidshobtaE/OmW6it0vJfuA==} + engines: {node: '>=20.6.0'} + hasBin: true + peerDependencies: + '@adonisjs/assembler': ^7.8.0 + '@vinejs/vine': ^2.1.0 + argon2: ^0.31.2 || ^0.41.0 + bcrypt: ^5.1.1 + edge.js: ^6.2.0 + peerDependenciesMeta: + '@adonisjs/assembler': + optional: true + '@vinejs/vine': + optional: true + argon2: + optional: true + bcrypt: + optional: true + edge.js: + optional: true + + '@adonisjs/cors@2.2.1': + resolution: {integrity: sha512-qnrSG8ylpgTeZBOYEN3yXxY0PBUEg1KGDhgn9VKVFGxLKT+o9GGVOSZxUK3wG341B1zB9w5vuZN1z4M0Jitb6g==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/core': ^6.2.0 + + '@adonisjs/encryption@6.0.2': + resolution: {integrity: sha512-37XqVPsZi6zXMbC0Me1/qlcTP0uE+KAtYOFx7D7Tvtz377NL/6gqxqgpW/BopgOSD+CVDXjzO/Wx3M2UrbkJRQ==} + engines: {node: '>=18.16.0'} + + '@adonisjs/env@6.1.0': + resolution: {integrity: sha512-CzK+njXTH3EK+d/UJPqckyqWocOItmLgHIUbvhpd6WvveBnfv1Dz5j9H3k+ogHqThDSJCXu1RkaRAC+HNym9gA==} + engines: {node: '>=18.16.0'} + + '@adonisjs/eslint-config@1.3.0': + resolution: {integrity: sha512-CBt/fl17+OCmaCd0rt79GvroDidaF/cBTc6iqjEh08IawAcanQE339kPRMgL1T43B6BDFmSahePvYU5es5j4yw==} + peerDependencies: + eslint: '>=7.4.0' + prettier: '>=2.0.0' + + '@adonisjs/eslint-plugin@1.3.0': + resolution: {integrity: sha512-LpN85yyuKkfo4t5PlE2Pij1GU3BcFh15cOH6BK7iDDcMkR6KduXB90hYiRu013EVIH+/sfxP5k2VjhBRc31Mqw==} + + '@adonisjs/events@9.0.2': + resolution: {integrity: sha512-qZn2e9V9C8tF4MNqEWv5JGxMG7gcHSJM8RncGpjuJ4cwFwd2jF4xrN6wkCprTVwoyZSxNS0Cp9NkAonySjG5vg==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/application': ^8.0.2 + '@adonisjs/fold': ^10.0.1 + + '@adonisjs/fold@10.1.2': + resolution: {integrity: sha512-zNlPUpX0HdNLP9lateEqQ+frO+u0Ecs1OW3eS+8CbPTKgfPP1fFP9cZeuYFJK0FwQIFdP1rLVkpUBZAR//5Bfw==} + engines: {node: '>=18.16.0'} + + '@adonisjs/hash@9.0.5': + resolution: {integrity: sha512-oY8PafBrdGsr5UY8cAzzxPCtehZDW7KsPcI47dZpjydOdL/PQrT4liX+cGujL6mSbi3JEgQLBgBs/+SlPFvCrg==} + engines: {node: '>=20.6.0'} + peerDependencies: + argon2: ^0.31.2 || ^0.41.0 + bcrypt: ^5.1.1 + peerDependenciesMeta: + argon2: + optional: true + bcrypt: + optional: true + + '@adonisjs/health@2.0.0': + resolution: {integrity: sha512-dEAABiAJew1imzwi+OvV/SAnjkMp8TbD5ZIzx1dMRnPynJAlRf37//bHLwZ5Cw44ke5kPzZ/l1n9cx/VeBCicA==} + engines: {node: '>=20.6.0'} + + '@adonisjs/http-server@7.2.5': + resolution: {integrity: sha512-85uvY0msXVEfFl+jkpc+V2kSFvruOvRWncyiKxEkiTsma5YjnwV9OT7E/85XPGhZDMZCFHDxWeeQKNH/EOHQaQ==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/application': ^8.0.2 + '@adonisjs/encryption': ^6.0.0 + '@adonisjs/events': ^9.0.0 + '@adonisjs/fold': ^10.0.1 + '@adonisjs/logger': ^6.0.1 + + '@adonisjs/logger@6.0.3': + resolution: {integrity: sha512-CKxIpWBEX/e6duRE6qq8GJ90NQC8q26Q0aSuj+bUO6X4mgcgawxhciJTfpxmJNj9KEUmNAeHOn0hSpTITdk8Lg==} + engines: {node: '>=18.16.0'} + + '@adonisjs/lucid@21.3.0': + resolution: {integrity: sha512-m2r+LyOl0VJzZK6vVOAk3yAaUR6QLiL1tUxSPKl1E/49dkQTVwkH1/2XDgkm/kTXjsgK60WD/alYnm419xb/rw==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/assembler': ^7.7.0 + '@adonisjs/core': ^6.10.1 + luxon: ^3.4.4 + peerDependenciesMeta: + '@adonisjs/assembler': + optional: true + luxon: + optional: true + + '@adonisjs/presets@2.6.3': + resolution: {integrity: sha512-ADCdslOgsSZPFnDQO0I6en/PL8Hg+VDHaOI+KyPxKZ5UEy5uFHuQm2BPo+0OaoSLClIm8SJnZFaXwNK9uN55bA==} + peerDependencies: + '@adonisjs/assembler': ^7.8.2 + '@adonisjs/core': ^6.13.0 + peerDependenciesMeta: + '@adonisjs/assembler': + optional: true + + '@adonisjs/prettier-config@1.4.0': + resolution: {integrity: sha512-6MqbAvGlxf8iNHwGiJmtMKMhwoxRNtpzuLV8F93lQtsLluU1fjF8EDDpTPl9RrQblt7+6zY28K5nh1rmmXk8mQ==} + + '@adonisjs/repl@4.0.1': + resolution: {integrity: sha512-fgDRC5I8RBKHzsJPM4rRQF/OWI0K9cNihCIf4yHdqQt3mhFqWSOUjSi4sXWykdICLiddmyBO86au7i0d0dj5vQ==} + engines: {node: '>=18.16.0'} + + '@adonisjs/tsconfig@1.4.0': + resolution: {integrity: sha512-go5KlxE8jJaeoIRzm51PcF2YJSK5i022douVk9OjAqvDiU1t2UepcDoEsSiEOgogUDojp9kbRQmFyf0y0YqvOg==} + '@algolia/autocomplete-core@1.9.3': resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} @@ -384,50 +710,50 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/cache-browser-local-storage@4.24.0': - resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} + '@algolia/cache-browser-local-storage@4.23.3': + resolution: {integrity: sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==} - '@algolia/cache-common@4.24.0': - resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} + '@algolia/cache-common@4.23.3': + resolution: {integrity: sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==} - '@algolia/cache-in-memory@4.24.0': - resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} + '@algolia/cache-in-memory@4.23.3': + resolution: {integrity: sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==} - '@algolia/client-account@4.24.0': - resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} + '@algolia/client-account@4.23.3': + resolution: {integrity: sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==} - '@algolia/client-analytics@4.24.0': - resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} + '@algolia/client-analytics@4.23.3': + resolution: {integrity: sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==} - '@algolia/client-common@4.24.0': - resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} + '@algolia/client-common@4.23.3': + resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} - '@algolia/client-personalization@4.24.0': - resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} + '@algolia/client-personalization@4.23.3': + resolution: {integrity: sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==} - '@algolia/client-search@4.24.0': - resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} + '@algolia/client-search@4.23.3': + resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} - '@algolia/logger-common@4.24.0': - resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} + '@algolia/logger-common@4.23.3': + resolution: {integrity: sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==} - '@algolia/logger-console@4.24.0': - resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} + '@algolia/logger-console@4.23.3': + resolution: {integrity: sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==} - '@algolia/recommend@4.24.0': - resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} + '@algolia/recommend@4.23.3': + resolution: {integrity: sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==} - '@algolia/requester-browser-xhr@4.24.0': - resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} + '@algolia/requester-browser-xhr@4.23.3': + resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} - '@algolia/requester-common@4.24.0': - resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} + '@algolia/requester-common@4.23.3': + resolution: {integrity: sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==} - '@algolia/requester-node-http@4.24.0': - resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} + '@algolia/requester-node-http@4.23.3': + resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} - '@algolia/transporter@4.24.0': - resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + '@algolia/transporter@4.23.3': + resolution: {integrity: sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -436,6 +762,9 @@ packages: '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + '@antfu/install-pkg@0.4.1': + resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + '@apidevtools/json-schema-ref-parser@9.0.9': resolution: {integrity: sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==} @@ -448,20 +777,28 @@ packages: resolution: {integrity: sha512-gAYzWaIbq8m9MuvxKmeDn24Or4mIWCSpRR0NNXAVoGUTPraB1SP3blPa5NycUPTnToKLA5DAwHLhwtWpslMbKQ==} engines: {node: '>=18'} - '@babel/code-frame@7.26.0': - resolution: {integrity: sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==} + '@arr/every@1.0.1': + resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} + engines: {node: '>=4'} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.0': - resolution: {integrity: sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} '@babel/core@7.26.0': resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.0': - resolution: {integrity: sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.25.9': @@ -478,14 +815,22 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + '@babel/helper-plugin-utils@7.24.7': + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} @@ -498,25 +843,34 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.0': - resolution: {integrity: sha512-aP8x5pIw3xvYr/sXT+SEUwyhrXT8rUJRZltK/qN3Db80dcKpTett8cJxHyjk+xYSVXvNnl2SfcJVjbwxpOSscA==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.3': + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + '@babel/plugin-transform-react-jsx-self@7.24.7': + resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + '@babel/plugin-transform-react-jsx-source@7.24.7': + resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + '@babel/runtime@7.25.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} '@babel/template@7.25.9': @@ -527,6 +881,10 @@ packages: resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} @@ -660,18 +1018,37 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} + '@chevrotain/cst-dts-gen@11.0.3': + resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} + + '@chevrotain/gast@11.0.3': + resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} + + '@chevrotain/regexp-to-ast@11.0.3': + resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} + + '@chevrotain/types@11.0.3': + resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} + + '@chevrotain/utils@11.0.3': + resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@docsearch/css@3.6.2': - resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@docsearch/css@3.6.0': + resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} - '@docsearch/js@3.6.2': - resolution: {integrity: sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==} + '@docsearch/js@3.6.0': + resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} - '@docsearch/react@3.6.2': - resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==} + '@docsearch/react@3.6.0': + resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -1254,6 +1631,44 @@ packages: cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@faker-js/faker@9.2.0': + resolution: {integrity: sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==} + engines: {node: '>=18.0.0', npm: '>=9.0.0'} + + '@fastify/deepmerge@2.0.0': + resolution: {integrity: sha512-fsaybTGDyQ5KpPsplQqb9yKdCf2x/pbNpMNk8Tvp3rRz7lVcupKysH4b2ELMN2P4Hak1+UqTYdTj/u4FNV2p0g==} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1359,12 +1774,14 @@ packages: cpu: [x64] os: [win32] - '@inquirer/confirm@5.0.0': - resolution: {integrity: sha512-6QEzj6bZg8atviRIL+pR0tODC854cYSjvZxkyCarr8DVaOJPEyuGys7GmEG3W0Rb8kKSQec7P6okt0sJvNneFw==} + '@inquirer/confirm@5.0.1': + resolution: {integrity: sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@inquirer/core@10.0.0': - resolution: {integrity: sha512-7dwoKCGvgZGHWTZfOj2KLmbIAIdiXP9NTrwGaTO/XDfKMEmyBahZpnombiG6JDHmiOrmK3GLEJRXrWExXCDLmQ==} + '@inquirer/core@10.0.1': + resolution: {integrity: sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==} engines: {node: '>=18'} '@inquirer/figures@1.0.7': @@ -1377,6 +1794,10 @@ packages: peerDependencies: '@types/node': '>=18' + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1395,17 +1816,24 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + engines: {node: '>=8'} + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@mswjs/interceptors@0.36.6': - resolution: {integrity: sha512-issnYydStyH0wPEeU7CMwfO7kI668ffVtzKRMRS7H7BliOYuPuwEZxh9dwiXV+oeHBxT5SXT0wPwV8T7V2PJUA==} + '@mswjs/interceptors@0.36.10': + resolution: {integrity: sha512-GXrJgakgJW3DWKueebkvtYgGKkxA7s0u5B0P5syJM5rvQUnrpLPigvci8Hukl7yEM+sU06l+er2Fgvx/gmiRgg==} engines: {node: '>=18'} '@next/env@15.0.1': @@ -1459,6 +1887,10 @@ packages: cpu: [x64] os: [win32] + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1480,118 +1912,191 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@playwright/test@1.48.1': - resolution: {integrity: sha512-s9RtWoxkOLmRJdw3oFvhFbs9OJS0BzrLUc8Hf6l2UdCNd1rqeEyD4BhCJkvzeEoD1FsK4mirsWwGerhVmYKtZg==} + '@paralleldrive/cuid2@2.2.2': + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + + '@phc/format@1.0.0': + resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} + engines: {node: '>=10'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@playwright/test@1.48.2': + resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==} engines: {node: '>=18'} hasBin: true - '@polka/url@1.0.0-next.28': - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@polka/url@1.0.0-next.25': + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + + '@poppinss/chokidar-ts@4.1.4': + resolution: {integrity: sha512-iX+QSNOo2PAvkv+8ggBkCyv2gZHskJemtsl1PcEbjM7dJOf+n4LSPHAqj4+B0raqZHznXFhKKoQfN1a9j/YuUg==} + engines: {node: '>=18.16.0'} + peerDependencies: + typescript: ^4.0.0 || ^5.0.0 + + '@poppinss/cliui@6.4.1': + resolution: {integrity: sha512-tdV3QpAfrPFRLPOh98F8QxWBvwYF3ziWGGtpVqfZtFNTFkC7nQnVQlUW55UtQ7rkeMmFohxfDI+2JNWScGJ1jQ==} + engines: {node: '>=18.16.0'} + + '@poppinss/colors@4.1.3': + resolution: {integrity: sha512-A0FjJ6x14donWDN3bHAFFjJaPWTwM2PgWT834+bPKVK6Xukf25CscoRqCPYI939a8yuJFX9PYWWnVbUVI0E2Cg==} + engines: {node: '>=18.16.0'} + + '@poppinss/dumper@0.4.2': + resolution: {integrity: sha512-dZBY7t0lp4fMabTQZM5mXYKoTpl0ZwZIwON0gsMmZDyHyhXzIPZw7btOr8OKqFyOKhKBPN+X4Vfmfjeq5NIC7w==} + + '@poppinss/hooks@7.2.4': + resolution: {integrity: sha512-AoKSHC8ts199+PPa/R+XFF1A9FFhbiGibizOp0M54kCzvhwErGNLJd8Yk/b5nzodmsvApX7cjWVKPM5+12r2VA==} + engines: {node: '>=18.16.0'} + + '@poppinss/macroable@1.0.3': + resolution: {integrity: sha512-B4iV6QxW//Fn17+qF1EMZRmoThIUJlCtcO85yoRDJnMyHeAthjz4ig9OTkfGGXKtQhcdPX0me75gU5K9J897+w==} + engines: {node: '>=18.16.0'} + + '@poppinss/matchit@3.1.2': + resolution: {integrity: sha512-Bx+jY+vmdQFmwYiHliiPjr+oVBaGnh79B1h1FSAm3jME1QylLFt8PPYC0ymO8Q5PzJj/KuE3jeTnZhRHOWqq8g==} + + '@poppinss/middleware@3.2.4': + resolution: {integrity: sha512-Klz8kInSN2hL3C/IRkt2DBFIc/kZ225SZpb4Mj2fS7k+YXRmogUF1sVi6W/xkuHuY523mNWgMkt/Ym5HoOC03A==} + engines: {node: '>=18.16.0'} + + '@poppinss/multiparty@2.0.1': + resolution: {integrity: sha512-Pf3V9PFyZDIkDBBiAOT2hdmA+1l/+hverHbUnMzNzwtwgO50s2ZPt5KxUydVA0hceg9gryo5unQ0WUF1SO9tkQ==} + + '@poppinss/prompts@3.1.3': + resolution: {integrity: sha512-lNAcOcvB7YhfaWYIsu8tatF9V61A0SEu8PGpGx9RqTVmImKhLT0AAcRPr/5z4UQMl7SIf5REQKMJhHK50xakYQ==} + engines: {node: '>=18.16.0'} + + '@poppinss/utils@6.8.3': + resolution: {integrity: sha512-YGeH7pIUm9ExONURNH3xN61dBZ0SXgVuPA9E76t7EHeZHXPNrmR8TlbXQaka6kd5n+cpBNcHG4VsVfYf59bZ7g==} + engines: {node: '>=18.16.0'} + + '@poppinss/validator-lite@1.0.3': + resolution: {integrity: sha512-u4dmT7PDHwNtxY3q1jHVp/u+hMEEcBlkzd37QwwM4tVt/0mLlEDttSfPQ+TT7sqPG4VEtWKwVSlMInwPUYyJpA==} '@redocly/ajv@8.11.2': resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} - '@redocly/config@0.15.0': - resolution: {integrity: sha512-QmzuqbhzrbiktRGw+FV7iim+TsfQRU8crJb2s7ls8gP+BMkE1RHZnmJ1lAA/QwzyXbEmKZeGFTdM6PWuRwNlRA==} + '@redocly/config@0.16.0': + resolution: {integrity: sha512-t9jnODbUcuANRSl/K4L9nb12V+U5acIHnVSl26NWrtSdDZVtoqUXk2yGFPZzohYf62cCfEQUT8ouJ3bhPfpnJg==} - '@redocly/openapi-core@1.25.9': - resolution: {integrity: sha512-tod9bhIxBJQOeGQ3Ot5Zk707Wcg5YgEcEG766cGxwHqjRUNF5kwZnleBO7CpaLusOMWnQefj7RfFWLZS+IqnhA==} + '@redocly/openapi-core@1.25.11': + resolution: {integrity: sha512-bH+a8izQz4fnKROKoX3bEU8sQ9rjvEIZOqU6qTmxlhOJ0NsKa5e+LmU18SV0oFeg5YhWQhhEDihXkvKJ1wMMNQ==} engines: {node: '>=14.19.0', npm: '>=7.0.0'} - '@rollup/rollup-android-arm-eabi@4.24.0': - resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.20.0': + resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.24.0': - resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + '@rollup/rollup-android-arm64@4.20.0': + resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.24.0': - resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + '@rollup/rollup-darwin-arm64@4.20.0': + resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.24.0': - resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + '@rollup/rollup-darwin-x64@4.20.0': + resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': - resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.24.0': - resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.24.0': - resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + '@rollup/rollup-linux-arm64-gnu@4.20.0': + resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.24.0': - resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + '@rollup/rollup-linux-arm64-musl@4.20.0': + resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': - resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.24.0': - resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.24.0': - resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + '@rollup/rollup-linux-s390x-gnu@4.20.0': + resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.24.0': - resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + '@rollup/rollup-linux-x64-gnu@4.20.0': + resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.24.0': - resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + '@rollup/rollup-linux-x64-musl@4.20.0': + resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.24.0': - resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + '@rollup/rollup-win32-arm64-msvc@4.20.0': + resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.24.0': - resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + '@rollup/rollup-win32-ia32-msvc@4.20.0': + resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.24.0': - resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + '@rollup/rollup-win32-x64-msvc@4.20.0': + resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} cpu: [x64] os: [win32] - '@shikijs/core@1.22.1': - resolution: {integrity: sha512-bqAhT/Ri5ixV4oYsvJNH8UJjpjbINWlWyXY6tBTsP4OmD6XnFv43nRJ+lTdxd2rmG5pgam/x+zGR6kLRXrpEKA==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@shikijs/core@1.22.2': + resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} - '@shikijs/engine-javascript@1.22.1': - resolution: {integrity: sha512-540pyoy0LWe4jj2BVbgELwOFu1uFvRI7lg4hdsExrSXA9x7gqfzZ/Nnh4RfX86aDAgJ647gx4TCmRwACbnQSvw==} + '@shikijs/engine-javascript@1.22.2': + resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} - '@shikijs/engine-oniguruma@1.22.1': - resolution: {integrity: sha512-L+1Vmd+a2kk8HtogUFymQS6BjUfJnzcWoUp1BUgxoDiklbKSMvrsMuLZGevTOP1m0rEjgnC5MsDmsr8lX1lC+Q==} + '@shikijs/engine-oniguruma@1.22.2': + resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} - '@shikijs/transformers@1.22.1': - resolution: {integrity: sha512-KvG49YFV6gV116sC4L3Sn1Rp6HXsioMKBBG373j088rw849440hm8s2r+/dgjsGLvT4p+QB7newev+5a3ARM6w==} + '@shikijs/transformers@1.22.2': + resolution: {integrity: sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==} - '@shikijs/types@1.22.1': - resolution: {integrity: sha512-+45f8mu/Hxqs6Kyhfm98Nld5n7Q7lwhjU8UtdQwrOPs7BnM4VAb929O3IQ2ce+4D7SlNFlZGd8CnKRSnwbQreQ==} + '@shikijs/types@1.22.2': + resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} '@shikijs/vscode-textmate@9.3.0': resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} @@ -1600,6 +2105,22 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + '@sindresorhus/is@6.3.1': + resolution: {integrity: sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==} + engines: {node: '>=16'} + + '@sindresorhus/is@7.0.1': + resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@size-limit/esbuild@11.1.6': resolution: {integrity: sha512-0nBKYSxeRjUVCVoCkWZbmGkGBwpm0HdwHedWgxksBGxTKU0PjOMSHc3XTjKOrXBKXQzw90Ue0mgOd4n6zct9SA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -1622,8 +2143,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/kit@2.7.3': - resolution: {integrity: sha512-Vx7nq5MJ86I8qXYsVidC5PX6xm+uxt8DydvOdmJoyOK7LvGP18OFEG359yY+aa51t6pENvqZAMqAREQQx1OI2Q==} + '@sveltejs/kit@2.7.7': + resolution: {integrity: sha512-EvNErTd0QuIUX6SbZecOJQus3cILJR87XyIQXF4kfwWap63/OV58GGTEI47k3ydrFssAWGw4eu3RlB2dmBYETA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1646,68 +2167,137 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 - '@swc/core-darwin-arm64@1.7.39': - resolution: {integrity: sha512-o2nbEL6scMBMCTvY9OnbyVXtepLuNbdblV9oNJEFia5v5eGj9WMrnRQiylH3Wp/G2NYkW7V1/ZVW+kfvIeYe9A==} + '@swc/core-darwin-arm64@1.7.4': + resolution: {integrity: sha512-RbWrdGh+x9xKFUA9/kPZRR8OPxUsDUuPyLjPIGLYZMO+ftht2vhVH7QsUq6lg+jAP34eIya72UA1isiZe+BRaA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-arm64@1.9.1': + resolution: {integrity: sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.39': - resolution: {integrity: sha512-qMlv3XPgtPi/Fe11VhiPDHSLiYYk2dFYl747oGsHZPq+6tIdDQjIhijXPcsUHIXYDyG7lNpODPL8cP/X1sc9MA==} + '@swc/core-darwin-x64@1.7.4': + resolution: {integrity: sha512-TxCWMJs4OrqApjFuT8cUiqMz0zg97F0JsXBEeZ7zjkyv9XJ/rN2pdwqMlZv0Wv2C2rivOPo6FsWYlZ3V8ZHhyA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.39': - resolution: {integrity: sha512-NP+JIkBs1ZKnpa3Lk2W1kBJMwHfNOxCUJXuTa2ckjFsuZ8OUu2gwdeLFkTHbR43dxGwH5UzSmuGocXeMowra/Q==} + '@swc/core-darwin-x64@1.9.1': + resolution: {integrity: sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.7.4': + resolution: {integrity: sha512-5IhwIJZAgkkfI6PqgQ3xk0/2hTAVsAczIPLiR2Epp30EgsNo1KIFL0ZHzrnvJPy5BZ3jy3T1dEbDE/memBOEmA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm-gnueabihf@1.9.1': + resolution: {integrity: sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.39': - resolution: {integrity: sha512-cPc+/HehyHyHcvAsk3ML/9wYcpWVIWax3YBaA+ScecJpSE04l/oBHPfdqKUPslqZ+Gcw0OWnIBGJT/fBZW2ayw==} + '@swc/core-linux-arm64-gnu@1.7.4': + resolution: {integrity: sha512-0787jri83jigf26mF8FndWehh7jqMaHwAm/OV6VdToyNo/g+d1AxVpkEizrywZK46el+AObnHUIHIHwZgO21LA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.39': - resolution: {integrity: sha512-8RxgBC6ubFem66bk9XJ0vclu3exJ6eD7x7CwDhp5AD/tulZslTYXM7oNPjEtje3xxabXuj/bEUMNvHZhQRFdqA==} + '@swc/core-linux-arm64-gnu@1.9.1': + resolution: {integrity: sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.39': - resolution: {integrity: sha512-3gtCPEJuXLQEolo9xsXtuPDocmXQx12vewEyFFSMSjOfakuPOBmOQMa0sVL8Wwius8C1eZVeD1fgk0omMqeC+Q==} + '@swc/core-linux-arm64-musl@1.7.4': + resolution: {integrity: sha512-A45hGKWAGcjU5Ol0uQUoK0tHerwEKxfprYUZbmPLpD2yrpMZr+dTrwY2n075sixs7RuZEccBkgGNpehEe5BPBQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.9.1': + resolution: {integrity: sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.7.4': + resolution: {integrity: sha512-bcO1MpAm39TXqqHuYW4ox4vDvhB7jkguwMwxvmL+cKBGsUHrIoUTfGt9NM9N4D4CvOwULlxqbyt19veUJ7CVPw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.9.1': + resolution: {integrity: sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.7.4': + resolution: {integrity: sha512-N6nXuHyDO/q5kPN2xQxz5BEvhFpgnFSkP+9wxg5xWq+qIQL5bv37jk8dkKvMLx/8fHzTqrIjPDSRzVbcL7sqXg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.39': - resolution: {integrity: sha512-mg39pW5x/eqqpZDdtjZJxrUvQNSvJF4O8wCl37fbuFUqOtXs4TxsjZ0aolt876HXxxhsQl7rS+N4KioEMSgTZw==} + '@swc/core-linux-x64-musl@1.9.1': + resolution: {integrity: sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.39': - resolution: {integrity: sha512-NZwuS0mNJowH3e9bMttr7B1fB8bW5svW/yyySigv9qmV5VcQRNz1kMlCvrCLYRsa93JnARuiaBI6FazSeG8mpA==} + '@swc/core-win32-arm64-msvc@1.7.4': + resolution: {integrity: sha512-7W1owqCNR1cG+mpS55juiZlR/lrAdxB1pH32egeOipNKOLGwyqmlzQ0g9tkQTNgzwgfpCUg8z606+GqqXvajZw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.39': - resolution: {integrity: sha512-qFmvv5UExbJPXhhvCVDBnjK5Duqxr048dlVB6ZCgGzbRxuarOlawCzzLK4N172230pzlAWGLgn9CWl3+N6zfHA==} + '@swc/core-win32-arm64-msvc@1.9.1': + resolution: {integrity: sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.7.4': + resolution: {integrity: sha512-saLkY+q7zNPk4gYiUBCc93FYPo4ECXMjHcSPtLVHoPZBIxRrklgaAf6aDpblBo30nVdoBE2V3YPd0Y/cPiY6RQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.9.1': + resolution: {integrity: sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.39': - resolution: {integrity: sha512-o+5IMqgOtj9+BEOp16atTfBgCogVak9svhBpwsbcJQp67bQbxGYhAPPDW/hZ2rpSSF7UdzbY9wudoX9G4trcuQ==} + '@swc/core-win32-x64-msvc@1.7.4': + resolution: {integrity: sha512-zKF6jpRBNuVKgOf2W5dMcPyjwcNCp21syjl9lvLRbCeIg+1U+zjdoQCAmMWWoPNE7fLg+yfvohnnOJG2AdzQ9Q==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.39': - resolution: {integrity: sha512-jns6VFeOT49uoTKLWIEfiQqJAlyqldNAt80kAr8f7a5YjX0zgnG3RBiLMpksx4Ka4SlK4O6TJ/lumIM3Trp82g==} + '@swc/core-win32-x64-msvc@1.9.1': + resolution: {integrity: sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.7.4': + resolution: {integrity: sha512-+wSycNxOw9QQz81AJAZlNS34EtOIifwUXMPACg05PWjECsjOKDTXLCVPx6J0lRaxhHSGBU2OYs9mRfIvxGt3CA==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/core@1.9.1': + resolution: {integrity: sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1721,14 +2311,17 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - '@swc/types@0.1.13': - resolution: {integrity: sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==} + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + + '@swc/types@0.1.14': + resolution: {integrity: sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==} - '@tanstack/query-core@5.59.16': - resolution: {integrity: sha512-crHn+G3ltqb5JG0oUv6q+PMz1m1YkjpASrXTU+sYWW9pLk0t2GybUHNRqYPZWhxgjPaVGC4yp92gSFEJgYEsPw==} + '@tanstack/query-core@5.59.20': + resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} - '@tanstack/react-query@5.59.16': - resolution: {integrity: sha512-MuyWheG47h6ERd4PKQ6V8gDyBu3ThNG22e1fRVwvq6ap3EqsFhyuxCAwhNP/03m/mLg+DAb0upgbPaX6VB+CkQ==} + '@tanstack/react-query@5.59.20': + resolution: {integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw==} peerDependencies: react: ^18 || ^19 @@ -1751,10 +2344,28 @@ packages: '@types/react-dom': optional: true + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@ts-morph/common@0.24.0': + resolution: {integrity: sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tsconfig/node20@20.1.4': resolution: {integrity: sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==} @@ -1773,18 +2384,24 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/bytes@3.1.4': + resolution: {integrity: sha512-A0uYgOj3zNc4hNjHc5lYUfJQ/HVyBXiUMKdXd7ysclaE6k9oJdavQzODHuwjpUu2/boCP8afjQYi8z/GtvNCWA==} + '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} '@types/degit@2.8.6': resolution: {integrity: sha512-y0M7sqzsnHB6cvAeTCBPrCQNQiZe8U4qdzf8uBVmOWYap5MMTN/gB2iEqrIqFiYcsyvP74GnGD5tgsHttielFw==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/he@1.2.3': + resolution: {integrity: sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==} + '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -1797,8 +2414,8 @@ packages: '@types/lodash@4.17.7': resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/markdown-it@14.1.1': + resolution: {integrity: sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1812,18 +2429,27 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.8.0': - resolution: {integrity: sha512-84rafSBHC/z1i1E3p0cJwKA+CfYDNSXX9WSZBRopjIzLET8oNt6ht2tei4C7izwDeEiLLfdeSVBv1egOH916hg==} + '@types/node@20.14.14': + resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} + + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + '@types/pluralize@0.0.33': + resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} '@types/pug@2.0.10': resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} + '@types/qs@6.9.17': + resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} + '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} @@ -1839,6 +2465,9 @@ packages: '@types/react@18.3.5': resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} @@ -1848,23 +2477,92 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/validator@13.12.2': + resolution: {integrity: sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==} + '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - '@vitejs/plugin-react-swc@3.7.1': - resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==} + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - vite: ^4 || ^5 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@vitejs/plugin-react@4.3.3': - resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} - engines: {node: ^14.18.0 || >=16.0.0} + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 - + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vinejs/compiler@2.5.0': + resolution: {integrity: sha512-hg4ekaB5Y2zh+IWzBiC/WCDWrIfpVnKu/ubUvelKlidc/VbulsexoFRw5kJGHZenPVI5YzNnDeTdYSALkTV7jQ==} + engines: {node: '>=18.0.0'} + + '@vinejs/vine@2.1.0': + resolution: {integrity: sha512-09aJ2OauxpblqiNqd8qC9RAzzm5SV6fTqZhE4e25j4cM7fmNoXRTjM7Oo8llFADMO4eSA44HqYEO3mkRRYdbYw==} + engines: {node: '>=18.16.0'} + + '@vitejs/plugin-react-swc@3.7.1': + resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==} + peerDependencies: + vite: ^4 || ^5 + + '@vitejs/plugin-react@4.3.3': + resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + '@vitejs/plugin-vue@5.1.4': resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -1875,14 +2573,13 @@ packages: '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@2.1.3': - resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==} + '@vitest/expect@2.1.4': + resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} - '@vitest/mocker@2.1.3': - resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==} + '@vitest/mocker@2.1.4': + resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} peerDependencies: - '@vitest/spy': 2.1.3 - msw: ^2.3.5 + msw: ^2.4.9 vite: ^5.0.0 peerDependenciesMeta: msw: @@ -1893,44 +2590,41 @@ packages: '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - '@vitest/pretty-format@2.1.1': - resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} - - '@vitest/pretty-format@2.1.3': - resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==} + '@vitest/pretty-format@2.1.4': + resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} '@vitest/runner@2.0.5': resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} - '@vitest/runner@2.1.3': - resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==} + '@vitest/runner@2.1.4': + resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} '@vitest/snapshot@2.0.5': resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} - '@vitest/snapshot@2.1.3': - resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==} + '@vitest/snapshot@2.1.4': + resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@2.1.3': - resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==} + '@vitest/spy@2.1.4': + resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - '@vitest/utils@2.1.3': - resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} + '@vitest/utils@2.1.4': + resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} - '@volar/language-core@2.4.7': - resolution: {integrity: sha512-G/EB0vkArVB04F8DVBf30AlRK/QAOx63CzsuKKuda2ZIJamQlv4t6gEJrFVmYF560kbslFtaAJcmn8cyg7QmLA==} + '@volar/language-core@2.4.8': + resolution: {integrity: sha512-K/GxMOXGq997bO00cdFhTNuR85xPxj0BEEAy+BaqqayTmy9Tmhfgmq2wpJcVspRhcwfgPoE2/mEJa26emUhG/g==} - '@volar/source-map@2.4.7': - resolution: {integrity: sha512-c+7IJrD4mht1s8FLlCf6dAUC1aTUY9leKeLosfUiuMxavcG/sY3IPBiD1rdLL5qrhzYVmUWRGxhWvJeyYa/bsQ==} + '@volar/source-map@2.4.8': + resolution: {integrity: sha512-jeWJBkC/WivdelMwxKkpFL811uH/jJ1kVxa+c7OvG48DXc3VrP7pplSWPP2W1dLMqBxD+awRlg55FQQfiup4cA==} - '@volar/typescript@2.4.7': - resolution: {integrity: sha512-sp3mFLmMtXY47S8GrMwFnwjGiW7aVtCLMAwnePRJA4P7CfSkrRj2DjoSxl//0pt+KR7oGG/48T2q413b8TvPbg==} + '@volar/typescript@2.4.8': + resolution: {integrity: sha512-6xkIYJ5xxghVBhVywMoPMidDDAFT1OoQeXwa27HSgJ6AiIKRe61RXLoik+14Z7r0JvnblXVsjsRLmCr42SGzqg==} '@vue/compiler-core@3.5.12': resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} @@ -1947,17 +2641,17 @@ packages: '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/devtools-api@7.5.4': - resolution: {integrity: sha512-j9UC/KeYUNZ6AyCJxBROBCbogB5YHW6PZv9VnCNp2ntE4rq426Lfc8WP5B9V+rXBwqWmrgZTGYBa31CBSxdAUg==} + '@vue/devtools-api@7.6.3': + resolution: {integrity: sha512-H2TRzFA9hNezdtM6I0y3RCMhIg5T3gib/p9qI2IAS8gB9tvkAv4JZHAZZl5BZHhO7btuHkvHzU5qpO/vdsjYMg==} - '@vue/devtools-kit@7.5.4': - resolution: {integrity: sha512-0i7WFgc1B2TL52tstn82zlb9opSA0aIiHfkUYFXtZb8CIpmlFMTkHtgwVl6PMWNBj3LNhYou1YJCLpCYvJYYoA==} + '@vue/devtools-kit@7.6.3': + resolution: {integrity: sha512-ETsFc8GlOp04rSFN79tB2TpVloWfsSx9BoCSElV3w3CaJTSBfz42KsIi5Ka+dNTJs1jY7QVLTDeoBmUGgA9h2A==} - '@vue/devtools-shared@7.5.4': - resolution: {integrity: sha512-dwuq4YmwTyLc7eBOqX63s3JB8il7qnKsNgENglSMkUPwiItHkVAYYfPESN1rxSdYkl1RCux1l5TBidYqfUDNAA==} + '@vue/devtools-shared@7.6.3': + resolution: {integrity: sha512-wJW5QF27i16+sNQIaes8QoEZg1eqEgF83GkiPUlEQe9k7ZoHXHV7PRrnrxOKem42sIHPU813J2V/ZK1uqTJe6g==} - '@vue/language-core@2.1.6': - resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} + '@vue/language-core@2.1.10': + resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1978,17 +2672,20 @@ packages: peerDependencies: vue: 3.5.12 + '@vue/shared@3.4.35': + resolution: {integrity: sha512-hvuhBYYDe+b1G8KHxsQ0diDqDMA8D9laxWZhNAjE83VZb5UDaXl9Xnz7cGdDSyiHM90qqI/CyGMcpBpiDy6VVQ==} + '@vue/shared@3.5.12': resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} '@vue/tsconfig@0.5.1': resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==} - '@vueuse/core@10.11.1': - resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + '@vueuse/core@10.11.0': + resolution: {integrity: sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==} - '@vueuse/integrations@10.11.1': - resolution: {integrity: sha512-Y5hCGBguN+vuVYTZmdd/IMXLOdfS60zAmDmFYc4BKBcMUPZH1n4tdyDECCPjXm0bNT3ZRUy1xzTLGaUje8Xyaw==} + '@vueuse/integrations@10.11.0': + resolution: {integrity: sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==} peerDependencies: async-validator: ^4 axios: ^1 @@ -2028,25 +2725,41 @@ packages: universal-cookie: optional: true - '@vueuse/metadata@10.11.1': - resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + '@vueuse/metadata@10.11.0': + resolution: {integrity: sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==} - '@vueuse/shared@10.11.1': - resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + '@vueuse/shared@10.11.0': + resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==} abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} - acorn@8.13.0: - resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2062,8 +2775,14 @@ packages: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - algoliasearch@4.24.0: - resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + algoliasearch@4.23.3: + resolution: {integrity: sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==} + + alien-signals@0.2.0: + resolution: {integrity: sha512-StlonZhBBrsPPwrDjiPAiVTf/rolxffLxVPT60Qv/t88BZ81BvUVzHgGqEFvJ1ii8HXtm1+zU2Icr59tfWEcag==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -2081,10 +2800,18 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + ansi-regex@6.1.0: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2104,6 +2831,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2113,10 +2843,6 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2125,6 +2851,9 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} + as-table@1.0.55: + resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -2135,6 +2864,15 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} @@ -2145,6 +2883,13 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -2162,6 +2907,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2175,6 +2924,19 @@ packages: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bundle-require@5.0.0: + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -2183,6 +2945,10 @@ packages: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2194,6 +2960,10 @@ packages: call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + camelcase-keys@7.0.2: resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} engines: {node: '>=12'} @@ -2202,16 +2972,35 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001669: - resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + caniuse-lite@1.0.30001646: + resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==} + + caniuse-lite@1.0.30001677: + resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} + + case-anything@3.1.0: + resolution: {integrity: sha512-rRYnn5Elur8RuNHKoJ2b0tgn+pjYxL7BzWom+JZ7NKKn1lt/yGV/tUNwOovxYa9l9VL5hnXQdMc+mENbhJzosQ==} + engines: {node: '>=18'} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + chai@5.1.2: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2236,10 +3025,17 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + check-disk-space@3.4.0: + resolution: {integrity: sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==} + engines: {node: '>=16'} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chevrotain@11.0.3: + resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2255,10 +3051,18 @@ packages: cjs-module-lexer@1.4.1: resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + clean-stack@4.2.0: resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} engines: {node: '>=12'} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -2290,13 +3094,22 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -2310,6 +3123,9 @@ packages: colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + colorette@2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -2332,15 +3148,24 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} - computeds@0.0.1: - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2352,6 +3177,14 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookie@1.0.1: + resolution: {integrity: sha512-Xd8lFX4LM9QEEwxQpF9J9NTUh8pmdJO0cyRJhFiDoLTk2eH8FXlRv2IFGYVadZpqI3j8fhNrSdKCeYPxiAhLXw==} + engines: {node: '>=18'} + cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} @@ -2359,6 +3192,17 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} + copy-file@11.0.0: + resolution: {integrity: sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==} + engines: {node: '>=18'} + + cpy@11.1.0: + resolution: {integrity: sha512-QGHetPSSuprVs+lJmMDcivvrBwTKASzXQ5qxFvRC2RFESjjod71bDvFvhxTjDgkNjrrb72AI6JPjfYwxrIy33A==} + engines: {node: '>=18'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -2370,6 +3214,9 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css@3.0.0: + resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==} + cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -2383,6 +3230,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@2.0.2: + resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} + data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -2390,9 +3240,33 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -2417,10 +3291,25 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -2447,10 +3336,18 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2468,10 +3365,21 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -2480,12 +3388,29 @@ packages: engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} - electron-to-chromium@1.5.45: - resolution: {integrity: sha512-vOzZS6uZwhhbkZbcRyiy99Wg+pYFV5hk+5YaECvx0+Z31NR3Tt5zS6dze2OepT6PCTzVzT0dIJItti+uAW5zmw==} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + edgejs-parser@0.2.11: + resolution: {integrity: sha512-qzCyNZ/DDXp5T+M0+dilJCE2v0tcLjmpcyuXk3xbbrL/Y9DpO9dBvLLCiS0136LdwrE/OJPz+ajc07sycsJeHg==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.52: + resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==} + + emittery@1.0.3: + resolution: {integrity: sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==} + engines: {node: '>=14.16'} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -2493,9 +3418,19 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -2511,6 +3446,9 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser-es@0.1.5: + resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2519,6 +3457,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} @@ -2542,10 +3483,22 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2555,14 +3508,82 @@ packages: engines: {node: '>=6.0'} hasBin: true + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-config-prettier@8.10.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-jsonc@2.16.0: + resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-unicorn@47.0.0: + resolution: {integrity: sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.38.0' + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + esm@3.2.25: + resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} + engines: {node: '>=6'} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2577,13 +3598,37 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + execa@9.5.1: + resolution: {integrity: sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==} + engines: {node: ^18.19.0 || >=20.5.0} + + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -2591,16 +3636,36 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -2618,10 +3683,30 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-type@19.6.0: + resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==} + engines: {node: '>=18'} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2630,11 +3715,22 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - focus-trap@7.6.0: - resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -2642,13 +3738,25 @@ packages: debug: optional: true - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} formidable@3.5.2: resolution: {integrity: sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -2685,22 +3793,55 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + + get-source@2.0.12: + resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + getopts@2.3.0: + resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -2709,6 +3850,10 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} @@ -2720,6 +3865,10 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -2729,8 +3878,11 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql@16.9.0: - resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql@16.8.2: + resolution: {integrity: sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} handlebars@4.7.8: @@ -2742,6 +3894,10 @@ packages: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2774,6 +3930,9 @@ packages: headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hexoid@2.0.0: resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} engines: {node: '>=8'} @@ -2784,10 +3943,20 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hot-hook@0.2.6: + resolution: {integrity: sha512-sMqK0sejkw+gUh/WiyqYBk8AKB2qM1a1wsC4v0JlnK/1x8CUFF60oPawZy/EOtLmN1Om1GTGVJLIwShxOnuI9Q==} + html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -2795,6 +3964,10 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} @@ -2803,17 +3976,25 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + husky@9.1.5: resolution: {integrity: sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==} engines: {node: '>=18'} @@ -2827,17 +4008,32 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + igniculus@1.5.0: + resolution: {integrity: sha512-vhj2J/cSzNg2G5tcK4Z1KZdeYmQa5keoxFULUYAxctK/zHJb1oraO7noCqnJxKe1b2eZdiiaSL1IHPOFAI8UYQ==} + engines: {node: '>=4.0.0'} + ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -2846,6 +4042,10 @@ packages: resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} engines: {node: '>=18'} + inflation@2.1.0: + resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} + engines: {node: '>= 0.8.0'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -2853,6 +4053,14 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + interpret@2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -2863,6 +4071,10 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} @@ -2897,6 +4109,10 @@ packages: resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} @@ -2905,20 +4121,36 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} @@ -2930,10 +4162,17 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jiti@2.3.3: - resolution: {integrity: sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@2.4.0: + resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} hasBin: true + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + js-levenshtein@1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} @@ -2958,11 +4197,18 @@ packages: canvas: optional: true + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} hasBin: true + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -2971,20 +4217,40 @@ packages: engines: {node: '>=10'} deprecated: Please switch to @apidevtools/json-schema-ref-parser + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonschema@1.4.1: + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} + + junk@4.0.1: + resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} + engines: {node: '>=12.20'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -2993,6 +4259,42 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + knex-dynamic-connection@3.2.0: + resolution: {integrity: sha512-+j6KeUSim0FR8EobOqA1a/TZbN9mahjzHzJgOfQVkv6PUnSqJp70c/5n63M2YVNgNHETyBIUhV8stuQ0T/mG3g==} + engines: {node: '>=14.0.0'} + + knex@3.1.0: + resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + better-sqlite3: '*' + mysql: '*' + mysql2: '*' + pg: '*' + pg-native: '*' + sqlite3: '*' + tedious: '*' + peerDependenciesMeta: + better-sqlite3: + optional: true + mysql: + optional: true + mysql2: + optional: true + pg: + optional: true + pg-native: + optional: true + sqlite3: + optional: true + tedious: + optional: true + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + lilconfig@3.1.2: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} @@ -3005,10 +4307,14 @@ packages: engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.4: - resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} engines: {node: '>=18.0.0'} + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -3020,9 +4326,18 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -3037,6 +4352,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} @@ -3053,13 +4371,23 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -3071,11 +4399,11 @@ packages: mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - marked-terminal@7.1.0: - resolution: {integrity: sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==} + marked-terminal@7.2.1: + resolution: {integrity: sha512-rQ1MoMFXZICWNsKMiiHwP/Z+92PLKskTPXj+e7uwXmuMPkNn7iTqC+IvDekVm1MPeC9wYQeLxeFaOvudRR/XbQ==} engines: {node: '>=16.0.0'} peerDependencies: - marked: '>=1 <14' + marked: '>=1 <15' marked@9.1.6: resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} @@ -3088,6 +4416,18 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + memoize@10.0.0: + resolution: {integrity: sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==} + engines: {node: '>=18'} + meow@10.1.5: resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3118,6 +4458,14 @@ packages: micromark-util-types@2.0.0: resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3135,6 +4483,10 @@ packages: engines: {node: '>=4.0.0'} hasBin: true + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -3154,6 +4506,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -3165,6 +4521,10 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + minisearch@7.1.0: resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==} @@ -3175,6 +4535,11 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -3183,11 +4548,14 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.5.1: - resolution: {integrity: sha512-V0BmHvFkbWGXqbyrc+XiuQ8DU3qzcb6lb8gB9Vzltp3cgHLHLCDF/KmmFo0xw58StNaRMTebw3/xpWVvU9xq9g==} + msw@2.6.0: + resolution: {integrity: sha512-n3tx2w0MZ3H4pxY0ozrQ4sNPzK/dGtlr2cIIyuEsgq2Bhy4wvcW6ZH2w/gXM9+MEUY6HC1fWhqtcXDxVZr5Jxw==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -3199,6 +4567,10 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -3211,13 +4583,20 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.0.7: - resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} + nanoid@5.0.8: + resolution: {integrity: sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==} engines: {node: ^18 || >=20} hasBin: true - nanospinner@1.1.0: - resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} + nanospinner@1.2.0: + resolution: {integrity: sha512-dGxYcEj8YhuxjVO3PYmnj1nBhtwUkvuwYbLl/MduBPmQUPy3xBtG/ScJgqZgntQkX44UQaCSlFeW4rS5fUR/Sw==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -3259,32 +4638,62 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nwsapi@2.2.13: - resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + nwsapi@2.2.12: + resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -3296,6 +4705,9 @@ packages: oniguruma-to-js@0.4.3: resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + openapi-typescript-codegen@0.25.0: resolution: {integrity: sha512-nN/TnIcGbP58qYgwEEy5FrAAjePcYgfMaCe3tsmYyTgI3v4RR9v8os14L+LEWDvV50+CmqiyTzRkKKtJeb6Ybg==} hasBin: true @@ -3304,6 +4716,10 @@ packages: resolution: {integrity: sha512-9YkzVKIx9RVIET0lFjJOuf15VjI9AUsoNByBk5WYM66xVlAKDNy8anj08Ci3zZA+HgTwdDamYz5FCVYt2VoHkA==} engines: {node: '>= 12.0.0', npm: '>= 7.0.0'} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -3314,10 +4730,18 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3342,13 +4766,32 @@ packages: resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} engines: {node: '>=12'} + p-map@7.0.2: + resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==} + engines: {node: '>=18'} + + p-timeout@6.1.3: + resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} + engines: {node: '>=14.16'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-manager-detector@0.2.2: resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-imports@2.2.1: + resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} + engines: {node: '>= 18'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -3357,6 +4800,10 @@ packages: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse5-htmlparser2-tree-adapter@6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} @@ -3366,8 +4813,8 @@ packages: parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - parse5@7.2.0: - resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3388,6 +4835,13 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -3395,6 +4849,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -3402,12 +4860,22 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + peek-readable@5.3.1: + resolution: {integrity: sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==} + engines: {node: '>=14.16'} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + pg-connection-string@2.6.2: + resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3428,13 +4896,34 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - playwright-core@1.48.1: - resolution: {integrity: sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==} + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-pretty@11.3.0: + resolution: {integrity: sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==} + hasBin: true + + pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + + pino@8.21.0: + resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + playwright-core@1.48.2: + resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} engines: {node: '>=18'} hasBin: true - playwright@1.48.1: - resolution: {integrity: sha512-j8CiHW/V6HxmbntOfyB4+T/uk08tBy6ph0MpBXwuoofkSnLmlfdYNNkFTYD6ofzzlSqLA1fwH4vwvVFvJgLN0w==} + playwright@1.48.2: + resolution: {integrity: sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==} engines: {node: '>=18'} hasBin: true @@ -3442,6 +4931,24 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -3450,8 +4957,19 @@ packages: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} - preact@10.24.3: - resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} + preact@10.22.0: + resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-edgejs@0.2.32: + resolution: {integrity: sha512-gVJJF0SopAvqul5pnyy98agzBPMTwtzTQs6ic6D/l2NcqwhokDrm0N3yy5+z6DPkMZr+LYT2K9ocENPilLk7uQ==} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} @@ -3467,9 +4985,31 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + + pretty-ms@9.1.0: + resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} + engines: {node: '>=18'} + + printable-characters@1.0.42: + resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -3479,10 +5019,17 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + engines: {node: '>=0.6'} + qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -3493,10 +5040,21 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + random-bytes@1.0.0: + resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} + engines: {node: '>= 0.8'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -3518,18 +5076,38 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + read-pkg-up@8.0.0: resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} engines: {node: '>=12'} + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + read-pkg@6.0.0: resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} engines: {node: '>=12'} + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3538,15 +5116,34 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + redent@4.0.0: resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} engines: {node: '>=12'} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex@4.3.3: - resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} + regex@4.4.0: + resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -3559,10 +5156,18 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -3584,8 +5189,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@4.24.0: - resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} + rollup@4.20.0: + resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3596,6 +5201,19 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex@2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3612,6 +5230,13 @@ packages: search-insights@2.13.0: resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==} + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3621,13 +5246,16 @@ packages: engines: {node: '>=10'} hasBin: true - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-cookie-parser@2.7.0: + resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.33.5: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -3648,8 +5276,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.22.1: - resolution: {integrity: sha512-PbJ6XxrWLMwB2rm3qdjIHNm3zq4SfFnOx0B3rEoi4AN8AUngsdyZ1tRe5slMPtn6jQkbUURLNZPpLR7Do3k78g==} + shiki@1.22.2: + resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -3689,6 +5317,13 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -3697,18 +5332,40 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} + slugify@1.6.6: + resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} + engines: {node: '>=8.0.0'} + + sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + sorcery@0.11.1: resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} hasBin: true + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-resolve@0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -3731,12 +5388,23 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} + split-lines@3.0.0: + resolution: {integrity: sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==} + engines: {node: '>=12'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stacktracey@2.1.8: + resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -3759,10 +5427,17 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -3778,10 +5453,18 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -3790,6 +5473,14 @@ packages: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strtok3@9.0.1: + resolution: {integrity: sha512-ERPW+XkvX9W2A+ov07iy+ZFJpVdik04GhDA4eVogiG9hpC97Kem2iucyzhFxbFRvQ5o2UckFtKZdp1hkGvnrEw==} + engines: {node: '>=16'} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -3803,6 +5494,11 @@ packages: babel-plugin-macros: optional: true + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + superagent@10.1.1: resolution: {integrity: sha512-9pIwrHrOj3uAnqg9gDlW7EA2xv+N5au/dSM0kM22HTqmUu8jBxNT+8uA7tA3UoCnmiqzpSbu8rasIUZvbyamMQ==} engines: {node: '>=14.18.0'} @@ -3811,6 +5507,10 @@ packages: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3823,6 +5523,10 @@ packages: resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==} engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + svelte-check@3.8.6: resolution: {integrity: sha512-ij0u4Lw/sOTREP13BdWZjiXD/BlHE6/e2e34XzmVmsp5IN4kVa3PWP65NM32JAgwjZlwBg/+JtiNV1MM8khu0Q==} hasBin: true @@ -3884,13 +5588,36 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + synckit@0.6.2: + resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} + engines: {node: '>=12.20'} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tarn@3.0.2: + resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} + engines: {node: '>=8.0.0'} + + tempura@0.4.1: + resolution: {integrity: sha512-NQ4Cs23jM6UUp3CcS5vjmyjTC6dtA5EsflBG2cyG0wZvP65AV26tJ920MGvTRYIImCY13RBpOhc7q4/pu+FG5A==} + engines: {node: '>=10'} + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + terminal-size@4.0.0: + resolution: {integrity: sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==} + engines: {node: '>=18'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -3898,9 +5625,19 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thread-stream@2.7.0: + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + + tildify@2.0.0: + resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} + engines: {node: '>=8'} + tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tinybench@2.8.0: + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -3911,6 +5648,10 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} + tinypool@1.0.0: + resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} + engines: {node: ^18.0.0 || >=20.0.0} + tinypool@1.0.1: resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3919,18 +5660,38 @@ packages: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} + tinyspy@3.0.0: + resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} + engines: {node: '>=14.0.0'} + tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tmp-cache@1.1.0: + resolution: {integrity: sha512-j040fkL/x+XAZQ9K3bKGEPwgYhOZNBQLa3NXEADUiuno9C+3N2JJA4bVPDREixp604G3/vTXWA3DIPpA9lu1RQ==} + engines: {node: '>=6'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@6.0.0: + resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} + engines: {node: '>=14.16'} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -3942,10 +5703,17 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -3953,24 +5721,96 @@ packages: resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} engines: {node: '>=12'} + truncatise@0.0.8: + resolution: {integrity: sha512-cXzueh9pzBCsLzhToB4X4gZCb3KYkrsAcBAX97JnazE74HOl3cpBJYEV7nabHeG/6/WXCU5Yujlde/WPBUwnsg==} + + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-morph@23.0.0: + resolution: {integrity: sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + ts-results-es@4.2.0: resolution: {integrity: sha512-GfpRk+qvHxa/6gADH8WMN/jXvs5oHYbKtMQc6X9L3VhToy5Lri3iQowyYSytaRcvPDiTT2z3vurzQZXFQFXKRA==} - tslib@2.8.0: - resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@8.2.4: + resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} + type-fest@4.20.1: + resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} + engines: {node: '>=16'} + type-fest@4.26.1: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -3991,11 +5831,27 @@ packages: engines: {node: '>=14.17'} hasBin: true + uglify-js@3.18.0: + resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} + engines: {node: '>=0.8.0'} + hasBin: true + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true + uid-safe@2.1.5: + resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} + engines: {node: '>= 0.8'} + + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -4003,6 +5859,14 @@ packages: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -4030,6 +5894,19 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unplugin-swc@1.5.1: + resolution: {integrity: sha512-/ZLrPNjChhGx3Z95pxJ4tQgfI6rWqukgYHKflrNB4zAV1izOQuDhkTn55JWeivpBxDCoK7M/TStb2aS/14PS/g==} + peerDependencies: + '@swc/core': ^1.2.108 + + unplugin@1.12.1: + resolution: {integrity: sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==} + engines: {node: '>=14.0.0'} + update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -4039,6 +5916,9 @@ packages: uri-js-replace@1.0.1: resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -4047,6 +5927,9 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -4054,6 +5937,14 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} @@ -4065,8 +5956,8 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@2.1.3: - resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} + vite-node@2.1.4: + resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -4146,15 +6037,15 @@ packages: jsdom: optional: true - vitest@2.1.3: - resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==} + vitest@2.1.4: + resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.3 - '@vitest/ui': 2.1.3 + '@vitest/browser': 2.1.4 + '@vitest/ui': 2.1.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4174,8 +6065,8 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - vue-demi@0.14.10: - resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + vue-demi@0.14.8: + resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==} engines: {node: '>=12'} hasBin: true peerDependencies: @@ -4185,8 +6076,8 @@ packages: '@vue/composition-api': optional: true - vue-tsc@2.1.6: - resolution: {integrity: sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==} + vue-tsc@2.1.10: + resolution: {integrity: sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -4206,10 +6097,20 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -4225,6 +6126,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -4239,6 +6143,10 @@ packages: engines: {node: '>=8'} hasBin: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -4250,6 +6158,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} @@ -4313,6 +6225,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -4321,114 +6237,435 @@ packages: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + youch-terminal@2.2.3: + resolution: {integrity: sha512-/PE77ZwG072tXBvF47S9RL9/G80u86icZ5QwyjblyM67L4n/T5qQeM3Xrecbu8kkDDr/9T/PTj/X+6G/OSRQug==} + + youch@3.3.4: + resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0)': + '@adonisjs/ace@13.3.0': + dependencies: + '@poppinss/cliui': 6.4.1 + '@poppinss/hooks': 7.2.4 + '@poppinss/macroable': 1.0.3 + '@poppinss/prompts': 3.1.3 + '@poppinss/utils': 6.8.3 + fastest-levenshtein: 1.0.16 + jsonschema: 1.4.1 + string-width: 7.2.0 + yargs-parser: 21.1.1 + youch: 3.3.4 + youch-terminal: 2.2.3 + + '@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2)': + dependencies: + '@adonisjs/config': 5.0.2 + '@adonisjs/fold': 10.1.2 + '@poppinss/hooks': 7.2.4 + '@poppinss/macroable': 1.0.3 + '@poppinss/utils': 6.8.3 + glob-parent: 6.0.2 + tempura: 0.4.1 + + '@adonisjs/assembler@7.8.2(typescript@5.4.5)': + dependencies: + '@adonisjs/env': 6.1.0 + '@antfu/install-pkg': 0.4.1 + '@poppinss/chokidar-ts': 4.1.4(typescript@5.4.5) + '@poppinss/cliui': 6.4.1 + '@poppinss/hooks': 7.2.4 + '@poppinss/utils': 6.8.3 + cpy: 11.1.0 + dedent: 1.5.3 + execa: 9.5.1 + fast-glob: 3.3.2 + get-port: 7.1.0 + junk: 4.0.1 + picomatch: 4.0.2 + pretty-hrtime: 1.0.3 + slash: 5.1.0 + ts-morph: 23.0.0 + typescript: 5.4.5 + transitivePeerDependencies: + - babel-plugin-macros + + '@adonisjs/assembler@7.8.2(typescript@5.6.3)': + dependencies: + '@adonisjs/env': 6.1.0 + '@antfu/install-pkg': 0.4.1 + '@poppinss/chokidar-ts': 4.1.4(typescript@5.6.3) + '@poppinss/cliui': 6.4.1 + '@poppinss/hooks': 7.2.4 + '@poppinss/utils': 6.8.3 + cpy: 11.1.0 + dedent: 1.5.3 + execa: 9.5.1 + fast-glob: 3.3.2 + get-port: 7.1.0 + junk: 4.0.1 + picomatch: 4.0.2 + pretty-hrtime: 1.0.3 + slash: 5.1.0 + ts-morph: 23.0.0 + typescript: 5.6.3 + transitivePeerDependencies: + - babel-plugin-macros + optional: true + + '@adonisjs/auth@9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0))': + dependencies: + '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) + '@adonisjs/presets': 2.6.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)) + basic-auth: 2.0.1 + optionalDependencies: + '@adonisjs/lucid': 21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0) + transitivePeerDependencies: + - '@adonisjs/assembler' + + '@adonisjs/bodyparser@10.0.2(@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3))': + dependencies: + '@adonisjs/http-server': 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) + '@paralleldrive/cuid2': 2.2.2 + '@poppinss/macroable': 1.0.3 + '@poppinss/multiparty': 2.0.1 + '@poppinss/utils': 6.8.3 + '@types/qs': 6.9.17 + bytes: 3.1.2 + file-type: 19.6.0 + inflation: 2.1.0 + media-typer: 1.1.0 + qs: 6.12.1 + raw-body: 2.5.2 + + '@adonisjs/config@5.0.2': + dependencies: + '@poppinss/utils': 6.8.3 + + '@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)': + dependencies: + '@adonisjs/ace': 13.3.0 + '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) + '@adonisjs/bodyparser': 10.0.2(@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3)) + '@adonisjs/config': 5.0.2 + '@adonisjs/encryption': 6.0.2 + '@adonisjs/env': 6.1.0 + '@adonisjs/events': 9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2) + '@adonisjs/fold': 10.1.2 + '@adonisjs/hash': 9.0.5 + '@adonisjs/health': 2.0.0 + '@adonisjs/http-server': 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) + '@adonisjs/logger': 6.0.3 + '@adonisjs/repl': 4.0.1 + '@antfu/install-pkg': 0.4.1 + '@paralleldrive/cuid2': 2.2.2 + '@poppinss/colors': 4.1.3 + '@poppinss/dumper': 0.4.2 + '@poppinss/macroable': 1.0.3 + '@poppinss/utils': 6.8.3 + '@sindresorhus/is': 7.0.1 + '@types/he': 1.2.3 + error-stack-parser-es: 0.1.5 + he: 1.2.0 + parse-imports: 2.2.1 + pretty-hrtime: 1.0.3 + string-width: 7.2.0 + youch: 3.3.4 + youch-terminal: 2.2.3 + optionalDependencies: + '@adonisjs/assembler': 7.8.2(typescript@5.4.5) + '@vinejs/vine': 2.1.0 + + '@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.6.3))(@vinejs/vine@2.1.0)': + dependencies: + '@adonisjs/ace': 13.3.0 + '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) + '@adonisjs/bodyparser': 10.0.2(@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3)) + '@adonisjs/config': 5.0.2 + '@adonisjs/encryption': 6.0.2 + '@adonisjs/env': 6.1.0 + '@adonisjs/events': 9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2) + '@adonisjs/fold': 10.1.2 + '@adonisjs/hash': 9.0.5 + '@adonisjs/health': 2.0.0 + '@adonisjs/http-server': 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) + '@adonisjs/logger': 6.0.3 + '@adonisjs/repl': 4.0.1 + '@antfu/install-pkg': 0.4.1 + '@paralleldrive/cuid2': 2.2.2 + '@poppinss/colors': 4.1.3 + '@poppinss/dumper': 0.4.2 + '@poppinss/macroable': 1.0.3 + '@poppinss/utils': 6.8.3 + '@sindresorhus/is': 7.0.1 + '@types/he': 1.2.3 + error-stack-parser-es: 0.1.5 + he: 1.2.0 + parse-imports: 2.2.1 + pretty-hrtime: 1.0.3 + string-width: 7.2.0 + youch: 3.3.4 + youch-terminal: 2.2.3 + optionalDependencies: + '@adonisjs/assembler': 7.8.2(typescript@5.6.3) + '@vinejs/vine': 2.1.0 + + '@adonisjs/cors@2.2.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))': + dependencies: + '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) + + '@adonisjs/encryption@6.0.2': + dependencies: + '@poppinss/utils': 6.8.3 + + '@adonisjs/env@6.1.0': + dependencies: + '@poppinss/utils': 6.8.3 + '@poppinss/validator-lite': 1.0.3 + dotenv: 16.4.5 + split-lines: 3.0.0 + + '@adonisjs/eslint-config@1.3.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5)': + dependencies: + '@adonisjs/eslint-plugin': 1.3.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + eslint: 8.57.1 + eslint-config-prettier: 8.10.0(eslint@8.57.1) + eslint-plugin-jsonc: 2.16.0(eslint@8.57.1) + eslint-plugin-prettier: 5.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) + eslint-plugin-unicorn: 47.0.0(eslint@8.57.1) + jsonc-eslint-parser: 2.4.0 + prettier: 3.3.3 + transitivePeerDependencies: + - '@types/eslint' + - supports-color + - typescript + + '@adonisjs/eslint-plugin@1.3.0(eslint@8.57.1)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)': + dependencies: + '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) + '@adonisjs/fold': 10.1.2 + '@poppinss/utils': 6.8.3 + '@sindresorhus/is': 6.3.1 + emittery: 1.0.3 + + '@adonisjs/fold@10.1.2': + dependencies: + '@poppinss/utils': 6.8.3 + + '@adonisjs/hash@9.0.5': + dependencies: + '@phc/format': 1.0.0 + '@poppinss/utils': 6.8.3 + + '@adonisjs/health@2.0.0': + dependencies: + '@poppinss/utils': 6.8.3 + check-disk-space: 3.4.0 + + '@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3)': + dependencies: + '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) + '@adonisjs/encryption': 6.0.2 + '@adonisjs/events': 9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2) + '@adonisjs/fold': 10.1.2 + '@adonisjs/logger': 6.0.3 + '@paralleldrive/cuid2': 2.2.2 + '@poppinss/macroable': 1.0.3 + '@poppinss/matchit': 3.1.2 + '@poppinss/middleware': 3.2.4 + '@poppinss/utils': 6.8.3 + '@sindresorhus/is': 7.0.1 + accepts: 1.3.8 + content-disposition: 0.5.4 + cookie: 1.0.1 + destroy: 1.2.0 + encodeurl: 2.0.0 + etag: 1.8.1 + fresh: 0.5.2 + mime-types: 2.1.35 + on-finished: 2.4.1 + proxy-addr: 2.0.7 + qs: 6.13.0 + tmp-cache: 1.1.0 + type-is: 1.6.18 + vary: 1.1.2 + youch: 3.3.4 + + '@adonisjs/logger@6.0.3': + dependencies: + '@poppinss/utils': 6.8.3 + abstract-logging: 2.0.1 + pino: 8.21.0 + + '@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0)': + dependencies: + '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) + '@adonisjs/presets': 2.6.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)) + '@faker-js/faker': 9.2.0 + '@poppinss/hooks': 7.2.4 + '@poppinss/macroable': 1.0.3 + '@poppinss/utils': 6.8.3 + fast-deep-equal: 3.1.3 + igniculus: 1.5.0 + kleur: 4.1.5 + knex: 3.1.0 + knex-dynamic-connection: 3.2.0 + pretty-hrtime: 1.0.3 + qs: 6.13.0 + slash: 5.1.0 + tarn: 3.0.2 + optionalDependencies: + '@adonisjs/assembler': 7.8.2(typescript@5.4.5) + luxon: 3.5.0 + transitivePeerDependencies: + - better-sqlite3 + - mysql + - mysql2 + - pg + - pg-native + - sqlite3 + - supports-color + - tedious + + '@adonisjs/presets@2.6.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))': + dependencies: + '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) + '@poppinss/utils': 6.8.3 + optionalDependencies: + '@adonisjs/assembler': 7.8.2(typescript@5.4.5) + + '@adonisjs/prettier-config@1.4.0': + dependencies: + prettier-edgejs: 0.2.32 + + '@adonisjs/repl@4.0.1': + dependencies: + '@poppinss/colors': 4.1.3 + string-width: 7.2.0 + + '@adonisjs/tsconfig@1.4.0': {} + + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) search-insights: 2.13.0 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - '@algolia/client-search': 4.24.0 - algoliasearch: 4.24.0 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) + '@algolia/client-search': 4.23.3 + algoliasearch: 4.23.3 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': dependencies: - '@algolia/client-search': 4.24.0 - algoliasearch: 4.24.0 + '@algolia/client-search': 4.23.3 + algoliasearch: 4.23.3 - '@algolia/cache-browser-local-storage@4.24.0': + '@algolia/cache-browser-local-storage@4.23.3': dependencies: - '@algolia/cache-common': 4.24.0 + '@algolia/cache-common': 4.23.3 - '@algolia/cache-common@4.24.0': {} + '@algolia/cache-common@4.23.3': {} - '@algolia/cache-in-memory@4.24.0': + '@algolia/cache-in-memory@4.23.3': dependencies: - '@algolia/cache-common': 4.24.0 + '@algolia/cache-common': 4.23.3 - '@algolia/client-account@4.24.0': + '@algolia/client-account@4.23.3': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.23.3 + '@algolia/client-search': 4.23.3 + '@algolia/transporter': 4.23.3 - '@algolia/client-analytics@4.24.0': + '@algolia/client-analytics@4.23.3': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.23.3 + '@algolia/client-search': 4.23.3 + '@algolia/requester-common': 4.23.3 + '@algolia/transporter': 4.23.3 - '@algolia/client-common@4.24.0': + '@algolia/client-common@4.23.3': dependencies: - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/requester-common': 4.23.3 + '@algolia/transporter': 4.23.3 - '@algolia/client-personalization@4.24.0': + '@algolia/client-personalization@4.23.3': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.23.3 + '@algolia/requester-common': 4.23.3 + '@algolia/transporter': 4.23.3 - '@algolia/client-search@4.24.0': + '@algolia/client-search@4.23.3': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 4.23.3 + '@algolia/requester-common': 4.23.3 + '@algolia/transporter': 4.23.3 - '@algolia/logger-common@4.24.0': {} + '@algolia/logger-common@4.23.3': {} - '@algolia/logger-console@4.24.0': + '@algolia/logger-console@4.23.3': dependencies: - '@algolia/logger-common': 4.24.0 + '@algolia/logger-common': 4.23.3 - '@algolia/recommend@4.24.0': + '@algolia/recommend@4.23.3': dependencies: - '@algolia/cache-browser-local-storage': 4.24.0 - '@algolia/cache-common': 4.24.0 - '@algolia/cache-in-memory': 4.24.0 - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/logger-console': 4.24.0 - '@algolia/requester-browser-xhr': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/cache-browser-local-storage': 4.23.3 + '@algolia/cache-common': 4.23.3 + '@algolia/cache-in-memory': 4.23.3 + '@algolia/client-common': 4.23.3 + '@algolia/client-search': 4.23.3 + '@algolia/logger-common': 4.23.3 + '@algolia/logger-console': 4.23.3 + '@algolia/requester-browser-xhr': 4.23.3 + '@algolia/requester-common': 4.23.3 + '@algolia/requester-node-http': 4.23.3 + '@algolia/transporter': 4.23.3 - '@algolia/requester-browser-xhr@4.24.0': + '@algolia/requester-browser-xhr@4.23.3': dependencies: - '@algolia/requester-common': 4.24.0 + '@algolia/requester-common': 4.23.3 - '@algolia/requester-common@4.24.0': {} + '@algolia/requester-common@4.23.3': {} - '@algolia/requester-node-http@4.24.0': + '@algolia/requester-node-http@4.23.3': dependencies: - '@algolia/requester-common': 4.24.0 + '@algolia/requester-common': 4.23.3 - '@algolia/transporter@4.24.0': + '@algolia/transporter@4.23.3': dependencies: - '@algolia/cache-common': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/requester-common': 4.24.0 + '@algolia/cache-common': 4.23.3 + '@algolia/logger-common': 4.23.3 + '@algolia/requester-common': 4.23.3 '@ampproject/remapping@2.3.0': dependencies: @@ -4437,6 +6674,11 @@ snapshots: '@andrewbranch/untar.js@1.0.3': {} + '@antfu/install-pkg@0.4.1': + dependencies: + package-manager-detector: 0.2.2 + tinyexec: 0.3.1 + '@apidevtools/json-schema-ref-parser@9.0.9': dependencies: '@jsdevtools/ono': 7.1.3 @@ -4451,7 +6693,7 @@ snapshots: cli-table3: 0.6.5 commander: 10.0.1 marked: 9.1.6 - marked-terminal: 7.1.0(marked@9.1.6) + marked-terminal: 7.2.1(marked@9.1.6) semver: 7.6.3 '@arethetypeswrong/core@0.16.2': @@ -4464,37 +6706,44 @@ snapshots: typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 - '@babel/code-frame@7.26.0': + '@arr/every@1.0.1': {} + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 - picocolors: 1.1.1 + picocolors: 1.0.1 - '@babel/compat-data@7.26.0': {} + '@babel/compat-data@7.26.2': {} '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.0 - '@babel/generator': 7.26.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.0 + '@babel/parser': 7.26.2 '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.6(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.0': + '@babel/generator@7.26.2': dependencies: - '@babel/parser': 7.26.0 + '@babel/parser': 7.26.2 '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 @@ -4502,7 +6751,7 @@ snapshots: '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.26.0 + '@babel/compat-data': 7.26.2 '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.2 lru-cache: 5.1.1 @@ -4524,10 +6773,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.24.7': {} + + '@babel/helper-string-parser@7.24.8': {} '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.25.9': {} @@ -4537,42 +6790,59 @@ snapshots: '@babel/template': 7.25.9 '@babel/types': 7.26.0 - '@babel/parser@7.26.0': + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.25.3': + dependencies: + '@babel/types': 7.25.2 + + '@babel/parser@7.26.2': dependencies: '@babel/types': 7.26.0 - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.24.7 - '@babel/runtime@7.26.0': + '@babel/runtime@7.25.0': dependencies: regenerator-runtime: 0.14.1 '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.26.0 - '@babel/parser': 7.26.0 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 '@babel/types': 7.26.0 '@babel/traverse@7.25.9': dependencies: - '@babel/code-frame': 7.26.0 - '@babel/generator': 7.26.0 - '@babel/parser': 7.26.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 '@babel/template': 7.25.9 '@babel/types': 7.26.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.6(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color + '@babel/types@7.25.2': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + '@babel/types@7.26.0': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -4706,7 +6976,7 @@ snapshots: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - micromatch: 4.0.8 + micromatch: 4.0.7 '@changesets/errors@0.2.0': dependencies: @@ -4742,7 +7012,7 @@ snapshots: '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 - micromatch: 4.0.8 + micromatch: 4.0.7 spawndamnit: 2.0.0 '@changesets/logger@0.1.1': @@ -4787,15 +7057,36 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@chevrotain/cst-dts-gen@11.0.3': + dependencies: + '@chevrotain/gast': 11.0.3 + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/gast@11.0.3': + dependencies: + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/regexp-to-ast@11.0.3': {} + + '@chevrotain/types@11.0.3': {} + + '@chevrotain/utils@11.0.3': {} + '@colors/colors@1.5.0': optional: true - '@docsearch/css@3.6.2': {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@docsearch/css@3.6.0': {} - '@docsearch/js@3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': + '@docsearch/js@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': dependencies: - '@docsearch/react': 3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) - preact: 10.24.3 + '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) + preact: 10.22.0 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -4803,12 +7094,12 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': + '@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - '@docsearch/css': 3.6.2 - algoliasearch: 4.24.0 + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) + '@docsearch/css': 3.6.0 + algoliasearch: 4.23.3 optionalDependencies: '@types/react': 18.3.12 react: 18.3.1 @@ -4819,7 +7110,7 @@ snapshots: '@emnapi/runtime@1.3.1': dependencies: - tslib: 2.8.0 + tslib: 2.8.1 optional: true '@esbuild/aix-ppc64@0.20.2': @@ -5098,11 +7389,50 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.23.1': - optional: true + '@esbuild/win32-x64@0.23.1': + optional: true + + '@esbuild/win32-x64@0.24.0': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.6(supports-color@9.4.0) + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@faker-js/faker@9.2.0': {} + + '@fastify/deepmerge@2.0.0': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6(supports-color@9.4.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} - '@esbuild/win32-x64@0.24.0': - optional: true + '@humanwhocodes/object-schema@2.0.3': {} '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -5179,17 +7509,16 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@inquirer/confirm@5.0.0(@types/node@22.8.0)': + '@inquirer/confirm@5.0.1(@types/node@22.9.0)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.8.0) - '@inquirer/type': 3.0.0(@types/node@22.8.0) - transitivePeerDependencies: - - '@types/node' + '@inquirer/core': 10.0.1(@types/node@22.9.0) + '@inquirer/type': 3.0.0(@types/node@22.9.0) + '@types/node': 22.9.0 - '@inquirer/core@10.0.0(@types/node@22.8.0)': + '@inquirer/core@10.0.1(@types/node@22.9.0)': dependencies: '@inquirer/figures': 1.0.7 - '@inquirer/type': 3.0.0(@types/node@22.8.0) + '@inquirer/type': 3.0.0(@types/node@22.9.0) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -5202,9 +7531,18 @@ snapshots: '@inquirer/figures@1.0.7': {} - '@inquirer/type@3.0.0(@types/node@22.8.0)': + '@inquirer/type@3.0.0(@types/node@22.9.0)': + dependencies: + '@types/node': 22.9.0 + + '@isaacs/cliui@8.0.2': dependencies: - '@types/node': 22.8.0 + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -5223,25 +7561,32 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jsdevtools/ono@7.1.3': {} + '@lukeed/ms@2.0.2': {} + '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.0 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.0 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - '@mswjs/interceptors@0.36.6': + '@mswjs/interceptors@0.36.10': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -5276,6 +7621,8 @@ snapshots: '@next/swc-win32-x64-msvc@15.0.1': optional: true + '@noble/hashes@1.5.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5297,11 +7644,105 @@ snapshots: '@open-draft/until@2.1.0': {} - '@playwright/test@1.48.1': + '@paralleldrive/cuid2@2.2.2': + dependencies: + '@noble/hashes': 1.5.0 + + '@phc/format@1.0.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@playwright/test@1.48.2': + dependencies: + playwright: 1.48.2 + + '@polka/url@1.0.0-next.25': {} + + '@poppinss/chokidar-ts@4.1.4(typescript@5.4.5)': + dependencies: + chokidar: 3.6.0 + emittery: 1.0.3 + memoize: 10.0.0 + picomatch: 4.0.2 + slash: 5.1.0 + typescript: 5.4.5 + + '@poppinss/chokidar-ts@4.1.4(typescript@5.6.3)': + dependencies: + chokidar: 3.6.0 + emittery: 1.0.3 + memoize: 10.0.0 + picomatch: 4.0.2 + slash: 5.1.0 + typescript: 5.6.3 + optional: true + + '@poppinss/cliui@6.4.1': + dependencies: + '@poppinss/colors': 4.1.3 + cli-boxes: 3.0.0 + cli-table3: 0.6.5 + cli-truncate: 4.0.0 + log-update: 6.1.0 + pretty-hrtime: 1.0.3 + string-width: 7.2.0 + supports-color: 9.4.0 + terminal-size: 4.0.0 + wordwrap: 1.0.0 + + '@poppinss/colors@4.1.3': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.4.2': + dependencies: + '@poppinss/colors': 4.1.3 + '@sindresorhus/is': 7.0.1 + supports-color: 9.4.0 + + '@poppinss/hooks@7.2.4': {} + + '@poppinss/macroable@1.0.3': {} + + '@poppinss/matchit@3.1.2': + dependencies: + '@arr/every': 1.0.1 + + '@poppinss/middleware@3.2.4': {} + + '@poppinss/multiparty@2.0.1': + dependencies: + http-errors: 2.0.0 + safe-buffer: 5.2.1 + uid-safe: 2.1.5 + + '@poppinss/prompts@3.1.3': + dependencies: + '@poppinss/colors': 4.1.3 + '@poppinss/utils': 6.8.3 + enquirer: 2.4.1 + + '@poppinss/utils@6.8.3': dependencies: - playwright: 1.48.1 + '@lukeed/ms': 2.0.2 + '@types/bytes': 3.1.4 + '@types/pluralize': 0.0.33 + bytes: 3.1.2 + case-anything: 3.1.0 + flattie: 1.1.1 + pluralize: 8.0.0 + safe-stable-stringify: 2.5.0 + secure-json-parse: 2.7.0 + slash: 5.1.0 + slugify: 1.6.6 + truncatise: 0.0.8 - '@polka/url@1.0.0-next.28': {} + '@poppinss/validator-lite@1.0.3': + dependencies: + validator: 13.12.0 '@redocly/ajv@8.11.2': dependencies: @@ -5310,14 +7751,14 @@ snapshots: require-from-string: 2.0.2 uri-js-replace: 1.0.1 - '@redocly/config@0.15.0': {} + '@redocly/config@0.16.0': {} - '@redocly/openapi-core@1.25.9(supports-color@9.4.0)': + '@redocly/openapi-core@1.25.11(supports-color@9.4.0)': dependencies: '@redocly/ajv': 8.11.2 - '@redocly/config': 0.15.0 + '@redocly/config': 0.16.0 colorette: 1.4.0 - https-proxy-agent: 7.0.5(supports-color@9.4.0) + https-proxy-agent: 7.0.4(supports-color@9.4.0) js-levenshtein: 1.1.6 js-yaml: 4.1.0 lodash.isequal: 4.5.0 @@ -5329,79 +7770,89 @@ snapshots: - encoding - supports-color - '@rollup/rollup-android-arm-eabi@4.24.0': + '@rollup/pluginutils@5.1.0(rollup@4.20.0)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.20.0 + + '@rollup/rollup-android-arm-eabi@4.20.0': optional: true - '@rollup/rollup-android-arm64@4.24.0': + '@rollup/rollup-android-arm64@4.20.0': optional: true - '@rollup/rollup-darwin-arm64@4.24.0': + '@rollup/rollup-darwin-arm64@4.20.0': optional: true - '@rollup/rollup-darwin-x64@4.24.0': + '@rollup/rollup-darwin-x64@4.20.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.24.0': + '@rollup/rollup-linux-arm-musleabihf@4.20.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.24.0': + '@rollup/rollup-linux-arm64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.24.0': + '@rollup/rollup-linux-arm64-musl@4.20.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.24.0': + '@rollup/rollup-linux-riscv64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.24.0': + '@rollup/rollup-linux-s390x-gnu@4.20.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.24.0': + '@rollup/rollup-linux-x64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-x64-musl@4.24.0': + '@rollup/rollup-linux-x64-musl@4.20.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.24.0': + '@rollup/rollup-win32-arm64-msvc@4.20.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.24.0': + '@rollup/rollup-win32-ia32-msvc@4.20.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.24.0': + '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true - '@shikijs/core@1.22.1': + '@sec-ant/readable-stream@0.4.1': {} + + '@shikijs/core@1.22.2': dependencies: - '@shikijs/engine-javascript': 1.22.1 - '@shikijs/engine-oniguruma': 1.22.1 - '@shikijs/types': 1.22.1 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 hast-util-to-html: 9.0.3 - '@shikijs/engine-javascript@1.22.1': + '@shikijs/engine-javascript@1.22.2': dependencies: - '@shikijs/types': 1.22.1 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 oniguruma-to-js: 0.4.3 - '@shikijs/engine-oniguruma@1.22.1': + '@shikijs/engine-oniguruma@1.22.2': dependencies: - '@shikijs/types': 1.22.1 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 - '@shikijs/transformers@1.22.1': + '@shikijs/transformers@1.22.2': dependencies: - shiki: 1.22.1 + shiki: 1.22.2 - '@shikijs/types@1.22.1': + '@shikijs/types@1.22.2': dependencies: '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -5410,10 +7861,18 @@ snapshots: '@sindresorhus/is@4.6.0': {} + '@sindresorhus/is@6.3.1': {} + + '@sindresorhus/is@7.0.1': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@sindresorhus/merge-streams@4.0.0': {} + '@size-limit/esbuild@11.1.6(size-limit@11.1.6)': dependencies: esbuild: 0.24.0 - nanoid: 5.0.7 + nanoid: 5.0.8 size-limit: 11.1.6 '@size-limit/file@11.1.6(size-limit@11.1.6)': @@ -5426,120 +7885,171 @@ snapshots: '@size-limit/file': 11.1.6(size-limit@11.1.6) size-limit: 11.1.6 - '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))': + '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))': dependencies: - '@sveltejs/kit': 2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) + '@sveltejs/kit': 2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) import-meta-resolve: 4.1.0 - '@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))': + '@sveltejs/kit@2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 esm-env: 1.0.0 import-meta-resolve: 4.1.0 kleur: 4.1.5 - magic-string: 0.30.12 + magic-string: 0.30.11 mrmime: 2.0.0 sade: 1.8.1 - set-cookie-parser: 2.7.1 + set-cookie-parser: 2.7.0 sirv: 3.0.0 svelte: 4.2.19 tiny-glob: 0.2.9 - vite: 5.4.10(@types/node@22.8.0) + vite: 5.4.10(@types/node@22.9.0) - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))': + '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) - debug: 4.3.7(supports-color@9.4.0) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) + debug: 4.3.6(supports-color@9.4.0) svelte: 4.2.19 - vite: 5.4.10(@types/node@22.8.0) + vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))': + '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) - debug: 4.3.7(supports-color@9.4.0) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) + debug: 4.3.6(supports-color@9.4.0) deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.12 + magic-string: 0.30.11 svelte: 4.2.19 svelte-hmr: 0.16.0(svelte@4.2.19) - vite: 5.4.10(@types/node@22.8.0) - vitefu: 0.2.5(vite@5.4.10(@types/node@22.8.0)) + vite: 5.4.10(@types/node@22.9.0) + vitefu: 0.2.5(vite@5.4.10(@types/node@22.9.0)) transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.7.39': + '@swc/core-darwin-arm64@1.7.4': + optional: true + + '@swc/core-darwin-arm64@1.9.1': + optional: true + + '@swc/core-darwin-x64@1.7.4': + optional: true + + '@swc/core-darwin-x64@1.9.1': optional: true - '@swc/core-darwin-x64@1.7.39': + '@swc/core-linux-arm-gnueabihf@1.7.4': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.39': + '@swc/core-linux-arm-gnueabihf@1.9.1': optional: true - '@swc/core-linux-arm64-gnu@1.7.39': + '@swc/core-linux-arm64-gnu@1.7.4': optional: true - '@swc/core-linux-arm64-musl@1.7.39': + '@swc/core-linux-arm64-gnu@1.9.1': optional: true - '@swc/core-linux-x64-gnu@1.7.39': + '@swc/core-linux-arm64-musl@1.7.4': optional: true - '@swc/core-linux-x64-musl@1.7.39': + '@swc/core-linux-arm64-musl@1.9.1': optional: true - '@swc/core-win32-arm64-msvc@1.7.39': + '@swc/core-linux-x64-gnu@1.7.4': optional: true - '@swc/core-win32-ia32-msvc@1.7.39': + '@swc/core-linux-x64-gnu@1.9.1': optional: true - '@swc/core-win32-x64-msvc@1.7.39': + '@swc/core-linux-x64-musl@1.7.4': optional: true - '@swc/core@1.7.39(@swc/helpers@0.5.13)': + '@swc/core-linux-x64-musl@1.9.1': + optional: true + + '@swc/core-win32-arm64-msvc@1.7.4': + optional: true + + '@swc/core-win32-arm64-msvc@1.9.1': + optional: true + + '@swc/core-win32-ia32-msvc@1.7.4': + optional: true + + '@swc/core-win32-ia32-msvc@1.9.1': + optional: true + + '@swc/core-win32-x64-msvc@1.7.4': + optional: true + + '@swc/core-win32-x64-msvc@1.9.1': + optional: true + + '@swc/core@1.7.4(@swc/helpers@0.5.13)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.12 + optionalDependencies: + '@swc/core-darwin-arm64': 1.7.4 + '@swc/core-darwin-x64': 1.7.4 + '@swc/core-linux-arm-gnueabihf': 1.7.4 + '@swc/core-linux-arm64-gnu': 1.7.4 + '@swc/core-linux-arm64-musl': 1.7.4 + '@swc/core-linux-x64-gnu': 1.7.4 + '@swc/core-linux-x64-musl': 1.7.4 + '@swc/core-win32-arm64-msvc': 1.7.4 + '@swc/core-win32-ia32-msvc': 1.7.4 + '@swc/core-win32-x64-msvc': 1.7.4 + '@swc/helpers': 0.5.13 + + '@swc/core@1.9.1(@swc/helpers@0.5.13)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.13 + '@swc/types': 0.1.14 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.39 - '@swc/core-darwin-x64': 1.7.39 - '@swc/core-linux-arm-gnueabihf': 1.7.39 - '@swc/core-linux-arm64-gnu': 1.7.39 - '@swc/core-linux-arm64-musl': 1.7.39 - '@swc/core-linux-x64-gnu': 1.7.39 - '@swc/core-linux-x64-musl': 1.7.39 - '@swc/core-win32-arm64-msvc': 1.7.39 - '@swc/core-win32-ia32-msvc': 1.7.39 - '@swc/core-win32-x64-msvc': 1.7.39 + '@swc/core-darwin-arm64': 1.9.1 + '@swc/core-darwin-x64': 1.9.1 + '@swc/core-linux-arm-gnueabihf': 1.9.1 + '@swc/core-linux-arm64-gnu': 1.9.1 + '@swc/core-linux-arm64-musl': 1.9.1 + '@swc/core-linux-x64-gnu': 1.9.1 + '@swc/core-linux-x64-musl': 1.9.1 + '@swc/core-win32-arm64-msvc': 1.9.1 + '@swc/core-win32-ia32-msvc': 1.9.1 + '@swc/core-win32-x64-msvc': 1.9.1 '@swc/helpers': 0.5.13 '@swc/counter@0.1.3': {} '@swc/helpers@0.5.13': dependencies: - tslib: 2.8.0 + tslib: 2.8.1 + + '@swc/types@0.1.12': + dependencies: + '@swc/counter': 0.1.3 - '@swc/types@0.1.13': + '@swc/types@0.1.14': dependencies: '@swc/counter': 0.1.3 - '@tanstack/query-core@5.59.16': {} + '@tanstack/query-core@5.59.20': {} - '@tanstack/react-query@5.59.16(react@18.3.1)': + '@tanstack/react-query@5.59.20(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.59.16 + '@tanstack/query-core': 5.59.20 react: 18.3.1 '@testing-library/dom@10.1.0': dependencies: - '@babel/code-frame': 7.26.0 - '@babel/runtime': 7.26.0 + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.25.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -5549,7 +8059,7 @@ snapshots: '@testing-library/react@16.0.1(@testing-library/dom@10.1.0)(@types/react-dom@18.3.1)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.0 '@testing-library/dom': 10.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -5557,44 +8067,65 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.1 + '@tokenizer/token@0.3.0': {} + '@tootallnate/once@2.0.0': optional: true + '@ts-morph/common@0.24.0': + dependencies: + fast-glob: 3.3.2 + minimatch: 9.0.5 + mkdirp: 3.0.1 + path-browserify: 1.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + '@tsconfig/node20@20.1.4': {} '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.0 - '@babel/types': 7.26.0 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.25.2 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.0 - '@babel/types': 7.26.0 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.25.2 + + '@types/bytes@3.1.4': {} '@types/cookie@0.6.0': {} '@types/degit@2.8.6': {} - '@types/estree@1.0.6': {} + '@types/estree@1.0.5': {} '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 + '@types/he@1.2.3': {} + '@types/js-yaml@4.0.9': {} '@types/json-schema@7.0.15': {} @@ -5603,7 +8134,7 @@ snapshots: '@types/lodash@4.17.7': {} - '@types/markdown-it@14.1.2': + '@types/markdown-it@14.1.1': dependencies: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 @@ -5618,19 +8149,27 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.8.0': + '@types/node@20.14.14': + dependencies: + undici-types: 5.26.5 + + '@types/node@22.9.0': dependencies: undici-types: 6.19.8 '@types/normalize-package-data@2.4.4': {} - '@types/prop-types@15.7.13': {} + '@types/pluralize@0.0.33': {} + + '@types/prop-types@15.7.12': {} '@types/pug@2.0.10': {} + '@types/qs@6.9.17': {} + '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.12 '@types/react-dom@18.3.1': dependencies: @@ -5638,84 +8177,183 @@ snapshots: '@types/react@18.3.1': dependencies: - '@types/prop-types': 15.7.13 + '@types/prop-types': 15.7.12 csstype: 3.1.3 '@types/react@18.3.12': dependencies: - '@types/prop-types': 15.7.13 + '@types/prop-types': 15.7.12 csstype: 3.1.3 '@types/react@18.3.5': dependencies: - '@types/prop-types': 15.7.13 + '@types/prop-types': 15.7.12 csstype: 3.1.3 + '@types/semver@7.5.8': {} + '@types/statuses@2.0.5': {} '@types/tough-cookie@4.0.5': {} '@types/unist@3.0.3': {} + '@types/validator@13.12.2': {} + '@types/web-bluetooth@0.0.20': {} + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6(supports-color@9.4.0) + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6(supports-color@9.4.0) + eslint: 8.57.1 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + debug: 4.3.6(supports-color@9.4.0) + eslint: 8.57.1 + ts-api-utils: 1.4.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6(supports-color@9.4.0) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + eslint: 8.57.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.8.0))': + '@vinejs/compiler@2.5.0': {} + + '@vinejs/vine@2.1.0': + dependencies: + '@poppinss/macroable': 1.0.3 + '@types/validator': 13.12.2 + '@vinejs/compiler': 2.5.0 + camelcase: 8.0.0 + dayjs: 1.11.13 + dlv: 1.1.3 + normalize-url: 8.0.1 + validator: 13.12.0 + + '@vitejs/plugin-react-swc@3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.9.0))': dependencies: - '@swc/core': 1.7.39(@swc/helpers@0.5.13) - vite: 5.4.10(@types/node@22.8.0) + '@swc/core': 1.9.1(@swc/helpers@0.5.13) + vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.8.0))': + '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.9.0))': dependencies: '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.10(@types/node@22.8.0) + vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@22.8.0))(vue@3.5.12(typescript@5.6.3))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3))': dependencies: - vite: 5.4.10(@types/node@22.8.0) + vite: 5.4.10(@types/node@22.9.0) vue: 3.5.12(typescript@5.6.3) '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.1.2 + chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/expect@2.1.3': + '@vitest/expect@2.1.4': dependencies: - '@vitest/spy': 2.1.3 - '@vitest/utils': 2.1.3 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.8.0))': + '@vitest/mocker@2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.9.0))': dependencies: - '@vitest/spy': 2.1.3 + '@vitest/spy': 2.1.4 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - msw: 2.5.1(@types/node@22.8.0)(typescript@5.6.3) - vite: 5.4.10(@types/node@22.8.0) + msw: 2.6.0(@types/node@22.9.0)(typescript@5.6.3) + vite: 5.4.10(@types/node@22.9.0) '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 - '@vitest/pretty-format@2.1.1': - dependencies: - tinyrainbow: 1.2.0 - - '@vitest/pretty-format@2.1.3': + '@vitest/pretty-format@2.1.4': dependencies: tinyrainbow: 1.2.0 @@ -5724,28 +8362,28 @@ snapshots: '@vitest/utils': 2.0.5 pathe: 1.1.2 - '@vitest/runner@2.1.3': + '@vitest/runner@2.1.4': dependencies: - '@vitest/utils': 2.1.3 + '@vitest/utils': 2.1.4 pathe: 1.1.2 '@vitest/snapshot@2.0.5': dependencies: '@vitest/pretty-format': 2.0.5 - magic-string: 0.30.12 + magic-string: 0.30.11 pathe: 1.1.2 - '@vitest/snapshot@2.1.3': + '@vitest/snapshot@2.1.4': dependencies: - '@vitest/pretty-format': 2.1.3 + '@vitest/pretty-format': 2.1.4 magic-string: 0.30.12 pathe: 1.1.2 '@vitest/spy@2.0.5': dependencies: - tinyspy: 3.0.2 + tinyspy: 3.0.0 - '@vitest/spy@2.1.3': + '@vitest/spy@2.1.4': dependencies: tinyspy: 3.0.2 @@ -5753,34 +8391,34 @@ snapshots: dependencies: '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 - loupe: 3.1.2 + loupe: 3.1.1 tinyrainbow: 1.2.0 - '@vitest/utils@2.1.3': + '@vitest/utils@2.1.4': dependencies: - '@vitest/pretty-format': 2.1.3 + '@vitest/pretty-format': 2.1.4 loupe: 3.1.2 tinyrainbow: 1.2.0 - '@volar/language-core@2.4.7': + '@volar/language-core@2.4.8': dependencies: - '@volar/source-map': 2.4.7 + '@volar/source-map': 2.4.8 - '@volar/source-map@2.4.7': {} + '@volar/source-map@2.4.8': {} - '@volar/typescript@2.4.7': + '@volar/typescript@2.4.8': dependencies: - '@volar/language-core': 2.4.7 + '@volar/language-core': 2.4.8 path-browserify: 1.0.1 vscode-uri: 3.0.8 '@vue/compiler-core@3.5.12': dependencies: - '@babel/parser': 7.26.0 + '@babel/parser': 7.25.3 '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.1 + source-map-js: 1.2.0 '@vue/compiler-dom@3.5.12': dependencies: @@ -5789,15 +8427,15 @@ snapshots: '@vue/compiler-sfc@3.5.12': dependencies: - '@babel/parser': 7.26.0 + '@babel/parser': 7.25.3 '@vue/compiler-core': 3.5.12 '@vue/compiler-dom': 3.5.12 '@vue/compiler-ssr': 3.5.12 '@vue/shared': 3.5.12 estree-walker: 2.0.2 - magic-string: 0.30.12 + magic-string: 0.30.11 postcss: 8.4.47 - source-map-js: 1.2.1 + source-map-js: 1.2.0 '@vue/compiler-ssr@3.5.12': dependencies: @@ -5809,13 +8447,13 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/devtools-api@7.5.4': + '@vue/devtools-api@7.6.3': dependencies: - '@vue/devtools-kit': 7.5.4 + '@vue/devtools-kit': 7.6.3 - '@vue/devtools-kit@7.5.4': + '@vue/devtools-kit@7.6.3': dependencies: - '@vue/devtools-shared': 7.5.4 + '@vue/devtools-shared': 7.6.3 birpc: 0.2.19 hookable: 5.5.3 mitt: 3.0.1 @@ -5823,17 +8461,17 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.1 - '@vue/devtools-shared@7.5.4': + '@vue/devtools-shared@7.6.3': dependencies: rfdc: 1.4.1 - '@vue/language-core@2.1.6(typescript@5.6.3)': + '@vue/language-core@2.1.10(typescript@5.6.3)': dependencies: - '@volar/language-core': 2.4.7 + '@volar/language-core': 2.4.8 '@vue/compiler-dom': 3.5.12 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.12 - computeds: 0.0.1 + alien-signals: 0.2.0 minimatch: 9.0.5 muggle-string: 0.4.1 path-browserify: 1.0.1 @@ -5862,37 +8500,39 @@ snapshots: '@vue/shared': 3.5.12 vue: 3.5.12(typescript@5.6.3) + '@vue/shared@3.4.35': {} + '@vue/shared@3.5.12': {} '@vue/tsconfig@0.5.1': {} - '@vueuse/core@10.11.1(vue@3.5.12(typescript@5.6.3))': + '@vueuse/core@10.11.0(vue@3.5.12(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.12(typescript@5.6.3)) - vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + '@vueuse/metadata': 10.11.0 + '@vueuse/shared': 10.11.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.8(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3))': + '@vueuse/integrations@10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.12(typescript@5.6.3))': dependencies: - '@vueuse/core': 10.11.1(vue@3.5.12(typescript@5.6.3)) - '@vueuse/shared': 10.11.1(vue@3.5.12(typescript@5.6.3)) - vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + '@vueuse/core': 10.11.0(vue@3.5.12(typescript@5.6.3)) + '@vueuse/shared': 10.11.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.8(vue@3.5.12(typescript@5.6.3)) optionalDependencies: axios: 1.7.7 - focus-trap: 7.6.0 + focus-trap: 7.5.4 transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/metadata@10.11.1': {} + '@vueuse/metadata@10.11.0': {} - '@vueuse/shared@10.11.1(vue@3.5.12(typescript@5.6.3))': + '@vueuse/shared@10.11.0(vue@3.5.12(typescript@5.6.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.8(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5900,18 +8540,32 @@ snapshots: abab@2.0.6: optional: true + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abstract-logging@2.0.1: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-globals@7.0.1: dependencies: - acorn: 8.13.0 - acorn-walk: 8.3.4 + acorn: 8.12.1 + acorn-walk: 8.3.3 optional: true - acorn-walk@8.3.4: + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.13.0 - optional: true + acorn: 8.12.1 + + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.1 - acorn@8.13.0: {} + acorn@8.12.1: {} agent-base@6.0.2: dependencies: @@ -5922,7 +8576,7 @@ snapshots: agent-base@7.1.1(supports-color@9.4.0): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.6(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -5931,23 +8585,32 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - algoliasearch@4.24.0: - dependencies: - '@algolia/cache-browser-local-storage': 4.24.0 - '@algolia/cache-common': 4.24.0 - '@algolia/cache-in-memory': 4.24.0 - '@algolia/client-account': 4.24.0 - '@algolia/client-analytics': 4.24.0 - '@algolia/client-common': 4.24.0 - '@algolia/client-personalization': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/logger-console': 4.24.0 - '@algolia/recommend': 4.24.0 - '@algolia/requester-browser-xhr': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http': 4.24.0 - '@algolia/transporter': 4.24.0 + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + algoliasearch@4.23.3: + dependencies: + '@algolia/cache-browser-local-storage': 4.23.3 + '@algolia/cache-common': 4.23.3 + '@algolia/cache-in-memory': 4.23.3 + '@algolia/client-account': 4.23.3 + '@algolia/client-analytics': 4.23.3 + '@algolia/client-common': 4.23.3 + '@algolia/client-personalization': 4.23.3 + '@algolia/client-search': 4.23.3 + '@algolia/logger-common': 4.23.3 + '@algolia/logger-console': 4.23.3 + '@algolia/recommend': 4.23.3 + '@algolia/requester-browser-xhr': 4.23.3 + '@algolia/requester-common': 4.23.3 + '@algolia/requester-node-http': 4.23.3 + '@algolia/transporter': 4.23.3 + + alien-signals@0.2.0: {} ansi-colors@4.1.3: {} @@ -5961,8 +8624,14 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -5978,6 +8647,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + arg@4.1.3: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -5988,22 +8659,28 @@ snapshots: dependencies: dequal: 2.0.3 - aria-query@5.3.2: {} - array-union@2.1.0: {} arrify@1.0.1: {} + as-table@1.0.55: + dependencies: + printable-characters: 1.0.42 + asap@2.0.6: {} assertion-error@2.0.1: {} asynckit@0.4.0: {} + atob@2.1.2: {} + + atomic-sleep@1.0.0: {} + axios@1.7.7: dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 + follow-redirects: 1.15.6 + form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -6012,6 +8689,12 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -6029,25 +8712,43 @@ snapshots: dependencies: balanced-match: 1.0.2 + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + braces@3.0.3: dependencies: fill-range: 7.1.1 browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001669 - electron-to-chromium: 1.5.45 + caniuse-lite: 1.0.30001677 + electron-to-chromium: 1.5.52 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) buffer-crc32@1.0.0: {} + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builtin-modules@3.3.0: {} + + bundle-require@5.0.0(esbuild@0.23.1): + dependencies: + esbuild: 0.23.1 + load-tsconfig: 0.2.5 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 bytes-iec@3.1.1: {} + bytes@3.1.2: {} + cac@6.7.14: {} call-bind@1.0.7: @@ -6060,6 +8761,8 @@ snapshots: call-me-maybe@1.0.2: {} + callsites@3.1.0: {} + camelcase-keys@7.0.2: dependencies: camelcase: 6.3.0 @@ -6069,18 +8772,38 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001669: {} + camelcase@8.0.0: {} + + caniuse-lite@1.0.30001646: {} + + caniuse-lite@1.0.30001677: {} + + case-anything@3.1.0: {} ccount@2.0.1: {} + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + chai@5.1.2: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.2 + loupe: 3.1.1 pathval: 2.0.0 + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -6098,8 +8821,19 @@ snapshots: chardet@0.7.0: {} + check-disk-space@3.4.0: {} + check-error@2.1.1: {} + chevrotain@11.0.3: + dependencies: + '@chevrotain/cst-dts-gen': 11.0.3 + '@chevrotain/gast': 11.0.3 + '@chevrotain/regexp-to-ast': 11.0.3 + '@chevrotain/types': 11.0.3 + '@chevrotain/utils': 11.0.3 + lodash-es: 4.17.21 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -6120,10 +8854,16 @@ snapshots: cjs-module-lexer@1.4.1: {} + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + clean-stack@4.2.0: dependencies: escape-string-regexp: 5.0.0 + cli-boxes@3.0.0: {} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -6164,18 +8904,26 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + code-block-writer@13.0.3: {} + code-red@1.0.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - '@types/estree': 1.0.6 - acorn: 8.13.0 + '@types/estree': 1.0.5 + acorn: 8.12.1 estree-walker: 3.0.3 periscopic: 3.1.0 + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} color-string@1.9.1: @@ -6192,6 +8940,8 @@ snapshots: colorette@1.4.0: {} + colorette@2.0.19: {} + colorette@2.0.20: {} combined-stream@1.0.8: @@ -6206,24 +8956,50 @@ snapshots: commander@12.1.0: {} - component-emitter@1.3.1: {} + commander@4.1.1: {} - computeds@0.0.1: {} + component-emitter@1.3.1: {} concat-map@0.0.1: {} + consola@3.2.3: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + convert-source-map@2.0.0: {} cookie@0.5.0: {} cookie@0.6.0: {} + cookie@0.7.2: {} + + cookie@1.0.1: {} + cookiejar@2.1.4: {} copy-anything@3.0.5: dependencies: is-what: 4.1.16 + copy-file@11.0.0: + dependencies: + graceful-fs: 4.2.11 + p-event: 6.0.1 + + cpy@11.1.0: + dependencies: + copy-file: 11.0.0 + globby: 14.0.2 + junk: 4.0.1 + micromatch: 4.0.7 + p-filter: 4.1.0 + p-map: 7.0.2 + + create-require@1.1.1: {} + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -6239,7 +9015,13 @@ snapshots: css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.1 + source-map-js: 1.2.0 + + css@3.0.0: + dependencies: + inherits: 2.0.4 + source-map: 0.6.1 + source-map-resolve: 0.6.0 cssom@0.3.8: optional: true @@ -6254,6 +9036,8 @@ snapshots: csstype@3.1.3: {} + data-uri-to-buffer@2.0.2: {} + data-urls@3.0.2: dependencies: abab: 2.0.6 @@ -6263,8 +9047,22 @@ snapshots: dataloader@1.4.0: {} + dateformat@4.6.3: {} + + dayjs@1.11.13: {} + de-indent@1.0.2: {} + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.3.6(supports-color@9.4.0): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 9.4.0 + debug@4.3.7(supports-color@9.4.0): dependencies: ms: 2.1.3 @@ -6283,8 +9081,14 @@ snapshots: decimal.js@10.4.3: optional: true + decode-uri-component@0.2.2: {} + + dedent@1.5.3: {} + deep-eql@5.0.2: {} + deep-is@0.1.4: {} + deepmerge@4.3.1: {} define-data-property@1.1.4: @@ -6313,8 +9117,12 @@ snapshots: delayed-stream@1.0.0: {} + depd@2.0.0: {} + dequal@2.0.3: {} + destroy@1.2.0: {} + detect-indent@6.1.0: {} detect-libc@2.0.3: @@ -6331,10 +9139,18 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 + diff@4.0.2: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + dlv@1.1.3: {} + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dom-accessibility-api@0.5.16: {} domexception@4.0.0: @@ -6342,16 +9158,36 @@ snapshots: webidl-conversions: 7.0.0 optional: true + dotenv@16.4.5: {} + dotenv@8.6.0: {} - electron-to-chromium@1.5.45: {} + eastasianwidth@0.2.0: {} + + edgejs-parser@0.2.11: + dependencies: + chevrotain: 11.0.3 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.52: {} + + emittery@1.0.3: {} emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + emojilib@2.4.0: {} + encodeurl@2.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -6365,12 +9201,16 @@ snapshots: dependencies: is-arrayish: 0.2.1 + error-stack-parser-es@0.1.5: {} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 es-errors@1.3.0: {} + es-module-lexer@1.5.4: {} + es6-promise@3.3.1: {} esbuild@0.20.2: @@ -6479,8 +9319,14 @@ snapshots: '@esbuild/win32-ia32': 0.24.0 '@esbuild/win32-x64': 0.24.0 + escalade@3.1.2: {} + escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -6492,24 +9338,155 @@ snapshots: source-map: 0.6.1 optional: true + eslint-compat-utils@0.5.1(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + semver: 7.6.3 + + eslint-config-prettier@8.10.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-jsonc@2.16.0(eslint@8.57.1): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + eslint: 8.57.1 + eslint-compat-utils: 0.5.1(eslint@8.57.1) + espree: 9.6.1 + graphemer: 1.4.0 + jsonc-eslint-parser: 2.4.0 + natural-compare: 1.4.0 + synckit: 0.6.2 + + eslint-plugin-prettier@5.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): + dependencies: + eslint: 8.57.1 + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 8.10.0(eslint@8.57.1) + + eslint-plugin-unicorn@47.0.0(eslint@8.57.1): + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.57.1 + esquery: 1.6.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + safe-regex: 2.1.1 + semver: 7.6.3 + strip-indent: 3.0.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6(supports-color@9.4.0) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + esm-env@1.0.0: {} + esm@3.2.25: {} + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} - estraverse@5.3.0: - optional: true + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.5 - esutils@2.0.3: - optional: true + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} eventemitter3@5.0.1: {} + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + execa@8.0.1: dependencies: cross-spawn: 7.0.3 @@ -6522,6 +9499,23 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + execa@9.5.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.3 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.1.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + expect-type@1.1.0: {} + extendable-error@0.1.7: {} external-editor@3.1.0: @@ -6530,18 +9524,30 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + fast-copy@3.0.2: {} + fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.8 + micromatch: 4.0.5 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-redact@3.5.0: {} fast-safe-stringify@2.1.1: {} + fastest-levenshtein@1.0.16: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -6558,10 +9564,31 @@ snapshots: fflate@0.8.2: {} + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-type@19.6.0: + dependencies: + get-stream: 9.0.1 + strtok3: 9.0.1 + token-types: 6.0.0 + uint8array-extras: 1.4.0 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + find-up-simple@1.0.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -6572,13 +9599,28 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - focus-trap@7.6.0: + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + flattie@1.1.1: {} + + focus-trap@7.5.4: dependencies: tabbable: 6.2.0 - follow-redirects@1.15.9: {} + follow-redirects@1.15.6: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 - form-data@4.0.1: + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -6590,6 +9632,10 @@ snapshots: hexoid: 2.0.0 once: 1.4.0 + forwarded@0.2.0: {} + + fresh@0.5.2: {} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 @@ -6622,7 +9668,9 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.2.0: {} + get-east-asian-width@1.3.0: {} + + get-func-name@2.0.2: {} get-intrinsic@1.2.4: dependencies: @@ -6632,12 +9680,43 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-package-type@0.1.0: {} + + get-port@7.1.0: {} + + get-source@2.0.12: + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 + + get-stream@6.0.1: {} + get-stream@8.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + getopts@2.3.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -6649,6 +9728,10 @@ snapshots: globals@11.12.0: {} + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + globalyzer@0.1.0: {} globby@11.1.0: @@ -6656,7 +9739,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.2 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -6668,6 +9751,15 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + globby@14.0.2: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 + ignore: 5.3.1 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + globrex@0.1.2: {} gopd@1.0.1: @@ -6676,7 +9768,9 @@ snapshots: graceful-fs@4.2.11: {} - graphql@16.9.0: {} + graphemer@1.4.0: {} + + graphql@16.8.2: {} handlebars@4.7.8: dependencies: @@ -6685,10 +9779,12 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.19.3 + uglify-js: 3.18.0 hard-rejection@2.1.0: {} + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -6725,16 +9821,31 @@ snapshots: headers-polyfill@4.0.3: {} + help-me@5.0.0: {} + hexoid@2.0.0: {} highlight.js@10.7.3: {} hookable@5.5.3: {} + hosted-git-info@2.8.9: {} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hot-hook@0.2.6: + dependencies: + chokidar: 3.6.0 + fast-glob: 3.3.2 + picomatch: 4.0.2 + read-package-up: 11.0.0 + html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 @@ -6742,6 +9853,14 @@ snapshots: html-void-elements@3.0.0: {} + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 @@ -6759,17 +9878,21 @@ snapshots: - supports-color optional: true - https-proxy-agent@7.0.5(supports-color@9.4.0): + https-proxy-agent@7.0.4(supports-color@9.4.0): dependencies: agent-base: 7.1.1(supports-color@9.4.0) - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.6(supports-color@9.4.0) transitivePeerDependencies: - supports-color human-id@1.0.2: {} + human-signals@2.1.0: {} + human-signals@5.0.0: {} + human-signals@8.0.0: {} + husky@9.1.5: {} iconv-lite@0.4.24: @@ -6781,16 +9904,29 @@ snapshots: safer-buffer: 2.1.2 optional: true + ieee754@1.2.1: {} + + igniculus@1.5.0: {} + ignore@5.3.1: {} - ignore@5.3.2: {} + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 import-meta-resolve@4.1.0: {} + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + indent-string@5.0.0: {} index-to-position@0.1.2: {} + inflation@2.1.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -6798,6 +9934,10 @@ snapshots: inherits@2.0.4: {} + interpret@2.2.0: {} + + ipaddr.js@1.9.1: {} + is-arrayish@0.2.1: {} is-arrayish@0.3.2: @@ -6807,6 +9947,10 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + is-core-module@2.13.1: dependencies: hasown: 2.0.2 @@ -6819,7 +9963,7 @@ snapshots: is-fullwidth-code-point@5.0.0: dependencies: - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.3.0 is-glob@4.0.3: dependencies: @@ -6831,30 +9975,48 @@ snapshots: is-path-cwd@3.0.0: {} + is-path-inside@3.0.3: {} + is-path-inside@4.0.0: {} is-plain-obj@1.1.0: {} + is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: optional: true is-reference@3.0.2: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.5 + + is-stream@2.0.1: {} is-stream@3.0.0: {} + is-stream@4.0.1: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 + is-unicode-supported@2.1.0: {} + is-what@4.1.16: {} is-windows@1.0.2: {} isexe@2.0.0: {} - jiti@2.3.3: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@2.4.0: {} + + joycon@3.1.1: {} js-levenshtein@1.1.6: {} @@ -6872,7 +10034,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.13.0 + acorn: 8.12.1 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -6880,13 +10042,13 @@ snapshots: decimal.js: 10.4.3 domexception: 4.0.0 escodegen: 2.1.0 - form-data: 4.0.1 + form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.13 - parse5: 7.2.0 + nwsapi: 2.2.12 + parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.4 @@ -6903,18 +10065,33 @@ snapshots: - utf-8-validate optional: true + jsesc@0.5.0: {} + jsesc@3.0.2: {} + json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} json-schema-ref-parser@9.0.9: dependencies: '@apidevtools/json-schema-ref-parser': 9.0.9 + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} + jsonc-eslint-parser@2.4.0: + dependencies: + acorn: 8.12.1 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.6.3 + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -6925,10 +10102,56 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonschema@1.4.1: {} + + junk@4.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kind-of@6.0.3: {} kleur@4.1.5: {} + knex-dynamic-connection@3.2.0: + dependencies: + debug: 4.3.6(supports-color@9.4.0) + knex: 3.1.0 + transitivePeerDependencies: + - better-sqlite3 + - mysql + - mysql2 + - pg + - pg-native + - sqlite3 + - supports-color + - tedious + + knex@3.1.0: + dependencies: + colorette: 2.0.19 + commander: 10.0.1 + debug: 4.3.4 + escalade: 3.1.2 + esm: 3.2.25 + get-package-type: 0.1.0 + getopts: 2.3.0 + interpret: 2.2.0 + lodash: 4.17.21 + pg-connection-string: 2.6.2 + rechoir: 0.8.0 + resolve-from: 5.0.0 + tarn: 3.0.2 + tildify: 2.0.0 + transitivePeerDependencies: + - supports-color + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} @@ -6937,10 +10160,10 @@ snapshots: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.6(supports-color@9.4.0) execa: 8.0.1 lilconfig: 3.1.2 - listr2: 8.2.4 + listr2: 8.2.5 micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 @@ -6948,7 +10171,7 @@ snapshots: transitivePeerDependencies: - supports-color - listr2@8.2.4: + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -6957,6 +10180,8 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 + load-tsconfig@0.2.5: {} + locate-character@3.0.0: {} locate-path@5.0.0: @@ -6967,8 +10192,14 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash-es@4.17.21: {} + lodash.isequal@4.5.0: {} + lodash.merge@4.6.2: {} + + lodash.sortby@4.7.0: {} + lodash.startcase@4.4.0: {} lodash@4.17.21: {} @@ -6985,6 +10216,10 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 + loupe@3.1.2: {} lru-cache@10.4.3: {} @@ -7002,21 +10237,30 @@ snapshots: dependencies: yallist: 4.0.0 + luxon@3.5.0: {} + lz-string@1.5.0: {} + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + make-error@1.3.6: {} + map-obj@1.0.1: {} map-obj@4.3.0: {} mark.js@8.11.1: {} - marked-terminal@7.1.0(marked@9.1.6): + marked-terminal@7.2.1(marked@9.1.6): dependencies: ansi-escapes: 7.0.0 + ansi-regex: 6.1.0 chalk: 5.3.0 cli-highlight: 2.1.11 cli-table3: 0.6.5 @@ -7040,6 +10284,14 @@ snapshots: mdn-data@2.0.30: {} + media-typer@0.3.0: {} + + media-typer@1.1.0: {} + + memoize@10.0.0: + dependencies: + mimic-function: 5.0.1 + meow@10.1.5: dependencies: '@types/minimist': 1.2.5 @@ -7078,6 +10330,16 @@ snapshots: micromark-util-types@2.0.0: {} + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -7091,6 +10353,8 @@ snapshots: mime@2.6.0: {} + mimic-fn@2.1.0: {} + mimic-fn@4.0.0: {} mimic-function@5.0.1: {} @@ -7105,6 +10369,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -7117,6 +10385,8 @@ snapshots: minimist@1.2.8: {} + minipass@7.1.2: {} + minisearch@7.1.0: {} mitt@3.0.1: {} @@ -7125,24 +10395,29 @@ snapshots: dependencies: minimist: 1.2.8 + mkdirp@3.0.1: {} + mri@1.2.0: {} mrmime@2.0.0: {} + ms@2.1.2: {} + ms@2.1.3: {} - msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3): + msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3): dependencies: '@bundled-es-modules/cookie': 2.0.0 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.0.0(@types/node@22.8.0) - '@mswjs/interceptors': 0.36.6 + '@inquirer/confirm': 5.0.1(@types/node@22.9.0) + '@mswjs/interceptors': 0.36.10 + '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.5 chalk: 4.1.2 - graphql: 16.9.0 + graphql: 16.8.2 headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 @@ -7157,6 +10432,8 @@ snapshots: muggle-string@0.4.1: {} + mustache@4.2.0: {} + mute-stream@2.0.0: {} mz@2.7.0: @@ -7167,21 +10444,25 @@ snapshots: nanoid@3.3.7: {} - nanoid@5.0.7: {} + nanoid@5.0.8: {} - nanospinner@1.1.0: + nanospinner@1.2.0: dependencies: picocolors: 1.1.1 + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + neo-async@2.6.2: {} - next@15.0.1(@playwright/test@1.48.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.0.1(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.0.1 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.13 busboy: 1.6.0 - caniuse-lite: 1.0.30001669 + caniuse-lite: 1.0.30001646 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7195,7 +10476,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.0.1 '@next/swc-win32-arm64-msvc': 15.0.1 '@next/swc-win32-x64-msvc': 15.0.1 - '@playwright/test': 1.48.1 + '@playwright/test': 1.48.2 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -7214,6 +10495,13 @@ snapshots: node-releases@2.0.18: {} + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 @@ -7221,23 +10509,50 @@ snapshots: semver: 7.6.3 validate-npm-package-license: 3.0.4 + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.6.3 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} - npm-run-path@5.3.0: + normalize-url@8.0.1: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: dependencies: path-key: 4.0.0 + unicorn-magic: 0.3.0 - nwsapi@2.2.13: + nwsapi@2.2.12: optional: true object-assign@4.1.1: {} - object-inspect@1.13.2: {} + object-inspect@1.13.1: {} + + on-exit-leak-free@2.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 once@1.4.0: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -7248,7 +10563,9 @@ snapshots: oniguruma-to-js@0.4.3: dependencies: - regex: 4.3.3 + regex: 4.4.0 + + openapi-types@12.1.3: {} openapi-typescript-codegen@0.25.0: dependencies: @@ -7260,16 +10577,33 @@ snapshots: openapi-typescript-fetch@2.0.0: {} + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + os-tmpdir@1.0.2: {} outdent@0.5.0: {} outvariant@1.4.3: {} + p-event@6.0.1: + dependencies: + p-timeout: 6.1.3 + p-filter@2.1.0: dependencies: p-map: 2.1.0 + p-filter@4.1.0: + dependencies: + p-map: 7.0.2 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -7292,22 +10626,39 @@ snapshots: dependencies: aggregate-error: 4.0.1 + p-map@7.0.2: {} + + p-timeout@6.1.3: {} + p-try@2.2.0: {} + package-json-from-dist@1.0.0: {} + package-manager-detector@0.2.2: {} + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-imports@2.2.1: + dependencies: + es-module-lexer: 1.5.4 + slashes: 3.0.12 + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.0 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.26.0 + '@babel/code-frame': 7.24.7 index-to-position: 0.1.2 - type-fest: 4.26.1 + type-fest: 4.20.1 + + parse-ms@4.0.0: {} parse5-htmlparser2-tree-adapter@6.0.1: dependencies: @@ -7317,7 +10668,7 @@ snapshots: parse5@6.0.1: {} - parse5@7.2.0: + parse5@7.1.2: dependencies: entities: 4.5.0 optional: true @@ -7332,22 +10683,37 @@ snapshots: path-key@4.0.0: {} + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-to-regexp@6.3.0: {} path-type@4.0.0: {} + path-type@5.0.0: {} + pathe@1.1.2: {} pathval@2.0.0: {} + peek-readable@5.3.1: {} + perfect-debounce@1.0.0: {} periscopic@3.1.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.5 estree-walker: 3.0.3 is-reference: 3.0.2 + pg-connection-string@2.6.2: {} + + picocolors@1.0.1: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -7358,21 +10724,73 @@ snapshots: pify@4.0.1: {} - playwright-core@1.48.1: {} + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-pretty@11.3.0: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pump: 3.0.2 + readable-stream: 4.5.2 + secure-json-parse: 2.7.0 + sonic-boom: 4.2.0 + strip-json-comments: 3.1.1 + + pino-std-serializers@6.2.2: {} + + pino@8.21.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 6.2.2 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 3.8.1 + thread-stream: 2.7.0 + + pirates@4.0.6: {} - playwright@1.48.1: + playwright-core@1.48.2: {} + + playwright@1.48.2: dependencies: - playwright-core: 1.48.1 + playwright-core: 1.48.2 optionalDependencies: fsevents: 2.3.2 pluralize@8.0.0: {} + postcss-load-config@6.0.1(jiti@2.4.0)(postcss@8.4.47)(yaml@2.5.1): + dependencies: + lilconfig: 3.1.2 + optionalDependencies: + jiti: 2.4.0 + postcss: 8.4.47 + yaml: 2.5.1 + postcss@8.4.31: dependencies: nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 + picocolors: 1.0.1 + source-map-js: 1.2.0 postcss@8.4.47: dependencies: @@ -7380,7 +10798,20 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.24.3: {} + preact@10.22.0: {} + + prelude-ls@1.2.1: {} + + prettier-edgejs@0.2.32: + dependencies: + css: 3.0.0 + edgejs-parser: 0.2.11 + prettier: 3.3.3 + uglify-js: 3.19.3 + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 prettier@2.8.8: {} @@ -7392,16 +10823,42 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-hrtime@1.0.3: {} + + pretty-ms@9.1.0: + dependencies: + parse-ms: 4.0.0 + + printable-characters@1.0.42: {} + + process-warning@3.0.0: {} + + process@0.11.10: {} + property-information@6.5.0: {} + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + proxy-from-env@1.1.0: {} pseudomap@1.0.2: {} psl@1.9.0: {} + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode@2.3.1: {} + qs@6.12.1: + dependencies: + side-channel: 1.0.6 + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -7410,8 +10867,19 @@ snapshots: queue-microtask@1.2.3: {} + quick-format-unescaped@4.0.4: {} + quick-lru@5.1.1: {} + random-bytes@1.0.0: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -7420,7 +10888,7 @@ snapshots: react-error-boundary@4.1.2(react@18.3.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.0 react: 18.3.1 react-is@17.0.2: {} @@ -7431,12 +10899,31 @@ snapshots: dependencies: loose-envify: 1.4.0 + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.0 + read-pkg: 9.0.1 + type-fest: 4.26.1 + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + read-pkg-up@8.0.0: dependencies: find-up: 5.0.0 read-pkg: 6.0.0 type-fest: 1.4.0 + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + read-pkg@6.0.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -7444,6 +10931,14 @@ snapshots: parse-json: 5.2.0 type-fest: 1.4.0 + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.1.0 + type-fest: 4.26.1 + unicorn-magic: 0.1.0 + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -7451,20 +10946,42 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 readdirp@4.0.2: {} + real-require@0.2.0: {} + + rechoir@0.8.0: + dependencies: + resolve: 1.22.8 + redent@4.0.0: dependencies: indent-string: 5.0.0 strip-indent: 4.0.0 + reflect-metadata@0.2.2: {} + regenerator-runtime@0.14.1: {} - regex@4.3.3: {} + regex@4.4.0: {} + + regexp-tree@0.1.27: {} + + regjsparser@0.10.0: + dependencies: + jsesc: 0.5.0 require-directory@2.1.1: {} @@ -7472,8 +10989,16 @@ snapshots: requires-port@1.0.0: {} + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -7491,26 +11016,26 @@ snapshots: dependencies: glob: 7.2.3 - rollup@4.24.0: + rollup@4.20.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.24.0 - '@rollup/rollup-android-arm64': 4.24.0 - '@rollup/rollup-darwin-arm64': 4.24.0 - '@rollup/rollup-darwin-x64': 4.24.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 - '@rollup/rollup-linux-arm-musleabihf': 4.24.0 - '@rollup/rollup-linux-arm64-gnu': 4.24.0 - '@rollup/rollup-linux-arm64-musl': 4.24.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 - '@rollup/rollup-linux-riscv64-gnu': 4.24.0 - '@rollup/rollup-linux-s390x-gnu': 4.24.0 - '@rollup/rollup-linux-x64-gnu': 4.24.0 - '@rollup/rollup-linux-x64-musl': 4.24.0 - '@rollup/rollup-win32-arm64-msvc': 4.24.0 - '@rollup/rollup-win32-ia32-msvc': 4.24.0 - '@rollup/rollup-win32-x64-msvc': 4.24.0 + '@rollup/rollup-android-arm-eabi': 4.20.0 + '@rollup/rollup-android-arm64': 4.20.0 + '@rollup/rollup-darwin-arm64': 4.20.0 + '@rollup/rollup-darwin-x64': 4.20.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 + '@rollup/rollup-linux-arm-musleabihf': 4.20.0 + '@rollup/rollup-linux-arm64-gnu': 4.20.0 + '@rollup/rollup-linux-arm64-musl': 4.20.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 + '@rollup/rollup-linux-riscv64-gnu': 4.20.0 + '@rollup/rollup-linux-s390x-gnu': 4.20.0 + '@rollup/rollup-linux-x64-gnu': 4.20.0 + '@rollup/rollup-linux-x64-musl': 4.20.0 + '@rollup/rollup-win32-arm64-msvc': 4.20.0 + '@rollup/rollup-win32-ia32-msvc': 4.20.0 + '@rollup/rollup-win32-x64-msvc': 4.20.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -7521,6 +11046,16 @@ snapshots: dependencies: mri: 1.2.0 + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex@2.1.1: + dependencies: + regexp-tree: 0.1.27 + + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} sander@0.5.1: @@ -7541,11 +11076,15 @@ snapshots: search-insights@2.13.0: {} + secure-json-parse@2.7.0: {} + + semver@5.7.2: {} + semver@6.3.1: {} semver@7.6.3: {} - set-cookie-parser@2.7.1: {} + set-cookie-parser@2.7.0: {} set-function-length@1.2.2: dependencies: @@ -7556,6 +11095,8 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 + setprototypeof@1.2.0: {} + sharp@0.33.5: dependencies: color: 4.2.3 @@ -7595,12 +11136,12 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.22.1: + shiki@1.22.2: dependencies: - '@shikijs/core': 1.22.1 - '@shikijs/engine-javascript': 1.22.1 - '@shikijs/engine-oniguruma': 1.22.1 - '@shikijs/types': 1.22.1 + '@shikijs/core': 1.22.2 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -7609,7 +11150,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.1 siginfo@2.0.0: {} @@ -7624,7 +11165,7 @@ snapshots: sirv@3.0.0: dependencies: - '@polka/url': 1.0.0-next.28 + '@polka/url': 1.0.0-next.25 mrmime: 2.0.0 totalist: 3.0.1 @@ -7632,9 +11173,9 @@ snapshots: dependencies: bytes-iec: 3.1.1 chokidar: 4.0.1 - jiti: 2.3.3 + jiti: 2.4.0 lilconfig: 3.1.2 - nanospinner: 1.1.0 + nanospinner: 1.2.0 picocolors: 1.1.1 tinyglobby: 0.2.10 @@ -7646,6 +11187,10 @@ snapshots: slash@4.0.0: {} + slash@5.1.0: {} + + slashes@3.0.12: {} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -7656,6 +11201,16 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 + slugify@1.6.6: {} + + sonic-boom@3.8.1: + dependencies: + atomic-sleep: 1.0.0 + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + sorcery@0.11.1: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -7663,10 +11218,21 @@ snapshots: minimist: 1.2.8 sander: 0.5.1 + source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-resolve@0.6.0: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + source-map@0.6.1: {} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + space-separated-tokens@2.0.2: {} spawndamnit@2.0.0: @@ -7690,10 +11256,19 @@ snapshots: speakingurl@14.0.1: {} + split-lines@3.0.0: {} + + split2@4.2.0: {} + sprintf-js@1.0.3: {} stackback@0.0.2: {} + stacktracey@2.1.8: + dependencies: + as-table: 1.0.55 + get-source: 2.0.12 + statuses@2.0.1: {} std-env@3.7.0: {} @@ -7710,12 +11285,22 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string-width@7.2.0: dependencies: emoji-regex: 10.4.0 - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -7727,12 +11312,16 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.0.1 strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} + strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -7741,22 +11330,39 @@ snapshots: dependencies: min-indent: 1.0.1 + strip-json-comments@3.1.1: {} + + strtok3@9.0.1: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 5.3.1 + styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + superagent@10.1.1: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.6(supports-color@9.4.0) fast-safe-stringify: 2.1.1 - form-data: 4.0.1 + form-data: 4.0.0 formidable: 3.5.2 methods: 1.1.2 mime: 2.6.0 - qs: 6.13.0 + qs: 6.12.1 transitivePeerDependencies: - supports-color @@ -7764,6 +11370,10 @@ snapshots: dependencies: copy-anything: 3.0.5 + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -7775,11 +11385,13 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} + svelte-check@3.8.6(@babel/core@7.26.0)(postcss@8.4.47)(svelte@4.2.19): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 3.6.0 - picocolors: 1.1.1 + picocolors: 1.0.1 sade: 1.8.1 svelte: 4.2.19 svelte-preprocess: 5.1.4(@babel/core@7.26.0)(postcss@8.4.47)(svelte@4.2.19)(typescript@5.6.3) @@ -7803,7 +11415,7 @@ snapshots: dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 - magic-string: 0.30.12 + magic-string: 0.30.11 sorcery: 0.11.1 strip-indent: 3.0.0 svelte: 4.2.19 @@ -7817,16 +11429,16 @@ snapshots: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@types/estree': 1.0.6 - acorn: 8.13.0 - aria-query: 5.3.2 + '@types/estree': 1.0.5 + acorn: 8.12.1 + aria-query: 5.3.0 axobject-query: 4.1.0 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.12 + magic-string: 0.30.11 periscopic: 3.1.0 swr@2.2.5(react@18.3.1): @@ -7838,10 +11450,27 @@ snapshots: symbol-tree@3.2.4: optional: true + synckit@0.6.2: + dependencies: + tslib: 2.8.1 + + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + tabbable@6.2.0: {} + tarn@3.0.2: {} + + tempura@0.4.1: {} + term-size@2.2.1: {} + terminal-size@4.0.0: {} + + text-table@0.2.0: {} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -7850,11 +11479,19 @@ snapshots: dependencies: any-promise: 1.3.0 + thread-stream@2.7.0: + dependencies: + real-require: 0.2.0 + + tildify@2.0.0: {} + tiny-glob@0.2.9: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 + tinybench@2.8.0: {} + tinybench@2.9.0: {} tinyexec@0.3.1: {} @@ -7864,20 +11501,35 @@ snapshots: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 + tinypool@1.0.0: {} + tinypool@1.0.1: {} tinyrainbow@1.2.0: {} + tinyspy@3.0.0: {} + tinyspy@3.0.2: {} + tmp-cache@1.1.0: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 + to-fast-properties@2.0.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: {} + + token-types@6.0.0: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + totalist@3.0.1: {} tough-cookie@4.1.4: @@ -7889,25 +11541,109 @@ snapshots: tr46@0.0.3: {} + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + tr46@3.0.0: dependencies: punycode: 2.3.1 optional: true + tree-kill@1.2.2: {} + trim-lines@3.0.1: {} trim-newlines@4.1.1: {} + truncatise@0.0.8: {} + + ts-api-utils@1.4.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + ts-interface-checker@0.1.13: {} + + ts-morph@23.0.0: + dependencies: + '@ts-morph/common': 0.24.0 + code-block-writer: 13.0.3 + + ts-node@10.9.2(@swc/core@1.7.4(@swc/helpers@0.5.13))(@types/node@20.14.14)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.14.14 + acorn: 8.12.1 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.7.4(@swc/helpers@0.5.13) + ts-results-es@4.2.0: {} - tslib@2.8.0: {} + tslib@2.8.1: {} + + tsup@8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1): + dependencies: + bundle-require: 5.0.0(esbuild@0.23.1) + cac: 6.7.14 + chokidar: 3.6.0 + consola: 3.2.3 + debug: 4.3.6(supports-color@9.4.0) + esbuild: 0.23.1 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + picocolors: 1.0.1 + postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.47)(yaml@2.5.1) + resolve-from: 5.0.0 + rollup: 4.20.0 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + optionalDependencies: + '@swc/core': 1.9.1(@swc/helpers@0.5.13) + postcss: 8.4.47 + typescript: 5.6.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} type-fest@0.21.3: {} + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + type-fest@1.4.0: {} + type-fest@4.20.1: {} + type-fest@4.26.1: {} + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + typescript@5.4.5: {} typescript@5.5.4: {} @@ -7916,13 +11652,27 @@ snapshots: typescript@5.6.3: {} - uglify-js@3.19.3: + uglify-js@3.18.0: optional: true + uglify-js@3.19.3: {} + + uid-safe@2.1.5: + dependencies: + random-bytes: 1.0.0 + + uint8array-extras@1.4.0: {} + + undici-types@5.26.5: {} + undici-types@6.19.8: {} unicode-emoji-modifier-base@1.0.0: {} + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 @@ -7952,6 +11702,24 @@ snapshots: universalify@2.0.1: {} + unpipe@1.0.0: {} + + unplugin-swc@1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + '@swc/core': 1.9.1(@swc/helpers@0.5.13) + load-tsconfig: 0.2.5 + unplugin: 1.12.1 + transitivePeerDependencies: + - rollup + + unplugin@1.12.1: + dependencies: + acorn: 8.12.1 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 @@ -7960,6 +11728,10 @@ snapshots: uri-js-replace@1.0.1: {} + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -7969,6 +11741,8 @@ snapshots: dependencies: react: 18.3.1 + v8-compile-cache-lib@3.0.1: {} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -7976,6 +11750,10 @@ snapshots: validate-npm-package-name@5.0.1: {} + validator@13.12.0: {} + + vary@1.1.2: {} + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.3 @@ -7986,13 +11764,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.0.5(@types/node@22.8.0): + vite-node@2.0.5(@types/node@22.9.0): dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.6(supports-color@9.4.0) pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.8.0) + vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - '@types/node' - less @@ -8004,12 +11782,12 @@ snapshots: - supports-color - terser - vite-node@2.1.3(@types/node@22.8.0)(supports-color@9.4.0): + vite-node@2.1.4(@types/node@22.9.0)(supports-color@9.4.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@9.4.0) pathe: 1.1.2 - vite: 5.4.10(@types/node@22.8.0) + vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - '@types/node' - less @@ -8021,36 +11799,36 @@ snapshots: - supports-color - terser - vite@5.4.10(@types/node@22.8.0): + vite@5.4.10(@types/node@22.9.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 - rollup: 4.24.0 + rollup: 4.20.0 optionalDependencies: - '@types/node': 22.8.0 + '@types/node': 22.9.0 fsevents: 2.3.3 - vitefu@0.2.5(vite@5.4.10(@types/node@22.8.0)): + vitefu@0.2.5(vite@5.4.10(@types/node@22.9.0)): optionalDependencies: - vite: 5.4.10(@types/node@22.8.0) - - vitepress@1.3.2(@algolia/client-search@4.24.0)(@types/node@22.8.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3): - dependencies: - '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) - '@shikijs/core': 1.22.1 - '@shikijs/transformers': 1.22.1 - '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.1.4(vite@5.4.10(@types/node@22.8.0))(vue@3.5.12(typescript@5.6.3)) - '@vue/devtools-api': 7.5.4 - '@vue/shared': 3.5.12 - '@vueuse/core': 10.11.1(vue@3.5.12(typescript@5.6.3)) - '@vueuse/integrations': 10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3)) - focus-trap: 7.6.0 + vite: 5.4.10(@types/node@22.9.0) + + vitepress@1.3.2(@algolia/client-search@4.23.3)(@types/node@22.9.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3): + dependencies: + '@docsearch/css': 3.6.0 + '@docsearch/js': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) + '@shikijs/core': 1.22.2 + '@shikijs/transformers': 1.22.2 + '@types/markdown-it': 14.1.1 + '@vitejs/plugin-vue': 5.1.4(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3)) + '@vue/devtools-api': 7.6.3 + '@vue/shared': 3.4.35 + '@vueuse/core': 10.11.0(vue@3.5.12(typescript@5.6.3)) + '@vueuse/integrations': 10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.12(typescript@5.6.3)) + focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 7.1.0 - shiki: 1.22.1 - vite: 5.4.10(@types/node@22.8.0) + shiki: 1.22.2 + vite: 5.4.10(@types/node@22.9.0) vue: 3.5.12(typescript@5.6.3) optionalDependencies: postcss: 8.4.47 @@ -8082,29 +11860,29 @@ snapshots: - typescript - universal-cookie - vitest@2.0.5(@types/node@22.8.0)(jsdom@20.0.3): + vitest@2.0.5(@types/node@22.9.0)(jsdom@20.0.3): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 - '@vitest/pretty-format': 2.1.1 + '@vitest/pretty-format': 2.0.5 '@vitest/runner': 2.0.5 '@vitest/snapshot': 2.0.5 '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.1.2 - debug: 4.3.7(supports-color@9.4.0) + chai: 5.1.1 + debug: 4.3.6(supports-color@9.4.0) execa: 8.0.1 - magic-string: 0.30.12 + magic-string: 0.30.11 pathe: 1.1.2 std-env: 3.7.0 - tinybench: 2.9.0 - tinypool: 1.0.1 + tinybench: 2.8.0 + tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.8.0) - vite-node: 2.0.5(@types/node@22.8.0) + vite: 5.4.10(@types/node@22.9.0) + vite-node: 2.0.5(@types/node@22.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.8.0 + '@types/node': 22.9.0 jsdom: 20.0.3 transitivePeerDependencies: - less @@ -8116,17 +11894,18 @@ snapshots: - supports-color - terser - vitest@2.1.3(@types/node@22.8.0)(jsdom@20.0.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3)): + vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)): dependencies: - '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.8.0)) - '@vitest/pretty-format': 2.1.3 - '@vitest/runner': 2.1.3 - '@vitest/snapshot': 2.1.3 - '@vitest/spy': 2.1.3 - '@vitest/utils': 2.1.3 + '@vitest/expect': 2.1.4 + '@vitest/mocker': 2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.9.0)) + '@vitest/pretty-format': 2.1.4 + '@vitest/runner': 2.1.4 + '@vitest/snapshot': 2.1.4 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 chai: 5.1.2 debug: 4.3.7(supports-color@9.4.0) + expect-type: 1.1.0 magic-string: 0.30.12 pathe: 1.1.2 std-env: 3.7.0 @@ -8134,11 +11913,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.8.0) - vite-node: 2.1.3(@types/node@22.8.0)(supports-color@9.4.0) + vite: 5.4.10(@types/node@22.9.0) + vite-node: 2.1.4(@types/node@22.9.0)(supports-color@9.4.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.8.0 + '@types/node': 22.9.0 jsdom: 20.0.3 transitivePeerDependencies: - less @@ -8153,14 +11932,14 @@ snapshots: vscode-uri@3.0.8: {} - vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)): + vue-demi@0.14.8(vue@3.5.12(typescript@5.6.3)): dependencies: vue: 3.5.12(typescript@5.6.3) - vue-tsc@2.1.6(typescript@5.6.3): + vue-tsc@2.1.10(typescript@5.6.3): dependencies: - '@volar/typescript': 2.4.7 - '@vue/language-core': 2.1.6(typescript@5.6.3) + '@volar/typescript': 2.4.8 + '@vue/language-core': 2.1.10(typescript@5.6.3) semver: 7.6.3 typescript: 5.6.3 @@ -8181,9 +11960,15 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@4.0.2: {} + webidl-conversions@7.0.0: optional: true + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: {} + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -8203,6 +11988,12 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + which@1.3.1: dependencies: isexe: 2.0.0 @@ -8216,6 +12007,8 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + word-wrap@1.2.5: {} + wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -8230,6 +12023,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 @@ -8266,7 +12065,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.2.0 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -8276,15 +12075,31 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.2.0 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + yn@3.1.1: {} + yocto-queue@0.1.0: {} yoctocolors-cjs@2.1.2: {} + yoctocolors@2.1.1: {} + + youch-terminal@2.2.3: + dependencies: + kleur: 4.1.5 + string-width: 4.2.3 + wordwrap: 1.0.0 + + youch@3.3.4: + dependencies: + cookie: 0.7.2 + mustache: 4.2.0 + stacktracey: 2.1.8 + zwitch@2.0.4: {} From 6339085d62bc11e9c964202dfdfeb862da5dc288 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 02:23:58 +0200 Subject: [PATCH 02/25] Lint files --- packages/openapi-adonis/biome.json | 8 ++----- .../app/controllers/users_controller.ts | 20 ++++++++--------- .../openapi-adonis/example/app/models/user.ts | 14 ++++++------ .../openapi-adonis/example/start/routes.ts | 22 +++++++++---------- packages/openapi-adonis/example/tsconfig.json | 4 ++-- packages/openapi-adonis/tsconfig.json | 19 ++++------------ packages/openapi-decorators/biome.json | 4 +--- packages/openapi-decorators/src/ui/scalar.ts | 2 +- packages/openapi-decorators/tsconfig.json | 20 ++++------------- packages/openapi-decorators/vitest.config.ts | 14 ++++++------ 10 files changed, 49 insertions(+), 78 deletions(-) diff --git a/packages/openapi-adonis/biome.json b/packages/openapi-adonis/biome.json index c07a9da68..8eafd05ea 100644 --- a/packages/openapi-adonis/biome.json +++ b/packages/openapi-adonis/biome.json @@ -1,12 +1,8 @@ { "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", - "extends": [ - "../../biome.json" - ], + "extends": ["../../biome.json"], "files": { - "ignore": [ - "./test/fixtures/" - ] + "ignore": ["./example/"] }, "linter": { "rules": { diff --git a/packages/openapi-adonis/example/app/controllers/users_controller.ts b/packages/openapi-adonis/example/app/controllers/users_controller.ts index fec83573c..ef2a47f37 100644 --- a/packages/openapi-adonis/example/app/controllers/users_controller.ts +++ b/packages/openapi-adonis/example/app/controllers/users_controller.ts @@ -1,18 +1,18 @@ -import User from "#models/user"; -import { apiBody, apiOperation, apiResponse, apiParam, apiQuery } from "openapi-adonis/decorators"; +import User from '#models/user' +import { apiBody, apiOperation, apiResponse, apiParam, apiQuery } from 'openapi-adonis/decorators' export default class UsersController { - @apiOperation({ summary: "Get users", tags: ["User"] }) + @apiOperation({ summary: 'Get users', tags: ['User'] }) @apiResponse({ type: User }) - @apiParam({ name: "id" }) - @apiQuery({ name: "query" }) - public async index(): Promise { - return new User(); + @apiParam({ name: 'id' }) + @apiQuery({ name: 'query' }) + async index(): Promise { + return new User() } - @apiOperation({ summary: "Create new user", tags: ["User"] }) + @apiOperation({ summary: 'Create new user', tags: ['User'] }) @apiBody({ type: User }) - public async create(): Promise { - return new User(); + async create(): Promise { + return new User() } } diff --git a/packages/openapi-adonis/example/app/models/user.ts b/packages/openapi-adonis/example/app/models/user.ts index 8fdefd755..0b46a5c7b 100644 --- a/packages/openapi-adonis/example/app/models/user.ts +++ b/packages/openapi-adonis/example/app/models/user.ts @@ -1,16 +1,16 @@ -import { BaseModel } from "@adonisjs/lucid/orm"; -import { apiProperty } from "openapi-adonis/decorators"; +import { BaseModel } from '@adonisjs/lucid/orm' +import { apiProperty } from 'openapi-adonis/decorators' export default class User extends BaseModel { - @apiProperty({ example: "5" }) - declare id: string; + @apiProperty({ example: '5' }) + declare id: string @apiProperty() - declare name: number; + declare name: number @apiProperty() - declare hey: string; + declare hey: string @apiProperty({ type: User }) - declare user: User; + declare user: User } diff --git a/packages/openapi-adonis/example/start/routes.ts b/packages/openapi-adonis/example/start/routes.ts index 3babeee09..158b8b882 100644 --- a/packages/openapi-adonis/example/start/routes.ts +++ b/packages/openapi-adonis/example/start/routes.ts @@ -7,19 +7,19 @@ | */ -import router from "@adonisjs/core/services/router"; -import AdonisOpenAPI from "openapi-adonis"; +import router from '@adonisjs/core/services/router' +import AdonisOpenAPI from 'openapi-adonis' -const UsersController = () => import("#controllers/users_controller"); +const UsersController = () => import('#controllers/users_controller') -router.get("/", async () => { +router.get('/', async () => { return { - hello: "world", - }; -}); + hello: 'world', + } +}) -router.get("/users/:id", [UsersController, "index"]); -router.post("/users", [UsersController, "create"]); +router.get('/users/:id', [UsersController, 'index']) +router.post('/users', [UsersController, 'create']) -const builder = AdonisOpenAPI.document().setTitle("OpenAPI Adonis Example"); -AdonisOpenAPI.setup("/docs", router, builder); +const builder = AdonisOpenAPI.document().setTitle('OpenAPI Adonis Example') +AdonisOpenAPI.setup('/docs', router, builder) diff --git a/packages/openapi-adonis/example/tsconfig.json b/packages/openapi-adonis/example/tsconfig.json index e05703c28..86b69e8be 100644 --- a/packages/openapi-adonis/example/tsconfig.json +++ b/packages/openapi-adonis/example/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@adonisjs/tsconfig/tsconfig.app.json", "compilerOptions": { "rootDir": "./", - "outDir": "./build", - }, + "outDir": "./build" + } } diff --git a/packages/openapi-adonis/tsconfig.json b/packages/openapi-adonis/tsconfig.json index 477f8a606..801bb5c7d 100644 --- a/packages/openapi-adonis/tsconfig.json +++ b/packages/openapi-adonis/tsconfig.json @@ -4,10 +4,7 @@ "declaration": true, "downlevelIteration": false, "esModuleInterop": true, - "lib": [ - "ESNext", - "DOM" - ], + "lib": ["ESNext", "DOM"], "module": "ESNext", "moduleResolution": "Bundler", "noUncheckedIndexedAccess": true, @@ -17,16 +14,8 @@ "target": "ESNext", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "types": [ - "vitest/globals" - ] + "types": ["vitest/globals"] }, - "include": [ - "src", - "test" - ], - "exclude": [ - "example", - "node_modules" - ] + "include": ["src", "test"], + "exclude": ["example", "node_modules"] } diff --git a/packages/openapi-decorators/biome.json b/packages/openapi-decorators/biome.json index ac5658f00..bb46eda10 100644 --- a/packages/openapi-decorators/biome.json +++ b/packages/openapi-decorators/biome.json @@ -1,8 +1,6 @@ { "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", - "extends": [ - "../../biome.json" - ], + "extends": ["../../biome.json"], "linter": { "rules": { "performance": { diff --git a/packages/openapi-decorators/src/ui/scalar.ts b/packages/openapi-decorators/src/ui/scalar.ts index 4dce298b8..240fdad14 100644 --- a/packages/openapi-decorators/src/ui/scalar.ts +++ b/packages/openapi-decorators/src/ui/scalar.ts @@ -1,5 +1,5 @@ export function generateScalarUI(url: string) { - return ` + return ` diff --git a/packages/openapi-decorators/tsconfig.json b/packages/openapi-decorators/tsconfig.json index 5d58f7566..856c8f0d6 100644 --- a/packages/openapi-decorators/tsconfig.json +++ b/packages/openapi-decorators/tsconfig.json @@ -4,10 +4,7 @@ "declaration": true, "downlevelIteration": false, "esModuleInterop": true, - "lib": [ - "ESNext", - "DOM" - ], + "lib": ["ESNext", "DOM"], "module": "ESNext", "moduleResolution": "Bundler", "noUncheckedIndexedAccess": true, @@ -17,17 +14,8 @@ "target": "ESNext", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "types": [ - "vitest/globals", - "reflect-metadata" - ] + "types": ["vitest/globals", "reflect-metadata"] }, - "include": [ - "src", - "test" - ], - "exclude": [ - "example", - "node_modules" - ] + "include": ["src", "test"], + "exclude": ["example", "node_modules"] } diff --git a/packages/openapi-decorators/vitest.config.ts b/packages/openapi-decorators/vitest.config.ts index 59723706a..8debcd30d 100644 --- a/packages/openapi-decorators/vitest.config.ts +++ b/packages/openapi-decorators/vitest.config.ts @@ -2,11 +2,11 @@ import { defineConfig } from "vitest/config"; import swc from "unplugin-swc"; export default defineConfig({ - plugins: [ - // Required to have typescript metadata working. See https://github.com/vitest-dev/vitest/discussions/3320 - swc.vite(), - ], - test: { - globals: true, - }, + plugins: [ + // Required to have typescript metadata working. See https://github.com/vitest-dev/vitest/discussions/3320 + swc.vite(), + ], + test: { + globals: true, + }, }); From 64744a2ec4a5c73b66ae285abc1a4dd7e9c2c847 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 02:30:12 +0200 Subject: [PATCH 03/25] Fix builds --- packages/openapi-adonis/example/bin/test.ts | 62 ------------------- .../openapi-adonis/example/tests/bootstrap.ts | 38 ------------ packages/openapi-adonis/package.json | 10 +-- packages/openapi-adonis/tsup.config.ts | 2 +- packages/openapi-decorators/package.json | 7 +-- 5 files changed, 3 insertions(+), 116 deletions(-) delete mode 100644 packages/openapi-adonis/example/bin/test.ts delete mode 100644 packages/openapi-adonis/example/tests/bootstrap.ts diff --git a/packages/openapi-adonis/example/bin/test.ts b/packages/openapi-adonis/example/bin/test.ts deleted file mode 100644 index d759efe42..000000000 --- a/packages/openapi-adonis/example/bin/test.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| Test runner entrypoint -|-------------------------------------------------------------------------- -| -| The "test.ts" file is the entrypoint for running tests using Japa. -| -| Either you can run this file directly or use the "test" -| command to run this file and monitor file changes. -| -*/ - -process.env.NODE_ENV = 'test' - -import 'reflect-metadata' -import { Ignitor, prettyPrintError } from '@adonisjs/core' -import { configure, processCLIArgs, run } from '@japa/runner' - -/** - * URL to the application root. AdonisJS need it to resolve - * paths to file and directories for scaffolding commands - */ -const APP_ROOT = new URL('../', import.meta.url) - -/** - * The importer is used to import files in context of the - * application. - */ -const IMPORTER = (filePath: string) => { - if (filePath.startsWith('./') || filePath.startsWith('../')) { - return import(new URL(filePath, APP_ROOT).href) - } - return import(filePath) -} - -new Ignitor(APP_ROOT, { importer: IMPORTER }) - .tap((app) => { - app.booting(async () => { - await import('#start/env') - }) - app.listen('SIGTERM', () => app.terminate()) - app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate()) - }) - .testRunner() - .configure(async (app) => { - const { runnerHooks, ...config } = await import('../tests/bootstrap.js') - - processCLIArgs(process.argv.splice(2)) - configure({ - ...app.rcFile.tests, - ...config, - ...{ - setup: runnerHooks.setup, - teardown: runnerHooks.teardown.concat([() => app.terminate()]), - }, - }) - }) - .run(() => run()) - .catch((error) => { - process.exitCode = 1 - prettyPrintError(error) - }) diff --git a/packages/openapi-adonis/example/tests/bootstrap.ts b/packages/openapi-adonis/example/tests/bootstrap.ts deleted file mode 100644 index 39aa4c7cf..000000000 --- a/packages/openapi-adonis/example/tests/bootstrap.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { assert } from '@japa/assert' -import { apiClient } from '@japa/api-client' -import app from '@adonisjs/core/services/app' -import type { Config } from '@japa/runner/types' -import { pluginAdonisJS } from '@japa/plugin-adonisjs' -import testUtils from '@adonisjs/core/services/test_utils' - -/** - * This file is imported by the "bin/test.ts" entrypoint file - */ - -/** - * Configure Japa plugins in the plugins array. - * Learn more - https://japa.dev/docs/runner-config#plugins-optional - */ -export const plugins: Config['plugins'] = [assert(), apiClient(), pluginAdonisJS(app)] - -/** - * Configure lifecycle function to run before and after all the - * tests. - * - * The setup functions are executed before all the tests - * The teardown functions are executer after all the tests - */ -export const runnerHooks: Required> = { - setup: [], - teardown: [], -} - -/** - * Configure suites by tapping into the test suite instance. - * Learn more - https://japa.dev/docs/test-suites#lifecycle-hooks - */ -export const configureSuite: Config['configureSuite'] = (suite) => { - if (['browser', 'functional', 'e2e'].includes(suite.name)) { - return suite.setup(() => testUtils.httpServer().start()) - } -} diff --git a/packages/openapi-adonis/package.json b/packages/openapi-adonis/package.json index 8feb33846..4c199ca50 100644 --- a/packages/openapi-adonis/package.json +++ b/packages/openapi-adonis/package.json @@ -15,7 +15,6 @@ "types": "./dist/index.d.ts", "default": "./dist/index.js" }, - "./*": "./*", "./decorators": { "types": "./dist/decorators/index.d.ts", "default": "./dist/decorators/index.js" @@ -41,16 +40,12 @@ "adonis" ], "scripts": { - "build": "pnpm run build:clean && pnpm run build:esm && pnpm run build:cjs", - "build:clean": "del-cli dist", - "build:esm": "tsc -p tsconfig.json", - "build:cjs": "esbuild --bundle --platform=node --target=es2019 --outfile=dist/index.cjs --external:typescript src/index.ts", + "build": "tsup", "dev": "tsup --watch", "format": "biome format . --write", "lint": "biome check .", "test": "pnpm run \"/^test:/\"", "test:js": "vitest run", - "test:ts": "tsc --noEmit", "version": "pnpm run prepare && pnpm run build" }, "dependencies": { @@ -66,9 +61,6 @@ "@adonisjs/http-server": "^7.2.3", "@types/lodash": "^4.17.7", "@types/node": "^22.1.0", - "del-cli": "^5.1.0", - "esbuild": "^0.20.2", - "execa": "^8.0.1", "tsup": "^8.2.4", "typescript": "^5.4.5", "unplugin-swc": "^1.5.1" diff --git a/packages/openapi-adonis/tsup.config.ts b/packages/openapi-adonis/tsup.config.ts index 818264f7b..dc745a36c 100644 --- a/packages/openapi-adonis/tsup.config.ts +++ b/packages/openapi-adonis/tsup.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from "tsup"; export default defineConfig({ - entry: ["src/index.ts"], + entry: ["src/index.ts", "src/decorators/index.ts"], format: ["esm"], dts: true, sourcemap: true, diff --git a/packages/openapi-decorators/package.json b/packages/openapi-decorators/package.json index 8ae0ce364..59b33d177 100644 --- a/packages/openapi-decorators/package.json +++ b/packages/openapi-decorators/package.json @@ -44,16 +44,11 @@ "typescript" ], "scripts": { - "build": "pnpm run build:clean && pnpm run build:esm && pnpm run build:cjs", - "build:clean": "del-cli dist", - "build:esm": "tsc -p tsconfig.json", - "build:cjs": "esbuild --bundle --platform=node --target=es2019 --outfile=dist/index.cjs --external:typescript src/index.ts", + "build": "tsup", "dev": "tsup --watch", "format": "biome format . --write", "lint": "biome check .", "test": "pnpm run \"/^test:/\"", - "test:js": "vitest run", - "test:ts": "tsc --noEmit", "version": "pnpm run prepare && pnpm run build" }, "dependencies": { From d0ae63887392779b55246648a05e89412ad242fa Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 02:31:00 +0200 Subject: [PATCH 04/25] Fix builds --- pnpm-lock.yaml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 450669478..ee231601c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -81,15 +81,6 @@ importers: '@types/node': specifier: ^22.1.0 version: 22.9.0 - del-cli: - specifier: ^5.1.0 - version: 5.1.0 - esbuild: - specifier: ^0.20.2 - version: 0.20.2 - execa: - specifier: ^8.0.1 - version: 8.0.1 tsup: specifier: ^8.2.4 version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1) From a4d4d35b9e3d3ad49116a5e2847d8febde4a015b Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 02:34:42 +0200 Subject: [PATCH 05/25] Fix builds --- packages/openapi-adonis/example/package.json | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/packages/openapi-adonis/example/package.json b/packages/openapi-adonis/example/package.json index cf5995223..af4aa0bac 100644 --- a/packages/openapi-adonis/example/package.json +++ b/packages/openapi-adonis/example/package.json @@ -6,11 +6,7 @@ "license": "UNLICENSED", "scripts": { "start": "node bin/server.js", - "build": "node ace build", "dev": "node ace serve --watch", - "test": "node ace test", - "lint": "eslint .", - "format": "prettier --write .", "typecheck": "tsc --noEmit" }, "imports": { @@ -33,16 +29,12 @@ }, "devDependencies": { "@adonisjs/assembler": "^7.7.0", - "@adonisjs/eslint-config": "^1.3.0", "@adonisjs/http-server": "^7.2.3", - "@adonisjs/prettier-config": "^1.3.0", "@adonisjs/tsconfig": "^1.3.0", "@swc/core": "^1.6.5", "@types/node": "^20.14.9", - "eslint": "^8.57.0", "hot-hook": "^0.2.6", "pino-pretty": "^11.2.1", - "prettier": "^3.3.2", "ts-node": "^10.9.2", "typescript": "~5.4" }, @@ -61,9 +53,5 @@ "./app/controllers/**/*.ts", "./app/middleware/*.ts" ] - }, - "eslintConfig": { - "extends": "@adonisjs/eslint-config/app" - }, - "prettier": "@adonisjs/prettier-config" + } } From b945e26f43c1956fe87b303766ea0d3dd5398514 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 02:37:03 +0200 Subject: [PATCH 06/25] Fix builds --- pnpm-lock.yaml | 946 +------------------------------------------------ 1 file changed, 4 insertions(+), 942 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee231601c..e77f7e828 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,15 +121,9 @@ importers: '@adonisjs/assembler': specifier: ^7.7.0 version: 7.8.2(typescript@5.4.5) - '@adonisjs/eslint-config': - specifier: ^1.3.0 - version: 1.3.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5) '@adonisjs/http-server': specifier: ^7.2.3 version: 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) - '@adonisjs/prettier-config': - specifier: ^1.3.0 - version: 1.4.0 '@adonisjs/tsconfig': specifier: ^1.3.0 version: 1.4.0 @@ -139,18 +133,12 @@ importers: '@types/node': specifier: ^20.14.9 version: 20.14.14 - eslint: - specifier: ^8.57.0 - version: 8.57.1 hot-hook: specifier: ^0.2.6 version: 0.2.6 pino-pretty: specifier: ^11.2.1 version: 11.3.0 - prettier: - specifier: ^3.3.2 - version: 3.3.3 ts-node: specifier: ^10.9.2 version: 10.9.2(@swc/core@1.7.4(@swc/helpers@0.5.13))(@types/node@20.14.14)(typescript@5.4.5) @@ -599,15 +587,6 @@ packages: resolution: {integrity: sha512-CzK+njXTH3EK+d/UJPqckyqWocOItmLgHIUbvhpd6WvveBnfv1Dz5j9H3k+ogHqThDSJCXu1RkaRAC+HNym9gA==} engines: {node: '>=18.16.0'} - '@adonisjs/eslint-config@1.3.0': - resolution: {integrity: sha512-CBt/fl17+OCmaCd0rt79GvroDidaF/cBTc6iqjEh08IawAcanQE339kPRMgL1T43B6BDFmSahePvYU5es5j4yw==} - peerDependencies: - eslint: '>=7.4.0' - prettier: '>=2.0.0' - - '@adonisjs/eslint-plugin@1.3.0': - resolution: {integrity: sha512-LpN85yyuKkfo4t5PlE2Pij1GU3BcFh15cOH6BK7iDDcMkR6KduXB90hYiRu013EVIH+/sfxP5k2VjhBRc31Mqw==} - '@adonisjs/events@9.0.2': resolution: {integrity: sha512-qZn2e9V9C8tF4MNqEWv5JGxMG7gcHSJM8RncGpjuJ4cwFwd2jF4xrN6wkCprTVwoyZSxNS0Cp9NkAonySjG5vg==} engines: {node: '>=18.16.0'} @@ -671,9 +650,6 @@ packages: '@adonisjs/assembler': optional: true - '@adonisjs/prettier-config@1.4.0': - resolution: {integrity: sha512-6MqbAvGlxf8iNHwGiJmtMKMhwoxRNtpzuLV8F93lQtsLluU1fjF8EDDpTPl9RrQblt7+6zY28K5nh1rmmXk8mQ==} - '@adonisjs/repl@4.0.1': resolution: {integrity: sha512-fgDRC5I8RBKHzsJPM4rRQF/OWI0K9cNihCIf4yHdqQt3mhFqWSOUjSi4sXWykdICLiddmyBO86au7i0d0dj5vQ==} engines: {node: '>=18.16.0'} @@ -1009,21 +985,6 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - '@chevrotain/cst-dts-gen@11.0.3': - resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} - - '@chevrotain/gast@11.0.3': - resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} - - '@chevrotain/regexp-to-ast@11.0.3': - resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} - - '@chevrotain/types@11.0.3': - resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} - - '@chevrotain/utils@11.0.3': - resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -1622,24 +1583,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@faker-js/faker@9.2.0': resolution: {integrity: sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} @@ -1647,19 +1590,6 @@ packages: '@fastify/deepmerge@2.0.0': resolution: {integrity: sha512-fsaybTGDyQ5KpPsplQqb9yKdCf2x/pbNpMNk8Tvp3rRz7lVcupKysH4b2ELMN2P4Hak1+UqTYdTj/u4FNV2p0g==} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1914,10 +1844,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.48.2': resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==} engines: {node: '>=18'} @@ -2456,9 +2382,6 @@ packages: '@types/react@18.3.5': resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} @@ -2474,64 +2397,6 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@typescript-eslint/eslint-plugin@6.21.0': - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/type-utils@6.21.0': - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -2740,11 +2605,6 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.3: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} @@ -2766,9 +2626,6 @@ packages: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - algoliasearch@4.23.3: resolution: {integrity: sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==} @@ -2855,11 +2712,6 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -2918,10 +2770,6 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - bundle-require@5.0.0: resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2951,10 +2799,6 @@ packages: call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - camelcase-keys@7.0.2: resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} engines: {node: '>=12'} @@ -3024,9 +2868,6 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - chevrotain@11.0.3: - resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3042,10 +2883,6 @@ packages: cjs-module-lexer@1.4.1: resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - clean-stack@4.2.0: resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} engines: {node: '>=12'} @@ -3205,9 +3042,6 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css@3.0.0: - resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==} - cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -3282,10 +3116,6 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - dedent@1.5.3: resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: @@ -3298,9 +3128,6 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -3367,10 +3194,6 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -3390,9 +3213,6 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - edgejs-parser@0.2.11: - resolution: {integrity: sha512-qzCyNZ/DDXp5T+M0+dilJCE2v0tcLjmpcyuXk3xbbrL/Y9DpO9dBvLLCiS0136LdwrE/OJPz+ajc07sycsJeHg==} - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -3486,10 +3306,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -3499,58 +3315,6 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-compat-utils@0.5.1: - resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' - - eslint-config-prettier@8.10.0: - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-jsonc@2.16.0: - resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '>=6.0.0' - - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-unicorn@47.0.0: - resolution: {integrity: sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.38.0' - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} @@ -3558,23 +3322,11 @@ packages: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -3633,19 +3385,10 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-redact@3.5.0: resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} @@ -3678,10 +3421,6 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-type@19.6.0: resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==} engines: {node: '>=18'} @@ -3706,13 +3445,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flattie@1.1.1: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} @@ -3841,10 +3573,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} @@ -3869,9 +3597,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql@16.8.2: resolution: {integrity: sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -3934,9 +3659,6 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -4010,21 +3732,9 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -4062,10 +3772,6 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} @@ -4100,10 +3806,6 @@ packages: resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} @@ -4188,18 +3890,11 @@ packages: canvas: optional: true - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -4208,24 +3903,14 @@ packages: engines: {node: '>=10'} deprecated: Please switch to @apidevtools/json-schema-ref-parser - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - jsonc-eslint-parser@2.4.0: - resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -4239,9 +3924,6 @@ packages: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -4282,10 +3964,6 @@ packages: tedious: optional: true - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - lilconfig@3.1.2: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} @@ -4317,15 +3995,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -4497,10 +4169,6 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -4582,9 +4250,6 @@ packages: nanospinner@1.2.0: resolution: {integrity: sha512-dGxYcEj8YhuxjVO3PYmnj1nBhtwUkvuwYbLl/MduBPmQUPy3xBtG/ScJgqZgntQkX44UQaCSlFeW4rS5fUR/Sw==} - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -4629,9 +4294,6 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} @@ -4707,10 +4369,6 @@ packages: resolution: {integrity: sha512-9YkzVKIx9RVIET0lFjJOuf15VjI9AUsoNByBk5WYM66xVlAKDNy8anj08Ci3zZA+HgTwdDamYz5FCVYt2VoHkA==} engines: {node: '>= 12.0.0', npm: '>= 7.0.0'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -4775,10 +4433,6 @@ packages: package-manager-detector@0.2.2: resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - parse-imports@2.2.1: resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} engines: {node: '>= 18'} @@ -4951,17 +4605,6 @@ packages: preact@10.22.0: resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-edgejs@0.2.32: - resolution: {integrity: sha512-gVJJF0SopAvqul5pnyy98agzBPMTwtzTQs6ic6D/l2NcqwhokDrm0N3yy5+z6DPkMZr+LYT2K9ocENPilLk7uQ==} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -5071,18 +4714,10 @@ packages: resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} engines: {node: '>=18'} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - read-pkg-up@8.0.0: resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} engines: {node: '>=12'} - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-pkg@6.0.0: resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} engines: {node: '>=12'} @@ -5128,14 +4763,6 @@ packages: regex@4.4.0: resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==} - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - - regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -5147,10 +4774,6 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -5198,9 +4821,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} - safe-stable-stringify@2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} @@ -5224,10 +4844,6 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -5345,10 +4961,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-resolve@0.6.0: - resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -5579,14 +5191,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.6.2: - resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} - engines: {node: '>=12.20'} - - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} - tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} @@ -5606,9 +5210,6 @@ packages: resolution: {integrity: sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==} engines: {node: '>=18'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -5715,12 +5316,6 @@ packages: truncatise@0.0.8: resolution: {integrity: sha512-cXzueh9pzBCsLzhToB4X4gZCb3KYkrsAcBAX97JnazE74HOl3cpBJYEV7nabHeG/6/WXCU5Yujlde/WPBUwnsg==} - ts-api-utils@1.4.0: - resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -5766,26 +5361,10 @@ packages: typescript: optional: true - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -5827,11 +5406,6 @@ packages: engines: {node: '>=0.8.0'} hasBin: true - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - uid-safe@2.1.5: resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} engines: {node: '>= 0.8'} @@ -5907,9 +5481,6 @@ packages: uri-js-replace@1.0.1: resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -6134,10 +5705,6 @@ packages: engines: {node: '>=8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -6424,31 +5991,6 @@ snapshots: dotenv: 16.4.5 split-lines: 3.0.0 - '@adonisjs/eslint-config@1.3.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5)': - dependencies: - '@adonisjs/eslint-plugin': 1.3.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - eslint: 8.57.1 - eslint-config-prettier: 8.10.0(eslint@8.57.1) - eslint-plugin-jsonc: 2.16.0(eslint@8.57.1) - eslint-plugin-prettier: 5.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) - eslint-plugin-unicorn: 47.0.0(eslint@8.57.1) - jsonc-eslint-parser: 2.4.0 - prettier: 3.3.3 - transitivePeerDependencies: - - '@types/eslint' - - supports-color - - typescript - - '@adonisjs/eslint-plugin@1.3.0(eslint@8.57.1)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - transitivePeerDependencies: - - eslint - - supports-color - - typescript - '@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)': dependencies: '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) @@ -6543,10 +6085,6 @@ snapshots: optionalDependencies: '@adonisjs/assembler': 7.8.2(typescript@5.4.5) - '@adonisjs/prettier-config@1.4.0': - dependencies: - prettier-edgejs: 0.2.32 - '@adonisjs/repl@4.0.1': dependencies: '@poppinss/colors': 4.1.3 @@ -7048,23 +6586,6 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@chevrotain/cst-dts-gen@11.0.3': - dependencies: - '@chevrotain/gast': 11.0.3 - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 - - '@chevrotain/gast@11.0.3': - dependencies: - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 - - '@chevrotain/regexp-to-ast@11.0.3': {} - - '@chevrotain/types@11.0.3': {} - - '@chevrotain/utils@11.0.3': {} - '@colors/colors@1.5.0': optional: true @@ -7386,45 +6907,10 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.6(supports-color@9.4.0) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.1': {} - '@faker-js/faker@9.2.0': {} '@fastify/deepmerge@2.0.0': {} - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6(supports-color@9.4.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -7644,8 +7130,6 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.1.1': {} - '@playwright/test@1.48.2': dependencies: playwright: 1.48.2 @@ -8181,8 +7665,6 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 - '@types/semver@7.5.8': {} - '@types/statuses@2.0.5': {} '@types/tough-cookie@4.0.5': {} @@ -8193,92 +7675,6 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6(supports-color@9.4.0) - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6(supports-color@9.4.0) - eslint: 8.57.1 - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - debug: 4.3.6(supports-color@9.4.0) - eslint: 8.57.1 - ts-api-utils: 1.4.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6(supports-color@9.4.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.4.5)': - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - eslint: 8.57.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} '@vinejs/compiler@2.5.0': {} @@ -8548,10 +7944,6 @@ snapshots: acorn-walk: 8.3.3 optional: true - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 - acorn-walk@8.3.3: dependencies: acorn: 8.12.1 @@ -8576,13 +7968,6 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - algoliasearch@4.23.3: dependencies: '@algolia/cache-browser-local-storage': 4.23.3 @@ -8664,8 +8049,6 @@ snapshots: asynckit@0.4.0: {} - atob@2.1.2: {} - atomic-sleep@1.0.0: {} axios@1.7.7: @@ -8725,8 +8108,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - builtin-modules@3.3.0: {} - bundle-require@5.0.0(esbuild@0.23.1): dependencies: esbuild: 0.23.1 @@ -8752,8 +8133,6 @@ snapshots: call-me-maybe@1.0.2: {} - callsites@3.1.0: {} - camelcase-keys@7.0.2: dependencies: camelcase: 6.3.0 @@ -8816,15 +8195,6 @@ snapshots: check-error@2.1.1: {} - chevrotain@11.0.3: - dependencies: - '@chevrotain/cst-dts-gen': 11.0.3 - '@chevrotain/gast': 11.0.3 - '@chevrotain/regexp-to-ast': 11.0.3 - '@chevrotain/types': 11.0.3 - '@chevrotain/utils': 11.0.3 - lodash-es: 4.17.21 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -8845,10 +8215,6 @@ snapshots: cjs-module-lexer@1.4.1: {} - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - clean-stack@4.2.0: dependencies: escape-string-regexp: 5.0.0 @@ -9008,12 +8374,6 @@ snapshots: mdn-data: 2.0.30 source-map-js: 1.2.0 - css@3.0.0: - dependencies: - inherits: 2.0.4 - source-map: 0.6.1 - source-map-resolve: 0.6.0 - cssom@0.3.8: optional: true @@ -9072,14 +8432,10 @@ snapshots: decimal.js@10.4.3: optional: true - decode-uri-component@0.2.2: {} - dedent@1.5.3: {} deep-eql@5.0.2: {} - deep-is@0.1.4: {} - deepmerge@4.3.1: {} define-data-property@1.1.4: @@ -9138,10 +8494,6 @@ snapshots: dlv@1.1.3: {} - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} domexception@4.0.0: @@ -9155,10 +8507,6 @@ snapshots: eastasianwidth@0.2.0: {} - edgejs-parser@0.2.11: - dependencies: - chevrotain: 11.0.3 - ee-first@1.1.1: {} electron-to-chromium@1.5.52: {} @@ -9316,8 +8664,6 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -9329,126 +8675,14 @@ snapshots: source-map: 0.6.1 optional: true - eslint-compat-utils@0.5.1(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - semver: 7.6.3 - - eslint-config-prettier@8.10.0(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-plugin-jsonc@2.16.0(eslint@8.57.1): - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - eslint: 8.57.1 - eslint-compat-utils: 0.5.1(eslint@8.57.1) - espree: 9.6.1 - graphemer: 1.4.0 - jsonc-eslint-parser: 2.4.0 - natural-compare: 1.4.0 - synckit: 0.6.2 - - eslint-plugin-prettier@5.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): - dependencies: - eslint: 8.57.1 - prettier: 3.3.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.9.2 - optionalDependencies: - eslint-config-prettier: 8.10.0(eslint@8.57.1) - - eslint-plugin-unicorn@47.0.0(eslint@8.57.1): - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.57.1 - esquery: 1.6.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - jsesc: 3.0.2 - lodash: 4.17.21 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.27 - regjsparser: 0.10.0 - safe-regex: 2.1.1 - semver: 7.6.3 - strip-indent: 3.0.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.6(supports-color@9.4.0) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - esm-env@1.0.0: {} esm@3.2.25: {} - espree@9.6.1: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} + estraverse@5.3.0: + optional: true estree-walker@2.0.2: {} @@ -9456,7 +8690,8 @@ snapshots: dependencies: '@types/estree': 1.0.5 - esutils@2.0.3: {} + esutils@2.0.3: + optional: true etag@1.8.1: {} @@ -9519,8 +8754,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9529,10 +8762,6 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.5 - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - fast-redact@3.5.0: {} fast-safe-stringify@2.1.1: {} @@ -9559,10 +8788,6 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-type@19.6.0: dependencies: get-stream: 9.0.1 @@ -9590,14 +8815,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - - flatted@3.3.1: {} - flattie@1.1.1: {} focus-trap@7.5.4: @@ -9719,10 +8936,6 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globalyzer@0.1.0: {} globby@11.1.0: @@ -9759,8 +8972,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - graphql@16.8.2: {} handlebars@4.7.8: @@ -9820,8 +9031,6 @@ snapshots: hookable@5.5.3: {} - hosted-git-info@2.8.9: {} - hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -9901,17 +9110,8 @@ snapshots: ignore@5.3.1: {} - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - import-meta-resolve@4.1.0: {} - imurmurhash@0.1.4: {} - - indent-string@4.0.0: {} - indent-string@5.0.0: {} index-to-position@0.1.2: {} @@ -9938,10 +9138,6 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - is-core-module@2.13.1: dependencies: hasown: 2.0.2 @@ -9966,8 +9162,6 @@ snapshots: is-path-cwd@3.0.0: {} - is-path-inside@3.0.3: {} - is-path-inside@4.0.0: {} is-plain-obj@1.1.0: {} @@ -10056,33 +9250,18 @@ snapshots: - utf-8-validate optional: true - jsesc@0.5.0: {} - jsesc@3.0.2: {} - json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} json-schema-ref-parser@9.0.9: dependencies: '@apidevtools/json-schema-ref-parser': 9.0.9 - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: {} - jsonc-eslint-parser@2.4.0: - dependencies: - acorn: 8.12.1 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - semver: 7.6.3 - jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -10097,10 +9276,6 @@ snapshots: junk@4.0.1: {} - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - kind-of@6.0.3: {} kleur@4.1.5: {} @@ -10138,11 +9313,6 @@ snapshots: transitivePeerDependencies: - supports-color - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} @@ -10183,12 +9353,8 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash-es@4.17.21: {} - lodash.isequal@4.5.0: {} - lodash.merge@4.6.2: {} - lodash.sortby@4.7.0: {} lodash.startcase@4.4.0: {} @@ -10360,10 +9526,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -10441,8 +9603,6 @@ snapshots: dependencies: picocolors: 1.1.1 - natural-compare@1.4.0: {} - negotiator@0.6.3: {} neo-async@2.6.2: {} @@ -10486,13 +9646,6 @@ snapshots: node-releases@2.0.18: {} - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 @@ -10568,15 +9721,6 @@ snapshots: openapi-typescript-fetch@2.0.0: {} - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - os-tmpdir@1.0.2: {} outdent@0.5.0: {} @@ -10627,10 +9771,6 @@ snapshots: package-manager-detector@0.2.2: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - parse-imports@2.2.1: dependencies: es-module-lexer: 1.5.4 @@ -10791,19 +9931,6 @@ snapshots: preact@10.22.0: {} - prelude-ls@1.2.1: {} - - prettier-edgejs@0.2.32: - dependencies: - css: 3.0.0 - edgejs-parser: 0.2.11 - prettier: 3.3.3 - uglify-js: 3.19.3 - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - prettier@2.8.8: {} prettier@3.3.3: {} @@ -10896,25 +10023,12 @@ snapshots: read-pkg: 9.0.1 type-fest: 4.26.1 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - read-pkg-up@8.0.0: dependencies: find-up: 5.0.0 read-pkg: 6.0.0 type-fest: 1.4.0 - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-pkg@6.0.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -10968,20 +10082,12 @@ snapshots: regex@4.4.0: {} - regexp-tree@0.1.27: {} - - regjsparser@0.10.0: - dependencies: - jsesc: 0.5.0 - require-directory@2.1.1: {} require-from-string@2.0.2: {} requires-port@1.0.0: {} - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} resolve@1.22.8: @@ -11041,10 +10147,6 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex@2.1.1: - dependencies: - regexp-tree: 0.1.27 - safe-stable-stringify@2.5.0: {} safer-buffer@2.1.2: {} @@ -11069,8 +10171,6 @@ snapshots: secure-json-parse@2.7.0: {} - semver@5.7.2: {} - semver@6.3.1: {} semver@7.6.3: {} @@ -11213,11 +10313,6 @@ snapshots: source-map-js@1.2.1: {} - source-map-resolve@0.6.0: - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.2 - source-map@0.6.1: {} source-map@0.8.0-beta.0: @@ -11441,15 +10536,6 @@ snapshots: symbol-tree@3.2.4: optional: true - synckit@0.6.2: - dependencies: - tslib: 2.8.1 - - synckit@0.9.2: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.8.1 - tabbable@6.2.0: {} tarn@3.0.2: {} @@ -11460,8 +10546,6 @@ snapshots: terminal-size@4.0.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -11549,10 +10633,6 @@ snapshots: truncatise@0.0.8: {} - ts-api-utils@1.4.0(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - ts-interface-checker@0.1.13: {} ts-morph@23.0.0: @@ -11612,18 +10692,8 @@ snapshots: - tsx - yaml - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - type-fest@0.21.3: {} - type-fest@0.6.0: {} - - type-fest@0.8.1: {} - type-fest@1.4.0: {} type-fest@4.20.1: {} @@ -11646,8 +10716,6 @@ snapshots: uglify-js@3.18.0: optional: true - uglify-js@3.19.3: {} - uid-safe@2.1.5: dependencies: random-bytes: 1.0.0 @@ -11719,10 +10787,6 @@ snapshots: uri-js-replace@1.0.1: {} - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -11998,8 +11062,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} wrap-ansi@6.2.0: From 64f5725b914b90d3fa72e956d94972f3b5cb08f3 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 02:52:36 +0200 Subject: [PATCH 07/25] Fix tests --- packages/openapi-adonis/package.json | 3 +-- packages/openapi-adonis/test/index.test.ts | 3 +++ packages/openapi-decorators/package.json | 2 +- packages/openapi-decorators/test/loaders.test.ts | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 packages/openapi-adonis/test/index.test.ts diff --git a/packages/openapi-adonis/package.json b/packages/openapi-adonis/package.json index 4c199ca50..fb6284a4a 100644 --- a/packages/openapi-adonis/package.json +++ b/packages/openapi-adonis/package.json @@ -44,8 +44,7 @@ "dev": "tsup --watch", "format": "biome format . --write", "lint": "biome check .", - "test": "pnpm run \"/^test:/\"", - "test:js": "vitest run", + "test": "vitest run", "version": "pnpm run prepare && pnpm run build" }, "dependencies": { diff --git a/packages/openapi-adonis/test/index.test.ts b/packages/openapi-adonis/test/index.test.ts new file mode 100644 index 000000000..0225890b7 --- /dev/null +++ b/packages/openapi-adonis/test/index.test.ts @@ -0,0 +1,3 @@ +it('placeholder', () => { + expect(true).toBe(true) +}) diff --git a/packages/openapi-decorators/package.json b/packages/openapi-decorators/package.json index 59b33d177..e37a29f12 100644 --- a/packages/openapi-decorators/package.json +++ b/packages/openapi-decorators/package.json @@ -48,7 +48,7 @@ "dev": "tsup --watch", "format": "biome format . --write", "lint": "biome check .", - "test": "pnpm run \"/^test:/\"", + "test": "vitest run", "version": "pnpm run prepare && pnpm run build" }, "dependencies": { diff --git a/packages/openapi-decorators/test/loaders.test.ts b/packages/openapi-decorators/test/loaders.test.ts index 0409a2a33..ffc5a821e 100644 --- a/packages/openapi-decorators/test/loaders.test.ts +++ b/packages/openapi-decorators/test/loaders.test.ts @@ -1,5 +1,5 @@ import "reflect-metadata"; -import { DocumentBuilder, apiProperty } from "../src"; +import { DocumentBuilder } from "../src/builders/document-builder"; import { OperationBuilder } from "../src/builders/operation-builder"; import { loadApiBody } from "../src/loaders/loadApiBody"; import { loadApiOperation } from "../src/loaders/loadApiOperation"; @@ -10,6 +10,7 @@ import { loadApiResponse } from "../src/loaders/loadApiResponse"; import { loadApiTags } from "../src/loaders/loadApiTags"; import { loadSchema } from "../src/loaders/loadSchema"; import { resolveType } from "../src/loaders/loadType"; +import { apiProperty } from "../src/decorators/api-property"; describe("loaders", () => { describe("loadApiBody", () => { From 9baae82f709338ce72e99eec776180fe3ba95e8e Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sat, 10 Aug 2024 02:54:01 +0200 Subject: [PATCH 08/25] Run lint --- packages/openapi-adonis/test/index.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/openapi-adonis/test/index.test.ts b/packages/openapi-adonis/test/index.test.ts index 0225890b7..4cc4fd7ba 100644 --- a/packages/openapi-adonis/test/index.test.ts +++ b/packages/openapi-adonis/test/index.test.ts @@ -1,3 +1,3 @@ -it('placeholder', () => { - expect(true).toBe(true) -}) +it("placeholder", () => { + expect(true).toBe(true); +}); From ce8bef00689aa200c92852a2b0a87be4748f502c Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sun, 18 Aug 2024 23:07:40 +0200 Subject: [PATCH 09/25] Improve code splitting and architecture --- .gitignore | 1 + docs/data/contributors.json | 2 +- docs/openapi-adonis/index.md | 70 +++ docs/scripts/update-contributors.js | 1 - packages/openapi-adonis/biome.json | 2 +- .../app/controllers/users_controller.ts | 23 +- .../example/app/validators/user.ts | 12 + .../openapi-adonis/example/start/routes.ts | 23 +- packages/openapi-adonis/package.json | 2 + packages/openapi-adonis/src/index.ts | 6 +- .../src/loaders/loadController.ts | 57 --- .../openapi-adonis/src/loaders/loadRoute.ts | 30 +- .../src/resolvers/vine-type.resolver.ts | 202 ++++++++ packages/openapi-adonis/test/vine.test.ts | 114 +++++ packages/openapi-adonis/tsconfig.json | 2 +- packages/openapi-decorators/biome.json | 3 + packages/openapi-decorators/package.json | 6 + .../src/builders/document-builder.ts | 126 +++-- .../openapi-decorators/src/builders/index.ts | 1 - .../src/builders/operation-builder.ts | 29 +- .../src/builders/schema-builder.ts | 49 -- .../src/decorators/api-operation.ts | 7 +- .../openapi-decorators/src/loaders/index.ts | 2 +- .../src/loaders/loadApiBody.ts | 4 +- .../src/loaders/loadApiOperation.ts | 12 +- .../src/loaders/loadApiParam.ts | 4 +- .../src/loaders/loadApiProperty.ts | 20 +- .../src/loaders/loadApiQuery.ts | 4 +- .../src/loaders/loadApiResponse.ts | 4 +- .../src/loaders/loadController.ts | 59 +++ .../src/loaders/loadSchema.ts | 25 - .../src/loaders/loadType.ts | 11 +- .../openapi-decorators/src/resolvers/index.ts | 2 + .../src/resolvers/model-resolver.ts | 37 ++ .../src/resolvers/type-resolver.ts | 11 + packages/openapi-decorators/src/types.ts | 11 +- .../openapi-decorators/test/loaders.test.ts | 231 ++++++--- packages/openapi-decorators/tsup.config.ts | 2 +- pnpm-lock.yaml | 454 +++++++++++++++++- 39 files changed, 1357 insertions(+), 304 deletions(-) create mode 100644 docs/openapi-adonis/index.md create mode 100644 packages/openapi-adonis/example/app/validators/user.ts delete mode 100644 packages/openapi-adonis/src/loaders/loadController.ts create mode 100644 packages/openapi-adonis/src/resolvers/vine-type.resolver.ts create mode 100644 packages/openapi-adonis/test/vine.test.ts delete mode 100644 packages/openapi-decorators/src/builders/schema-builder.ts create mode 100644 packages/openapi-decorators/src/loaders/loadController.ts delete mode 100644 packages/openapi-decorators/src/loaders/loadSchema.ts create mode 100644 packages/openapi-decorators/src/resolvers/index.ts create mode 100644 packages/openapi-decorators/src/resolvers/model-resolver.ts create mode 100644 packages/openapi-decorators/src/resolvers/type-resolver.ts diff --git a/.gitignore b/.gitignore index 07389397b..777a4ce87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .DS_Store dist node_modules +coverage packages/openapi-typescript/test/fixtures/cli-outputs/out diff --git a/docs/data/contributors.json b/docs/data/contributors.json index a3f96de37..ae178c662 100644 --- a/docs/data/contributors.json +++ b/docs/data/contributors.json @@ -1 +1 @@ -{"openapi-typescript":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775879},{"username":"psmyrdek","name":"Przemek Smyrdek","avatar":"https://avatars.githubusercontent.com/u/6187417?v=4","links":[{"icon":"github","link":"https://github.com/psmyrdek"}],"lastFetch":1730904776065},{"username":"enmand","name":"Dan Enman","avatar":"https://avatars.githubusercontent.com/u/432487?v=4","links":[{"icon":"github","link":"https://github.com/enmand"}],"lastFetch":1730904776255},{"username":"atlefren","name":"Atle Frenvik Sveen","avatar":"https://avatars.githubusercontent.com/u/1829927?v=4","links":[{"icon":"github","link":"https://github.com/atlefren"}],"lastFetch":1730904776450},{"username":"tpdewolf","name":"Tim de Wolf","avatar":"https://avatars.githubusercontent.com/u/4455209?v=4","links":[{"icon":"github","link":"https://github.com/tpdewolf"}],"lastFetch":1730904776638},{"username":"tombarton","name":"Tom Barton","avatar":"https://avatars.githubusercontent.com/u/6222711?v=4","links":[{"icon":"github","link":"https://github.com/tombarton"}],"lastFetch":1730904776827},{"username":"svnv","name":"Sven Nicolai Viig","avatar":"https://avatars.githubusercontent.com/u/1080888?v=4","links":[{"icon":"github","link":"https://github.com/svnv"}],"lastFetch":1730904777020},{"username":"sorin-davidoi","name":"Sorin Davidoi","avatar":"https://avatars.githubusercontent.com/u/2109702?v=4","links":[{"icon":"github","link":"https://github.com/sorin-davidoi"}],"lastFetch":1730904777214},{"username":"scvnathan","name":"Nathan Schneirov","avatar":"https://avatars.githubusercontent.com/u/73474?v=4","links":[{"icon":"github","link":"https://github.com/scvnathan"}],"lastFetch":1730904777408},{"username":"lbenie","name":"Lucien Bénié","avatar":"https://avatars.githubusercontent.com/u/7316046?v=4","links":[{"icon":"github","link":"https://github.com/lbenie"}],"lastFetch":1730904777600},{"username":"bokub","name":"Boris K","avatar":"https://avatars.githubusercontent.com/u/17952318?v=4","links":[{"icon":"github","link":"https://github.com/bokub"}],"lastFetch":1730904777782},{"username":"antonk52","name":"Anton Kastritskii","avatar":"https://avatars.githubusercontent.com/u/5817809?v=4","links":[{"icon":"github","link":"https://github.com/antonk52"}],"lastFetch":1730904777971},{"username":"tshelburne","name":"Tim Shelburne","avatar":"https://avatars.githubusercontent.com/u/1202267?v=4","links":[{"icon":"github","link":"https://github.com/tshelburne"}],"lastFetch":1730904778150},{"username":"typeofweb","name":"Michał Miszczyszyn","avatar":"https://avatars.githubusercontent.com/u/1338731?v=4","links":[{"icon":"github","link":"https://github.com/typeofweb"}],"lastFetch":1730904778356},{"username":"skh-","name":"Sam K Hall","avatar":"https://avatars.githubusercontent.com/u/1292598?v=4","links":[{"icon":"github","link":"https://github.com/skh-"}],"lastFetch":1730904778622},{"username":"BlooJeans","name":"Matt Jeanes","avatar":"https://avatars.githubusercontent.com/u/1751182?v=4","links":[{"icon":"github","link":"https://github.com/BlooJeans"}],"lastFetch":1730904778839},{"username":"selbekk","name":"Kristofer Giltvedt Selbekk","avatar":"https://avatars.githubusercontent.com/u/1307267?v=4","links":[{"icon":"github","link":"https://github.com/selbekk"}],"lastFetch":1730904779063},{"username":"Mause","name":"Elliana May","avatar":"https://avatars.githubusercontent.com/u/1405026?v=4","links":[{"icon":"github","link":"https://github.com/Mause"}],"lastFetch":1730904779274},{"username":"henhal","name":"Henrik Hall","avatar":"https://avatars.githubusercontent.com/u/9608258?v=4","links":[{"icon":"github","link":"https://github.com/henhal"}],"lastFetch":1730904779469},{"username":"gr2m","name":"Gregor Martynus","avatar":"https://avatars.githubusercontent.com/u/39992?v=4","links":[{"icon":"github","link":"https://github.com/gr2m"}],"lastFetch":1730904779659},{"username":"samdbmg","name":"Sam Mesterton-Gibbons","avatar":"https://avatars.githubusercontent.com/u/408983?v=4","links":[{"icon":"github","link":"https://github.com/samdbmg"}],"lastFetch":1730904779851},{"username":"rendall","name":"Rendall","avatar":"https://avatars.githubusercontent.com/u/293263?v=4","links":[{"icon":"github","link":"https://github.com/rendall"}],"lastFetch":1730904780092},{"username":"robertmassaioli","name":"Robert Massaioli","avatar":"https://avatars.githubusercontent.com/u/149178?v=4","links":[{"icon":"github","link":"https://github.com/robertmassaioli"}],"lastFetch":1730904780280},{"username":"jankuca","name":"Jan Kuča","avatar":"https://avatars.githubusercontent.com/u/367262?v=4","links":[{"icon":"github","link":"https://github.com/jankuca"}],"lastFetch":1730904780459},{"username":"th-m","name":"Thomas Valadez","avatar":"https://avatars.githubusercontent.com/u/13792029?v=4","links":[{"icon":"github","link":"https://github.com/th-m"}],"lastFetch":1730904780665},{"username":"asithade","name":"Asitha de Silva","avatar":"https://avatars.githubusercontent.com/u/3814354?v=4","links":[{"icon":"github","link":"https://github.com/asithade"}],"lastFetch":1730904780855},{"username":"misha-erm","name":"Misha","avatar":"https://avatars.githubusercontent.com/u/8783498?v=4","links":[{"icon":"github","link":"https://github.com/misha-erm"}],"lastFetch":1730904781054},{"username":"radist2s","name":"Alex Batalov","avatar":"https://avatars.githubusercontent.com/u/725645?v=4","links":[{"icon":"github","link":"https://github.com/radist2s"}],"lastFetch":1730904781234},{"username":"FedeBev","name":"Federico Bevione","avatar":"https://avatars.githubusercontent.com/u/22151395?v=4","links":[{"icon":"github","link":"https://github.com/FedeBev"}],"lastFetch":1730904781434},{"username":"yamacent","name":"Daisuke Yamamoto","avatar":"https://avatars.githubusercontent.com/u/8544439?v=4","links":[{"icon":"github","link":"https://github.com/yamacent"}],"lastFetch":1730904781617},{"username":"dnalborczyk","name":null,"avatar":"https://avatars.githubusercontent.com/u/2903325?v=4","links":[{"icon":"github","link":"https://github.com/dnalborczyk"}],"lastFetch":1730904781848},{"username":"FabioWanner","name":null,"avatar":"https://avatars.githubusercontent.com/u/46821078?v=4","links":[{"icon":"github","link":"https://github.com/FabioWanner"}],"lastFetch":1730904782036},{"username":"ashsmith","name":"Ash Smith","avatar":"https://avatars.githubusercontent.com/u/1086841?v=4","links":[{"icon":"github","link":"https://github.com/ashsmith"}],"lastFetch":1730904782216},{"username":"mehalter","name":"Micah Halter","avatar":"https://avatars.githubusercontent.com/u/1591837?v=4","links":[{"icon":"github","link":"https://github.com/mehalter"}],"lastFetch":1730904782405},{"username":"Chrg1001","name":"chrg1001","avatar":"https://avatars.githubusercontent.com/u/40189653?v=4","links":[{"icon":"github","link":"https://github.com/Chrg1001"}],"lastFetch":1730904782605},{"username":"sharmarajdaksh","name":"Dakshraj Sharma","avatar":"https://avatars.githubusercontent.com/u/33689528?v=4","links":[{"icon":"github","link":"https://github.com/sharmarajdaksh"}],"lastFetch":1730904782804},{"username":"shuluster","name":"Shaosu Liu","avatar":"https://avatars.githubusercontent.com/u/1707910?v=4","links":[{"icon":"github","link":"https://github.com/shuluster"}],"lastFetch":1730904782994},{"username":"FDiskas","name":"Vytenis","avatar":"https://avatars.githubusercontent.com/u/468006?v=4","links":[{"icon":"github","link":"https://github.com/FDiskas"}],"lastFetch":1730904783188},{"username":"ericzorn93","name":"Eric Zorn","avatar":"https://avatars.githubusercontent.com/u/22532542?v=4","links":[{"icon":"github","link":"https://github.com/ericzorn93"}],"lastFetch":1730904783381},{"username":"mbelsky","name":"Max Belsky","avatar":"https://avatars.githubusercontent.com/u/3923527?v=4","links":[{"icon":"github","link":"https://github.com/mbelsky"}],"lastFetch":1730904783564},{"username":"techbech","name":"Peter Bech","avatar":"https://avatars.githubusercontent.com/u/1520592?v=4","links":[{"icon":"github","link":"https://github.com/techbech"}],"lastFetch":1730904783756},{"username":"rustyconover","name":"Rusty Conover","avatar":"https://avatars.githubusercontent.com/u/731941?v=4","links":[{"icon":"github","link":"https://github.com/rustyconover"}],"lastFetch":1730904783935},{"username":"bunkscene","name":"Dave Carlson","avatar":"https://avatars.githubusercontent.com/u/2693678?v=4","links":[{"icon":"github","link":"https://github.com/bunkscene"}],"lastFetch":1730904784123},{"username":"ottomated","name":null,"avatar":"https://avatars.githubusercontent.com/u/31470743?v=4","links":[{"icon":"github","link":"https://github.com/ottomated"}],"lastFetch":1730904784313},{"username":"sadfsdfdsa","name":"Artem Shuvaev","avatar":"https://avatars.githubusercontent.com/u/28733669?v=4","links":[{"icon":"github","link":"https://github.com/sadfsdfdsa"}],"lastFetch":1730904784500},{"username":"ajaishankar","name":null,"avatar":"https://avatars.githubusercontent.com/u/328008?v=4","links":[{"icon":"github","link":"https://github.com/ajaishankar"}],"lastFetch":1730904784702},{"username":"dominikdosoudil","name":"Dominik Dosoudil","avatar":"https://avatars.githubusercontent.com/u/15929942?v=4","links":[{"icon":"github","link":"https://github.com/dominikdosoudil"}],"lastFetch":1730904784895},{"username":"kgtkr","name":"kgtkr","avatar":"https://avatars.githubusercontent.com/u/17868838?v=4","links":[{"icon":"github","link":"https://github.com/kgtkr"}],"lastFetch":1730904785091},{"username":"berzi","name":null,"avatar":"https://avatars.githubusercontent.com/u/32619123?v=4","links":[{"icon":"github","link":"https://github.com/berzi"}],"lastFetch":1730904785279},{"username":"PhilipTrauner","name":"Philip Trauner","avatar":"https://avatars.githubusercontent.com/u/9287847?v=4","links":[{"icon":"github","link":"https://github.com/PhilipTrauner"}],"lastFetch":1730904785465},{"username":"Powell-v2","name":"Pavel Yermolin","avatar":"https://avatars.githubusercontent.com/u/25308326?v=4","links":[{"icon":"github","link":"https://github.com/Powell-v2"}],"lastFetch":1730904785651},{"username":"duncanbeevers","name":"Duncan Beevers","avatar":"https://avatars.githubusercontent.com/u/7367?v=4","links":[{"icon":"github","link":"https://github.com/duncanbeevers"}],"lastFetch":1730904785833},{"username":"tkukushkin","name":"Timofei Kukushkin","avatar":"https://avatars.githubusercontent.com/u/1482516?v=4","links":[{"icon":"github","link":"https://github.com/tkukushkin"}],"lastFetch":1730904786028},{"username":"Semigradsky","name":"Dmitry Semigradsky","avatar":"https://avatars.githubusercontent.com/u/1198848?v=4","links":[{"icon":"github","link":"https://github.com/Semigradsky"}],"lastFetch":1730904786239},{"username":"MrLeebo","name":"Jeremy Liberman","avatar":"https://avatars.githubusercontent.com/u/2754163?v=4","links":[{"icon":"github","link":"https://github.com/MrLeebo"}],"lastFetch":1730904786427},{"username":"axelhzf","name":"Axel Hernández Ferrera","avatar":"https://avatars.githubusercontent.com/u/175627?v=4","links":[{"icon":"github","link":"https://github.com/axelhzf"}],"lastFetch":1730904786621},{"username":"imagoiq","name":"Loïc Fürhoff","avatar":"https://avatars.githubusercontent.com/u/12294151?v=4","links":[{"icon":"github","link":"https://github.com/imagoiq"}],"lastFetch":1730904786815},{"username":"BTMPL","name":"Bartosz Szczeciński","avatar":"https://avatars.githubusercontent.com/u/247153?v=4","links":[{"icon":"github","link":"https://github.com/BTMPL"}],"lastFetch":1730904787028},{"username":"HiiiiD","name":"Marco Salomone","avatar":"https://avatars.githubusercontent.com/u/61231210?v=4","links":[{"icon":"github","link":"https://github.com/HiiiiD"}],"lastFetch":1730904787218},{"username":"yacinehmito","name":"Yacine Hmito","avatar":"https://avatars.githubusercontent.com/u/6893840?v=4","links":[{"icon":"github","link":"https://github.com/yacinehmito"}],"lastFetch":1730904787414},{"username":"sajadtorkamani","name":"Sajad Torkamani","avatar":"https://avatars.githubusercontent.com/u/9380313?v=4","links":[{"icon":"github","link":"https://github.com/sajadtorkamani"}],"lastFetch":1730904787613},{"username":"mvdbeek","name":"Marius van den Beek","avatar":"https://avatars.githubusercontent.com/u/6804901?v=4","links":[{"icon":"github","link":"https://github.com/mvdbeek"}],"lastFetch":1730904787822},{"username":"sgrimm","name":"Steven Grimm","avatar":"https://avatars.githubusercontent.com/u/1248649?v=4","links":[{"icon":"github","link":"https://github.com/sgrimm"}],"lastFetch":1730904788040},{"username":"Swiftwork","name":"Erik Hughes","avatar":"https://avatars.githubusercontent.com/u/455178?v=4","links":[{"icon":"github","link":"https://github.com/Swiftwork"}],"lastFetch":1730904788237},{"username":"mtth","name":"Matthieu Monsch","avatar":"https://avatars.githubusercontent.com/u/1216372?v=4","links":[{"icon":"github","link":"https://github.com/mtth"}],"lastFetch":1730904788440},{"username":"mitchell-merry","name":"Mitchell Merry","avatar":"https://avatars.githubusercontent.com/u/8567231?v=4","links":[{"icon":"github","link":"https://github.com/mitchell-merry"}],"lastFetch":1730904788658},{"username":"qnp","name":"François Risoud","avatar":"https://avatars.githubusercontent.com/u/6012554?v=4","links":[{"icon":"github","link":"https://github.com/qnp"}],"lastFetch":1730904788873},{"username":"shoffmeister","name":null,"avatar":"https://avatars.githubusercontent.com/u/3868036?v=4","links":[{"icon":"github","link":"https://github.com/shoffmeister"}],"lastFetch":1730904789090},{"username":"liangskyli","name":"liangsky","avatar":"https://avatars.githubusercontent.com/u/31531283?v=4","links":[{"icon":"github","link":"https://github.com/liangskyli"}],"lastFetch":1730904789278},{"username":"happycollision","name":"Don Denton","avatar":"https://avatars.githubusercontent.com/u/3663628?v=4","links":[{"icon":"github","link":"https://github.com/happycollision"}],"lastFetch":1730904789514},{"username":"ysmood","name":"Yad Smood","avatar":"https://avatars.githubusercontent.com/u/1415488?v=4","links":[{"icon":"github","link":"https://github.com/ysmood"}],"lastFetch":1730904789695},{"username":"barakalon","name":"barak","avatar":"https://avatars.githubusercontent.com/u/12398927?v=4","links":[{"icon":"github","link":"https://github.com/barakalon"}],"lastFetch":1730904789894},{"username":"horaklukas","name":"Lukáš Horák","avatar":"https://avatars.githubusercontent.com/u/996088?v=4","links":[{"icon":"github","link":"https://github.com/horaklukas"}],"lastFetch":1730904790097},{"username":"pvanagtmaal","name":null,"avatar":"https://avatars.githubusercontent.com/u/5946464?v=4","links":[{"icon":"github","link":"https://github.com/pvanagtmaal"}],"lastFetch":1730904790307},{"username":"toomuchdesign","name":"Andrea Carraro","avatar":"https://avatars.githubusercontent.com/u/4573549?v=4","links":[{"icon":"github","link":"https://github.com/toomuchdesign"}],"lastFetch":1730904790491},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1730904790681},{"username":"tkrotoff","name":"Tanguy Krotoff","avatar":"https://avatars.githubusercontent.com/u/643434?v=4","links":[{"icon":"github","link":"https://github.com/tkrotoff"}],"lastFetch":1730904790877},{"username":"pimveldhuisen","name":"Pim Veldhuisen","avatar":"https://avatars.githubusercontent.com/u/3043834?v=4","links":[{"icon":"github","link":"https://github.com/pimveldhuisen"}],"lastFetch":1730904791082},{"username":"asvishnyakov","name":"Aleksandr Vishniakov","avatar":"https://avatars.githubusercontent.com/u/6369252?v=4","links":[{"icon":"github","link":"https://github.com/asvishnyakov"}],"lastFetch":1730904791273},{"username":"SchabaJo","name":null,"avatar":"https://avatars.githubusercontent.com/u/138689813?v=4","links":[{"icon":"github","link":"https://github.com/SchabaJo"}],"lastFetch":1730904791463},{"username":"AhsanFazal","name":"Ahsan Fazal","avatar":"https://avatars.githubusercontent.com/u/7458046?v=4","links":[{"icon":"github","link":"https://github.com/AhsanFazal"}],"lastFetch":1730904791703},{"username":"ElForastero","name":"Eugene Dzhumak","avatar":"https://avatars.githubusercontent.com/u/5102818?v=4","links":[{"icon":"github","link":"https://github.com/ElForastero"}],"lastFetch":1730904791901},{"username":"msgadi","name":"Mohammed Gadi","avatar":"https://avatars.githubusercontent.com/u/9037086?v=4","links":[{"icon":"github","link":"https://github.com/msgadi"}],"lastFetch":1730904792087},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1730904792299},{"username":"christoph-fricke","name":"Christoph Fricke","avatar":"https://avatars.githubusercontent.com/u/23103835?v=4","links":[{"icon":"github","link":"https://github.com/christoph-fricke"}],"lastFetch":1730904792483},{"username":"JorrinKievit","name":"Jorrin","avatar":"https://avatars.githubusercontent.com/u/43169049?v=4","links":[{"icon":"github","link":"https://github.com/JorrinKievit"}],"lastFetch":1730904792667},{"username":"WickyNilliams","name":"Nick Williams","avatar":"https://avatars.githubusercontent.com/u/1091390?v=4","links":[{"icon":"github","link":"https://github.com/WickyNilliams"}],"lastFetch":1730904792858},{"username":"hrsh7th","name":"hrsh7th","avatar":"https://avatars.githubusercontent.com/u/629908?v=4","links":[{"icon":"github","link":"https://github.com/hrsh7th"}],"lastFetch":1730904793044},{"username":"davidleger95","name":"David Leger","avatar":"https://avatars.githubusercontent.com/u/10498708?v=4","links":[{"icon":"github","link":"https://github.com/davidleger95"}],"lastFetch":1729913934448},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1730904869285},{"username":"mzronek","name":"Matthias Zronek","avatar":"https://avatars.githubusercontent.com/u/3847700?v=4","links":[{"icon":"github","link":"https://github.com/mzronek"}],"lastFetch":1730904869474},{"username":"raurfang","name":"Łukasz Wiśniewski","avatar":"https://avatars.githubusercontent.com/u/867241?v=4","links":[{"icon":"github","link":"https://github.com/raurfang"}],"lastFetch":1730904869679},{"username":"JeanRemiDelteil","name":"Jean-Rémi Delteil","avatar":"https://avatars.githubusercontent.com/u/9743907?v=4","links":[{"icon":"github","link":"https://github.com/JeanRemiDelteil"}],"lastFetch":1730904869872},{"username":"TzviPM","name":"Tzvi Melamed","avatar":"https://avatars.githubusercontent.com/u/1950680?v=4","links":[{"icon":"github","link":"https://github.com/TzviPM"}],"lastFetch":1730904870076},{"username":"LucaSchwan","name":"ehrenschwan","avatar":"https://avatars.githubusercontent.com/u/25820532?v=4","links":[{"icon":"github","link":"https://github.com/LucaSchwan"}],"lastFetch":1730904870278},{"username":"nzapponi","name":"Niccolo Zapponi","avatar":"https://avatars.githubusercontent.com/u/20582065?v=4","links":[{"icon":"github","link":"https://github.com/nzapponi"}],"lastFetch":1730904870468},{"username":"luchsamapparat","name":"Marvin Luchs","avatar":"https://avatars.githubusercontent.com/u/875017?v=4","links":[{"icon":"github","link":"https://github.com/luchsamapparat"}],"lastFetch":1730904870652},{"username":"nmacmunn","name":"Neil MacMunn","avatar":"https://avatars.githubusercontent.com/u/849964?v=4","links":[{"icon":"github","link":"https://github.com/nmacmunn"}],"lastFetch":1730904870844}],"openapi-fetch":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775872},{"username":"fergusean","name":null,"avatar":"https://avatars.githubusercontent.com/u/1029297?v=4","links":[{"icon":"github","link":"https://github.com/fergusean"}],"lastFetch":1730904776068},{"username":"shinzui","name":"Nadeem Bitar","avatar":"https://avatars.githubusercontent.com/u/519?v=4","links":[{"icon":"github","link":"https://github.com/shinzui"}],"lastFetch":1730904776251},{"username":"ezpuzz","name":"Emory Petermann","avatar":"https://avatars.githubusercontent.com/u/672182?v=4","links":[{"icon":"github","link":"https://github.com/ezpuzz"}],"lastFetch":1730904776445},{"username":"KotoriK","name":null,"avatar":"https://avatars.githubusercontent.com/u/52659125?v=4","links":[{"icon":"github","link":"https://github.com/KotoriK"}],"lastFetch":1730904776662},{"username":"fletchertyler914","name":"Tyler Fletcher","avatar":"https://avatars.githubusercontent.com/u/3344498?v=4","links":[{"icon":"github","link":"https://github.com/fletchertyler914"}],"lastFetch":1730904776885},{"username":"nholik","name":"Nicklos Holik","avatar":"https://avatars.githubusercontent.com/u/2022214?v=4","links":[{"icon":"github","link":"https://github.com/nholik"}],"lastFetch":1730904777069},{"username":"roj1512","name":null,"avatar":"https://avatars.githubusercontent.com/u/175297870?v=4","links":[{"icon":"github","link":"https://github.com/roj1512"}],"lastFetch":1730904777261},{"username":"nickcaballero","name":"Nick Caballero","avatar":"https://avatars.githubusercontent.com/u/355976?v=4","links":[{"icon":"github","link":"https://github.com/nickcaballero"}],"lastFetch":1730904777452},{"username":"hd-o","name":"Hadrian de Oliveira","avatar":"https://avatars.githubusercontent.com/u/58871222?v=4","links":[{"icon":"github","link":"https://github.com/hd-o"}],"lastFetch":1730904777662},{"username":"kecrily","name":"Percy Ma","avatar":"https://avatars.githubusercontent.com/u/45708948?v=4","links":[{"icon":"github","link":"https://github.com/kecrily"}],"lastFetch":1730904777856},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1730904778045},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1730904778226},{"username":"marcomuser","name":"Marco Muser","avatar":"https://avatars.githubusercontent.com/u/64737396?v=4","links":[{"icon":"github","link":"https://github.com/marcomuser"}],"lastFetch":1730904778456},{"username":"HugeLetters","name":"Evgenii Perminov","avatar":"https://avatars.githubusercontent.com/u/119697239?v=4","links":[{"icon":"github","link":"https://github.com/HugeLetters"}],"lastFetch":1730904778645},{"username":"Fumaz","name":"alex","avatar":"https://avatars.githubusercontent.com/u/45318608?v=4","links":[{"icon":"github","link":"https://github.com/Fumaz"}],"lastFetch":1730904778836},{"username":"darwish","name":"Mike Darwish","avatar":"https://avatars.githubusercontent.com/u/292570?v=4","links":[{"icon":"github","link":"https://github.com/darwish"}],"lastFetch":1730904779040},{"username":"kaechele","name":"Felix Kaechele","avatar":"https://avatars.githubusercontent.com/u/454490?v=4","links":[{"icon":"github","link":"https://github.com/kaechele"}],"lastFetch":1730904779235},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1730904779414},{"username":"mikestopcontinues","name":"Mike Stop Continues","avatar":"https://avatars.githubusercontent.com/u/150434?v=4","links":[{"icon":"github","link":"https://github.com/mikestopcontinues"}],"lastFetch":1730904779611},{"username":"JE-Lee","name":"maurice","avatar":"https://avatars.githubusercontent.com/u/19794813?v=4","links":[{"icon":"github","link":"https://github.com/JE-Lee"}],"lastFetch":1730904779792},{"username":"vipentti","name":"Ville Penttinen","avatar":"https://avatars.githubusercontent.com/u/4726680?v=4","links":[{"icon":"github","link":"https://github.com/vipentti"}],"lastFetch":1730904780019},{"username":"armandabric","name":"Armand Abric","avatar":"https://avatars.githubusercontent.com/u/95120?v=4","links":[{"icon":"github","link":"https://github.com/armandabric"}],"lastFetch":1730904780220},{"username":"illright","name":"Lev Chelyadinov","avatar":"https://avatars.githubusercontent.com/u/15035286?v=4","links":[{"icon":"github","link":"https://github.com/illright"}],"lastFetch":1730904780416}],"openapi-react-query":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775876},{"username":"kerwanp","name":"Martin Paucot","avatar":"https://avatars.githubusercontent.com/u/36955373?v=4","links":[{"icon":"github","link":"https://github.com/kerwanp"}],"lastFetch":1730904776056},{"username":"yoshi2no","name":"yoshi2no","avatar":"https://avatars.githubusercontent.com/u/57059705?v=4","links":[{"icon":"github","link":"https://github.com/yoshi2no"}],"lastFetch":1730904776248},{"username":"elaygelbart","name":"Elay Gelbart","avatar":"https://avatars.githubusercontent.com/u/88675154?v=4","links":[{"icon":"github","link":"https://github.com/elaygelbart"}],"lastFetch":1730904973287}],"swr-openapi":[{"username":"htunnicliff","name":"Hunter Tunnicliff","avatar":"https://avatars.githubusercontent.com/u/7614039?v=4","links":[{"icon":"github","link":"https://github.com/htunnicliff"}],"lastFetch":1730904775878}]} \ No newline at end of file +{"openapi-typescript":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775879},{"username":"psmyrdek","name":"Przemek Smyrdek","avatar":"https://avatars.githubusercontent.com/u/6187417?v=4","links":[{"icon":"github","link":"https://github.com/psmyrdek"}],"lastFetch":1730904776065},{"username":"enmand","name":"Dan Enman","avatar":"https://avatars.githubusercontent.com/u/432487?v=4","links":[{"icon":"github","link":"https://github.com/enmand"}],"lastFetch":1730904776255},{"username":"atlefren","name":"Atle Frenvik Sveen","avatar":"https://avatars.githubusercontent.com/u/1829927?v=4","links":[{"icon":"github","link":"https://github.com/atlefren"}],"lastFetch":1730904776450},{"username":"tpdewolf","name":"Tim de Wolf","avatar":"https://avatars.githubusercontent.com/u/4455209?v=4","links":[{"icon":"github","link":"https://github.com/tpdewolf"}],"lastFetch":1730904776638},{"username":"tombarton","name":"Tom Barton","avatar":"https://avatars.githubusercontent.com/u/6222711?v=4","links":[{"icon":"github","link":"https://github.com/tombarton"}],"lastFetch":1730904776827},{"username":"svnv","name":"Sven Nicolai Viig","avatar":"https://avatars.githubusercontent.com/u/1080888?v=4","links":[{"icon":"github","link":"https://github.com/svnv"}],"lastFetch":1730904777020},{"username":"sorin-davidoi","name":"Sorin Davidoi","avatar":"https://avatars.githubusercontent.com/u/2109702?v=4","links":[{"icon":"github","link":"https://github.com/sorin-davidoi"}],"lastFetch":1730904777214},{"username":"scvnathan","name":"Nathan Schneirov","avatar":"https://avatars.githubusercontent.com/u/73474?v=4","links":[{"icon":"github","link":"https://github.com/scvnathan"}],"lastFetch":1730904777408},{"username":"lbenie","name":"Lucien Bénié","avatar":"https://avatars.githubusercontent.com/u/7316046?v=4","links":[{"icon":"github","link":"https://github.com/lbenie"}],"lastFetch":1730904777600},{"username":"bokub","name":"Boris K","avatar":"https://avatars.githubusercontent.com/u/17952318?v=4","links":[{"icon":"github","link":"https://github.com/bokub"}],"lastFetch":1730904777782},{"username":"antonk52","name":"Anton Kastritskii","avatar":"https://avatars.githubusercontent.com/u/5817809?v=4","links":[{"icon":"github","link":"https://github.com/antonk52"}],"lastFetch":1730904777971},{"username":"tshelburne","name":"Tim Shelburne","avatar":"https://avatars.githubusercontent.com/u/1202267?v=4","links":[{"icon":"github","link":"https://github.com/tshelburne"}],"lastFetch":1730904778150},{"username":"typeofweb","name":"Michał Miszczyszyn","avatar":"https://avatars.githubusercontent.com/u/1338731?v=4","links":[{"icon":"github","link":"https://github.com/typeofweb"}],"lastFetch":1730904778356},{"username":"skh-","name":"Sam K Hall","avatar":"https://avatars.githubusercontent.com/u/1292598?v=4","links":[{"icon":"github","link":"https://github.com/skh-"}],"lastFetch":1730904778622},{"username":"BlooJeans","name":"Matt Jeanes","avatar":"https://avatars.githubusercontent.com/u/1751182?v=4","links":[{"icon":"github","link":"https://github.com/BlooJeans"}],"lastFetch":1730904778839},{"username":"selbekk","name":"Kristofer Giltvedt Selbekk","avatar":"https://avatars.githubusercontent.com/u/1307267?v=4","links":[{"icon":"github","link":"https://github.com/selbekk"}],"lastFetch":1730904779063},{"username":"Mause","name":"Elliana May","avatar":"https://avatars.githubusercontent.com/u/1405026?v=4","links":[{"icon":"github","link":"https://github.com/Mause"}],"lastFetch":1730904779274},{"username":"henhal","name":"Henrik Hall","avatar":"https://avatars.githubusercontent.com/u/9608258?v=4","links":[{"icon":"github","link":"https://github.com/henhal"}],"lastFetch":1730904779469},{"username":"gr2m","name":"Gregor Martynus","avatar":"https://avatars.githubusercontent.com/u/39992?v=4","links":[{"icon":"github","link":"https://github.com/gr2m"}],"lastFetch":1730904779659},{"username":"samdbmg","name":"Sam Mesterton-Gibbons","avatar":"https://avatars.githubusercontent.com/u/408983?v=4","links":[{"icon":"github","link":"https://github.com/samdbmg"}],"lastFetch":1730904779851},{"username":"rendall","name":"Rendall","avatar":"https://avatars.githubusercontent.com/u/293263?v=4","links":[{"icon":"github","link":"https://github.com/rendall"}],"lastFetch":1730904780092},{"username":"robertmassaioli","name":"Robert Massaioli","avatar":"https://avatars.githubusercontent.com/u/149178?v=4","links":[{"icon":"github","link":"https://github.com/robertmassaioli"}],"lastFetch":1730904780280},{"username":"jankuca","name":"Jan Kuča","avatar":"https://avatars.githubusercontent.com/u/367262?v=4","links":[{"icon":"github","link":"https://github.com/jankuca"}],"lastFetch":1730904780459},{"username":"th-m","name":"Thomas Valadez","avatar":"https://avatars.githubusercontent.com/u/13792029?v=4","links":[{"icon":"github","link":"https://github.com/th-m"}],"lastFetch":1730904780665},{"username":"asithade","name":"Asitha de Silva","avatar":"https://avatars.githubusercontent.com/u/3814354?v=4","links":[{"icon":"github","link":"https://github.com/asithade"}],"lastFetch":1730904780855},{"username":"misha-erm","name":"Misha","avatar":"https://avatars.githubusercontent.com/u/8783498?v=4","links":[{"icon":"github","link":"https://github.com/misha-erm"}],"lastFetch":1730904781054},{"username":"radist2s","name":"Alex Batalov","avatar":"https://avatars.githubusercontent.com/u/725645?v=4","links":[{"icon":"github","link":"https://github.com/radist2s"}],"lastFetch":1730904781234},{"username":"FedeBev","name":"Federico Bevione","avatar":"https://avatars.githubusercontent.com/u/22151395?v=4","links":[{"icon":"github","link":"https://github.com/FedeBev"}],"lastFetch":1730904781434},{"username":"yamacent","name":"Daisuke Yamamoto","avatar":"https://avatars.githubusercontent.com/u/8544439?v=4","links":[{"icon":"github","link":"https://github.com/yamacent"}],"lastFetch":1730904781617},{"username":"dnalborczyk","name":null,"avatar":"https://avatars.githubusercontent.com/u/2903325?v=4","links":[{"icon":"github","link":"https://github.com/dnalborczyk"}],"lastFetch":1730904781848},{"username":"FabioWanner","name":null,"avatar":"https://avatars.githubusercontent.com/u/46821078?v=4","links":[{"icon":"github","link":"https://github.com/FabioWanner"}],"lastFetch":1730904782036},{"username":"ashsmith","name":"Ash Smith","avatar":"https://avatars.githubusercontent.com/u/1086841?v=4","links":[{"icon":"github","link":"https://github.com/ashsmith"}],"lastFetch":1730904782216},{"username":"mehalter","name":"Micah Halter","avatar":"https://avatars.githubusercontent.com/u/1591837?v=4","links":[{"icon":"github","link":"https://github.com/mehalter"}],"lastFetch":1730904782405},{"username":"Chrg1001","name":"chrg1001","avatar":"https://avatars.githubusercontent.com/u/40189653?v=4","links":[{"icon":"github","link":"https://github.com/Chrg1001"}],"lastFetch":1730904782605},{"username":"sharmarajdaksh","name":"Dakshraj Sharma","avatar":"https://avatars.githubusercontent.com/u/33689528?v=4","links":[{"icon":"github","link":"https://github.com/sharmarajdaksh"}],"lastFetch":1730904782804},{"username":"shuluster","name":"Shaosu Liu","avatar":"https://avatars.githubusercontent.com/u/1707910?v=4","links":[{"icon":"github","link":"https://github.com/shuluster"}],"lastFetch":1730904782994},{"username":"FDiskas","name":"Vytenis","avatar":"https://avatars.githubusercontent.com/u/468006?v=4","links":[{"icon":"github","link":"https://github.com/FDiskas"}],"lastFetch":1730904783188},{"username":"ericzorn93","name":"Eric Zorn","avatar":"https://avatars.githubusercontent.com/u/22532542?v=4","links":[{"icon":"github","link":"https://github.com/ericzorn93"}],"lastFetch":1730904783381},{"username":"mbelsky","name":"Max Belsky","avatar":"https://avatars.githubusercontent.com/u/3923527?v=4","links":[{"icon":"github","link":"https://github.com/mbelsky"}],"lastFetch":1730904783564},{"username":"techbech","name":"Peter Bech","avatar":"https://avatars.githubusercontent.com/u/1520592?v=4","links":[{"icon":"github","link":"https://github.com/techbech"}],"lastFetch":1730904783756},{"username":"rustyconover","name":"Rusty Conover","avatar":"https://avatars.githubusercontent.com/u/731941?v=4","links":[{"icon":"github","link":"https://github.com/rustyconover"}],"lastFetch":1730904783935},{"username":"bunkscene","name":"Dave Carlson","avatar":"https://avatars.githubusercontent.com/u/2693678?v=4","links":[{"icon":"github","link":"https://github.com/bunkscene"}],"lastFetch":1730904784123},{"username":"ottomated","name":null,"avatar":"https://avatars.githubusercontent.com/u/31470743?v=4","links":[{"icon":"github","link":"https://github.com/ottomated"}],"lastFetch":1730904784313},{"username":"sadfsdfdsa","name":"Artem Shuvaev","avatar":"https://avatars.githubusercontent.com/u/28733669?v=4","links":[{"icon":"github","link":"https://github.com/sadfsdfdsa"}],"lastFetch":1730904784500},{"username":"ajaishankar","name":null,"avatar":"https://avatars.githubusercontent.com/u/328008?v=4","links":[{"icon":"github","link":"https://github.com/ajaishankar"}],"lastFetch":1730904784702},{"username":"dominikdosoudil","name":"Dominik Dosoudil","avatar":"https://avatars.githubusercontent.com/u/15929942?v=4","links":[{"icon":"github","link":"https://github.com/dominikdosoudil"}],"lastFetch":1730904784895},{"username":"kgtkr","name":"kgtkr","avatar":"https://avatars.githubusercontent.com/u/17868838?v=4","links":[{"icon":"github","link":"https://github.com/kgtkr"}],"lastFetch":1730904785091},{"username":"berzi","name":null,"avatar":"https://avatars.githubusercontent.com/u/32619123?v=4","links":[{"icon":"github","link":"https://github.com/berzi"}],"lastFetch":1730904785279},{"username":"PhilipTrauner","name":"Philip Trauner","avatar":"https://avatars.githubusercontent.com/u/9287847?v=4","links":[{"icon":"github","link":"https://github.com/PhilipTrauner"}],"lastFetch":1730904785465},{"username":"Powell-v2","name":"Pavel Yermolin","avatar":"https://avatars.githubusercontent.com/u/25308326?v=4","links":[{"icon":"github","link":"https://github.com/Powell-v2"}],"lastFetch":1730904785651},{"username":"duncanbeevers","name":"Duncan Beevers","avatar":"https://avatars.githubusercontent.com/u/7367?v=4","links":[{"icon":"github","link":"https://github.com/duncanbeevers"}],"lastFetch":1730904785833},{"username":"tkukushkin","name":"Timofei Kukushkin","avatar":"https://avatars.githubusercontent.com/u/1482516?v=4","links":[{"icon":"github","link":"https://github.com/tkukushkin"}],"lastFetch":1730904786028},{"username":"Semigradsky","name":"Dmitry Semigradsky","avatar":"https://avatars.githubusercontent.com/u/1198848?v=4","links":[{"icon":"github","link":"https://github.com/Semigradsky"}],"lastFetch":1730904786239},{"username":"MrLeebo","name":"Jeremy Liberman","avatar":"https://avatars.githubusercontent.com/u/2754163?v=4","links":[{"icon":"github","link":"https://github.com/MrLeebo"}],"lastFetch":1730904786427},{"username":"axelhzf","name":"Axel Hernández Ferrera","avatar":"https://avatars.githubusercontent.com/u/175627?v=4","links":[{"icon":"github","link":"https://github.com/axelhzf"}],"lastFetch":1730904786621},{"username":"imagoiq","name":"Loïc Fürhoff","avatar":"https://avatars.githubusercontent.com/u/12294151?v=4","links":[{"icon":"github","link":"https://github.com/imagoiq"}],"lastFetch":1730904786815},{"username":"BTMPL","name":"Bartosz Szczeciński","avatar":"https://avatars.githubusercontent.com/u/247153?v=4","links":[{"icon":"github","link":"https://github.com/BTMPL"}],"lastFetch":1730904787028},{"username":"HiiiiD","name":"Marco Salomone","avatar":"https://avatars.githubusercontent.com/u/61231210?v=4","links":[{"icon":"github","link":"https://github.com/HiiiiD"}],"lastFetch":1730904787218},{"username":"yacinehmito","name":"Yacine Hmito","avatar":"https://avatars.githubusercontent.com/u/6893840?v=4","links":[{"icon":"github","link":"https://github.com/yacinehmito"}],"lastFetch":1730904787414},{"username":"sajadtorkamani","name":"Sajad Torkamani","avatar":"https://avatars.githubusercontent.com/u/9380313?v=4","links":[{"icon":"github","link":"https://github.com/sajadtorkamani"}],"lastFetch":1730904787613},{"username":"mvdbeek","name":"Marius van den Beek","avatar":"https://avatars.githubusercontent.com/u/6804901?v=4","links":[{"icon":"github","link":"https://github.com/mvdbeek"}],"lastFetch":1730904787822},{"username":"sgrimm","name":"Steven Grimm","avatar":"https://avatars.githubusercontent.com/u/1248649?v=4","links":[{"icon":"github","link":"https://github.com/sgrimm"}],"lastFetch":1730904788040},{"username":"Swiftwork","name":"Erik Hughes","avatar":"https://avatars.githubusercontent.com/u/455178?v=4","links":[{"icon":"github","link":"https://github.com/Swiftwork"}],"lastFetch":1730904788237},{"username":"mtth","name":"Matthieu Monsch","avatar":"https://avatars.githubusercontent.com/u/1216372?v=4","links":[{"icon":"github","link":"https://github.com/mtth"}],"lastFetch":1730904788440},{"username":"mitchell-merry","name":"Mitchell Merry","avatar":"https://avatars.githubusercontent.com/u/8567231?v=4","links":[{"icon":"github","link":"https://github.com/mitchell-merry"}],"lastFetch":1730904788658},{"username":"qnp","name":"François Risoud","avatar":"https://avatars.githubusercontent.com/u/6012554?v=4","links":[{"icon":"github","link":"https://github.com/qnp"}],"lastFetch":1730904788873},{"username":"shoffmeister","name":null,"avatar":"https://avatars.githubusercontent.com/u/3868036?v=4","links":[{"icon":"github","link":"https://github.com/shoffmeister"}],"lastFetch":1730904789090},{"username":"liangskyli","name":"liangsky","avatar":"https://avatars.githubusercontent.com/u/31531283?v=4","links":[{"icon":"github","link":"https://github.com/liangskyli"}],"lastFetch":1730904789278},{"username":"happycollision","name":"Don Denton","avatar":"https://avatars.githubusercontent.com/u/3663628?v=4","links":[{"icon":"github","link":"https://github.com/happycollision"}],"lastFetch":1730904789514},{"username":"ysmood","name":"Yad Smood","avatar":"https://avatars.githubusercontent.com/u/1415488?v=4","links":[{"icon":"github","link":"https://github.com/ysmood"}],"lastFetch":1730904789695},{"username":"barakalon","name":"barak","avatar":"https://avatars.githubusercontent.com/u/12398927?v=4","links":[{"icon":"github","link":"https://github.com/barakalon"}],"lastFetch":1730904789894},{"username":"horaklukas","name":"Lukáš Horák","avatar":"https://avatars.githubusercontent.com/u/996088?v=4","links":[{"icon":"github","link":"https://github.com/horaklukas"}],"lastFetch":1730904790097},{"username":"pvanagtmaal","name":null,"avatar":"https://avatars.githubusercontent.com/u/5946464?v=4","links":[{"icon":"github","link":"https://github.com/pvanagtmaal"}],"lastFetch":1730904790307},{"username":"toomuchdesign","name":"Andrea Carraro","avatar":"https://avatars.githubusercontent.com/u/4573549?v=4","links":[{"icon":"github","link":"https://github.com/toomuchdesign"}],"lastFetch":1730904790491},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1730904790681},{"username":"tkrotoff","name":"Tanguy Krotoff","avatar":"https://avatars.githubusercontent.com/u/643434?v=4","links":[{"icon":"github","link":"https://github.com/tkrotoff"}],"lastFetch":1730904790877},{"username":"pimveldhuisen","name":"Pim Veldhuisen","avatar":"https://avatars.githubusercontent.com/u/3043834?v=4","links":[{"icon":"github","link":"https://github.com/pimveldhuisen"}],"lastFetch":1730904791082},{"username":"asvishnyakov","name":"Aleksandr Vishniakov","avatar":"https://avatars.githubusercontent.com/u/6369252?v=4","links":[{"icon":"github","link":"https://github.com/asvishnyakov"}],"lastFetch":1730904791273},{"username":"SchabaJo","name":null,"avatar":"https://avatars.githubusercontent.com/u/138689813?v=4","links":[{"icon":"github","link":"https://github.com/SchabaJo"}],"lastFetch":1730904791463},{"username":"AhsanFazal","name":"Ahsan Fazal","avatar":"https://avatars.githubusercontent.com/u/7458046?v=4","links":[{"icon":"github","link":"https://github.com/AhsanFazal"}],"lastFetch":1730904791703},{"username":"ElForastero","name":"Eugene Dzhumak","avatar":"https://avatars.githubusercontent.com/u/5102818?v=4","links":[{"icon":"github","link":"https://github.com/ElForastero"}],"lastFetch":1730904791901},{"username":"msgadi","name":"Mohammed Gadi","avatar":"https://avatars.githubusercontent.com/u/9037086?v=4","links":[{"icon":"github","link":"https://github.com/msgadi"}],"lastFetch":1730904792087},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1730904792299},{"username":"christoph-fricke","name":"Christoph Fricke","avatar":"https://avatars.githubusercontent.com/u/23103835?v=4","links":[{"icon":"github","link":"https://github.com/christoph-fricke"}],"lastFetch":1730904792483},{"username":"JorrinKievit","name":"Jorrin","avatar":"https://avatars.githubusercontent.com/u/43169049?v=4","links":[{"icon":"github","link":"https://github.com/JorrinKievit"}],"lastFetch":1730904792667},{"username":"WickyNilliams","name":"Nick Williams","avatar":"https://avatars.githubusercontent.com/u/1091390?v=4","links":[{"icon":"github","link":"https://github.com/WickyNilliams"}],"lastFetch":1730904792858},{"username":"hrsh7th","name":"hrsh7th","avatar":"https://avatars.githubusercontent.com/u/629908?v=4","links":[{"icon":"github","link":"https://github.com/hrsh7th"}],"lastFetch":1730904793044},{"username":"davidleger95","name":"David Leger","avatar":"https://avatars.githubusercontent.com/u/10498708?v=4","links":[{"icon":"github","link":"https://github.com/davidleger95"}],"lastFetch":1729913934448},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1730904869285},{"username":"mzronek","name":"Matthias Zronek","avatar":"https://avatars.githubusercontent.com/u/3847700?v=4","links":[{"icon":"github","link":"https://github.com/mzronek"}],"lastFetch":1730904869474},{"username":"raurfang","name":"Łukasz Wiśniewski","avatar":"https://avatars.githubusercontent.com/u/867241?v=4","links":[{"icon":"github","link":"https://github.com/raurfang"}],"lastFetch":1730904869679},{"username":"JeanRemiDelteil","name":"Jean-Rémi Delteil","avatar":"https://avatars.githubusercontent.com/u/9743907?v=4","links":[{"icon":"github","link":"https://github.com/JeanRemiDelteil"}],"lastFetch":1730904869872},{"username":"TzviPM","name":"Tzvi Melamed","avatar":"https://avatars.githubusercontent.com/u/1950680?v=4","links":[{"icon":"github","link":"https://github.com/TzviPM"}],"lastFetch":1730904870076},{"username":"LucaSchwan","name":"ehrenschwan","avatar":"https://avatars.githubusercontent.com/u/25820532?v=4","links":[{"icon":"github","link":"https://github.com/LucaSchwan"}],"lastFetch":1730904870278},{"username":"nzapponi","name":"Niccolo Zapponi","avatar":"https://avatars.githubusercontent.com/u/20582065?v=4","links":[{"icon":"github","link":"https://github.com/nzapponi"}],"lastFetch":1730904870468},{"username":"luchsamapparat","name":"Marvin Luchs","avatar":"https://avatars.githubusercontent.com/u/875017?v=4","links":[{"icon":"github","link":"https://github.com/luchsamapparat"}],"lastFetch":1730904870652},{"username":"nmacmunn","name":"Neil MacMunn","avatar":"https://avatars.githubusercontent.com/u/849964?v=4","links":[{"icon":"github","link":"https://github.com/nmacmunn"}],"lastFetch":1730904870844}],"openapi-fetch":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775872},{"username":"fergusean","name":null,"avatar":"https://avatars.githubusercontent.com/u/1029297?v=4","links":[{"icon":"github","link":"https://github.com/fergusean"}],"lastFetch":1730904776068},{"username":"shinzui","name":"Nadeem Bitar","avatar":"https://avatars.githubusercontent.com/u/519?v=4","links":[{"icon":"github","link":"https://github.com/shinzui"}],"lastFetch":1730904776251},{"username":"ezpuzz","name":"Emory Petermann","avatar":"https://avatars.githubusercontent.com/u/672182?v=4","links":[{"icon":"github","link":"https://github.com/ezpuzz"}],"lastFetch":1730904776445},{"username":"KotoriK","name":null,"avatar":"https://avatars.githubusercontent.com/u/52659125?v=4","links":[{"icon":"github","link":"https://github.com/KotoriK"}],"lastFetch":1730904776662},{"username":"fletchertyler914","name":"Tyler Fletcher","avatar":"https://avatars.githubusercontent.com/u/3344498?v=4","links":[{"icon":"github","link":"https://github.com/fletchertyler914"}],"lastFetch":1730904776885},{"username":"nholik","name":"Nicklos Holik","avatar":"https://avatars.githubusercontent.com/u/2022214?v=4","links":[{"icon":"github","link":"https://github.com/nholik"}],"lastFetch":1730904777069},{"username":"roj1512","name":null,"avatar":"https://avatars.githubusercontent.com/u/175297870?v=4","links":[{"icon":"github","link":"https://github.com/roj1512"}],"lastFetch":1730904777261},{"username":"nickcaballero","name":"Nick Caballero","avatar":"https://avatars.githubusercontent.com/u/355976?v=4","links":[{"icon":"github","link":"https://github.com/nickcaballero"}],"lastFetch":1730904777452},{"username":"hd-o","name":"Hadrian de Oliveira","avatar":"https://avatars.githubusercontent.com/u/58871222?v=4","links":[{"icon":"github","link":"https://github.com/hd-o"}],"lastFetch":1730904777662},{"username":"kecrily","name":"Percy Ma","avatar":"https://avatars.githubusercontent.com/u/45708948?v=4","links":[{"icon":"github","link":"https://github.com/kecrily"}],"lastFetch":1730904777856},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1730904778045},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1730904778226},{"username":"marcomuser","name":"Marco Muser","avatar":"https://avatars.githubusercontent.com/u/64737396?v=4","links":[{"icon":"github","link":"https://github.com/marcomuser"}],"lastFetch":1730904778456},{"username":"HugeLetters","name":"Evgenii Perminov","avatar":"https://avatars.githubusercontent.com/u/119697239?v=4","links":[{"icon":"github","link":"https://github.com/HugeLetters"}],"lastFetch":1730904778645},{"username":"Fumaz","name":"alex","avatar":"https://avatars.githubusercontent.com/u/45318608?v=4","links":[{"icon":"github","link":"https://github.com/Fumaz"}],"lastFetch":1730904778836},{"username":"darwish","name":"Mike Darwish","avatar":"https://avatars.githubusercontent.com/u/292570?v=4","links":[{"icon":"github","link":"https://github.com/darwish"}],"lastFetch":1730904779040},{"username":"kaechele","name":"Felix Kaechele","avatar":"https://avatars.githubusercontent.com/u/454490?v=4","links":[{"icon":"github","link":"https://github.com/kaechele"}],"lastFetch":1730904779235},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1730904779414},{"username":"mikestopcontinues","name":"Mike Stop Continues","avatar":"https://avatars.githubusercontent.com/u/150434?v=4","links":[{"icon":"github","link":"https://github.com/mikestopcontinues"}],"lastFetch":1730904779611},{"username":"JE-Lee","name":"maurice","avatar":"https://avatars.githubusercontent.com/u/19794813?v=4","links":[{"icon":"github","link":"https://github.com/JE-Lee"}],"lastFetch":1730904779792},{"username":"vipentti","name":"Ville Penttinen","avatar":"https://avatars.githubusercontent.com/u/4726680?v=4","links":[{"icon":"github","link":"https://github.com/vipentti"}],"lastFetch":1730904780019},{"username":"armandabric","name":"Armand Abric","avatar":"https://avatars.githubusercontent.com/u/95120?v=4","links":[{"icon":"github","link":"https://github.com/armandabric"}],"lastFetch":1730904780220},{"username":"illright","name":"Lev Chelyadinov","avatar":"https://avatars.githubusercontent.com/u/15035286?v=4","links":[{"icon":"github","link":"https://github.com/illright"}],"lastFetch":1730904780416}],"openapi-react-query":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775876},{"username":"kerwanp","name":"Martin Paucot","avatar":"https://avatars.githubusercontent.com/u/36955373?v=4","links":[{"icon":"github","link":"https://github.com/kerwanp"}],"lastFetch":1730904776056},{"username":"yoshi2no","name":"yoshi2no","avatar":"https://avatars.githubusercontent.com/u/57059705?v=4","links":[{"icon":"github","link":"https://github.com/yoshi2no"}],"lastFetch":1730904776248},{"username":"elaygelbart","name":"Elay Gelbart","avatar":"https://avatars.githubusercontent.com/u/88675154?v=4","links":[{"icon":"github","link":"https://github.com/elaygelbart"}],"lastFetch":1730904973287}],"swr-openapi":[{"username":"htunnicliff","name":"Hunter Tunnicliff","avatar":"https://avatars.githubusercontent.com/u/7614039?v=4","links":[{"icon":"github","link":"https://github.com/htunnicliff"}],"lastFetch":1730904775878}]} diff --git a/docs/openapi-adonis/index.md b/docs/openapi-adonis/index.md new file mode 100644 index 000000000..f754283f6 --- /dev/null +++ b/docs/openapi-adonis/index.md @@ -0,0 +1,70 @@ +--- +title: openapi-adonis +--- + +# Introduction + +openapi-adonis is an [Adonis.js] library to automatically generate OpenAPI schemas and documentation. + +- ✅ Creates operations from the Adonis Router +- ✅ Automatically adds your models to the schemas +- ✅ Automatically adds your `@vinejs/vine` validators to the schemas +- ✅ Extended type-inference using Typescript metadata +- ✅ Extensible using Typescript decorators +- ✅ Generates documentation for **Swagger, Scalar, Rapidoc** + +The library is inspired by the popular library [@nestjs/swagger](https://www.npmjs.com/package/@nestjs/swagger) and is built on top of [openapi-decorators](https://github.com/openapi-ts/openapi-typescript/tree/main/packages/openapi-decorators). + +::: code-group + +```tsx [app/controllers/users_controller.ts] +import { apiOperation, apiResponse } from "openapi-adonis/decorators"; +import User from "#models/user"; + +class UsersController { + @apiOperation({ summary: "List users" }) + @apiResponse({ type: [User] }) + async list() { + return User.findManyBy({}); + } +} +``` + +```tsx [app/models/user.ts] +import { apiProperty } from "openapi-adonis/decorators"; + +class User { + @apiProperty() + declare id: number; + + @apiProperty() + declare name: string; + + @apiProperty({ required: false }) + declare mobile?: string; +} +``` + +```tsx [start/routes.ts] +import router from "@adonisjs/core/services/router"; +import AdonisOpenAPI from "openapi-adonis"; + +const UsersController = () => import("#controllers/users_controller"); + +router.post("/users", [UsersController, "create"]); + +const builder = AdonisOpenAPI.document().setTitle("OpenAPI Adonis Example"); +AdonisOpenAPI.setup("/docs", router, builder); +``` + +::: + +## Setup + +Install this library by using `ace`: + +```bash +node ace add openapi-adonis +``` + +## Basic usage diff --git a/docs/scripts/update-contributors.js b/docs/scripts/update-contributors.js index 7f95c6183..70a8d5672 100644 --- a/docs/scripts/update-contributors.js +++ b/docs/scripts/update-contributors.js @@ -146,7 +146,6 @@ const CONTRIBUTORS = { "JorrinKievit", "WickyNilliams", "hrsh7th", - "davidleger95", "phk422", "mzronek", "raurfang", diff --git a/packages/openapi-adonis/biome.json b/packages/openapi-adonis/biome.json index 8eafd05ea..acf999617 100644 --- a/packages/openapi-adonis/biome.json +++ b/packages/openapi-adonis/biome.json @@ -2,7 +2,7 @@ "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", "extends": ["../../biome.json"], "files": { - "ignore": ["./example/"] + "ignore": ["./example/", "./coverage/"] }, "linter": { "rules": { diff --git a/packages/openapi-adonis/example/app/controllers/users_controller.ts b/packages/openapi-adonis/example/app/controllers/users_controller.ts index ef2a47f37..b4e06ebed 100644 --- a/packages/openapi-adonis/example/app/controllers/users_controller.ts +++ b/packages/openapi-adonis/example/app/controllers/users_controller.ts @@ -1,18 +1,21 @@ -import User from '#models/user' -import { apiBody, apiOperation, apiResponse, apiParam, apiQuery } from 'openapi-adonis/decorators' +import User from "#models/user"; +import { listUserValidator } from "#validators/user"; +import { apiBody, apiOperation, apiParam, apiQuery, apiResponse } from "openapi-adonis/decorators"; +import { VineType, ModelType } from "openapi-adonis"; export default class UsersController { - @apiOperation({ summary: 'Get users', tags: ['User'] }) - @apiResponse({ type: User }) - @apiParam({ name: 'id' }) - @apiQuery({ name: 'query' }) + @apiOperation({ summary: "Get users" }) + @apiResponse({ type: ModelType(User) }) + @apiParam({ name: "id" }) + @apiQuery({ name: "query" }) + @apiBody({ type: VineType(listUserValidator, "listUserValidator") }) async index(): Promise { - return new User() + return new User(); } - @apiOperation({ summary: 'Create new user', tags: ['User'] }) - @apiBody({ type: User }) + @apiOperation({ summary: "Create new user" }) + // @apiBody({ type: User }) async create(): Promise { - return new User() + return new User(); } } diff --git a/packages/openapi-adonis/example/app/validators/user.ts b/packages/openapi-adonis/example/app/validators/user.ts new file mode 100644 index 000000000..98174fdad --- /dev/null +++ b/packages/openapi-adonis/example/app/validators/user.ts @@ -0,0 +1,12 @@ +import vine from "@vinejs/vine"; + +export const listUserValidator = vine.compile( + vine.object({ + one: vine.string(), + two: vine.number(), + nested: vine.object({ + test: vine.number(), + }), + array: vine.array(vine.number()).maxLength(5), + }), +); diff --git a/packages/openapi-adonis/example/start/routes.ts b/packages/openapi-adonis/example/start/routes.ts index 158b8b882..4e645d0d2 100644 --- a/packages/openapi-adonis/example/start/routes.ts +++ b/packages/openapi-adonis/example/start/routes.ts @@ -7,19 +7,20 @@ | */ -import router from '@adonisjs/core/services/router' -import AdonisOpenAPI from 'openapi-adonis' +import router from "@adonisjs/core/services/router"; +import AdonisOpenAPI from "openapi-adonis"; -const UsersController = () => import('#controllers/users_controller') +const UsersController = () => import("#controllers/users_controller"); -router.get('/', async () => { +router.get("/", async () => { return { - hello: 'world', - } -}) + hello: "world", + }; +}); -router.get('/users/:id', [UsersController, 'index']) -router.post('/users', [UsersController, 'create']) +// router.get("/users/:id", [UsersController, "index"]); +// router.post("/users", [UsersController, "create"]); +router.resource("users", UsersController).apiOnly(); -const builder = AdonisOpenAPI.document().setTitle('OpenAPI Adonis Example') -AdonisOpenAPI.setup('/docs', router, builder) +const builder = AdonisOpenAPI.document().setTitle("OpenAPI Adonis Example"); +AdonisOpenAPI.setup("/docs", router, builder); diff --git a/packages/openapi-adonis/package.json b/packages/openapi-adonis/package.json index fb6284a4a..6f442eeb4 100644 --- a/packages/openapi-adonis/package.json +++ b/packages/openapi-adonis/package.json @@ -45,6 +45,7 @@ "format": "biome format . --write", "lint": "biome check .", "test": "vitest run", + "coverage": "vitest run --coverage", "version": "pnpm run prepare && pnpm run build" }, "dependencies": { @@ -60,6 +61,7 @@ "@adonisjs/http-server": "^7.2.3", "@types/lodash": "^4.17.7", "@types/node": "^22.1.0", + "@vitest/coverage-v8": "^2.0.5", "tsup": "^8.2.4", "typescript": "^5.4.5", "unplugin-swc": "^1.5.1" diff --git a/packages/openapi-adonis/src/index.ts b/packages/openapi-adonis/src/index.ts index c1894991d..7867519c4 100644 --- a/packages/openapi-adonis/src/index.ts +++ b/packages/openapi-adonis/src/index.ts @@ -4,11 +4,15 @@ import type { Router } from "@adonisjs/http-server"; import { DocumentBuilder } from "openapi-decorators/builders"; import { generateScalarUI } from "openapi-decorators/ui"; import { loadRouter } from "./loaders/loadRouter"; +import { VineTypeResolver } from "./resolvers/vine-type.resolver"; + +export { VineType } from "./resolvers/vine-type.resolver"; +export { ModelType } from "openapi-decorators/resolvers"; // biome-ignore lint/complexity/noStaticOnlyClass: TODO: move out of class export default class AdonisOpenAPI { public static document() { - return new DocumentBuilder(); + return new DocumentBuilder().addResolver(VineTypeResolver); } public static async load(builder: DocumentBuilder, router: Router): Promise { diff --git a/packages/openapi-adonis/src/loaders/loadController.ts b/packages/openapi-adonis/src/loaders/loadController.ts deleted file mode 100644 index e678e0f77..000000000 --- a/packages/openapi-adonis/src/loaders/loadController.ts +++ /dev/null @@ -1,57 +0,0 @@ -import type { DocumentBuilder, OperationBuilder } from "openapi-decorators/builders"; -import { - getApiBody, - getApiOperation, - getApiParams, - getApiQueries, - getApiResponses, - getApiTags, -} from "openapi-decorators"; -import { - loadApiBody, - loadApiOperation, - loadApiParam, - loadApiQuery, - loadApiResponse, - loadApiTags, -} from "openapi-decorators/loaders"; - -/** - * Enrich operation from Adonis Controller function - */ -export function loadController( - document: DocumentBuilder, - operation: OperationBuilder, - target: any, - propertyKey: string, -) { - const apiOperation = getApiOperation(target, propertyKey); - if (apiOperation) { - loadApiOperation(operation, apiOperation); - } - - const apiTags = getApiTags(target, propertyKey); - if (apiTags) { - loadApiTags(operation, apiTags); - } - - const apiBody = getApiBody(target, propertyKey); - if (apiBody) { - loadApiBody(document, operation, apiBody); - } - - const apiResponses = getApiResponses(target, propertyKey); - for (const apiResponse of apiResponses) { - loadApiResponse(document, operation, apiResponse); - } - - const apiParams = getApiParams(target, propertyKey); - for (const apiParam of apiParams) { - loadApiParam(document, operation, apiParam); - } - - const apiQueries = getApiQueries(target, propertyKey); - for (const apiQuery of apiQueries) { - loadApiQuery(document, operation, apiQuery); - } -} diff --git a/packages/openapi-adonis/src/loaders/loadRoute.ts b/packages/openapi-adonis/src/loaders/loadRoute.ts index a283d7bd3..c098a03f4 100644 --- a/packages/openapi-adonis/src/loaders/loadRoute.ts +++ b/packages/openapi-adonis/src/loaders/loadRoute.ts @@ -1,9 +1,7 @@ import type { OpenAPIV3 } from "openapi-types"; import { OperationBuilder, type DocumentBuilder } from "openapi-decorators/builders"; import type { AdonisRoute } from "../types"; -import { loadController } from "./loadController"; -import { getApiTags } from "openapi-decorators"; -import { loadApiTags } from "openapi-decorators/loaders"; +import { loadApiOperation, loadController } from "openapi-decorators/loaders"; import { normalizeRoutePattern } from "../utils/normalizeRoutePattern"; export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { @@ -11,29 +9,25 @@ export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { return; } - const importer = route.handler.reference[0] as Function; + const importer = route.handler.reference[0] as () => Promise<{ default: any }>; const propertyKey = route.handler.reference[1] as string; const target = (await importer().then((t: any) => t.default)) as any; - const operation = new OperationBuilder(); - - const apiTags = getApiTags(target); - if (apiTags) { - loadApiTags(operation, apiTags); - } - - loadController(document, operation, target.prototype, propertyKey); - for (const method of route.methods) { if (method === "HEAD") { continue; } - document.setOperation( - method.toLowerCase() as OpenAPIV3.HttpMethods, - normalizeRoutePattern(route.pattern), - operation.build(), - ); + const operation = new OperationBuilder(); + + loadApiOperation(operation, { + method: method.toLowerCase() as `${OpenAPIV3.HttpMethods}`, + pattern: normalizeRoutePattern(route.pattern), + }); + + loadController(document, operation, target.prototype, propertyKey); + + document.addOperation(operation); } } diff --git a/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts b/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts new file mode 100644 index 000000000..aaac95064 --- /dev/null +++ b/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts @@ -0,0 +1,202 @@ +import { SimpleMessagesProvider, type VineValidator } from "@vinejs/vine"; +import type { SchemaTypes } from "@vinejs/vine/types"; +import { TypeResolver } from "openapi-decorators/resolvers"; +import type { OpenAPIV3 } from "openapi-types"; +import _ from "lodash"; + +type Validator = ReturnType["toJSON"]>; +type Refs = Validator["refs"]; +type CompilerNode = Validator["schema"]["schema"]; +type ObjectNode = CompilerNode & { type: "object" }; +type LiteralNode = CompilerNode & { type: "literal" }; +type ArrayNode = CompilerNode & { type: "array" }; +type ValidationNode = ObjectNode["validations"][number]; + +// TODO: We might want to autoload validators and import theme dynamically to discover constant name + +export class VineTypeResolver< + Schema extends SchemaTypes, + Metadata extends Record | undefined, +> extends TypeResolver { + #name: string; + + constructor( + private readonly validator: VineValidator, + name: string, + ) { + super(); + this.#name = name; + } + + name(): string { + return this.#name; + } + + async schema(): Promise { + const validator = this.validator.toJSON(); + const node = validator.schema.schema; + + if (node.type !== "object") { + // TODO: Better errors + throw new Error("Only object top-level schemas are currently supported"); + } + + const schema = parseCompilerNode(node, validator.refs); + + await enrichType(this.validator, schema); + + return schema; + } +} + +export function parseValidations(validations: ValidationNode[], refs: Refs): Partial { + const schema: Partial = {}; + + for (const validation of validations) { + const rule = refs[validation.ruleFnId]; + + if (!rule || !("options" in rule) || !rule.options) { + continue; + } + + if (rule.options.min) { + schema.minimum = rule.options.min; + } + + if (rule.options.max) { + schema.maximum = rule.options.max; + } + + // TODO: Surely a cleaner way to identify regex + if (rule.options.toString().includes("/")) { + schema.pattern = rule.options.toString(); + } + + // TODO: Choices + } + + return schema; +} + +export function parseCompilerNode(node: CompilerNode, refs: Refs): OpenAPIV3.SchemaObject { + let schema: OpenAPIV3.SchemaObject; + + switch (node.type) { + case "object": + schema = parseObjectNode(node, refs); + break; + case "literal": + schema = parseLiteralNode(node, refs); + break; + case "array": + schema = parseArrayNode(node, refs); + break; + default: + throw new Error(`No parser found for type ${node.type}`); + } + + // TODO: FIX TYPE + return { + ...parseValidations(node.validations, refs), + ...schema, + } as OpenAPIV3.SchemaObject; +} + +export function parseObjectNode(node: ObjectNode, refs: Refs): OpenAPIV3.SchemaObject { + const schema: OpenAPIV3.SchemaObject = { + type: "object", + }; + + for (const property of node.properties) { + schema.properties = { + ...schema.properties, + [property.fieldName]: parseCompilerNode(property, refs), + }; + + if ("isOptional" in property && property.isOptional === false) { + schema.required = [...(schema.required ?? []), property.fieldName]; + } + } + + return schema; +} + +export function parseArrayNode(node: ArrayNode, refs: Refs): OpenAPIV3.SchemaObject { + return { + type: "array", + items: parseCompilerNode(node.each, refs), + }; +} + +// A literal is always marked as string and is then specified properly depending on validator +export function parseLiteralNode(node: LiteralNode, refs: Refs): OpenAPIV3.SchemaObject { + return { + type: "string", + }; +} + +export async function enrichType(validator: VineValidator, schema: OpenAPIV3.SchemaObject) { + if (!schema.properties) { + return; + } + + const obj = nodeToTestObject(schema); + + const [error] = await validator.tryValidate(obj, { + messagesProvider: new SimpleMessagesProvider({ + required: "REQUIRED", + string: "TYPE", + object: "TYPE", + number: "TYPE", + boolean: "TYPE", + }), + }); + + if (!error) { + return schema; + } + + for (const message of error.messages) { + // TODO: This should break if property name starts with 0 + const fieldPath = message.field.replaceAll(/\.(?!0)/g, ".properties.").replaceAll(".0", ".items"); + + if (message.message === "TYPE") { + _.set(schema.properties, `${fieldPath}.type`, message.rule); + } + } +} + +function nodeToTestObject(schema: OpenAPIV3.SchemaObject) { + const res: any = {}; + + for (const [name, property] of Object.entries(schema.properties ?? {})) { + if (!("type" in property)) { + continue; + } + + if (property.type === "object") { + res[name] = nodeToTestObject(property); + } else if (property.type === "array") { + if (!("type" in property.items)) { + continue; + } + + if (property.items.type === "object") { + res[name] = [nodeToTestObject(property.items)]; + } else { + res[name] = ["example"]; + } + } else { + res[name] = "example"; + } + } + + return res; +} + +export function VineType | undefined>( + validator: VineValidator, + name: string, +): TypeResolver { + return new VineTypeResolver(validator, name); +} diff --git a/packages/openapi-adonis/test/vine.test.ts b/packages/openapi-adonis/test/vine.test.ts new file mode 100644 index 000000000..ef93b9931 --- /dev/null +++ b/packages/openapi-adonis/test/vine.test.ts @@ -0,0 +1,114 @@ +import vine from "@vinejs/vine"; +import { enrichType, parseArrayNode, parseLiteralNode, parseObjectNode } from "../src/resolvers/vine-type.resolver"; + +describe("parseLiteralNode", () => { + // INFO: This test is not really necessary + it("should always returns string", () => { + const validator = vine.compile(vine.string()); + const json = validator.toJSON(); + const result = parseLiteralNode(json.schema.schema as any, json.refs); + + expect(result.type).toBe("string"); + }); +}); + +describe("parseArrayNode", () => { + it("should parse array of string", () => { + const validator = vine.compile(vine.array(vine.string())); + const json = validator.toJSON(); + const result: any = parseArrayNode(json.schema.schema as any, json.refs); + + expect(result.type).toBe("array"); + expect(result.items.type).toBe("string"); + }); +}); + +describe("parseObjectNode", () => { + it("should parse object", () => { + const validator = vine.compile( + vine.object({ + example: vine.string(), + }), + ); + const json = validator.toJSON(); + const result: any = parseObjectNode(json.schema.schema as any, json.refs); + + expect(result.properties.example).toBeDefined(); + }); + + it("should parse nested object", () => { + const validator = vine.compile( + vine.object({ + nested: vine.object({ + again: vine.object({ + example: vine.string(), + }), + }), + }), + ); + const json = validator.toJSON(); + + const result: any = parseObjectNode(json.schema.schema as any, json.refs); + + expect(result.properties.nested.properties.again.properties.example).toBeDefined(); + }); + + it("should mark properties as required by default", () => { + const validator = vine.compile( + vine.object({ + example: vine.string(), + }), + ); + const json = validator.toJSON(); + const result: any = parseObjectNode(json.schema.schema as any, json.refs); + + expect(result.required).toContain("example"); + }); + + it("should handle optional properties", () => { + const validator = vine.compile( + vine.object({ + required: vine.string(), + notRequired: vine.string().optional(), + }), + ); + const json = validator.toJSON(); + const result: any = parseObjectNode(json.schema.schema as any, json.refs); + + expect(result.required).toContain("required"); + expect(result.required).not.toContain("notRequired"); + }); +}); + +describe("enrichType", () => { + it("should properly find types using validators", async () => { + const validator = vine.compile( + vine.object({ + boolean: vine.boolean(), + number: vine.number(), + string: vine.string(), + }), + ); + + const schema: any = { + type: "object", + properties: { + boolean: { + type: "string", + }, + number: { + type: "string", + }, + string: { + type: "string", + }, + }, + }; + + await enrichType(validator, schema); + + expect(schema.properties.string.type).toBe("string"); + expect(schema.properties.boolean.type).toBe("boolean"); + expect(schema.properties.number.type).toBe("number"); + }); +}); diff --git a/packages/openapi-adonis/tsconfig.json b/packages/openapi-adonis/tsconfig.json index 801bb5c7d..856c8f0d6 100644 --- a/packages/openapi-adonis/tsconfig.json +++ b/packages/openapi-adonis/tsconfig.json @@ -14,7 +14,7 @@ "target": "ESNext", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "types": ["vitest/globals"] + "types": ["vitest/globals", "reflect-metadata"] }, "include": ["src", "test"], "exclude": ["example", "node_modules"] diff --git a/packages/openapi-decorators/biome.json b/packages/openapi-decorators/biome.json index bb46eda10..3ef072e57 100644 --- a/packages/openapi-decorators/biome.json +++ b/packages/openapi-decorators/biome.json @@ -1,6 +1,9 @@ { "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", "extends": ["../../biome.json"], + "files": { + "ignore": ["./example/", "./coverage/"] + }, "linter": { "rules": { "performance": { diff --git a/packages/openapi-decorators/package.json b/packages/openapi-decorators/package.json index e37a29f12..9c1d41921 100644 --- a/packages/openapi-decorators/package.json +++ b/packages/openapi-decorators/package.json @@ -20,6 +20,10 @@ "types": "./dist/loaders/index.d.ts", "import": "./dist/loaders/index.js" }, + "./resolvers": { + "types": "./dist/resolvers/index.d.ts", + "import": "./dist/resolvers/index.js" + }, "./ui": { "types": "./dist/ui/index.d.ts", "import": "./dist/ui/index.js" @@ -49,6 +53,7 @@ "format": "biome format . --write", "lint": "biome check .", "test": "vitest run", + "coverage": "vitest run --coverage", "version": "pnpm run prepare && pnpm run build" }, "dependencies": { @@ -60,6 +65,7 @@ "devDependencies": { "@types/lodash": "^4.17.7", "@types/node": "^22.1.0", + "@vitest/coverage-v8": "^2.0.5", "del-cli": "^5.1.0", "esbuild": "^0.20.2", "execa": "^8.0.1", diff --git a/packages/openapi-decorators/src/builders/document-builder.ts b/packages/openapi-decorators/src/builders/document-builder.ts index 3ba08f047..f72fa4808 100644 --- a/packages/openapi-decorators/src/builders/document-builder.ts +++ b/packages/openapi-decorators/src/builders/document-builder.ts @@ -2,11 +2,15 @@ import type { OpenAPIV3 } from "openapi-types"; import { buildDocumentBase } from "../fixtures/document-base"; import { BaseBuilder } from "./base-builder"; import { generateScalarUI } from "../ui/scalar"; -import { SchemaBuilder } from "./schema-builder"; +import type { Type } from "../types"; +import { TypeResolver } from "../resolvers/type-resolver"; +import { ModelTypeResolver } from "../resolvers/model-resolver"; +import type { OperationBuilder } from "./operation-builder"; export class DocumentBuilder extends BaseBuilder { private readonly document: OpenAPIV3.Document = buildDocumentBase(); - private readonly schemas: Record = {}; + private readonly operations: OperationBuilder[] = []; + private readonly resolvers: Type[] = [ModelTypeResolver]; public setTitle(title: string): this { this.document.info.title = title; @@ -18,48 +22,108 @@ export class DocumentBuilder extends BaseBuilder { return this; } - public createSchema(name: string): SchemaBuilder { - const builder = new SchemaBuilder(name); - this.schemas[name] = builder; - return builder; - } - - public hasSchema(name: string): OpenAPIV3.ReferenceObject | false { - const schema = this.schemas[name]; + public schemaRef(name: string): OpenAPIV3.ReferenceObject | false { + const schema = this.document.components?.schemas?.[name]; if (!schema) { return false; } - return schema.ref; + + return { + $ref: `#/components/schemas/${name}`, + }; + } + + public addOperation(operation: OperationBuilder) { + this.operations.push(operation); + } + + // public setOperation(method: OpenAPIV3.HttpMethods, pattern: string, operation: OpenAPIV3.OperationObject) { + // if (!this.document.paths[pattern]) { + // this.document.paths[pattern] = {}; + // } + // + // // biome-ignore lint/style/noNonNullAssertion: Defined two lines above + // this.document.paths[pattern]![method] = operation; + // } + + public scalar(url: string): string { + return generateScalarUI(url); + } + + public addResolver(resolver: Type): this { + this.resolvers.push(resolver); + return this; } - public setOperation(method: OpenAPIV3.HttpMethods, pattern: string, operation: OpenAPIV3.OperationObject) { - if (!this.document.paths[pattern]) { - this.document.paths[pattern] = {}; + public async resolve(type: any): Promise { + if (type instanceof TypeResolver) { + return this.resolveFromTypeResolver(type); } - // biome-ignore lint/style/noNonNullAssertion: Defined two lines above - this.document.paths[pattern]![method] = operation; + for (const typeResolver of this.resolvers) { + // TODO: Fix type + if (!(typeResolver as any).supports(type)) { + continue; + } + + const resolver = new typeResolver(type); + return this.resolveFromTypeResolver(resolver); + } + + throw new Error("Cannot resolve type"); } - public scalar(url: string) { - return generateScalarUI(url); + private async resolveFromTypeResolver(typeResolver: TypeResolver): Promise { + const name = typeResolver.name(); + const existing = this.schemaRef(name); + if (existing) { + return existing; + } + + // TODO: Do this properly + this.document.components = { + ...this.document.components, + schemas: { + ...this.document.components?.schemas, + [name]: {}, + }, + }; + + const schema = await typeResolver.schema(this); + + this.document.components = { + ...this.document.components, + schemas: { + ...this.document.components?.schemas, + [name]: schema, + }, + }; + + return { + $ref: `#/components/schemas/${name}`, + }; } + // TODO: Add proper errors public build(): OpenAPIV3.Document { - const schemas = Object.entries(this.schemas).reduce( - (a, [name, builder]) => ({ ...a, [name]: builder.build() }), - {}, - ); + for (const operation of this.operations) { + if (!operation.pattern) { + throw new Error("Operation does not have a pattern"); + } - return { - ...this.document, - components: { - ...this.document.components, - schemas: { - ...schemas, - ...this.document.components?.schemas, + if (!operation.method) { + throw new Error("Operation does not have a method"); + } + + this.document.paths = { + ...this.document.paths, + [operation.pattern]: { + ...this.document.paths[operation.pattern], + [operation.method]: operation.build(), }, - }, - }; + }; + } + + return this.document; } } diff --git a/packages/openapi-decorators/src/builders/index.ts b/packages/openapi-decorators/src/builders/index.ts index 466ef8da2..7155e5a4b 100644 --- a/packages/openapi-decorators/src/builders/index.ts +++ b/packages/openapi-decorators/src/builders/index.ts @@ -1,4 +1,3 @@ export * from "./base-builder"; export * from "./document-builder"; export * from "./operation-builder"; -export * from "./schema-builder"; diff --git a/packages/openapi-decorators/src/builders/operation-builder.ts b/packages/openapi-decorators/src/builders/operation-builder.ts index 0943770e4..c26b9c8eb 100644 --- a/packages/openapi-decorators/src/builders/operation-builder.ts +++ b/packages/openapi-decorators/src/builders/operation-builder.ts @@ -3,35 +3,38 @@ import { BaseBuilder } from "./base-builder"; import { deepmerge } from "../utils/deepmerge"; export class OperationBuilder extends BaseBuilder { - private operation: OpenAPIV3.OperationObject = { + method: `${OpenAPIV3.HttpMethods}` | undefined; + pattern: string | undefined; + + #operation: OpenAPIV3.OperationObject = { responses: {}, }; - public setRequestBody(body: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject) { - this.operation.requestBody = body; + setRequestBody(body: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject) { + this.#operation.requestBody = body; return this; } - public addTags(...tags: string[]) { - this.operation.tags = [...(this.operation.tags ?? []), ...tags]; + addTags(...tags: string[]) { + this.#operation.tags = [...(this.#operation.tags ?? []), ...tags]; return this; } - public setResponse(code: string, response: OpenAPIV3.ResponseObject) { - this.operation.responses[code] = response; + setResponse(code: string, response: OpenAPIV3.ResponseObject) { + this.#operation.responses[code] = response; return this; } - public addParameter(parameter: OpenAPIV3.ParameterObject) { - this.operation.parameters = [...(this.operation.parameters ?? []), parameter]; + addParameter(parameter: OpenAPIV3.ParameterObject) { + this.#operation.parameters = [...(this.#operation.parameters ?? []), parameter]; } - public merge(operation: Partial) { - this.operation = deepmerge(this.operation, operation); + merge(operation: Partial) { + this.#operation = deepmerge(this.#operation, operation); return this; } - public build(): OpenAPIV3.OperationObject { - return this.operation; + build(): OpenAPIV3.OperationObject { + return this.#operation; } } diff --git a/packages/openapi-decorators/src/builders/schema-builder.ts b/packages/openapi-decorators/src/builders/schema-builder.ts deleted file mode 100644 index f66d5183d..000000000 --- a/packages/openapi-decorators/src/builders/schema-builder.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import { BaseBuilder } from "./base-builder"; -import { deepmerge } from "../utils/deepmerge"; - -export class SchemaBuilder extends BaseBuilder { - private schema: OpenAPIV3.SchemaObject = {}; - - constructor(private readonly name: string) { - super(); - } - - public setType(type: "array" | OpenAPIV3.NonArraySchemaObjectType) { - this.schema.type = type; - return this; - } - - public setProperty(name: string, schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject, required: boolean) { - if (!this.schema.properties) { - this.schema.properties = {}; - } - - this.schema.properties[name] = schema; - - if (required) { - if (!this.schema.required) { - this.schema.required = []; - } - - this.schema.required.push(name); - } - - return this; - } - - public merge(schema: Partial) { - this.schema = deepmerge(this.schema, schema); - return this; - } - - public get ref(): OpenAPIV3.ReferenceObject { - return { - $ref: `#/components/schemas/${this.name}`, - }; - } - - public build(): OpenAPIV3.SchemaObject { - return this.schema; - } -} diff --git a/packages/openapi-decorators/src/decorators/api-operation.ts b/packages/openapi-decorators/src/decorators/api-operation.ts index 52bebaf82..85afdd7cd 100644 --- a/packages/openapi-decorators/src/decorators/api-operation.ts +++ b/packages/openapi-decorators/src/decorators/api-operation.ts @@ -2,7 +2,12 @@ import type { OpenAPIV3 } from "openapi-types"; export const ApiOperationMetadataKey = Symbol("ApiOperation"); -export type ApiOperationOptions = Partial; +export type ApiOperationOptions = Partial< + OpenAPIV3.OperationObject & { + method: `${OpenAPIV3.HttpMethods}`; + pattern: string; + } +>; export function apiOperation(options: ApiOperationOptions): MethodDecorator { return Reflect.metadata(ApiOperationMetadataKey, options); diff --git a/packages/openapi-decorators/src/loaders/index.ts b/packages/openapi-decorators/src/loaders/index.ts index c5aa63d4e..72202569f 100644 --- a/packages/openapi-decorators/src/loaders/index.ts +++ b/packages/openapi-decorators/src/loaders/index.ts @@ -5,5 +5,5 @@ export * from "./loadApiProperty"; export * from "./loadApiQuery"; export * from "./loadApiResponse"; export * from "./loadApiTags"; -export * from "./loadSchema"; +export * from "./loadController"; export * from "./loadType"; diff --git a/packages/openapi-decorators/src/loaders/loadApiBody.ts b/packages/openapi-decorators/src/loaders/loadApiBody.ts index e4aaf4124..2310e3187 100644 --- a/packages/openapi-decorators/src/loaders/loadApiBody.ts +++ b/packages/openapi-decorators/src/loaders/loadApiBody.ts @@ -3,10 +3,10 @@ import type { OperationBuilder } from "../builders/operation-builder"; import type { ApiBodyOptions } from "../decorators"; import { resolveType } from "./loadType"; -export function loadApiBody(document: DocumentBuilder, operation: OperationBuilder, apiBody: ApiBodyOptions) { +export async function loadApiBody(document: DocumentBuilder, operation: OperationBuilder, apiBody: ApiBodyOptions) { const { type, isArray, ...rest } = apiBody; - const schema = type ? resolveType(document, type) : undefined; + const schema = type ? await resolveType(document, type) : undefined; operation.setRequestBody({ ...rest, diff --git a/packages/openapi-decorators/src/loaders/loadApiOperation.ts b/packages/openapi-decorators/src/loaders/loadApiOperation.ts index bbb8a8f51..5fbab8944 100644 --- a/packages/openapi-decorators/src/loaders/loadApiOperation.ts +++ b/packages/openapi-decorators/src/loaders/loadApiOperation.ts @@ -2,5 +2,15 @@ import type { OperationBuilder } from "../builders/operation-builder"; import type { ApiOperationOptions } from "../decorators/api-operation"; export function loadApiOperation(operation: OperationBuilder, apiOperation: ApiOperationOptions) { - operation.merge(apiOperation); + const { pattern, method, ...rest } = apiOperation; + + if (pattern) { + operation.pattern = pattern; + } + + if (method) { + operation.method = method; + } + + operation.merge(rest); } diff --git a/packages/openapi-decorators/src/loaders/loadApiParam.ts b/packages/openapi-decorators/src/loaders/loadApiParam.ts index 9f786ec57..1cfec7fe0 100644 --- a/packages/openapi-decorators/src/loaders/loadApiParam.ts +++ b/packages/openapi-decorators/src/loaders/loadApiParam.ts @@ -3,10 +3,10 @@ import type { OperationBuilder } from "../builders/operation-builder"; import type { ApiParamOptions } from "../decorators/api-param"; import { resolveType } from "./loadType"; -export function loadApiParam(document: DocumentBuilder, operation: OperationBuilder, apiParam: ApiParamOptions) { +export async function loadApiParam(document: DocumentBuilder, operation: OperationBuilder, apiParam: ApiParamOptions) { const { type, ...rest } = apiParam; - const schema = resolveType(document, type ?? "string"); + const schema = await resolveType(document, type ?? "string"); operation.addParameter({ in: "path", diff --git a/packages/openapi-decorators/src/loaders/loadApiProperty.ts b/packages/openapi-decorators/src/loaders/loadApiProperty.ts index 98d798b4e..832f8c013 100644 --- a/packages/openapi-decorators/src/loaders/loadApiProperty.ts +++ b/packages/openapi-decorators/src/loaders/loadApiProperty.ts @@ -1,17 +1,27 @@ +import type { OpenAPIV3 } from "openapi-types"; import type { DocumentBuilder } from "../builders/document-builder"; -import type { SchemaBuilder } from "../builders/schema-builder"; import type { ApiPropertyOptions } from "../decorators/api-property"; import { resolveType } from "./loadType"; -export function loadApiProperty( +export async function loadApiProperty( document: DocumentBuilder, - schema: SchemaBuilder, + schema: OpenAPIV3.SchemaObject, name: string, apiProperty: ApiPropertyOptions, ) { const { type, required, ...rest } = apiProperty; - const resolved = type ? resolveType(document, type) : undefined; + const resolved = type ? await resolveType(document, type) : undefined; - schema.setProperty(name, { ...resolved, ...rest }, required ?? true); + schema.properties = { + ...schema.properties, + [name]: { + ...resolved, + ...rest, + }, + }; + + if (required !== false) { + schema.required = [...(schema.required ?? []), name]; + } } diff --git a/packages/openapi-decorators/src/loaders/loadApiQuery.ts b/packages/openapi-decorators/src/loaders/loadApiQuery.ts index 9b38e40c3..7c5e9f919 100644 --- a/packages/openapi-decorators/src/loaders/loadApiQuery.ts +++ b/packages/openapi-decorators/src/loaders/loadApiQuery.ts @@ -3,10 +3,10 @@ import type { OperationBuilder } from "../builders/operation-builder"; import type { ApiQueryOptions } from "../decorators/api-query"; import { resolveType } from "./loadType"; -export function loadApiQuery(document: DocumentBuilder, operation: OperationBuilder, apiQuery: ApiQueryOptions) { +export async function loadApiQuery(document: DocumentBuilder, operation: OperationBuilder, apiQuery: ApiQueryOptions) { const { type, ...rest } = apiQuery; - const schema = resolveType(document, type ?? "string"); + const schema = await resolveType(document, type ?? "string"); operation.addParameter({ in: "query", diff --git a/packages/openapi-decorators/src/loaders/loadApiResponse.ts b/packages/openapi-decorators/src/loaders/loadApiResponse.ts index 7a6707d2c..f921c8a76 100644 --- a/packages/openapi-decorators/src/loaders/loadApiResponse.ts +++ b/packages/openapi-decorators/src/loaders/loadApiResponse.ts @@ -3,13 +3,13 @@ import type { OperationBuilder } from "../builders/operation-builder"; import type { ApiResponseOptions } from "../decorators/api-response"; import { resolveType } from "./loadType"; -export function loadApiResponse( +export async function loadApiResponse( document: DocumentBuilder, operation: OperationBuilder, apiResponse: ApiResponseOptions, ) { const { type, status, ...rest } = apiResponse; - const schema = type ? resolveType(document, type) : undefined; + const schema = type ? await resolveType(document, type) : undefined; operation.setResponse(status?.toString() ?? "200", { description: "OK", // TODO: Depends on status, diff --git a/packages/openapi-decorators/src/loaders/loadController.ts b/packages/openapi-decorators/src/loaders/loadController.ts new file mode 100644 index 000000000..6f4d80642 --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadController.ts @@ -0,0 +1,59 @@ +import type { DocumentBuilder } from "../builders/document-builder"; +import type { OperationBuilder } from "../builders/operation-builder"; +import { getApiBody } from "../decorators/api-body"; +import { getApiOperation } from "../decorators/api-operation"; +import { getApiParams } from "../decorators/api-param"; +import { getApiQueries } from "../decorators/api-query"; +import { getApiResponses } from "../decorators/api-response"; +import { getApiTags } from "../decorators/api-tags"; +import { loadApiBody } from "./loadApiBody"; +import { loadApiOperation } from "./loadApiOperation"; +import { loadApiParam } from "./loadApiParam"; +import { loadApiQuery } from "./loadApiQuery"; +import { loadApiResponse } from "./loadApiResponse"; +import { loadApiTags } from "./loadApiTags"; + +export async function loadController( + document: DocumentBuilder, + operation: OperationBuilder, + target: any, + propertyKey: string, +) { + const globalApiTags = getApiTags(target.constructor); + if (globalApiTags) { + loadApiTags(operation, globalApiTags); + } + + const apiOperation = getApiOperation(target, propertyKey); + if (apiOperation) { + loadApiOperation(operation, apiOperation); + } + + const apiTags = getApiTags(target, propertyKey); + if (apiTags) { + loadApiTags(operation, apiTags); + } + + const apiBody = getApiBody(target, propertyKey); + if (apiBody) { + await loadApiBody(document, operation, apiBody); + } + + const apiResponses = getApiResponses(target, propertyKey); + for (const apiResponse of apiResponses) { + await loadApiResponse(document, operation, apiResponse); + } + + const apiParams = getApiParams(target, propertyKey); + for (const apiParam of apiParams) { + await loadApiParam(document, operation, apiParam); + } + + const apiQueries = getApiQueries(target, propertyKey); + for (const apiQuery of apiQueries) { + await loadApiQuery(document, operation, apiQuery); + } + + const name = target.constructor.name.replace("Controller", ""); + loadApiTags(operation, [name]); +} diff --git a/packages/openapi-decorators/src/loaders/loadSchema.ts b/packages/openapi-decorators/src/loaders/loadSchema.ts deleted file mode 100644 index 26c11264a..000000000 --- a/packages/openapi-decorators/src/loaders/loadSchema.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { DocumentBuilder } from "../builders/document-builder"; -import { getApiProperties } from "../decorators/api-property"; -import { loadApiProperty } from "./loadApiProperty"; - -export function loadSchema(document: DocumentBuilder, target: any): OpenAPIV3.ReferenceObject { - const name = target.constructor.name; - - const existing = document.hasSchema(name); - if (existing) { - return existing; - } - - const schema = document.createSchema(name); - - schema.setType("object"); - - const properties = getApiProperties(target); - - for (const [name, apiProperty] of Object.entries(properties)) { - loadApiProperty(document, schema, name, apiProperty); - } - - return schema.ref; -} diff --git a/packages/openapi-decorators/src/loaders/loadType.ts b/packages/openapi-decorators/src/loaders/loadType.ts index fcb8cfd7e..a1bdb5249 100644 --- a/packages/openapi-decorators/src/loaders/loadType.ts +++ b/packages/openapi-decorators/src/loaders/loadType.ts @@ -1,15 +1,14 @@ import type { OpenAPIV3 } from "openapi-types"; import type { DocumentBuilder } from "../builders/document-builder"; import type { SchemaType } from "../types"; -import { loadSchema } from "./loadSchema"; -export function resolveType( +export async function resolveType( document: DocumentBuilder, type: SchemaType, -): OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject { +): Promise { if (typeof type === "string") { return { - type, + type: type as OpenAPIV3.NonArraySchemaObjectType, // TODO: Fix that }; } @@ -31,9 +30,9 @@ export function resolveType( }; } - if (typeof type === "object") { + if (typeof type === "object" && "$ref" in type) { return type; } - return loadSchema(document, type.prototype); + return document.resolve(type); } diff --git a/packages/openapi-decorators/src/resolvers/index.ts b/packages/openapi-decorators/src/resolvers/index.ts new file mode 100644 index 000000000..a510488ea --- /dev/null +++ b/packages/openapi-decorators/src/resolvers/index.ts @@ -0,0 +1,2 @@ +export * from "./type-resolver"; +export { ModelType } from "./model-resolver"; diff --git a/packages/openapi-decorators/src/resolvers/model-resolver.ts b/packages/openapi-decorators/src/resolvers/model-resolver.ts new file mode 100644 index 000000000..ae25152be --- /dev/null +++ b/packages/openapi-decorators/src/resolvers/model-resolver.ts @@ -0,0 +1,37 @@ +import type { OpenAPIV3 } from "openapi-types"; +import { TypeResolver } from "./type-resolver"; +import { getApiProperties } from "../decorators/api-property"; +import { loadApiProperty } from "../loaders"; +import type { DocumentBuilder } from "../builders"; + +export class ModelTypeResolver extends TypeResolver { + constructor(private readonly type: any) { + super(); + } + + public name(): string { + return this.type.name; + } + + public async schema(document: DocumentBuilder): Promise { + const schema: OpenAPIV3.SchemaObject = { + type: "object", + }; + + const properties = getApiProperties(this.type.prototype); + + for (const [name, apiProperty] of Object.entries(properties)) { + loadApiProperty(document, schema, name, apiProperty); + } + + return schema; + } + + public static supports(type: any): boolean { + return true; + } +} + +export function ModelType(type: any) { + return new ModelTypeResolver(type); +} diff --git a/packages/openapi-decorators/src/resolvers/type-resolver.ts b/packages/openapi-decorators/src/resolvers/type-resolver.ts new file mode 100644 index 000000000..f37b17833 --- /dev/null +++ b/packages/openapi-decorators/src/resolvers/type-resolver.ts @@ -0,0 +1,11 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { DocumentBuilder } from "../builders"; + +export abstract class TypeResolver { + public abstract name(): string; + public abstract schema(document: DocumentBuilder): Promise; + + public static supports(type: any): boolean { + return false; + } +} diff --git a/packages/openapi-decorators/src/types.ts b/packages/openapi-decorators/src/types.ts index 7fc982f0a..752a95ffb 100644 --- a/packages/openapi-decorators/src/types.ts +++ b/packages/openapi-decorators/src/types.ts @@ -1,4 +1,5 @@ import type { OpenAPIV3 } from "openapi-types"; +import type { TypeResolver } from "./resolvers"; export interface Type extends Function { new (...args: any[]): T; @@ -6,4 +7,12 @@ export interface Type extends Function { export type MetadataKey = string | Symbol; -export type SchemaType = Type | OpenAPIV3.NonArraySchemaObjectType | OpenAPIV3.ReferenceObject; +export type SchemaType = + | Type + | TypeResolver + | OpenAPIV3.NonArraySchemaObjectType + | OpenAPIV3.ReferenceObject + | any + | {}; + +export type Resolver = (target: any) => OpenAPIV3.SchemaObject | false; diff --git a/packages/openapi-decorators/test/loaders.test.ts b/packages/openapi-decorators/test/loaders.test.ts index ffc5a821e..fa826c17d 100644 --- a/packages/openapi-decorators/test/loaders.test.ts +++ b/packages/openapi-decorators/test/loaders.test.ts @@ -8,17 +8,18 @@ import { loadApiProperty } from "../src/loaders/loadApiProperty"; import { loadApiQuery } from "../src/loaders/loadApiQuery"; import { loadApiResponse } from "../src/loaders/loadApiResponse"; import { loadApiTags } from "../src/loaders/loadApiTags"; -import { loadSchema } from "../src/loaders/loadSchema"; import { resolveType } from "../src/loaders/loadType"; -import { apiProperty } from "../src/decorators/api-property"; +import type { OpenAPIV3 } from "openapi-types"; +import { apiBody, apiOperation, apiParam, apiQuery, apiResponse, apiTags } from "../src"; +import { loadController } from "../src/loaders"; describe("loaders", () => { describe("loadApiBody", () => { - it("should properly enrich operation", () => { + it("should properly enrich operation", async () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - loadApiBody(document, operation, { + await loadApiBody(document, operation, { type: "string", }); @@ -60,18 +61,32 @@ describe("loaders", () => { responses: {}, }); }); + + it("should override method and pattern", () => { + const operation = new OperationBuilder(); + operation.pattern = "/nop"; + operation.method = "post"; + + loadApiOperation(operation, { + method: "get", + pattern: "/users", + }); + + expect(operation.method).toBe("get"); + expect(operation.pattern).toBe("/users"); + }); }); describe("loadApiParam", () => { - it("should properly enrich operation", () => { + it("should properly enrich operation", async () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - loadApiParam(document, operation, { + await loadApiParam(document, operation, { name: "userId", }); - loadApiParam(document, operation, { + await loadApiParam(document, operation, { name: "collectionId", type: "number", }); @@ -83,36 +98,34 @@ describe("loaders", () => { }); describe("loadApiProperty", () => { - it("should properly enrich schema", () => { + it("should properly enrich schema", async () => { const document = new DocumentBuilder(); - const schema = document.createSchema("Test"); - - loadApiProperty(document, schema, "id", {}); - loadApiProperty(document, schema, "name", { type: "string" }); - loadApiProperty(document, schema, "notRequired", { type: "number", required: false }); + const schema: OpenAPIV3.SchemaObject = {}; - const output = schema.build(); + await loadApiProperty(document, schema, "id", {}); + await loadApiProperty(document, schema, "name", { type: "string" }); + await loadApiProperty(document, schema, "notRequired", { type: "number", required: false }); - expect(output.required).toContainEqual("id"); - expect(output.required).toContainEqual("name"); - expect(output.required).not.toContainEqual("notRequired"); + expect(schema.required).toContainEqual("id"); + expect(schema.required).toContainEqual("name"); + expect(schema.required).not.toContainEqual("notRequired"); - expect(output.properties?.id).toEqual({}); - expect(output.properties?.name).toEqual({ type: "string" }); - expect(output.properties?.notRequired).toEqual({ type: "number" }); + expect(schema.properties?.id).toEqual({}); + expect(schema.properties?.name).toEqual({ type: "string" }); + expect(schema.properties?.notRequired).toEqual({ type: "number" }); }); }); describe("loadApiQuery", () => { - it("should properly enrich operation", () => { + it("should properly enrich operation", async () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - loadApiQuery(document, operation, { + await loadApiQuery(document, operation, { name: "userId", }); - loadApiQuery(document, operation, { + await loadApiQuery(document, operation, { name: "collectionId", type: "number", }); @@ -124,16 +137,16 @@ describe("loaders", () => { }); describe("loadApiResponse", () => { - it("should properly enrich operation", () => { + it("should properly enrich operation", async () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - loadApiResponse(document, operation, { + await loadApiResponse(document, operation, { status: 200, type: "string", }); - loadApiResponse(document, operation, { + await loadApiResponse(document, operation, { status: 500, type: "number", }); @@ -175,48 +188,150 @@ describe("loaders", () => { }); }); - describe("loadSchema", () => { - it("should properly add the schema to the document", () => { - const document = new DocumentBuilder(); - - class Test { - @apiProperty() - declare helloworld: string; - } - - const ref = loadSchema(document, Test.prototype); - const build = document.build(); - - expect(ref).toEqual({ $ref: "#/components/schemas/Test" }); - expect(build.components?.schemas?.Test).toEqual({ - type: "object", - properties: { helloworld: { type: "string" } }, - required: ["helloworld"], - }); - }); - }); - describe("loadType", () => { - it("should accept string types", () => { + it("should accept string types", async () => { const document = new DocumentBuilder(); - expect(resolveType(document, "boolean")).toEqual({ type: "boolean" }); - expect(resolveType(document, "integer")).toEqual({ type: "integer" }); - expect(resolveType(document, "number")).toEqual({ type: "number" }); - expect(resolveType(document, "string")).toEqual({ type: "string" }); + expect(await resolveType(document, "boolean")).toEqual({ type: "boolean" }); + expect(await resolveType(document, "integer")).toEqual({ type: "integer" }); + expect(await resolveType(document, "number")).toEqual({ type: "number" }); + expect(await resolveType(document, "string")).toEqual({ type: "string" }); }); - it("should accept schema reference", () => { + it("should accept schema reference", async () => { const document = new DocumentBuilder(); - expect(resolveType(document, { $ref: "#/components/schemas/User" })).toEqual({ + expect(await resolveType(document, { $ref: "#/components/schemas/User" })).toEqual({ $ref: "#/components/schemas/User", }); }); - it("should accept function types", () => { + it("should accept function types", async () => { const document = new DocumentBuilder(); - expect(resolveType(document, Boolean)).toEqual({ type: "boolean" }); - expect(resolveType(document, Number)).toEqual({ type: "number" }); - expect(resolveType(document, String)).toEqual({ type: "string" }); + expect(await resolveType(document, Boolean)).toEqual({ type: "boolean" }); + expect(await resolveType(document, Number)).toEqual({ type: "number" }); + expect(await resolveType(document, String)).toEqual({ type: "string" }); }); }); }); + +// TODO: Move (and maybe rename) this elsewhere as it is different of other loaders +describe("loadController", () => { + it("should load apiOperation", async () => { + class UsersController { + @apiOperation({ + method: "post", + pattern: "/users", + }) + public create() {} + } + + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + await loadController(document, operation, UsersController.prototype, "create"); + + expect(operation.pattern).toBe("/users"); + expect(operation.method).toBe("post"); + }); + + it("should load tags", async () => { + @apiTags("Hello") + class UsersController { + @apiOperation({ + method: "post", + pattern: "/users", + }) + @apiTags("World") + public create() {} + } + + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + await loadController(document, operation, UsersController.prototype, "create"); + const res = operation.build(); + + expect(res.tags).toContain("Hello"); + expect(res.tags).toContain("World"); + }); + + it("should load apiBody", async () => { + class UsersController { + @apiOperation({ + method: "post", + pattern: "/users", + }) + @apiBody({ type: String }) + public create() {} + } + + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + await loadController(document, operation, UsersController.prototype, "create"); + + const res: any = operation.build(); + + expect(res.requestBody.content["application/json"].schema).toBeDefined(); + }); + + it("should load apiResponse", async () => { + class UsersController { + @apiOperation({ + method: "post", + pattern: "/users", + }) + @apiResponse({ type: String }) + public create() {} + } + + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + await loadController(document, operation, UsersController.prototype, "create"); + + const res: any = operation.build(); + + expect(res.responses[200].content["application/json"].schema).toBeDefined(); + }); + + it("should load apiParam", async () => { + class UsersController { + @apiOperation({ + method: "post", + pattern: "/users", + }) + @apiParam({ name: "userId", type: String }) + @apiParam({ name: "testId", type: String }) + public create() {} + } + + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + await loadController(document, operation, UsersController.prototype, "create"); + + const res: any = operation.build(); + + expect(res.parameters).toHaveLength(2); + }); + + it("should load apiQuery", async () => { + class UsersController { + @apiOperation({ + method: "post", + pattern: "/users", + }) + @apiQuery({ name: "filter", type: String }) + public create() {} + } + + const document = new DocumentBuilder(); + const operation = new OperationBuilder(); + + await loadController(document, operation, UsersController.prototype, "create"); + + const res: any = operation.build(); + + expect(res.parameters).toHaveLength(1); + }); +}); diff --git a/packages/openapi-decorators/tsup.config.ts b/packages/openapi-decorators/tsup.config.ts index 857b52ef6..30c8b1761 100644 --- a/packages/openapi-decorators/tsup.config.ts +++ b/packages/openapi-decorators/tsup.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from "tsup"; export default defineConfig({ - entry: ["src/index.ts", "src/builders/index.ts", "src/loaders/index.ts", "src/ui/index.ts"], + entry: ["src/index.ts", "src/builders/index.ts", "src/loaders/index.ts", "src/resolvers/index.ts", "src/ui/index.ts"], format: ["esm"], dts: true, sourcemap: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e77f7e828..e49548817 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -81,6 +81,9 @@ importers: '@types/node': specifier: ^22.1.0 version: 22.9.0 + '@vitest/coverage-v8': + specifier: ^2.0.5 + version: 2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))) tsup: specifier: ^8.2.4 version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1) @@ -95,7 +98,7 @@ importers: dependencies: '@adonisjs/auth': specifier: ^9.2.3 - version: 9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0)) + version: 9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/plugin-adonisjs@3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2)) '@adonisjs/core': specifier: ^6.12.1 version: 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) @@ -167,6 +170,9 @@ importers: '@types/node': specifier: ^22.1.0 version: 22.9.0 + '@vitest/coverage-v8': + specifier: ^2.0.5 + version: 2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))) del-cli: specifier: ^5.1.0 version: 5.1.0 @@ -856,6 +862,9 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -1719,6 +1728,53 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@japa/api-client@2.0.3': + resolution: {integrity: sha512-2Eh68Kg1+7glMo+mLSPfBGN21wUEA61niTMwdmhEXyw5VrS4IctZxQWhn5fzwj5KnQJfPpxrRnt9432Zs0uN/g==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@japa/assert': ^2.0.0 || ^3.0.0 + '@japa/runner': ^3.1.2 + peerDependenciesMeta: + '@japa/assert': + optional: true + + '@japa/core@9.0.1': + resolution: {integrity: sha512-snngJNbvYC92nn+dB69DT2iyosWZLXPRnOp8NJnVEeotkkKAWSmcDqBKw9qq2+MVdshwClvKFVXTxko4MtmlEQ==} + engines: {node: '>=18.16.0'} + + '@japa/errors-printer@3.0.4': + resolution: {integrity: sha512-gqBWkc8X6n5y91HH7H8fXyfe3rKV1+YeMNgE/+CY6hXf0/BS7J55s/QldosKEV2ZiWj/WmE6UPZiFH8W873fGw==} + engines: {node: '>=18.16.0'} + + '@japa/plugin-adonisjs@3.0.1': + resolution: {integrity: sha512-xUZOzfBXSz2sWRoQT+qs+6LZBtWWE+cCBZ3j9ckz6+nPw3VI0nV6yLaX+oud3AY8Zb+BH+pErABBhaovZYv9dA==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@adonisjs/core': ^6.5.0 + '@japa/api-client': ^2.0.3 + '@japa/browser-client': ^2.0.3 + '@japa/runner': ^3.1.2 + playwright: ^1.42.1 + peerDependenciesMeta: + '@japa/api-client': + optional: true + '@japa/browser-client': + optional: true + playwright: + optional: true + + '@japa/runner@3.1.4': + resolution: {integrity: sha512-ShaVZLdYq3GbFwyNiqQMCfdEoNq9vgYC0P6Z9gflqPcSUfOmN5jeJTLrLpChCBM5Sx9kYuAm5Bh6cqv1ZrArkQ==} + engines: {node: '>=18.16.0'} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -2018,6 +2074,9 @@ packages: '@shikijs/vscode-textmate@9.3.0': resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -2307,6 +2366,9 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/cookiejar@2.1.5': + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + '@types/degit@2.8.6': resolution: {integrity: sha512-y0M7sqzsnHB6cvAeTCBPrCQNQiZe8U4qdzf8uBVmOWYap5MMTN/gB2iEqrIqFiYcsyvP74GnGD5tgsHttielFw==} @@ -2340,6 +2402,9 @@ packages: '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/methods@1.1.4': + resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} @@ -2385,6 +2450,9 @@ packages: '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + '@types/superagent@8.1.9': + resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} + '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -2426,6 +2494,11 @@ packages: vite: ^5.0.0 vue: ^3.2.25 + '@vitest/coverage-v8@2.0.5': + resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==} + peerDependencies: + vitest: 2.0.5 + '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -2709,6 +2782,9 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -2980,6 +3056,9 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -2994,6 +3073,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -3183,6 +3266,10 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -3433,6 +3520,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-cache-dir@5.0.0: + resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==} + engines: {node: '>=16'} + find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -3445,6 +3536,10 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + flattie@1.1.1: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} @@ -3469,6 +3564,9 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + formidable@2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + formidable@3.5.2: resolution: {integrity: sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==} @@ -3649,6 +3747,10 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + hexoid@2.0.0: resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} engines: {node: '>=8'} @@ -3674,6 +3776,9 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -3855,9 +3960,33 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jiti@2.4.0: resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} hasBin: true @@ -3995,6 +4124,10 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} @@ -4048,6 +4181,13 @@ packages: magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + magicast@0.3.4: + resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -4399,6 +4539,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4407,6 +4551,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -4468,6 +4616,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -4562,6 +4714,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + playwright-core@1.48.2: resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} engines: {node: '>=18'} @@ -4619,6 +4775,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} @@ -4702,6 +4862,9 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -4786,6 +4949,10 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -4853,6 +5020,10 @@ packages: engines: {node: '>=10'} hasBin: true + serialize-error@11.0.3: + resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} + engines: {node: '>=14.16'} + set-cookie-parser@2.7.0: resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} @@ -5106,6 +5277,11 @@ packages: resolution: {integrity: sha512-9pIwrHrOj3uAnqg9gDlW7EA2xv+N5au/dSM0kM22HTqmUu8jBxNT+8uA7tA3UoCnmiqzpSbu8rasIUZvbyamMQ==} engines: {node: '>=14.18.0'} + superagent@8.1.2: + resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} + engines: {node: '>=6.4.0 <13 || >=14'} + deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net + superjson@2.2.1: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} @@ -5210,6 +5386,10 @@ packages: resolution: {integrity: sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==} engines: {node: '>=18'} + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -5224,6 +5404,10 @@ packages: resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} engines: {node: '>=8'} + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} + tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} @@ -5369,6 +5553,10 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-fest@4.20.1: resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} engines: {node: '>=16'} @@ -5791,6 +5979,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.2: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} @@ -5879,13 +6071,15 @@ snapshots: - babel-plugin-macros optional: true - '@adonisjs/auth@9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0))': + '@adonisjs/auth@9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/plugin-adonisjs@3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2))': dependencies: '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) '@adonisjs/presets': 2.6.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)) basic-auth: 2.0.1 optionalDependencies: '@adonisjs/lucid': 21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0) + '@japa/api-client': 2.0.3(@japa/runner@3.1.4) + '@japa/plugin-adonisjs': 3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2) transitivePeerDependencies: - '@adonisjs/assembler' @@ -6377,6 +6571,8 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} + '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -7021,6 +7217,70 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/schema@0.1.3': {} + + '@japa/api-client@2.0.3(@japa/runner@3.1.4)': + dependencies: + '@japa/runner': 3.1.4 + '@poppinss/hooks': 7.2.4 + '@poppinss/macroable': 1.0.3 + '@types/superagent': 8.1.9 + cookie: 0.6.0 + set-cookie-parser: 2.7.0 + superagent: 8.1.2 + transitivePeerDependencies: + - supports-color + optional: true + + '@japa/core@9.0.1': + dependencies: + '@poppinss/cliui': 6.4.1 + '@poppinss/hooks': 7.2.4 + '@poppinss/macroable': 1.0.3 + async-retry: 1.3.3 + emittery: 1.0.3 + string-width: 7.2.0 + time-span: 5.1.0 + optional: true + + '@japa/errors-printer@3.0.4': + dependencies: + '@poppinss/colors': 4.1.3 + jest-diff: 29.7.0 + supports-color: 9.4.0 + youch: 3.3.4 + youch-terminal: 2.2.3 + optional: true + + '@japa/plugin-adonisjs@3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2)': + dependencies: + '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) + '@japa/runner': 3.1.4 + optionalDependencies: + '@japa/api-client': 2.0.3(@japa/runner@3.1.4) + playwright: 1.48.2 + optional: true + + '@japa/runner@3.1.4': + dependencies: + '@japa/core': 9.0.1 + '@japa/errors-printer': 3.0.4 + '@poppinss/colors': 4.1.3 + '@poppinss/hooks': 7.2.4 + fast-glob: 3.3.2 + find-cache-dir: 5.0.0 + getopts: 2.3.0 + ms: 2.1.3 + serialize-error: 11.0.3 + slash: 5.1.0 + supports-color: 9.4.0 + optional: true + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + optional: true + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -7334,6 +7594,9 @@ snapshots: '@shikijs/vscode-textmate@9.3.0': {} + '@sinclair/typebox@0.27.8': + optional: true + '@sindresorhus/is@4.6.0': {} '@sindresorhus/is@6.3.1': {} @@ -7591,6 +7854,9 @@ snapshots: '@types/cookie@0.6.0': {} + '@types/cookiejar@2.1.5': + optional: true + '@types/degit@2.8.6': {} '@types/estree@1.0.5': {} @@ -7620,6 +7886,9 @@ snapshots: '@types/mdurl@2.0.0': {} + '@types/methods@1.1.4': + optional: true + '@types/minimist@1.2.5': {} '@types/node@12.20.55': {} @@ -7667,6 +7936,14 @@ snapshots: '@types/statuses@2.0.5': {} + '@types/superagent@8.1.9': + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 22.9.0 + form-data: 4.0.0 + optional: true + '@types/tough-cookie@4.0.5': {} '@types/unist@3.0.3': {} @@ -7713,6 +7990,24 @@ snapshots: vite: 5.4.10(@types/node@22.9.0) vue: 3.5.12(typescript@5.6.3) + '@vitest/coverage-v8@2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.6(supports-color@9.4.0) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.11 + magicast: 0.3.4 + std-env: 3.7.0 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)) + transitivePeerDependencies: + - supports-color + '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -8047,6 +8342,11 @@ snapshots: assertion-error@2.0.1: {} + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + optional: true + asynckit@0.4.0: {} atomic-sleep@1.0.0: {} @@ -8315,6 +8615,9 @@ snapshots: commander@4.1.1: {} + common-path-prefix@3.0.0: + optional: true + component-emitter@1.3.1: {} concat-map@0.0.1: {} @@ -8325,6 +8628,9 @@ snapshots: dependencies: safe-buffer: 5.2.1 + convert-hrtime@5.0.0: + optional: true + convert-source-map@2.0.0: {} cookie@0.5.0: {} @@ -8486,6 +8792,9 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 + diff-sequences@29.6.3: + optional: true + diff@4.0.2: {} dir-glob@3.0.1: @@ -8803,6 +9112,12 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-cache-dir@5.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + optional: true + find-up-simple@1.0.0: {} find-up@4.1.0: @@ -8815,6 +9130,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + optional: true + flattie@1.1.1: {} focus-trap@7.5.4: @@ -8834,6 +9155,14 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + formidable@2.1.2: + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + qs: 6.13.0 + optional: true + formidable@3.5.2: dependencies: dezalgo: 1.0.4 @@ -9025,6 +9354,9 @@ snapshots: help-me@5.0.0: {} + hexoid@1.0.0: + optional: true + hexoid@2.0.0: {} highlight.js@10.7.3: {} @@ -9051,6 +9383,8 @@ snapshots: whatwg-encoding: 2.0.0 optional: true + html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} http-errors@2.0.0: @@ -9193,12 +9527,44 @@ snapshots: isexe@2.0.0: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.3.6(supports-color@9.4.0) + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + optional: true + + jest-get-type@29.6.3: + optional: true + jiti@2.4.0: {} joycon@3.1.1: {} @@ -9353,6 +9719,11 @@ snapshots: dependencies: p-locate: 5.0.0 + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + optional: true + lodash.isequal@4.5.0: {} lodash.sortby@4.7.0: {} @@ -9406,6 +9777,16 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.4: + dependencies: + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + source-map-js: 1.2.0 + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + make-error@1.3.6: {} map-obj@1.0.1: {} @@ -9747,6 +10128,11 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + optional: true + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -9755,6 +10141,11 @@ snapshots: dependencies: p-limit: 3.1.0 + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + optional: true + p-map@2.1.0: {} p-map@5.5.0: @@ -9808,6 +10199,9 @@ snapshots: path-exists@4.0.0: {} + path-exists@5.0.0: + optional: true + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -9899,6 +10293,11 @@ snapshots: pirates@4.0.6: {} + pkg-dir@7.0.0: + dependencies: + find-up: 6.3.0 + optional: true + playwright-core@1.48.2: {} playwright@1.48.2: @@ -9941,6 +10340,13 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + optional: true + pretty-hrtime@1.0.3: {} pretty-ms@9.1.0: @@ -10011,6 +10417,9 @@ snapshots: react-is@17.0.2: {} + react-is@18.3.1: + optional: true + react-refresh@0.14.2: {} react@18.3.1: @@ -10101,6 +10510,9 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + retry@0.13.1: + optional: true + reusify@1.0.4: {} rfdc@1.4.1: {} @@ -10175,6 +10587,11 @@ snapshots: semver@7.6.3: {} + serialize-error@11.0.3: + dependencies: + type-fest: 2.19.0 + optional: true + set-cookie-parser@2.7.0: {} set-function-length@1.2.2: @@ -10452,6 +10869,22 @@ snapshots: transitivePeerDependencies: - supports-color + superagent@8.1.2: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.3.7(supports-color@9.4.0) + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 2.1.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.13.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + optional: true + superjson@2.2.1: dependencies: copy-anything: 3.0.5 @@ -10546,6 +10979,12 @@ snapshots: terminal-size@4.0.0: {} + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -10560,6 +10999,11 @@ snapshots: tildify@2.0.0: {} + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 + optional: true + tiny-glob@0.2.9: dependencies: globalyzer: 0.1.0 @@ -10696,6 +11140,9 @@ snapshots: type-fest@1.4.0: {} + type-fest@2.19.0: + optional: true + type-fest@4.20.1: {} type-fest@4.26.1: {} @@ -11139,6 +11586,9 @@ snapshots: yocto-queue@0.1.0: {} + yocto-queue@1.1.1: + optional: true + yoctocolors-cjs@2.1.2: {} yoctocolors@2.1.1: {} From cc83b699a833c993eb6c7a1722f0d2afc928ff0d Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Mon, 19 Aug 2024 00:05:33 +0200 Subject: [PATCH 10/25] openapi-decorators documentation --- docs/.vitepress/en.ts | 7 + docs/openapi-adonis/decorators.md | 7 + docs/openapi-decorators/decorators.md | 20 +++ docs/openapi-decorators/index.md | 194 ++++++++++++++++++++++++++ 4 files changed, 228 insertions(+) create mode 100644 docs/openapi-adonis/decorators.md create mode 100644 docs/openapi-decorators/decorators.md create mode 100644 docs/openapi-decorators/index.md diff --git a/docs/.vitepress/en.ts b/docs/.vitepress/en.ts index 6eb9c0d71..e91610ae6 100644 --- a/docs/.vitepress/en.ts +++ b/docs/.vitepress/en.ts @@ -93,6 +93,13 @@ export default defineConfig({ { text: "About", link: "/about" }, ], }, + { + text: "openapi-decorators", + items: [ + { text: "Getting Started", link: "/openapi-decorators/" }, + { text: "Decorators", link: "/openapi-decorators/decorators" }, + ], + }, ], }, search: { diff --git a/docs/openapi-adonis/decorators.md b/docs/openapi-adonis/decorators.md new file mode 100644 index 000000000..b45d46601 --- /dev/null +++ b/docs/openapi-adonis/decorators.md @@ -0,0 +1,7 @@ +--- +title: openapi-adonis +--- + +## `@apiProperty` + + diff --git a/docs/openapi-decorators/decorators.md b/docs/openapi-decorators/decorators.md new file mode 100644 index 000000000..ee1a4c7ff --- /dev/null +++ b/docs/openapi-decorators/decorators.md @@ -0,0 +1,20 @@ +--- +title: Decorators +--- + +# Decorators + +Decorators are used to enrich your OpenAPI specifications. They can be applied on a Controller, a Method or a Model. They are all prefixed with `api`. + +> For more information about the decorators, you can directly refer to the [source code](https://github.com/openapi-ts/openapi-typescript/packages/openapi-decorators/src/decorators). + +| Decorator | Usage | Description | +|-|-|-| +| `@apiProperty` | Model | Configures a schema property. | +| `@apiTags` | Controller / Method | Adds tags to the operation. When applied on a controller, the tags are applied to all of its operations. | +| `@apiOperation` | Method | Configures an operation. | +| `@apiQuery` | Method | Adds a query parameter to the operation. | +| `@apiParam` | Method | Adds a path parameter to the operation. | +| `@apiResponse` | Method | Adds a response to the operation. | +| `@apiBody` | Method | Sets the requestBody of the operation. | + diff --git a/docs/openapi-decorators/index.md b/docs/openapi-decorators/index.md new file mode 100644 index 000000000..8ac17c9fb --- /dev/null +++ b/docs/openapi-decorators/index.md @@ -0,0 +1,194 @@ +--- +title: 'Getting started' +--- + +# Introduction + +`openapi-decorators` is a framework agnostic library to automatically generate OpenAPI schemas and documentation by using Typescript decorators and metadata. + +::: code-group + +```ts [users_controller.ts] +import { apiOperation, apiResponse } from "openapi-adonis/decorators"; +import User from "./user"; + +class UsersController { + @apiOperation({ + method: "get", + pattern: "/users", + summary: "List users" + }) + @apiResponse({ type: [User] }) + async list() { + ... + } +} +``` + +```ts [user.ts] +import { apiProperty } from "openapi-adonis/decorators"; + +class User { + @apiProperty() + declare id: number; + + @apiProperty() + declare name: string; + + @apiProperty({ required: false }) + declare mobile?: string; +} +``` + +```ts [index.ts] +import "reflect-metadata"; +import { DocumentBuilder } from "openapi-decorators/builders"; +import { loadController } from "openapi-decorators/loaders"; +import UsersController from "./users_controller"; + +const builder = new DocumentBuilder() + .setTitle("My API") + .setVersion("1.0.0"); + +await loadController(builder, UsersController); + +console.log(document.build()); // <- Your generated OpenAPI specifications +``` + +::: + +## Getting started + +### Setup + +Install `openapi-decorators` and `reflect-metadata` using your favorite package manager. + +```bash +npm install openapi-decorators reflect-metadata +``` + +Import `reflect-metadata` in your main file. + +::: code-group + +```ts [index.ts] +import "reflect-metadata"; + +// Rest of your app +``` + +::: + +Enable `experimentalDecorators` and `experimentalDecorators`. + + +::: code-group + +```json [tsconfig.json] +{ + "compilerOptions": { + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + } +} +``` + +::: + +### Create your OpenAPI document + +To get started, create a new DocumentBuilder. It will hold all the informations required to generate your OpenAPI specifications. +By using the method `build()` you can already have an (almost) empty documentation. + +::: code-group + +```ts [index.ts] +import "reflect-metadata"; +import { DocumentBuilder } from "openapi-decorators/builders"; + +const builder = new DocumentBuilder() + .setTitle("My API") + .setVersion("1.0.0"); + +console.log(document.build()); // <- Your generated OpenAPI specifications +``` + +::: + +### Create your first model + +Using the `apiProperty` decorator on class properties will allow your operations to use the class as a schema. + +> Unlike other libraries like `@nestjs/swagger`, every element of your OpenAPI schema is lazy-loaded. Your models will only be part of your documentation if it is used. + +::: code-group + +```ts [user.ts] +import { apiProperty } from "openapi-decorators/decorators"; + +class User { + @apiProperty() + declare id: string; + + @apiProperty({ example: "John Doe" }) + declare name: string; + + @apiProperty() + declare email: string; + + @apiProperty({ required: false }) + declare mobile?: string; +} +``` + +::: + +### Create your first controller + +Next we need to define our first operation. We can do this by using a controller. + +In the following example we create an operation `GET /users` that returns a list of `User`. + +::: code-group + +```ts [users_controller.ts] +import { apiOperation, apiResponse } from "openapi-decorators/decorators"; +import User from "./user"; + +class UsersController { + @apiOperation({ + method: "get", + pattern: "/users", + summary: "List users" + }) + @apiResponse({ type: [User] }) + async list() { + ... + } +} +``` + +::: + +### Load the controller into your DocumentBuilder + +You now simply have to load the controller into your DocumentBuilder and tada 🎉. + +::: code-group + +```ts [index.ts] +import "reflect-metadata"; +import { DocumentBuilder } from "openapi-decorators/builders"; +import { loadController } from "openapi-decorators/loaders"; +import UsersController from "./users_controller"; + +const builder = new DocumentBuilder() + .setTitle("My API") + .setVersion("1.0.0"); + +await loadController(builder, UsersController); + +console.log(document.build()); // <- Your generated OpenAPI specifications +``` + +::: From 77fc1a7f62e7b6ece423c30dbe63de8b0783693e Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Mon, 19 Aug 2024 09:24:02 +0200 Subject: [PATCH 11/25] openapi-decorators documentation --- .../openapi-adonis/src/loaders/loadRoute.ts | 4 +- .../openapi-decorators/src/loaders/index.ts | 2 +- .../src/loaders/loadController.ts | 60 +------------------ .../src/loaders/loadControllerOperation.ts | 59 ++++++++++++++++++ .../openapi-decorators/test/loaders.test.ts | 14 ++--- 5 files changed, 71 insertions(+), 68 deletions(-) create mode 100644 packages/openapi-decorators/src/loaders/loadControllerOperation.ts diff --git a/packages/openapi-adonis/src/loaders/loadRoute.ts b/packages/openapi-adonis/src/loaders/loadRoute.ts index c098a03f4..075278343 100644 --- a/packages/openapi-adonis/src/loaders/loadRoute.ts +++ b/packages/openapi-adonis/src/loaders/loadRoute.ts @@ -1,7 +1,7 @@ import type { OpenAPIV3 } from "openapi-types"; import { OperationBuilder, type DocumentBuilder } from "openapi-decorators/builders"; import type { AdonisRoute } from "../types"; -import { loadApiOperation, loadController } from "openapi-decorators/loaders"; +import { loadApiOperation, loadControllerOperation } from "openapi-decorators/loaders"; import { normalizeRoutePattern } from "../utils/normalizeRoutePattern"; export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { @@ -26,7 +26,7 @@ export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { pattern: normalizeRoutePattern(route.pattern), }); - loadController(document, operation, target.prototype, propertyKey); + loadControllerOperation(document, operation, target.prototype, propertyKey); document.addOperation(operation); } diff --git a/packages/openapi-decorators/src/loaders/index.ts b/packages/openapi-decorators/src/loaders/index.ts index 72202569f..4436909ad 100644 --- a/packages/openapi-decorators/src/loaders/index.ts +++ b/packages/openapi-decorators/src/loaders/index.ts @@ -5,5 +5,5 @@ export * from "./loadApiProperty"; export * from "./loadApiQuery"; export * from "./loadApiResponse"; export * from "./loadApiTags"; -export * from "./loadController"; +export * from "./loadControllerOperation"; export * from "./loadType"; diff --git a/packages/openapi-decorators/src/loaders/loadController.ts b/packages/openapi-decorators/src/loaders/loadController.ts index 6f4d80642..5a67fa79a 100644 --- a/packages/openapi-decorators/src/loaders/loadController.ts +++ b/packages/openapi-decorators/src/loaders/loadController.ts @@ -1,59 +1,3 @@ -import type { DocumentBuilder } from "../builders/document-builder"; -import type { OperationBuilder } from "../builders/operation-builder"; -import { getApiBody } from "../decorators/api-body"; -import { getApiOperation } from "../decorators/api-operation"; -import { getApiParams } from "../decorators/api-param"; -import { getApiQueries } from "../decorators/api-query"; -import { getApiResponses } from "../decorators/api-response"; -import { getApiTags } from "../decorators/api-tags"; -import { loadApiBody } from "./loadApiBody"; -import { loadApiOperation } from "./loadApiOperation"; -import { loadApiParam } from "./loadApiParam"; -import { loadApiQuery } from "./loadApiQuery"; -import { loadApiResponse } from "./loadApiResponse"; -import { loadApiTags } from "./loadApiTags"; +import type { DocumentBuilder } from "../builders"; -export async function loadController( - document: DocumentBuilder, - operation: OperationBuilder, - target: any, - propertyKey: string, -) { - const globalApiTags = getApiTags(target.constructor); - if (globalApiTags) { - loadApiTags(operation, globalApiTags); - } - - const apiOperation = getApiOperation(target, propertyKey); - if (apiOperation) { - loadApiOperation(operation, apiOperation); - } - - const apiTags = getApiTags(target, propertyKey); - if (apiTags) { - loadApiTags(operation, apiTags); - } - - const apiBody = getApiBody(target, propertyKey); - if (apiBody) { - await loadApiBody(document, operation, apiBody); - } - - const apiResponses = getApiResponses(target, propertyKey); - for (const apiResponse of apiResponses) { - await loadApiResponse(document, operation, apiResponse); - } - - const apiParams = getApiParams(target, propertyKey); - for (const apiParam of apiParams) { - await loadApiParam(document, operation, apiParam); - } - - const apiQueries = getApiQueries(target, propertyKey); - for (const apiQuery of apiQueries) { - await loadApiQuery(document, operation, apiQuery); - } - - const name = target.constructor.name.replace("Controller", ""); - loadApiTags(operation, [name]); -} +export function loadController(document: DocumentBuilder, target: any) {} diff --git a/packages/openapi-decorators/src/loaders/loadControllerOperation.ts b/packages/openapi-decorators/src/loaders/loadControllerOperation.ts new file mode 100644 index 000000000..147ae7039 --- /dev/null +++ b/packages/openapi-decorators/src/loaders/loadControllerOperation.ts @@ -0,0 +1,59 @@ +import type { DocumentBuilder } from "../builders/document-builder"; +import type { OperationBuilder } from "../builders/operation-builder"; +import { getApiBody } from "../decorators/api-body"; +import { getApiOperation } from "../decorators/api-operation"; +import { getApiParams } from "../decorators/api-param"; +import { getApiQueries } from "../decorators/api-query"; +import { getApiResponses } from "../decorators/api-response"; +import { getApiTags } from "../decorators/api-tags"; +import { loadApiBody } from "./loadApiBody"; +import { loadApiOperation } from "./loadApiOperation"; +import { loadApiParam } from "./loadApiParam"; +import { loadApiQuery } from "./loadApiQuery"; +import { loadApiResponse } from "./loadApiResponse"; +import { loadApiTags } from "./loadApiTags"; + +export async function loadControllerOperation( + document: DocumentBuilder, + operation: OperationBuilder, + target: any, + propertyKey: string, +) { + const globalApiTags = getApiTags(target.constructor); + if (globalApiTags) { + loadApiTags(operation, globalApiTags); + } + + const apiOperation = getApiOperation(target, propertyKey); + if (apiOperation) { + loadApiOperation(operation, apiOperation); + } + + const apiTags = getApiTags(target, propertyKey); + if (apiTags) { + loadApiTags(operation, apiTags); + } + + const apiBody = getApiBody(target, propertyKey); + if (apiBody) { + await loadApiBody(document, operation, apiBody); + } + + const apiResponses = getApiResponses(target, propertyKey); + for (const apiResponse of apiResponses) { + await loadApiResponse(document, operation, apiResponse); + } + + const apiParams = getApiParams(target, propertyKey); + for (const apiParam of apiParams) { + await loadApiParam(document, operation, apiParam); + } + + const apiQueries = getApiQueries(target, propertyKey); + for (const apiQuery of apiQueries) { + await loadApiQuery(document, operation, apiQuery); + } + + const name = target.constructor.name.replace("Controller", ""); + loadApiTags(operation, [name]); +} diff --git a/packages/openapi-decorators/test/loaders.test.ts b/packages/openapi-decorators/test/loaders.test.ts index fa826c17d..0a285c26a 100644 --- a/packages/openapi-decorators/test/loaders.test.ts +++ b/packages/openapi-decorators/test/loaders.test.ts @@ -11,7 +11,7 @@ import { loadApiTags } from "../src/loaders/loadApiTags"; import { resolveType } from "../src/loaders/loadType"; import type { OpenAPIV3 } from "openapi-types"; import { apiBody, apiOperation, apiParam, apiQuery, apiResponse, apiTags } from "../src"; -import { loadController } from "../src/loaders"; +import { loadControllerOperation } from "../src/loaders"; describe("loaders", () => { describe("loadApiBody", () => { @@ -227,7 +227,7 @@ describe("loadController", () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - await loadController(document, operation, UsersController.prototype, "create"); + await loadControllerOperation(document, operation, UsersController.prototype, "create"); expect(operation.pattern).toBe("/users"); expect(operation.method).toBe("post"); @@ -247,7 +247,7 @@ describe("loadController", () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - await loadController(document, operation, UsersController.prototype, "create"); + await loadControllerOperation(document, operation, UsersController.prototype, "create"); const res = operation.build(); expect(res.tags).toContain("Hello"); @@ -267,7 +267,7 @@ describe("loadController", () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - await loadController(document, operation, UsersController.prototype, "create"); + await loadControllerOperation(document, operation, UsersController.prototype, "create"); const res: any = operation.build(); @@ -287,7 +287,7 @@ describe("loadController", () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - await loadController(document, operation, UsersController.prototype, "create"); + await loadControllerOperation(document, operation, UsersController.prototype, "create"); const res: any = operation.build(); @@ -308,7 +308,7 @@ describe("loadController", () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - await loadController(document, operation, UsersController.prototype, "create"); + await loadControllerOperation(document, operation, UsersController.prototype, "create"); const res: any = operation.build(); @@ -328,7 +328,7 @@ describe("loadController", () => { const document = new DocumentBuilder(); const operation = new OperationBuilder(); - await loadController(document, operation, UsersController.prototype, "create"); + await loadControllerOperation(document, operation, UsersController.prototype, "create"); const res: any = operation.build(); From 6c86880475b46c28e04140d4f70d1c10db2293a2 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Tue, 27 Aug 2024 00:45:53 +0200 Subject: [PATCH 12/25] Rename openapi-decorators to openapi-metadata --- packages/openapi-adonis/package.json | 2 +- .../openapi-adonis/src/decorators/index.ts | 2 +- packages/openapi-adonis/src/index.ts | 6 +- .../openapi-adonis/src/loaders/loadRoute.ts | 4 +- .../openapi-adonis/src/loaders/loadRouter.ts | 2 +- .../src/resolvers/vine-type.resolver.ts | 2 +- .../.npmignore | 0 .../biome.json | 0 .../package.json | 4 +- .../src/builders/base-builder.ts | 0 .../src/builders/document-builder.ts | 0 .../src/builders/index.ts | 0 .../src/builders/operation-builder.ts | 0 .../src/decorators/api-body.ts | 0 .../src/decorators/api-operation.ts | 0 .../src/decorators/api-param.ts | 0 .../src/decorators/api-property.ts | 0 .../src/decorators/api-query.ts | 0 .../src/decorators/api-response.ts | 0 .../src/decorators/api-tags.ts | 0 .../src/decorators/index.ts | 0 .../src/fixtures/document-base.ts | 0 .../src/index.ts | 0 .../src/loaders/index.ts | 0 .../src/loaders/loadApiBody.ts | 0 .../src/loaders/loadApiOperation.ts | 0 .../src/loaders/loadApiParam.ts | 0 .../src/loaders/loadApiProperty.ts | 0 .../src/loaders/loadApiQuery.ts | 0 .../src/loaders/loadApiResponse.ts | 0 .../src/loaders/loadApiTags.ts | 0 .../src/loaders/loadController.ts | 0 .../src/loaders/loadControllerOperation.ts | 0 .../src/loaders/loadType.ts | 0 .../src/resolvers/index.ts | 0 .../src/resolvers/model-resolver.ts | 0 .../src/resolvers/type-resolver.ts | 0 .../src/types.ts | 0 .../src/ui/index.ts | 0 .../src/ui/scalar.ts | 0 .../src/utils/deepmerge.ts | 0 .../src/utils/metadata.ts | 0 .../test/decorators.test.ts | 0 .../test/loaders.test.ts | 0 .../tsconfig.json | 0 .../tsup.config.ts | 0 .../vitest.config.ts | 0 pnpm-lock.yaml | 207 ++++++++++++++---- 48 files changed, 173 insertions(+), 56 deletions(-) rename packages/{openapi-decorators => openapi-metadata}/.npmignore (100%) rename packages/{openapi-decorators => openapi-metadata}/biome.json (100%) rename packages/{openapi-decorators => openapi-metadata}/package.json (95%) rename packages/{openapi-decorators => openapi-metadata}/src/builders/base-builder.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/builders/document-builder.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/builders/index.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/builders/operation-builder.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/api-body.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/api-operation.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/api-param.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/api-property.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/api-query.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/api-response.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/api-tags.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/decorators/index.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/fixtures/document-base.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/index.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/index.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadApiBody.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadApiOperation.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadApiParam.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadApiProperty.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadApiQuery.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadApiResponse.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadApiTags.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadController.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadControllerOperation.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/loaders/loadType.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/resolvers/index.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/resolvers/model-resolver.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/resolvers/type-resolver.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/types.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/ui/index.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/ui/scalar.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/utils/deepmerge.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/src/utils/metadata.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/test/decorators.test.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/test/loaders.test.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/tsconfig.json (100%) rename packages/{openapi-decorators => openapi-metadata}/tsup.config.ts (100%) rename packages/{openapi-decorators => openapi-metadata}/vitest.config.ts (100%) diff --git a/packages/openapi-adonis/package.json b/packages/openapi-adonis/package.json index 6f442eeb4..1544c99fd 100644 --- a/packages/openapi-adonis/package.json +++ b/packages/openapi-adonis/package.json @@ -52,7 +52,7 @@ "@fastify/deepmerge": "^2.0.0", "@vinejs/vine": "^2.1.0", "lodash": "^4.17.21", - "openapi-decorators": "workspace:^", + "openapi-metadata": "workspace:^", "openapi-types": "^12.1.3", "reflect-metadata": "^0.2.2" }, diff --git a/packages/openapi-adonis/src/decorators/index.ts b/packages/openapi-adonis/src/decorators/index.ts index 49ccd8402..6f8994bbf 100644 --- a/packages/openapi-adonis/src/decorators/index.ts +++ b/packages/openapi-adonis/src/decorators/index.ts @@ -1 +1 @@ -export * from "openapi-decorators"; +export * from "openapi-metadata"; diff --git a/packages/openapi-adonis/src/index.ts b/packages/openapi-adonis/src/index.ts index 7867519c4..d19c65d9c 100644 --- a/packages/openapi-adonis/src/index.ts +++ b/packages/openapi-adonis/src/index.ts @@ -1,13 +1,13 @@ import type { OpenAPIV3 } from "openapi-types"; import type { Router } from "@adonisjs/http-server"; -import { DocumentBuilder } from "openapi-decorators/builders"; -import { generateScalarUI } from "openapi-decorators/ui"; +import { DocumentBuilder } from "openapi-metadata/builders"; +import { generateScalarUI } from "openapi-metadata/ui"; import { loadRouter } from "./loaders/loadRouter"; import { VineTypeResolver } from "./resolvers/vine-type.resolver"; export { VineType } from "./resolvers/vine-type.resolver"; -export { ModelType } from "openapi-decorators/resolvers"; +export { ModelType } from "openapi-metadata/resolvers"; // biome-ignore lint/complexity/noStaticOnlyClass: TODO: move out of class export default class AdonisOpenAPI { diff --git a/packages/openapi-adonis/src/loaders/loadRoute.ts b/packages/openapi-adonis/src/loaders/loadRoute.ts index 075278343..7b31a09ee 100644 --- a/packages/openapi-adonis/src/loaders/loadRoute.ts +++ b/packages/openapi-adonis/src/loaders/loadRoute.ts @@ -1,7 +1,7 @@ import type { OpenAPIV3 } from "openapi-types"; -import { OperationBuilder, type DocumentBuilder } from "openapi-decorators/builders"; +import { OperationBuilder, type DocumentBuilder } from "openapi-metadata/builders"; import type { AdonisRoute } from "../types"; -import { loadApiOperation, loadControllerOperation } from "openapi-decorators/loaders"; +import { loadApiOperation, loadControllerOperation } from "openapi-metadata/loaders"; import { normalizeRoutePattern } from "../utils/normalizeRoutePattern"; export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { diff --git a/packages/openapi-adonis/src/loaders/loadRouter.ts b/packages/openapi-adonis/src/loaders/loadRouter.ts index 251be6212..5229313fb 100644 --- a/packages/openapi-adonis/src/loaders/loadRouter.ts +++ b/packages/openapi-adonis/src/loaders/loadRouter.ts @@ -1,5 +1,5 @@ import type { Router } from "@adonisjs/http-server"; -import type { DocumentBuilder } from "openapi-decorators/builders"; +import type { DocumentBuilder } from "openapi-metadata/builders"; import { loadRoute } from "./loadRoute"; /** diff --git a/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts b/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts index aaac95064..97a29eb9d 100644 --- a/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts +++ b/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts @@ -1,6 +1,6 @@ import { SimpleMessagesProvider, type VineValidator } from "@vinejs/vine"; import type { SchemaTypes } from "@vinejs/vine/types"; -import { TypeResolver } from "openapi-decorators/resolvers"; +import { TypeResolver } from "openapi-metadata/resolvers"; import type { OpenAPIV3 } from "openapi-types"; import _ from "lodash"; diff --git a/packages/openapi-decorators/.npmignore b/packages/openapi-metadata/.npmignore similarity index 100% rename from packages/openapi-decorators/.npmignore rename to packages/openapi-metadata/.npmignore diff --git a/packages/openapi-decorators/biome.json b/packages/openapi-metadata/biome.json similarity index 100% rename from packages/openapi-decorators/biome.json rename to packages/openapi-metadata/biome.json diff --git a/packages/openapi-decorators/package.json b/packages/openapi-metadata/package.json similarity index 95% rename from packages/openapi-decorators/package.json rename to packages/openapi-metadata/package.json index 9c1d41921..31088cbb5 100644 --- a/packages/openapi-decorators/package.json +++ b/packages/openapi-metadata/package.json @@ -1,5 +1,5 @@ { - "name": "openapi-decorators", + "name": "openapi-metadata", "description": "Auto-Generate OpenAPI specifications from Typescript decorators", "version": "0.0.1", "author": { @@ -33,7 +33,7 @@ "repository": { "type": "git", "url": "https://github.com/openapi-ts/openapi-typescript", - "directory": "packages/openapi-decorators" + "directory": "packages/openapi-metadata" }, "bugs": { "url": "https://github.com/openapi-ts/openapi-typescript/issues" diff --git a/packages/openapi-decorators/src/builders/base-builder.ts b/packages/openapi-metadata/src/builders/base-builder.ts similarity index 100% rename from packages/openapi-decorators/src/builders/base-builder.ts rename to packages/openapi-metadata/src/builders/base-builder.ts diff --git a/packages/openapi-decorators/src/builders/document-builder.ts b/packages/openapi-metadata/src/builders/document-builder.ts similarity index 100% rename from packages/openapi-decorators/src/builders/document-builder.ts rename to packages/openapi-metadata/src/builders/document-builder.ts diff --git a/packages/openapi-decorators/src/builders/index.ts b/packages/openapi-metadata/src/builders/index.ts similarity index 100% rename from packages/openapi-decorators/src/builders/index.ts rename to packages/openapi-metadata/src/builders/index.ts diff --git a/packages/openapi-decorators/src/builders/operation-builder.ts b/packages/openapi-metadata/src/builders/operation-builder.ts similarity index 100% rename from packages/openapi-decorators/src/builders/operation-builder.ts rename to packages/openapi-metadata/src/builders/operation-builder.ts diff --git a/packages/openapi-decorators/src/decorators/api-body.ts b/packages/openapi-metadata/src/decorators/api-body.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/api-body.ts rename to packages/openapi-metadata/src/decorators/api-body.ts diff --git a/packages/openapi-decorators/src/decorators/api-operation.ts b/packages/openapi-metadata/src/decorators/api-operation.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/api-operation.ts rename to packages/openapi-metadata/src/decorators/api-operation.ts diff --git a/packages/openapi-decorators/src/decorators/api-param.ts b/packages/openapi-metadata/src/decorators/api-param.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/api-param.ts rename to packages/openapi-metadata/src/decorators/api-param.ts diff --git a/packages/openapi-decorators/src/decorators/api-property.ts b/packages/openapi-metadata/src/decorators/api-property.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/api-property.ts rename to packages/openapi-metadata/src/decorators/api-property.ts diff --git a/packages/openapi-decorators/src/decorators/api-query.ts b/packages/openapi-metadata/src/decorators/api-query.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/api-query.ts rename to packages/openapi-metadata/src/decorators/api-query.ts diff --git a/packages/openapi-decorators/src/decorators/api-response.ts b/packages/openapi-metadata/src/decorators/api-response.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/api-response.ts rename to packages/openapi-metadata/src/decorators/api-response.ts diff --git a/packages/openapi-decorators/src/decorators/api-tags.ts b/packages/openapi-metadata/src/decorators/api-tags.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/api-tags.ts rename to packages/openapi-metadata/src/decorators/api-tags.ts diff --git a/packages/openapi-decorators/src/decorators/index.ts b/packages/openapi-metadata/src/decorators/index.ts similarity index 100% rename from packages/openapi-decorators/src/decorators/index.ts rename to packages/openapi-metadata/src/decorators/index.ts diff --git a/packages/openapi-decorators/src/fixtures/document-base.ts b/packages/openapi-metadata/src/fixtures/document-base.ts similarity index 100% rename from packages/openapi-decorators/src/fixtures/document-base.ts rename to packages/openapi-metadata/src/fixtures/document-base.ts diff --git a/packages/openapi-decorators/src/index.ts b/packages/openapi-metadata/src/index.ts similarity index 100% rename from packages/openapi-decorators/src/index.ts rename to packages/openapi-metadata/src/index.ts diff --git a/packages/openapi-decorators/src/loaders/index.ts b/packages/openapi-metadata/src/loaders/index.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/index.ts rename to packages/openapi-metadata/src/loaders/index.ts diff --git a/packages/openapi-decorators/src/loaders/loadApiBody.ts b/packages/openapi-metadata/src/loaders/loadApiBody.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadApiBody.ts rename to packages/openapi-metadata/src/loaders/loadApiBody.ts diff --git a/packages/openapi-decorators/src/loaders/loadApiOperation.ts b/packages/openapi-metadata/src/loaders/loadApiOperation.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadApiOperation.ts rename to packages/openapi-metadata/src/loaders/loadApiOperation.ts diff --git a/packages/openapi-decorators/src/loaders/loadApiParam.ts b/packages/openapi-metadata/src/loaders/loadApiParam.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadApiParam.ts rename to packages/openapi-metadata/src/loaders/loadApiParam.ts diff --git a/packages/openapi-decorators/src/loaders/loadApiProperty.ts b/packages/openapi-metadata/src/loaders/loadApiProperty.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadApiProperty.ts rename to packages/openapi-metadata/src/loaders/loadApiProperty.ts diff --git a/packages/openapi-decorators/src/loaders/loadApiQuery.ts b/packages/openapi-metadata/src/loaders/loadApiQuery.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadApiQuery.ts rename to packages/openapi-metadata/src/loaders/loadApiQuery.ts diff --git a/packages/openapi-decorators/src/loaders/loadApiResponse.ts b/packages/openapi-metadata/src/loaders/loadApiResponse.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadApiResponse.ts rename to packages/openapi-metadata/src/loaders/loadApiResponse.ts diff --git a/packages/openapi-decorators/src/loaders/loadApiTags.ts b/packages/openapi-metadata/src/loaders/loadApiTags.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadApiTags.ts rename to packages/openapi-metadata/src/loaders/loadApiTags.ts diff --git a/packages/openapi-decorators/src/loaders/loadController.ts b/packages/openapi-metadata/src/loaders/loadController.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadController.ts rename to packages/openapi-metadata/src/loaders/loadController.ts diff --git a/packages/openapi-decorators/src/loaders/loadControllerOperation.ts b/packages/openapi-metadata/src/loaders/loadControllerOperation.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadControllerOperation.ts rename to packages/openapi-metadata/src/loaders/loadControllerOperation.ts diff --git a/packages/openapi-decorators/src/loaders/loadType.ts b/packages/openapi-metadata/src/loaders/loadType.ts similarity index 100% rename from packages/openapi-decorators/src/loaders/loadType.ts rename to packages/openapi-metadata/src/loaders/loadType.ts diff --git a/packages/openapi-decorators/src/resolvers/index.ts b/packages/openapi-metadata/src/resolvers/index.ts similarity index 100% rename from packages/openapi-decorators/src/resolvers/index.ts rename to packages/openapi-metadata/src/resolvers/index.ts diff --git a/packages/openapi-decorators/src/resolvers/model-resolver.ts b/packages/openapi-metadata/src/resolvers/model-resolver.ts similarity index 100% rename from packages/openapi-decorators/src/resolvers/model-resolver.ts rename to packages/openapi-metadata/src/resolvers/model-resolver.ts diff --git a/packages/openapi-decorators/src/resolvers/type-resolver.ts b/packages/openapi-metadata/src/resolvers/type-resolver.ts similarity index 100% rename from packages/openapi-decorators/src/resolvers/type-resolver.ts rename to packages/openapi-metadata/src/resolvers/type-resolver.ts diff --git a/packages/openapi-decorators/src/types.ts b/packages/openapi-metadata/src/types.ts similarity index 100% rename from packages/openapi-decorators/src/types.ts rename to packages/openapi-metadata/src/types.ts diff --git a/packages/openapi-decorators/src/ui/index.ts b/packages/openapi-metadata/src/ui/index.ts similarity index 100% rename from packages/openapi-decorators/src/ui/index.ts rename to packages/openapi-metadata/src/ui/index.ts diff --git a/packages/openapi-decorators/src/ui/scalar.ts b/packages/openapi-metadata/src/ui/scalar.ts similarity index 100% rename from packages/openapi-decorators/src/ui/scalar.ts rename to packages/openapi-metadata/src/ui/scalar.ts diff --git a/packages/openapi-decorators/src/utils/deepmerge.ts b/packages/openapi-metadata/src/utils/deepmerge.ts similarity index 100% rename from packages/openapi-decorators/src/utils/deepmerge.ts rename to packages/openapi-metadata/src/utils/deepmerge.ts diff --git a/packages/openapi-decorators/src/utils/metadata.ts b/packages/openapi-metadata/src/utils/metadata.ts similarity index 100% rename from packages/openapi-decorators/src/utils/metadata.ts rename to packages/openapi-metadata/src/utils/metadata.ts diff --git a/packages/openapi-decorators/test/decorators.test.ts b/packages/openapi-metadata/test/decorators.test.ts similarity index 100% rename from packages/openapi-decorators/test/decorators.test.ts rename to packages/openapi-metadata/test/decorators.test.ts diff --git a/packages/openapi-decorators/test/loaders.test.ts b/packages/openapi-metadata/test/loaders.test.ts similarity index 100% rename from packages/openapi-decorators/test/loaders.test.ts rename to packages/openapi-metadata/test/loaders.test.ts diff --git a/packages/openapi-decorators/tsconfig.json b/packages/openapi-metadata/tsconfig.json similarity index 100% rename from packages/openapi-decorators/tsconfig.json rename to packages/openapi-metadata/tsconfig.json diff --git a/packages/openapi-decorators/tsup.config.ts b/packages/openapi-metadata/tsup.config.ts similarity index 100% rename from packages/openapi-decorators/tsup.config.ts rename to packages/openapi-metadata/tsup.config.ts diff --git a/packages/openapi-decorators/vitest.config.ts b/packages/openapi-metadata/vitest.config.ts similarity index 100% rename from packages/openapi-decorators/vitest.config.ts rename to packages/openapi-metadata/vitest.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e49548817..f966f6b16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,9 +59,9 @@ importers: lodash: specifier: ^4.17.21 version: 4.17.21 - openapi-decorators: + openapi-metadata: specifier: workspace:^ - version: link:../openapi-decorators + version: link:../openapi-metadata openapi-types: specifier: ^12.1.3 version: 12.1.3 @@ -149,49 +149,6 @@ importers: specifier: ~5.4 version: 5.4.5 - packages/openapi-decorators: - dependencies: - '@fastify/deepmerge': - specifier: ^2.0.0 - version: 2.0.0 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - openapi-types: - specifier: ^12.1.3 - version: 12.1.3 - reflect-metadata: - specifier: ^0.2.2 - version: 0.2.2 - devDependencies: - '@types/lodash': - specifier: ^4.17.7 - version: 4.17.7 - '@types/node': - specifier: ^22.1.0 - version: 22.9.0 - '@vitest/coverage-v8': - specifier: ^2.0.5 - version: 2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))) - del-cli: - specifier: ^5.1.0 - version: 5.1.0 - esbuild: - specifier: ^0.20.2 - version: 0.20.2 - execa: - specifier: ^8.0.1 - version: 8.0.1 - tsup: - specifier: ^8.2.4 - version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1) - typescript: - specifier: ^5.4.5 - version: 5.6.3 - unplugin-swc: - specifier: ^1.5.1 - version: 1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0) - packages/openapi-fetch: dependencies: openapi-typescript-helpers: @@ -359,6 +316,49 @@ importers: specifier: ^2.1.6 version: 2.1.10(typescript@5.6.3) + packages/openapi-metadata: + dependencies: + '@fastify/deepmerge': + specifier: ^2.0.0 + version: 2.0.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + openapi-types: + specifier: ^12.1.3 + version: 12.1.3 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + devDependencies: + '@types/lodash': + specifier: ^4.17.7 + version: 4.17.7 + '@types/node': + specifier: ^22.1.0 + version: 22.9.0 + '@vitest/coverage-v8': + specifier: ^2.0.5 + version: 2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5))) + del-cli: + specifier: ^5.1.0 + version: 5.1.0 + esbuild: + specifier: ^0.20.2 + version: 0.20.2 + execa: + specifier: ^8.0.1 + version: 8.0.1 + tsup: + specifier: ^8.2.4 + version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.4.5)(yaml@2.5.1) + typescript: + specifier: ^5.4.5 + version: 5.4.5 + unplugin-swc: + specifier: ^1.5.1 + version: 1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0) + packages/openapi-react-query: dependencies: openapi-typescript-helpers: @@ -7990,6 +7990,24 @@ snapshots: vite: 5.4.10(@types/node@22.9.0) vue: 3.5.12(typescript@5.6.3) + '@vitest/coverage-v8@2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5)))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.6(supports-color@9.4.0) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.11 + magicast: 0.3.4 + std-env: 3.7.0 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5)) + transitivePeerDependencies: + - supports-color + '@vitest/coverage-v8@2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)))': dependencies: '@ampproject/remapping': 2.3.0 @@ -8022,6 +8040,15 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 + '@vitest/mocker@2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5))(vite@5.4.10(@types/node@22.9.0))': + dependencies: + '@vitest/spy': 2.1.4 + estree-walker: 3.0.3 + magic-string: 0.30.12 + optionalDependencies: + msw: 2.6.0(@types/node@22.9.0)(typescript@5.4.5) + vite: 5.4.10(@types/node@22.9.0) + '@vitest/mocker@2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.9.0))': dependencies: '@vitest/spy': 2.1.4 @@ -9939,6 +9966,32 @@ snapshots: ms@2.1.3: {} + msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5): + dependencies: + '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.0.1(@types/node@22.9.0) + '@mswjs/interceptors': 0.36.10 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + chalk: 4.1.2 + graphql: 16.8.2 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + strict-event-emitter: 0.5.1 + type-fest: 4.26.1 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - '@types/node' + optional: true + msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3): dependencies: '@bundled-es-modules/cookie': 2.0.0 @@ -11108,6 +11161,34 @@ snapshots: tslib@2.8.1: {} + tsup@8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.4.5)(yaml@2.5.1): + dependencies: + bundle-require: 5.0.0(esbuild@0.23.1) + cac: 6.7.14 + chokidar: 3.6.0 + consola: 3.2.3 + debug: 4.3.6(supports-color@9.4.0) + esbuild: 0.23.1 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + picocolors: 1.0.1 + postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.47)(yaml@2.5.1) + resolve-from: 5.0.0 + rollup: 4.20.0 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + optionalDependencies: + '@swc/core': 1.9.1(@swc/helpers@0.5.13) + postcss: 8.4.47 + typescript: 5.4.5 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + tsup@8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) @@ -11396,6 +11477,42 @@ snapshots: - supports-color - terser + vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5)): + dependencies: + '@vitest/expect': 2.1.4 + '@vitest/mocker': 2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5))(vite@5.4.10(@types/node@22.9.0)) + '@vitest/pretty-format': 2.1.4 + '@vitest/runner': 2.1.4 + '@vitest/snapshot': 2.1.4 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 + chai: 5.1.2 + debug: 4.3.7(supports-color@9.4.0) + expect-type: 1.1.0 + magic-string: 0.30.12 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.1 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.10(@types/node@22.9.0) + vite-node: 2.1.4(@types/node@22.9.0)(supports-color@9.4.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.9.0 + jsdom: 20.0.3 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)): dependencies: '@vitest/expect': 2.1.4 From 959de759078c5d0ad78df678def0953a6bac7f04 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Fri, 20 Sep 2024 12:25:03 +0200 Subject: [PATCH 13/25] Fix issue where apiProperty alter the class property --- packages/openapi-adonis/CHANGELOG.md | 39 +++++++++++++++++++ packages/openapi-adonis/package.json | 2 +- .../openapi-adonis/src/loaders/loadRoute.ts | 14 +++++-- .../src/resolvers/vine-type.resolver.ts | 5 +++ .../src/utils/normalizeRoutePattern.ts | 9 ++++- packages/openapi-adonis/test/vine.test.ts | 15 +++++-- packages/openapi-metadata/CHANGELOG.md | 25 ++++++++++++ packages/openapi-metadata/package.json | 2 +- .../src/decorators/api-property.ts | 1 - .../openapi-metadata/src/loaders/loadType.ts | 7 ++++ .../openapi-metadata/test/loaders.test.ts | 5 +++ 11 files changed, 113 insertions(+), 11 deletions(-) create mode 100644 packages/openapi-adonis/CHANGELOG.md create mode 100644 packages/openapi-metadata/CHANGELOG.md diff --git a/packages/openapi-adonis/CHANGELOG.md b/packages/openapi-adonis/CHANGELOG.md new file mode 100644 index 000000000..329015037 --- /dev/null +++ b/packages/openapi-adonis/CHANGELOG.md @@ -0,0 +1,39 @@ +# openapi-adonis + +## 0.0.0-20240826235548 + +### Patch Changes + +- Updated dependencies []: + - openapi-metadata@0.0.0-20240826235548 + +## 0.0.0-20240826232507 + +### Patch Changes + +- Automatically append apiParam from route pattern + +## 0.0.0-20240826230314 + +### Patch Changes + +- Updated dependencies []: + - openapi-metadata@0.0.0-20240826230314 + +## 0.0.0-20240826225846 + +### Patch Changes + +- Updated dependencies []: + - openapi-metadata@0.0.0-20240826225846 + +## 0.0.0-20240826224734 + +### Major Changes + +- Initial release + +### Patch Changes + +- Updated dependencies []: + - openapi-metadata@0.0.0-20240826224734 diff --git a/packages/openapi-adonis/package.json b/packages/openapi-adonis/package.json index 1544c99fd..72fe7631a 100644 --- a/packages/openapi-adonis/package.json +++ b/packages/openapi-adonis/package.json @@ -1,7 +1,7 @@ { "name": "openapi-adonis", "description": "Auto-Generate OpenAPI specifications for AdonisJS", - "version": "0.0.1", + "version": "0.0.0-20240826235548", "author": { "name": "Martin PAUCOT", "email": "contact@martin-paucot.Fr" diff --git a/packages/openapi-adonis/src/loaders/loadRoute.ts b/packages/openapi-adonis/src/loaders/loadRoute.ts index 7b31a09ee..24b957dfb 100644 --- a/packages/openapi-adonis/src/loaders/loadRoute.ts +++ b/packages/openapi-adonis/src/loaders/loadRoute.ts @@ -1,7 +1,7 @@ import type { OpenAPIV3 } from "openapi-types"; import { OperationBuilder, type DocumentBuilder } from "openapi-metadata/builders"; import type { AdonisRoute } from "../types"; -import { loadApiOperation, loadControllerOperation } from "openapi-metadata/loaders"; +import { loadApiOperation, loadApiParam, loadControllerOperation } from "openapi-metadata/loaders"; import { normalizeRoutePattern } from "../utils/normalizeRoutePattern"; export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { @@ -9,7 +9,9 @@ export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { return; } - const importer = route.handler.reference[0] as () => Promise<{ default: any }>; + const importer = route.handler.reference[0] as () => Promise<{ + default: any; + }>; const propertyKey = route.handler.reference[1] as string; const target = (await importer().then((t: any) => t.default)) as any; @@ -21,11 +23,17 @@ export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { const operation = new OperationBuilder(); + const { params, pattern } = normalizeRoutePattern(route.pattern); + loadApiOperation(operation, { method: method.toLowerCase() as `${OpenAPIV3.HttpMethods}`, - pattern: normalizeRoutePattern(route.pattern), + pattern, }); + for (const name of params) { + loadApiParam(document, operation, { name, type: "string" }); + } + loadControllerOperation(document, operation, target.prototype, propertyKey); document.addOperation(operation); diff --git a/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts b/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts index 97a29eb9d..8e44062c2 100644 --- a/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts +++ b/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts @@ -32,6 +32,11 @@ export class VineTypeResolver< return this.#name; } + public static supports(type: any): boolean { + // console.log(type); + return true; + } + async schema(): Promise { const validator = this.validator.toJSON(); const node = validator.schema.schema; diff --git a/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts b/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts index dd1687a28..c65c9f521 100644 --- a/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts +++ b/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts @@ -1,13 +1,18 @@ export const normalizeRoutePattern = (pattern: string) => { const segments = pattern.split("/"); - return segments + const params: string[] = []; + const path = segments .map((s) => { if (s.startsWith(":")) { - return `{${s.replace(":", "")}}`; + const param = s.replace(":", ""); + params.push(param); + return `{${param}}`; } return s; }) .join("/"); + + return { pattern: path, params }; }; diff --git a/packages/openapi-adonis/test/vine.test.ts b/packages/openapi-adonis/test/vine.test.ts index ef93b9931..43ab1f94a 100644 --- a/packages/openapi-adonis/test/vine.test.ts +++ b/packages/openapi-adonis/test/vine.test.ts @@ -1,5 +1,12 @@ import vine from "@vinejs/vine"; -import { enrichType, parseArrayNode, parseLiteralNode, parseObjectNode } from "../src/resolvers/vine-type.resolver"; +import { + VineTypeResolver, + enrichType, + parseArrayNode, + parseLiteralNode, + parseObjectNode, +} from "../src/resolvers/vine-type.resolver"; +import { DocumentBuilder } from "openapi-metadata/builders"; describe("parseLiteralNode", () => { // INFO: This test is not really necessary @@ -27,13 +34,15 @@ describe("parseObjectNode", () => { it("should parse object", () => { const validator = vine.compile( vine.object({ - example: vine.string(), + email: vine.string().email(), + password: vine.string(), }), ); const json = validator.toJSON(); const result: any = parseObjectNode(json.schema.schema as any, json.refs); - expect(result.properties.example).toBeDefined(); + expect(result.properties.email).toBeDefined(); + expect(result.properties.password).toBeDefined(); }); it("should parse nested object", () => { diff --git a/packages/openapi-metadata/CHANGELOG.md b/packages/openapi-metadata/CHANGELOG.md new file mode 100644 index 000000000..8dc5cc3ca --- /dev/null +++ b/packages/openapi-metadata/CHANGELOG.md @@ -0,0 +1,25 @@ +# openapi-metadata + +## 0.0.0-20240826235548 + +### Patch Changes + +- Fix issue where apiProperty alter the class property + +## 0.0.0-20240826230314 + +### Patch Changes + +- Add ability to provide arrays as type + +## 0.0.0-20240826225846 + +### Major Changes + +- Add ability to provide arrays as type + +## 0.0.0-20240826224734 + +### Major Changes + +- Initial release diff --git a/packages/openapi-metadata/package.json b/packages/openapi-metadata/package.json index 31088cbb5..fee234465 100644 --- a/packages/openapi-metadata/package.json +++ b/packages/openapi-metadata/package.json @@ -1,7 +1,7 @@ { "name": "openapi-metadata", "description": "Auto-Generate OpenAPI specifications from Typescript decorators", - "version": "0.0.1", + "version": "0.0.0-20240826235548", "author": { "name": "Martin PAUCOT", "email": "contact@martin-paucot.Fr" diff --git a/packages/openapi-metadata/src/decorators/api-property.ts b/packages/openapi-metadata/src/decorators/api-property.ts index 70523d7bc..0186b1c5d 100644 --- a/packages/openapi-metadata/src/decorators/api-property.ts +++ b/packages/openapi-metadata/src/decorators/api-property.ts @@ -16,7 +16,6 @@ export function apiProperty(options: ApiPropertyOptions = {}): PropertyDecorator } Reflect.defineMetadata(`${ApiPropertyMetadataKeyPrefix}${propertyKey.toString()}`, options, target); - return target; }; } diff --git a/packages/openapi-metadata/src/loaders/loadType.ts b/packages/openapi-metadata/src/loaders/loadType.ts index a1bdb5249..6d50da3fd 100644 --- a/packages/openapi-metadata/src/loaders/loadType.ts +++ b/packages/openapi-metadata/src/loaders/loadType.ts @@ -6,6 +6,13 @@ export async function resolveType( document: DocumentBuilder, type: SchemaType, ): Promise { + if (Array.isArray(type)) { + return { + type: "array", + items: await resolveType(document, type[0]), + }; + } + if (typeof type === "string") { return { type: type as OpenAPIV3.NonArraySchemaObjectType, // TODO: Fix that diff --git a/packages/openapi-metadata/test/loaders.test.ts b/packages/openapi-metadata/test/loaders.test.ts index 0a285c26a..950bd3108 100644 --- a/packages/openapi-metadata/test/loaders.test.ts +++ b/packages/openapi-metadata/test/loaders.test.ts @@ -210,6 +210,11 @@ describe("loaders", () => { expect(await resolveType(document, Number)).toEqual({ type: "number" }); expect(await resolveType(document, String)).toEqual({ type: "string" }); }); + + it("should properly resolve array", async () => { + const document = new DocumentBuilder(); + expect(await resolveType(document, [Boolean])).toEqual({ type: "array", items: { type: "boolean" } }); + }); }); }); From 900469cdd720fd2910c538bcd21922458fb01463 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 18:41:17 +0100 Subject: [PATCH 14/25] feat(openapi-metadata): complete rewrite --- docs/.vitepress/en.ts | 27 +- docs/openapi-adonis/decorators.md | 7 - docs/openapi-adonis/index.md | 70 - docs/openapi-decorators/decorators.md | 20 - docs/openapi-decorators/index.md | 194 -- docs/openapi-metadata/about.md | 23 + docs/openapi-metadata/decorators.md | 25 + docs/openapi-metadata/examples.md | 47 + docs/openapi-metadata/index.md | 213 ++ docs/openapi-metadata/integrations.md | 0 docs/openapi-metadata/metadata.md | 87 + docs/openapi-metadata/type-loader.md | 56 + docs/openapi-metadata/ui.md | 31 + docs/scripts/update-contributors.js | 17 +- packages/openapi-adonis/.npmignore | 5 - packages/openapi-adonis/CHANGELOG.md | 39 - packages/openapi-adonis/biome.json | 17 - packages/openapi-adonis/example/.editorconfig | 22 - packages/openapi-adonis/example/.env.example | 6 - packages/openapi-adonis/example/.gitignore | 25 - packages/openapi-adonis/example/ace.js | 28 - packages/openapi-adonis/example/adonisrc.ts | 69 - .../app/controllers/users_controller.ts | 21 - .../example/app/exceptions/handler.ts | 28 - .../container_bindings_middleware.ts | 19 - .../force_json_response_middleware.ts | 16 - .../openapi-adonis/example/app/models/user.ts | 16 - .../example/app/validators/user.ts | 12 - .../openapi-adonis/example/bin/console.ts | 47 - packages/openapi-adonis/example/bin/server.ts | 45 - packages/openapi-adonis/example/config/app.ts | 40 - .../example/config/bodyparser.ts | 55 - .../openapi-adonis/example/config/cors.ts | 19 - .../openapi-adonis/example/config/hash.ts | 24 - .../openapi-adonis/example/config/logger.ts | 35 - packages/openapi-adonis/example/package.json | 57 - packages/openapi-adonis/example/start/env.ts | 20 - .../openapi-adonis/example/start/kernel.ts | 41 - .../openapi-adonis/example/start/routes.ts | 26 - packages/openapi-adonis/example/tsconfig.json | 7 - packages/openapi-adonis/package.json | 69 - .../openapi-adonis/src/decorators/index.ts | 1 - packages/openapi-adonis/src/index.ts | 33 - .../openapi-adonis/src/loaders/loadRoute.ts | 41 - .../openapi-adonis/src/loaders/loadRouter.ts | 16 - .../src/resolvers/vine-type.resolver.ts | 207 -- packages/openapi-adonis/src/types.ts | 4 - .../src/utils/normalizeRoutePattern.ts | 18 - packages/openapi-adonis/test/index.test.ts | 3 - packages/openapi-adonis/test/vine.test.ts | 123 - packages/openapi-adonis/tsconfig.json | 21 - packages/openapi-adonis/tsup.config.ts | 8 - packages/openapi-adonis/vitest.config.ts | 12 - packages/openapi-metadata/package.json | 27 +- .../src/builders/base-builder.ts | 3 - .../src/builders/document-builder.ts | 129 - .../openapi-metadata/src/builders/index.ts | 3 - .../src/builders/operation-builder.ts | 40 - packages/openapi-metadata/src/context.ts | 13 + .../src/decorators/api-body.ts | 33 +- .../src/decorators/api-cookie.ts | 16 + .../src/decorators/api-exclude.ts | 13 + .../src/decorators/api-extra-models.ts | 8 + .../src/decorators/api-header.ts | 16 + .../src/decorators/api-operation.ts | 24 +- .../src/decorators/api-param.ts | 32 +- .../src/decorators/api-property.ts | 78 +- .../src/decorators/api-query.ts | 32 +- .../src/decorators/api-response.ts | 47 +- .../src/decorators/api-security.ts | 29 + .../src/decorators/api-tags.ts | 15 +- .../openapi-metadata/src/decorators/index.ts | 19 +- .../src/errors/invalid-configuration.ts | 7 + .../src/errors/no-explicit-type.ts | 21 + .../src/errors/reflect-metadata-missing.ts | 9 + .../src/errors/symbol-keys-not-supported.ts | 6 + .../src/fixtures/document-base.ts | 17 - .../src/generators/document.ts | 55 + .../src/generators/operation-body.ts | 19 + .../src/generators/operation-parameters.ts | 16 + .../src/generators/operation-response.ts | 21 + .../src/generators/operation.ts | 64 + .../openapi-metadata/src/generators/paths.ts | 49 + packages/openapi-metadata/src/index.ts | 6 +- .../openapi-metadata/src/loaders/index.ts | 9 - .../src/loaders/loadApiBody.ts | 19 - .../src/loaders/loadApiOperation.ts | 16 - .../src/loaders/loadApiParam.ts | 16 - .../src/loaders/loadApiProperty.ts | 27 - .../src/loaders/loadApiQuery.ts | 16 - .../src/loaders/loadApiResponse.ts | 23 - .../src/loaders/loadApiTags.ts | 5 - .../src/loaders/loadController.ts | 3 - .../src/loaders/loadControllerOperation.ts | 59 - .../openapi-metadata/src/loaders/loadType.ts | 45 - packages/openapi-metadata/src/loaders/type.ts | 118 + .../openapi-metadata/src/metadata/exclude.ts | 8 + .../src/metadata/extra-models.ts | 8 + .../openapi-metadata/src/metadata/factory.ts | 54 + .../openapi-metadata/src/metadata/index.ts | 9 + .../src/metadata/operation-body.ts | 13 + .../src/metadata/operation-header.ts | 13 + .../src/metadata/operation-parameter.ts | 17 + .../src/metadata/operation-response.ts | 18 + .../src/metadata/operation-security.ts | 11 + .../src/metadata/operation.ts | 13 + .../openapi-metadata/src/metadata/property.ts | 12 + .../openapi-metadata/src/resolvers/index.ts | 2 - .../src/resolvers/model-resolver.ts | 37 - .../src/resolvers/type-resolver.ts | 11 - packages/openapi-metadata/src/types.ts | 39 +- packages/openapi-metadata/src/ui/index.ts | 4 +- packages/openapi-metadata/src/ui/rapidoc.ts | 39 + packages/openapi-metadata/src/ui/swagger.ts | 43 + .../openapi-metadata/src/utils/deepmerge.ts | 6 - packages/openapi-metadata/src/utils/enum.ts | 31 + .../openapi-metadata/src/utils/metadata.ts | 67 +- packages/openapi-metadata/src/utils/schema.ts | 4 + .../openapi-metadata/test/decorators.test.ts | 327 +- .../openapi-metadata/test/loaders.test.ts | 342 --- .../test/utils/metadata.test.ts | 20 + pnpm-lock.yaml | 2617 +---------------- 122 files changed, 1795 insertions(+), 5305 deletions(-) delete mode 100644 docs/openapi-adonis/decorators.md delete mode 100644 docs/openapi-adonis/index.md delete mode 100644 docs/openapi-decorators/decorators.md delete mode 100644 docs/openapi-decorators/index.md create mode 100644 docs/openapi-metadata/about.md create mode 100644 docs/openapi-metadata/decorators.md create mode 100644 docs/openapi-metadata/examples.md create mode 100644 docs/openapi-metadata/index.md create mode 100644 docs/openapi-metadata/integrations.md create mode 100644 docs/openapi-metadata/metadata.md create mode 100644 docs/openapi-metadata/type-loader.md create mode 100644 docs/openapi-metadata/ui.md delete mode 100644 packages/openapi-adonis/.npmignore delete mode 100644 packages/openapi-adonis/CHANGELOG.md delete mode 100644 packages/openapi-adonis/biome.json delete mode 100644 packages/openapi-adonis/example/.editorconfig delete mode 100644 packages/openapi-adonis/example/.env.example delete mode 100644 packages/openapi-adonis/example/.gitignore delete mode 100644 packages/openapi-adonis/example/ace.js delete mode 100644 packages/openapi-adonis/example/adonisrc.ts delete mode 100644 packages/openapi-adonis/example/app/controllers/users_controller.ts delete mode 100644 packages/openapi-adonis/example/app/exceptions/handler.ts delete mode 100644 packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts delete mode 100644 packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts delete mode 100644 packages/openapi-adonis/example/app/models/user.ts delete mode 100644 packages/openapi-adonis/example/app/validators/user.ts delete mode 100644 packages/openapi-adonis/example/bin/console.ts delete mode 100644 packages/openapi-adonis/example/bin/server.ts delete mode 100644 packages/openapi-adonis/example/config/app.ts delete mode 100644 packages/openapi-adonis/example/config/bodyparser.ts delete mode 100644 packages/openapi-adonis/example/config/cors.ts delete mode 100644 packages/openapi-adonis/example/config/hash.ts delete mode 100644 packages/openapi-adonis/example/config/logger.ts delete mode 100644 packages/openapi-adonis/example/package.json delete mode 100644 packages/openapi-adonis/example/start/env.ts delete mode 100644 packages/openapi-adonis/example/start/kernel.ts delete mode 100644 packages/openapi-adonis/example/start/routes.ts delete mode 100644 packages/openapi-adonis/example/tsconfig.json delete mode 100644 packages/openapi-adonis/package.json delete mode 100644 packages/openapi-adonis/src/decorators/index.ts delete mode 100644 packages/openapi-adonis/src/index.ts delete mode 100644 packages/openapi-adonis/src/loaders/loadRoute.ts delete mode 100644 packages/openapi-adonis/src/loaders/loadRouter.ts delete mode 100644 packages/openapi-adonis/src/resolvers/vine-type.resolver.ts delete mode 100644 packages/openapi-adonis/src/types.ts delete mode 100644 packages/openapi-adonis/src/utils/normalizeRoutePattern.ts delete mode 100644 packages/openapi-adonis/test/index.test.ts delete mode 100644 packages/openapi-adonis/test/vine.test.ts delete mode 100644 packages/openapi-adonis/tsconfig.json delete mode 100644 packages/openapi-adonis/tsup.config.ts delete mode 100644 packages/openapi-adonis/vitest.config.ts delete mode 100644 packages/openapi-metadata/src/builders/base-builder.ts delete mode 100644 packages/openapi-metadata/src/builders/document-builder.ts delete mode 100644 packages/openapi-metadata/src/builders/index.ts delete mode 100644 packages/openapi-metadata/src/builders/operation-builder.ts create mode 100644 packages/openapi-metadata/src/context.ts create mode 100644 packages/openapi-metadata/src/decorators/api-cookie.ts create mode 100644 packages/openapi-metadata/src/decorators/api-exclude.ts create mode 100644 packages/openapi-metadata/src/decorators/api-extra-models.ts create mode 100644 packages/openapi-metadata/src/decorators/api-header.ts create mode 100644 packages/openapi-metadata/src/decorators/api-security.ts create mode 100644 packages/openapi-metadata/src/errors/invalid-configuration.ts create mode 100644 packages/openapi-metadata/src/errors/no-explicit-type.ts create mode 100644 packages/openapi-metadata/src/errors/reflect-metadata-missing.ts create mode 100644 packages/openapi-metadata/src/errors/symbol-keys-not-supported.ts delete mode 100644 packages/openapi-metadata/src/fixtures/document-base.ts create mode 100644 packages/openapi-metadata/src/generators/document.ts create mode 100644 packages/openapi-metadata/src/generators/operation-body.ts create mode 100644 packages/openapi-metadata/src/generators/operation-parameters.ts create mode 100644 packages/openapi-metadata/src/generators/operation-response.ts create mode 100644 packages/openapi-metadata/src/generators/operation.ts create mode 100644 packages/openapi-metadata/src/generators/paths.ts delete mode 100644 packages/openapi-metadata/src/loaders/index.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadApiBody.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadApiOperation.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadApiParam.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadApiProperty.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadApiQuery.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadApiResponse.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadApiTags.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadController.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadControllerOperation.ts delete mode 100644 packages/openapi-metadata/src/loaders/loadType.ts create mode 100644 packages/openapi-metadata/src/loaders/type.ts create mode 100644 packages/openapi-metadata/src/metadata/exclude.ts create mode 100644 packages/openapi-metadata/src/metadata/extra-models.ts create mode 100644 packages/openapi-metadata/src/metadata/factory.ts create mode 100644 packages/openapi-metadata/src/metadata/index.ts create mode 100644 packages/openapi-metadata/src/metadata/operation-body.ts create mode 100644 packages/openapi-metadata/src/metadata/operation-header.ts create mode 100644 packages/openapi-metadata/src/metadata/operation-parameter.ts create mode 100644 packages/openapi-metadata/src/metadata/operation-response.ts create mode 100644 packages/openapi-metadata/src/metadata/operation-security.ts create mode 100644 packages/openapi-metadata/src/metadata/operation.ts create mode 100644 packages/openapi-metadata/src/metadata/property.ts delete mode 100644 packages/openapi-metadata/src/resolvers/index.ts delete mode 100644 packages/openapi-metadata/src/resolvers/model-resolver.ts delete mode 100644 packages/openapi-metadata/src/resolvers/type-resolver.ts create mode 100644 packages/openapi-metadata/src/ui/rapidoc.ts create mode 100644 packages/openapi-metadata/src/ui/swagger.ts delete mode 100644 packages/openapi-metadata/src/utils/deepmerge.ts create mode 100644 packages/openapi-metadata/src/utils/enum.ts create mode 100644 packages/openapi-metadata/src/utils/schema.ts delete mode 100644 packages/openapi-metadata/test/loaders.test.ts create mode 100644 packages/openapi-metadata/test/utils/metadata.test.ts diff --git a/docs/.vitepress/en.ts b/docs/.vitepress/en.ts index e91610ae6..fab755b5b 100644 --- a/docs/.vitepress/en.ts +++ b/docs/.vitepress/en.ts @@ -75,8 +75,14 @@ export default defineConfig({ { text: "Getting Started", link: "/openapi-react-query/" }, { text: "useQuery", link: "/openapi-react-query/use-query" }, { text: "useMutation", link: "/openapi-react-query/use-mutation" }, - { text: "useSuspenseQuery", link: "/openapi-react-query/use-suspense-query" }, - { text: "queryOptions", link: "/openapi-react-query/query-options" }, + { + text: "useSuspenseQuery", + link: "/openapi-react-query/use-suspense-query", + }, + { + text: "queryOptions", + link: "/openapi-react-query/query-options", + }, { text: "About", link: "/openapi-react-query/about" }, ], }, @@ -94,10 +100,15 @@ export default defineConfig({ ], }, { - text: "openapi-decorators", + text: "openapi-metadata", items: [ - { text: "Getting Started", link: "/openapi-decorators/" }, - { text: "Decorators", link: "/openapi-decorators/decorators" }, + { text: "Getting Started", link: "/openapi-metadata/" }, + { text: "Decorators", link: "/openapi-metadata/decorators" }, + { text: "Metadata", link: "/openapi-metadata/metadata" }, + { text: "Type loader", link: "/openapi-metadata/type-loader" }, + { text: "UI Integrations", link: "/openapi-metadata/ui" }, + { text: "Examples", link: "/openapi-metadata/examples" }, + { text: "About", link: "/openapi-metadata/about" }, ], }, ], @@ -110,6 +121,12 @@ export default defineConfig({ indexName: "openapi-ts", }, }, + socialLinks: [ + { + icon: "github", + link: "https://github.com/openapi-ts/openapi-typescript", + }, + ], footer: { message: 'Released under the MIT License.', diff --git a/docs/openapi-adonis/decorators.md b/docs/openapi-adonis/decorators.md deleted file mode 100644 index b45d46601..000000000 --- a/docs/openapi-adonis/decorators.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: openapi-adonis ---- - -## `@apiProperty` - - diff --git a/docs/openapi-adonis/index.md b/docs/openapi-adonis/index.md deleted file mode 100644 index f754283f6..000000000 --- a/docs/openapi-adonis/index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: openapi-adonis ---- - -# Introduction - -openapi-adonis is an [Adonis.js] library to automatically generate OpenAPI schemas and documentation. - -- ✅ Creates operations from the Adonis Router -- ✅ Automatically adds your models to the schemas -- ✅ Automatically adds your `@vinejs/vine` validators to the schemas -- ✅ Extended type-inference using Typescript metadata -- ✅ Extensible using Typescript decorators -- ✅ Generates documentation for **Swagger, Scalar, Rapidoc** - -The library is inspired by the popular library [@nestjs/swagger](https://www.npmjs.com/package/@nestjs/swagger) and is built on top of [openapi-decorators](https://github.com/openapi-ts/openapi-typescript/tree/main/packages/openapi-decorators). - -::: code-group - -```tsx [app/controllers/users_controller.ts] -import { apiOperation, apiResponse } from "openapi-adonis/decorators"; -import User from "#models/user"; - -class UsersController { - @apiOperation({ summary: "List users" }) - @apiResponse({ type: [User] }) - async list() { - return User.findManyBy({}); - } -} -``` - -```tsx [app/models/user.ts] -import { apiProperty } from "openapi-adonis/decorators"; - -class User { - @apiProperty() - declare id: number; - - @apiProperty() - declare name: string; - - @apiProperty({ required: false }) - declare mobile?: string; -} -``` - -```tsx [start/routes.ts] -import router from "@adonisjs/core/services/router"; -import AdonisOpenAPI from "openapi-adonis"; - -const UsersController = () => import("#controllers/users_controller"); - -router.post("/users", [UsersController, "create"]); - -const builder = AdonisOpenAPI.document().setTitle("OpenAPI Adonis Example"); -AdonisOpenAPI.setup("/docs", router, builder); -``` - -::: - -## Setup - -Install this library by using `ace`: - -```bash -node ace add openapi-adonis -``` - -## Basic usage diff --git a/docs/openapi-decorators/decorators.md b/docs/openapi-decorators/decorators.md deleted file mode 100644 index ee1a4c7ff..000000000 --- a/docs/openapi-decorators/decorators.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Decorators ---- - -# Decorators - -Decorators are used to enrich your OpenAPI specifications. They can be applied on a Controller, a Method or a Model. They are all prefixed with `api`. - -> For more information about the decorators, you can directly refer to the [source code](https://github.com/openapi-ts/openapi-typescript/packages/openapi-decorators/src/decorators). - -| Decorator | Usage | Description | -|-|-|-| -| `@apiProperty` | Model | Configures a schema property. | -| `@apiTags` | Controller / Method | Adds tags to the operation. When applied on a controller, the tags are applied to all of its operations. | -| `@apiOperation` | Method | Configures an operation. | -| `@apiQuery` | Method | Adds a query parameter to the operation. | -| `@apiParam` | Method | Adds a path parameter to the operation. | -| `@apiResponse` | Method | Adds a response to the operation. | -| `@apiBody` | Method | Sets the requestBody of the operation. | - diff --git a/docs/openapi-decorators/index.md b/docs/openapi-decorators/index.md deleted file mode 100644 index 8ac17c9fb..000000000 --- a/docs/openapi-decorators/index.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: 'Getting started' ---- - -# Introduction - -`openapi-decorators` is a framework agnostic library to automatically generate OpenAPI schemas and documentation by using Typescript decorators and metadata. - -::: code-group - -```ts [users_controller.ts] -import { apiOperation, apiResponse } from "openapi-adonis/decorators"; -import User from "./user"; - -class UsersController { - @apiOperation({ - method: "get", - pattern: "/users", - summary: "List users" - }) - @apiResponse({ type: [User] }) - async list() { - ... - } -} -``` - -```ts [user.ts] -import { apiProperty } from "openapi-adonis/decorators"; - -class User { - @apiProperty() - declare id: number; - - @apiProperty() - declare name: string; - - @apiProperty({ required: false }) - declare mobile?: string; -} -``` - -```ts [index.ts] -import "reflect-metadata"; -import { DocumentBuilder } from "openapi-decorators/builders"; -import { loadController } from "openapi-decorators/loaders"; -import UsersController from "./users_controller"; - -const builder = new DocumentBuilder() - .setTitle("My API") - .setVersion("1.0.0"); - -await loadController(builder, UsersController); - -console.log(document.build()); // <- Your generated OpenAPI specifications -``` - -::: - -## Getting started - -### Setup - -Install `openapi-decorators` and `reflect-metadata` using your favorite package manager. - -```bash -npm install openapi-decorators reflect-metadata -``` - -Import `reflect-metadata` in your main file. - -::: code-group - -```ts [index.ts] -import "reflect-metadata"; - -// Rest of your app -``` - -::: - -Enable `experimentalDecorators` and `experimentalDecorators`. - - -::: code-group - -```json [tsconfig.json] -{ - "compilerOptions": { - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - } -} -``` - -::: - -### Create your OpenAPI document - -To get started, create a new DocumentBuilder. It will hold all the informations required to generate your OpenAPI specifications. -By using the method `build()` you can already have an (almost) empty documentation. - -::: code-group - -```ts [index.ts] -import "reflect-metadata"; -import { DocumentBuilder } from "openapi-decorators/builders"; - -const builder = new DocumentBuilder() - .setTitle("My API") - .setVersion("1.0.0"); - -console.log(document.build()); // <- Your generated OpenAPI specifications -``` - -::: - -### Create your first model - -Using the `apiProperty` decorator on class properties will allow your operations to use the class as a schema. - -> Unlike other libraries like `@nestjs/swagger`, every element of your OpenAPI schema is lazy-loaded. Your models will only be part of your documentation if it is used. - -::: code-group - -```ts [user.ts] -import { apiProperty } from "openapi-decorators/decorators"; - -class User { - @apiProperty() - declare id: string; - - @apiProperty({ example: "John Doe" }) - declare name: string; - - @apiProperty() - declare email: string; - - @apiProperty({ required: false }) - declare mobile?: string; -} -``` - -::: - -### Create your first controller - -Next we need to define our first operation. We can do this by using a controller. - -In the following example we create an operation `GET /users` that returns a list of `User`. - -::: code-group - -```ts [users_controller.ts] -import { apiOperation, apiResponse } from "openapi-decorators/decorators"; -import User from "./user"; - -class UsersController { - @apiOperation({ - method: "get", - pattern: "/users", - summary: "List users" - }) - @apiResponse({ type: [User] }) - async list() { - ... - } -} -``` - -::: - -### Load the controller into your DocumentBuilder - -You now simply have to load the controller into your DocumentBuilder and tada 🎉. - -::: code-group - -```ts [index.ts] -import "reflect-metadata"; -import { DocumentBuilder } from "openapi-decorators/builders"; -import { loadController } from "openapi-decorators/loaders"; -import UsersController from "./users_controller"; - -const builder = new DocumentBuilder() - .setTitle("My API") - .setVersion("1.0.0"); - -await loadController(builder, UsersController); - -console.log(document.build()); // <- Your generated OpenAPI specifications -``` - -::: diff --git a/docs/openapi-metadata/about.md b/docs/openapi-metadata/about.md new file mode 100644 index 000000000..512c3749b --- /dev/null +++ b/docs/openapi-metadata/about.md @@ -0,0 +1,23 @@ +--- +title: About openapi-metadata +description: openapi-metadata Project Goals, comparisons, and more +--- + + + +# About + +## Project Goals + +1. Must respect the OpenAPI V3 specification +2. Be extensible and easily integrated inside backend frameworks +3. Be focused around developer experience + +## Contributors + +This library wouldn’t be possible without all these amazing contributors: + + diff --git a/docs/openapi-metadata/decorators.md b/docs/openapi-metadata/decorators.md new file mode 100644 index 000000000..ad5a28729 --- /dev/null +++ b/docs/openapi-metadata/decorators.md @@ -0,0 +1,25 @@ +--- +title: Decorators +--- + +# Decorators + +Decorators are used to enrich your OpenAPI specifications. They can be applied on a Controller, a Method or a Model. They are all prefixed with `Api`. + +> For more information about the decorators, you can directly refer to the [source code](https://github.com/openapi-ts/openapi-typescript/packages/openapi-metadata/src/decorators). + +| Decorator | Usage | Description | +| ----------------------- | ------------------- | ------------------------------------------------------------------------ | +| `@ApiBody` | Method | Sets the requestBody of the operation. | +| `@ApiCookie` | Controller / Method | Adds a cookie parameter to the operation(s). | +| `@ApiExcludeController` | Method | Excludes the operations of this controller from the document generation. | +| `@ApiExcludeOperation` | Method | Excludes this operation from the document generation. | +| `@ApiExtraModels` | Controller | Adds extra models to be loaded in the schema. | +| `@ApiHeader` | Controller / Method | Adds a header parameter to the operation(s). | +| `@ApiOperation` | Method | Configures an operation. | +| `@ApiParam` | Controller / Method | Adds a path parameter to the operation(s). | +| `@ApiProperty` | Model | Configures a schema property property. | +| `@ApiQuery` | Controller / Method | Adds a query parameter to the operation(s). | +| `@ApiResponse` | Controller / Method | Adds a response to the operation(s). | +| `@ApiSecurity` | Controller / Method | Sets the security scheme to the operation(s). | +| `@ApiTags` | Controller / Method | Adds tags to the operation(s). | diff --git a/docs/openapi-metadata/examples.md b/docs/openapi-metadata/examples.md new file mode 100644 index 000000000..03b3a5e22 --- /dev/null +++ b/docs/openapi-metadata/examples.md @@ -0,0 +1,47 @@ +--- +title: Examples +--- + +# Examples + +This library is made to be used through an integration with your favorite framework but you can as well use it directly as a document generator. + +## Express + +```ts +import express from "express"; +import { generateDocument } from "openapi-metadata"; +import { generateScalarUI } from "openapi-metadata/ui"; + +const app = express(); + +app.get("/api", async (req, res) => { + const document = await generateDocument(yourConfiguration); + res.send(JSON.stringify(document)); +}); + +app.get("/api/docs", (req, res) => { + const ui = generateScalarUI("/api"); + res.send(ui); +}); +``` + +## Fastify + +```ts +import fastify from "fastify"; +import { generateDocument } from "openapi-metadata"; +import { generateScalarUI } from "openapi-metadata/ui"; + +const app = Fastify(); + +app.get("/api", async () => { + const document = await generateDocument(yourConfiguration); + return document; +}); + +app.get("/api/docs", () => { + const ui = generateScalarUI("/api"); + return ui; +}); +``` diff --git a/docs/openapi-metadata/index.md b/docs/openapi-metadata/index.md new file mode 100644 index 000000000..916dfe164 --- /dev/null +++ b/docs/openapi-metadata/index.md @@ -0,0 +1,213 @@ +--- +title: "Getting started" +--- + +# Introduction + +`openapi-metadata` is a framework agnostic library to automatically generate OpenAPI schemas and documentation by using Typescript decorators and metadata. + +::: code-group + +```ts [users_controller.ts] +import { ApiOperation, ApiResponse } from "openapi-metadata/decorators"; +import User from "./user"; + +class UsersController { + @apiOperation({ + method: "get", + pattern: "/users", + summary: "List users" + }) + @apiResponse({ type: [User] }) + async list() { + ... + } +} +``` + +```ts [user.ts] +import { ApiProperty } from "openapi-metadata/decorators"; + +class User { + @apiProperty() + declare id: number; + + @apiProperty() + declare name: string; + + @apiProperty({ required: false }) + declare mobile?: string; +} +``` + +```ts [index.ts] +import "reflect-metadata"; +import { generateDocument } from "openapi-metadata"; +import UsersController from "./users_controller"; + +const document = await generateDocument({ + controllers: [UsersController], + document: { + info: { + name: "My Api", + version: "1.0.0", + }, + }, +}); + +console.log(document); // <- Your generated OpenAPI specifications +``` + +::: + +- ✅ Fully compliant [OpenAPI V3](https://swagger.io/specification/) +- ✅ Automatic type inference +- ✅ Supports [Scalar](https://scalar.com/), [Swagger UI](https://swagger.io/tools/swagger-ui/) and [Rapidoc](https://rapidocweb.com/) +- ✅ Extensible with custom type loaders +- ✅ Ready to be integrated with your favorite framework + +## Getting started + +### Setup + +Install `openapi-metadata` and `reflect-metadata` using your favorite package manager. + +```bash +npm install openapi-metadata reflect-metadata +``` + +Import `reflect-metadata` in your main file. + +::: code-group + +```ts [index.ts] +import "reflect-metadata"; + +// Rest of your app +``` + +::: + +Enable `experimentalDecorators` and `experimentalDecorators`. + +::: code-group + +```json [tsconfig.json] +{ + "compilerOptions": { + "emitDecoratorMetadata": true, + "experimentalDecorators": true + } +} +``` + +::: + +### Create your OpenAPI document + +To get started, you can use the `generateDocument` function to create an (almost) empty documentation. You can define a base document that will be merged with the generated one. + +::: code-group + +```ts [index.ts] +import "reflect-metadata"; +import { generateDocument } from "openapi-metadata"; + +const builder = await generateDocument({ + controllers: [], + document: { + info: { + name: "My API", + version: "1.0.0", + }, + }, +}); + +console.log(document.build()); // <- Your generated OpenAPI specifications +``` + +::: + +### Create your first controller + +A controller is a simple class where each methods could be an Operation. +In the following example we have a `UsersController` which declares an operation `GET /users` that returns a list of `Users`. + +::: code-group + +```ts [controllers/users_controller.ts] +import { ApiOperation, ApiResponse } from "openapi-metadata/decorators"; +import User from "../schemas/user"; + +export default class UsersController { + @ApiOperation({ + method: "get", + pattern: "/users", + summary: "List users", + }) + @ApiResponse({ type: [User] }) + async list() { + // ...your logic + } +} +``` + +::: + +### Create your first schema + +In our controller we define the response of your operation to be `[User]` (a list of users). We now need to create this model. + +By using the `@ApiProperty` decorator on class we can define the properties of our schema. + +> Unlike other libraries like `@nestjs/swagger`, every element of your OpenAPI schema is lazy-loaded. Your models will only be part of your documentation if it is used. + +::: code-group + +```ts [schemas/user.ts] +import { ApiProperty } from "openapi-metadata/decorators"; + +export default class User { + @ApiProperty() + declare id: string; + + @ApiProperty({ example: "John Doe" }) + declare name: string; + + @ApiProperty() + declare email: string; + + @ApiProperty({ required: false }) + declare mobile?: string; +} +``` + +::: + +### Add the controller to the generated document + +Now that we have our controller ready, we can use it to generate our document. + +::: code-group + +```ts [index.ts] +import "reflect-metadata"; +import { generateDocument } from "openapi-metadata"; +import UsersController from "./controllers/users_controller.ts"; + +const builder = await generateDocument({ + controllers: [UsersController], + document: { + info: { + name: "My API", + version: "1.0.0", + }, + }, +}); + +console.log(document.build()); // <- Your generated OpenAPI specifications +``` + +::: + +### Going further diff --git a/docs/openapi-metadata/integrations.md b/docs/openapi-metadata/integrations.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/openapi-metadata/metadata.md b/docs/openapi-metadata/metadata.md new file mode 100644 index 000000000..295ec0c4a --- /dev/null +++ b/docs/openapi-metadata/metadata.md @@ -0,0 +1,87 @@ +--- +title: Metadata +--- + +# Metadata + +[Decorators](./decorators.md) does not contain business logic, their purpose is to store metadata to be used when generating the document. +This makes it easy to integrate this library into a framework and create custom decorators. + +Here is an example of a custom decorator that define an operation summary: + +```ts +import { OperationMetadataStorage } from "openapi-metadata/metadata"; + +export function ApiSummary(summary: string): MethodDecorator { + return (target, propertyKey) => { + OperationMetadataStorage.mergeMetadata(target, { summary }, propertyKey); + }; +} +``` + +## MetadataStorage + +A MetadataStorage is a utility for managing metadata: + +### `defineMetadata` + +This method sets the metadata. It overwrites existing metadata. + +```ts +import { OperationMetadataStorage } from "openapi-metadata/metadata"; + +// Without propertyKey +OperationMetadataStorage.defineMetadata(target, { summary: "Hello world" }); + +// With propertyKey +OperationMetadataStorage.defineMetadata( + target, + { summary: "Hello world" }, + propertyKey, +); +``` + +### `mergeMetadata` + +Similar to `defineMetadata`, this method sets the metadata but [deepmerge](https://www.npmjs.com/package/deepmerge) its content with exising metadata. + +```ts +import { OperationMetadataStorage } from "openapi-metadata/metadata"; + +// Without propertyKey +OperationMetadataStorage.mergeMetadata(target, { summary: "Hello world" }); + +// With propertyKey +OperationMetadataStorage.mergeMetadata( + target, + { summary: "Hello world" }, + propertyKey, +); +``` + +### `getMetadata` + +This method retrieve the stored metadata. When used with a `propertyKey` you can also define `withParent` to [deepmerge](https://www.npmjs.com/package/deepmerge) the metadata with the one defined on the class. + +```ts +import { OperationMetadataStorage } from "openapi-metadata/metadata"; + +OperationMetadataStorage.getMetadata(target); +OperationMetadataStorage.getMetadata(target, propertyKey); +OperationMetadataStorage.getMetadata(target, propertyKey, true); +``` + +## Custom MetadataStorage + +You can create a custom metadata storage by using the `createMetadataStorage` function. + +```ts +import { createMetadataStorage } from "openapi-metadata/metadata"; + +type CustomMetadata = { foo: "bar" }; + +const CustomMetadataKey = Symbol("Custom"); + +const CustomMetadataStorage = + createMetadataStorage(CustomMetadataKey); +``` diff --git a/docs/openapi-metadata/type-loader.md b/docs/openapi-metadata/type-loader.md new file mode 100644 index 000000000..dd001d254 --- /dev/null +++ b/docs/openapi-metadata/type-loader.md @@ -0,0 +1,56 @@ +--- +title: Type Loader +--- + +# Type Loader + +A Type Loader transforms a `Constructor` into a `SchemaObject`. It gives the ability to extends the inference capabilities when generating a document. + +For example `String` will be transformed into `{ type: 'string' }`. + +## Custom Type Loader + +In this example we will see how to create a custom loader for the [Luxon](https://moment.github.io/luxon/#/?id=luxon) `DateTime`. + +In the following schema we have a property that cannot be loaded as is is unknown by the Document generator. + +```ts +import { DateTime } from "luxon"; + +export default class User { + @ApiProperty() + createdAt: DateTime; +} +``` + +When our API returns a Luxon DateTime, it uses the `toString()` meaning that our client will receive a string. +The user could explicitly define the type `@ApiProperty({ type: 'string' })` but as this library goal is to provide a great DX it is possible to create a custom type loader. + +```ts +import { TypeLoaderFn, generateDocument } from "openapi-metadata"; +import { DateTime } from "luxon"; + +const LuxonDateTimeLoader = (_context, value) => { + if (value === DateTime) { + return { type: "string" }; + } +}; + +await generateDocument({ + loaders: [LuxonDateTimeLoader], +}); +``` + +If you have more complex schemas to generate, you can store it in the components and return a reference instead: + +```ts +const CustomLoader: TypeLoaderFn = (context, value) => { + if (isCustom(value)) { + const [name, schema] = generateCustomSchema(value); + + context.schemas[name] = schema; + + return { $ref: `#/components/schemas/${name}` }; + } +}; +``` diff --git a/docs/openapi-metadata/ui.md b/docs/openapi-metadata/ui.md new file mode 100644 index 000000000..2fc67c720 --- /dev/null +++ b/docs/openapi-metadata/ui.md @@ -0,0 +1,31 @@ +--- +title: UI integrations +--- + +# UI integrations + +`openapi-metadata` bring some utilities to easily display your API documentation. + +## [Scalar](https://scalar.com) + +```ts +import { generateScalarUI } from "openapi-metadata/ui"; + +generateScalarUI("http://localhost:3000/api"); +``` + +## [Swagger UI](https://swagger.io/tools/swagger-ui/) + +```ts +import { generateSwaggerUI } from "openapi-metadata/ui"; + +generateSwaggerUI("http://localhost:3000/api"); +``` + +## [Rapidoc](https://rapidocweb.com/) + +```ts +import { generateRapidocUI } from "openapi-metadata/ui"; + +generateRapidocUI("http://localhost:3000/api"); +``` diff --git a/docs/scripts/update-contributors.js b/docs/scripts/update-contributors.js index 70a8d5672..b627ef755 100644 --- a/docs/scripts/update-contributors.js +++ b/docs/scripts/update-contributors.js @@ -182,20 +182,26 @@ const CONTRIBUTORS = { "armandabric", "illright", ]), - "openapi-react-query": new Set(["drwpow", "kerwanp", "yoshi2no", "elaygelbart"]), + "openapi-react-query": new Set(["drwpow", "kerwanp", "yoshi2no"]), "swr-openapi": new Set(["htunnicliff"]), + "openapi-metadata": new Set(["kerwanp", "drwpow"]), }; async function main() { let i = 0; - const total = Object.values(CONTRIBUTORS).reduce((total, next) => total + next.size, 0); + const total = Object.values(CONTRIBUTORS).reduce( + (total, next) => total + next.size, + 0, + ); await Promise.all( Object.entries(CONTRIBUTORS).map(async ([repo, contributors]) => { data[repo] ??= []; for (const username of [...contributors]) { i++; // skip profiles that have been updated within the past week - const { lastFetch } = data[repo].find((u) => u.username === username) ?? { lastFetch: 0 }; + const { lastFetch } = data[repo].find( + (u) => u.username === username, + ) ?? { lastFetch: 0 }; if (Date.now() - lastFetch < ONE_WEEK) { // biome-ignore lint/suspicious/noConsoleLog: this is a script console.log(`[${i}/${total}] (Skipped ${username})`); @@ -213,7 +219,10 @@ async function main() { upsert(data[repo], userData); // biome-ignore lint/suspicious/noConsoleLog: this is a script console.log(`[${i}/${total}] Updated for ${username}`); - fs.writeFileSync(new URL("../data/contributors.json", import.meta.url), JSON.stringify(data)); // update file while fetching (sync happens safely in between fetches) + fs.writeFileSync( + new URL("../data/contributors.json", import.meta.url), + JSON.stringify(data), + ); // update file while fetching (sync happens safely in between fetches) } catch (err) { if (err instanceof UserFetchError && err.notFound) { console.warn(`[${i}/${total}] (Skipped ${username}, not found)`); diff --git a/packages/openapi-adonis/.npmignore b/packages/openapi-adonis/.npmignore deleted file mode 100644 index a673d1305..000000000 --- a/packages/openapi-adonis/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -example -test -tsconfig*.json -vitest.config.ts -biome.json diff --git a/packages/openapi-adonis/CHANGELOG.md b/packages/openapi-adonis/CHANGELOG.md deleted file mode 100644 index 329015037..000000000 --- a/packages/openapi-adonis/CHANGELOG.md +++ /dev/null @@ -1,39 +0,0 @@ -# openapi-adonis - -## 0.0.0-20240826235548 - -### Patch Changes - -- Updated dependencies []: - - openapi-metadata@0.0.0-20240826235548 - -## 0.0.0-20240826232507 - -### Patch Changes - -- Automatically append apiParam from route pattern - -## 0.0.0-20240826230314 - -### Patch Changes - -- Updated dependencies []: - - openapi-metadata@0.0.0-20240826230314 - -## 0.0.0-20240826225846 - -### Patch Changes - -- Updated dependencies []: - - openapi-metadata@0.0.0-20240826225846 - -## 0.0.0-20240826224734 - -### Major Changes - -- Initial release - -### Patch Changes - -- Updated dependencies []: - - openapi-metadata@0.0.0-20240826224734 diff --git a/packages/openapi-adonis/biome.json b/packages/openapi-adonis/biome.json deleted file mode 100644 index acf999617..000000000 --- a/packages/openapi-adonis/biome.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json", - "extends": ["../../biome.json"], - "files": { - "ignore": ["./example/", "./coverage/"] - }, - "linter": { - "rules": { - "complexity": { - "noBannedTypes": "off" - }, - "suspicious": { - "noConfusingVoidType": "off" - } - } - } -} diff --git a/packages/openapi-adonis/example/.editorconfig b/packages/openapi-adonis/example/.editorconfig deleted file mode 100644 index f830f4041..000000000 --- a/packages/openapi-adonis/example/.editorconfig +++ /dev/null @@ -1,22 +0,0 @@ -# http://editorconfig.org - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.json] -insert_final_newline = unset - -[**.min.js] -indent_style = unset -insert_final_newline = unset - -[MakeFile] -indent_style = space - -[*.md] -trim_trailing_whitespace = false diff --git a/packages/openapi-adonis/example/.env.example b/packages/openapi-adonis/example/.env.example deleted file mode 100644 index 2aa8f14b7..000000000 --- a/packages/openapi-adonis/example/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -TZ=UTC -PORT=3333 -HOST=localhost -LOG_LEVEL=info -APP_KEY=30kuDPpn6wxNER9r0phf-cfQTMT2h_n_ -NODE_ENV=development \ No newline at end of file diff --git a/packages/openapi-adonis/example/.gitignore b/packages/openapi-adonis/example/.gitignore deleted file mode 100644 index 4e9b44526..000000000 --- a/packages/openapi-adonis/example/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Dependencies and AdonisJS build -node_modules -build -tmp - -# Secrets -.env -.env.local -.env.production.local -.env.development.local - -# Frontend assets compiled code -public/assets - -# Build tools specific -npm-debug.log -yarn-error.log - -# Editors specific -.fleet -.idea -.vscode - -# Platform specific -.DS_Store diff --git a/packages/openapi-adonis/example/ace.js b/packages/openapi-adonis/example/ace.js deleted file mode 100644 index d47f53aaf..000000000 --- a/packages/openapi-adonis/example/ace.js +++ /dev/null @@ -1,28 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| JavaScript entrypoint for running ace commands -|-------------------------------------------------------------------------- -| -| DO NOT MODIFY THIS FILE AS IT WILL BE OVERRIDDEN DURING THE BUILD -| PROCESS. -| -| See docs.adonisjs.com/guides/typescript-build-process#creating-production-build -| -| Since, we cannot run TypeScript source code using "node" binary, we need -| a JavaScript entrypoint to run ace commands. -| -| This file registers the "ts-node/esm" hook with the Node.js module system -| and then imports the "bin/console.ts" file. -| -*/ - -/** - * Register hook to process TypeScript files using ts-node - */ -import { register } from 'node:module' -register('ts-node/esm', import.meta.url) - -/** - * Import ace console entrypoint - */ -await import('./bin/console.js') diff --git a/packages/openapi-adonis/example/adonisrc.ts b/packages/openapi-adonis/example/adonisrc.ts deleted file mode 100644 index a17f48b24..000000000 --- a/packages/openapi-adonis/example/adonisrc.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { defineConfig } from '@adonisjs/core/app' - -export default defineConfig({ - /* - |-------------------------------------------------------------------------- - | Commands - |-------------------------------------------------------------------------- - | - | List of ace commands to register from packages. The application commands - | will be scanned automatically from the "./commands" directory. - | - */ - commands: [() => import('@adonisjs/core/commands')], - - /* - |-------------------------------------------------------------------------- - | Service providers - |-------------------------------------------------------------------------- - | - | List of service providers to import and register when booting the - | application - | - */ - providers: [ - () => import('@adonisjs/core/providers/app_provider'), - () => import('@adonisjs/core/providers/hash_provider'), - { - file: () => import('@adonisjs/core/providers/repl_provider'), - environment: ['repl', 'test'], - }, - () => import('@adonisjs/core/providers/vinejs_provider'), - () => import('@adonisjs/cors/cors_provider'), - ], - - /* - |-------------------------------------------------------------------------- - | Preloads - |-------------------------------------------------------------------------- - | - | List of modules to import before starting the application. - | - */ - preloads: [() => import('#start/routes'), () => import('#start/kernel')], - - /* - |-------------------------------------------------------------------------- - | Tests - |-------------------------------------------------------------------------- - | - | List of test suites to organize tests by their type. Feel free to remove - | and add additional suites. - | - */ - tests: { - suites: [ - { - files: ['tests/unit/**/*.spec(.ts|.js)'], - name: 'unit', - timeout: 2000, - }, - { - files: ['tests/functional/**/*.spec(.ts|.js)'], - name: 'functional', - timeout: 30000, - }, - ], - forceExit: false, - }, -}) diff --git a/packages/openapi-adonis/example/app/controllers/users_controller.ts b/packages/openapi-adonis/example/app/controllers/users_controller.ts deleted file mode 100644 index b4e06ebed..000000000 --- a/packages/openapi-adonis/example/app/controllers/users_controller.ts +++ /dev/null @@ -1,21 +0,0 @@ -import User from "#models/user"; -import { listUserValidator } from "#validators/user"; -import { apiBody, apiOperation, apiParam, apiQuery, apiResponse } from "openapi-adonis/decorators"; -import { VineType, ModelType } from "openapi-adonis"; - -export default class UsersController { - @apiOperation({ summary: "Get users" }) - @apiResponse({ type: ModelType(User) }) - @apiParam({ name: "id" }) - @apiQuery({ name: "query" }) - @apiBody({ type: VineType(listUserValidator, "listUserValidator") }) - async index(): Promise { - return new User(); - } - - @apiOperation({ summary: "Create new user" }) - // @apiBody({ type: User }) - async create(): Promise { - return new User(); - } -} diff --git a/packages/openapi-adonis/example/app/exceptions/handler.ts b/packages/openapi-adonis/example/app/exceptions/handler.ts deleted file mode 100644 index 367898fc4..000000000 --- a/packages/openapi-adonis/example/app/exceptions/handler.ts +++ /dev/null @@ -1,28 +0,0 @@ -import app from '@adonisjs/core/services/app' -import { HttpContext, ExceptionHandler } from '@adonisjs/core/http' - -export default class HttpExceptionHandler extends ExceptionHandler { - /** - * In debug mode, the exception handler will display verbose errors - * with pretty printed stack traces. - */ - protected debug = !app.inProduction - - /** - * The method is used for handling errors and returning - * response to the client - */ - async handle(error: unknown, ctx: HttpContext) { - return super.handle(error, ctx) - } - - /** - * The method is used to report error to the logging service or - * the third party error monitoring service. - * - * @note You should not attempt to send a response from this method. - */ - async report(error: unknown, ctx: HttpContext) { - return super.report(error, ctx) - } -} diff --git a/packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts b/packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts deleted file mode 100644 index 97abc835b..000000000 --- a/packages/openapi-adonis/example/app/middleware/container_bindings_middleware.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Logger } from '@adonisjs/core/logger' -import { HttpContext } from '@adonisjs/core/http' -import type { NextFn } from '@adonisjs/core/types/http' - -/** - * The container bindings middleware binds classes to their request - * specific value using the container resolver. - * - * - We bind "HttpContext" class to the "ctx" object - * - And bind "Logger" class to the "ctx.logger" object - */ -export default class ContainerBindingsMiddleware { - handle(ctx: HttpContext, next: NextFn) { - ctx.containerResolver.bindValue(HttpContext, ctx) - ctx.containerResolver.bindValue(Logger, ctx.logger) - - return next() - } -} diff --git a/packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts b/packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts deleted file mode 100644 index 58022e7a8..000000000 --- a/packages/openapi-adonis/example/app/middleware/force_json_response_middleware.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { HttpContext } from '@adonisjs/core/http' -import type { NextFn } from '@adonisjs/core/types/http' - -/** - * Updating the "Accept" header to always accept "application/json" response - * from the server. This will force the internals of the framework like - * validator errors or auth errors to return a JSON response. - */ -export default class ForceJsonResponseMiddleware { - async handle({ request }: HttpContext, next: NextFn) { - const headers = request.headers() - headers.accept = 'application/json' - - return next() - } -} diff --git a/packages/openapi-adonis/example/app/models/user.ts b/packages/openapi-adonis/example/app/models/user.ts deleted file mode 100644 index 0b46a5c7b..000000000 --- a/packages/openapi-adonis/example/app/models/user.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { BaseModel } from '@adonisjs/lucid/orm' -import { apiProperty } from 'openapi-adonis/decorators' - -export default class User extends BaseModel { - @apiProperty({ example: '5' }) - declare id: string - - @apiProperty() - declare name: number - - @apiProperty() - declare hey: string - - @apiProperty({ type: User }) - declare user: User -} diff --git a/packages/openapi-adonis/example/app/validators/user.ts b/packages/openapi-adonis/example/app/validators/user.ts deleted file mode 100644 index 98174fdad..000000000 --- a/packages/openapi-adonis/example/app/validators/user.ts +++ /dev/null @@ -1,12 +0,0 @@ -import vine from "@vinejs/vine"; - -export const listUserValidator = vine.compile( - vine.object({ - one: vine.string(), - two: vine.number(), - nested: vine.object({ - test: vine.number(), - }), - array: vine.array(vine.number()).maxLength(5), - }), -); diff --git a/packages/openapi-adonis/example/bin/console.ts b/packages/openapi-adonis/example/bin/console.ts deleted file mode 100644 index 4b102ee86..000000000 --- a/packages/openapi-adonis/example/bin/console.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| Ace entry point -|-------------------------------------------------------------------------- -| -| The "console.ts" file is the entrypoint for booting the AdonisJS -| command-line framework and executing commands. -| -| Commands do not boot the application, unless the currently running command -| has "options.startApp" flag set to true. -| -*/ - -import 'reflect-metadata' -import { Ignitor, prettyPrintError } from '@adonisjs/core' - -/** - * URL to the application root. AdonisJS need it to resolve - * paths to file and directories for scaffolding commands - */ -const APP_ROOT = new URL('../', import.meta.url) - -/** - * The importer is used to import files in context of the - * application. - */ -const IMPORTER = (filePath: string) => { - if (filePath.startsWith('./') || filePath.startsWith('../')) { - return import(new URL(filePath, APP_ROOT).href) - } - return import(filePath) -} - -new Ignitor(APP_ROOT, { importer: IMPORTER }) - .tap((app) => { - app.booting(async () => { - await import('#start/env') - }) - app.listen('SIGTERM', () => app.terminate()) - app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate()) - }) - .ace() - .handle(process.argv.splice(2)) - .catch((error) => { - process.exitCode = 1 - prettyPrintError(error) - }) diff --git a/packages/openapi-adonis/example/bin/server.ts b/packages/openapi-adonis/example/bin/server.ts deleted file mode 100644 index fe0fefbaf..000000000 --- a/packages/openapi-adonis/example/bin/server.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| HTTP server entrypoint -|-------------------------------------------------------------------------- -| -| The "server.ts" file is the entrypoint for starting the AdonisJS HTTP -| server. Either you can run this file directly or use the "serve" -| command to run this file and monitor file changes -| -*/ - -import 'reflect-metadata' -import { Ignitor, prettyPrintError } from '@adonisjs/core' - -/** - * URL to the application root. AdonisJS need it to resolve - * paths to file and directories for scaffolding commands - */ -const APP_ROOT = new URL('../', import.meta.url) - -/** - * The importer is used to import files in context of the - * application. - */ -const IMPORTER = (filePath: string) => { - if (filePath.startsWith('./') || filePath.startsWith('../')) { - return import(new URL(filePath, APP_ROOT).href) - } - return import(filePath) -} - -new Ignitor(APP_ROOT, { importer: IMPORTER }) - .tap((app) => { - app.booting(async () => { - await import('#start/env') - }) - app.listen('SIGTERM', () => app.terminate()) - app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate()) - }) - .httpServer() - .start() - .catch((error) => { - process.exitCode = 1 - prettyPrintError(error) - }) diff --git a/packages/openapi-adonis/example/config/app.ts b/packages/openapi-adonis/example/config/app.ts deleted file mode 100644 index 1292af792..000000000 --- a/packages/openapi-adonis/example/config/app.ts +++ /dev/null @@ -1,40 +0,0 @@ -import env from '#start/env' -import app from '@adonisjs/core/services/app' -import { Secret } from '@adonisjs/core/helpers' -import { defineConfig } from '@adonisjs/core/http' - -/** - * The app key is used for encrypting cookies, generating signed URLs, - * and by the "encryption" module. - * - * The encryption module will fail to decrypt data if the key is lost or - * changed. Therefore it is recommended to keep the app key secure. - */ -export const appKey = new Secret(env.get('APP_KEY')) - -/** - * The configuration settings used by the HTTP server - */ -export const http = defineConfig({ - generateRequestId: true, - allowMethodSpoofing: false, - - /** - * Enabling async local storage will let you access HTTP context - * from anywhere inside your application. - */ - useAsyncLocalStorage: false, - - /** - * Manage cookies configuration. The settings for the session id cookie are - * defined inside the "config/session.ts" file. - */ - cookie: { - domain: '', - path: '/', - maxAge: '2h', - httpOnly: true, - secure: app.inProduction, - sameSite: 'lax', - }, -}) diff --git a/packages/openapi-adonis/example/config/bodyparser.ts b/packages/openapi-adonis/example/config/bodyparser.ts deleted file mode 100644 index f3d1ead9d..000000000 --- a/packages/openapi-adonis/example/config/bodyparser.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { defineConfig } from '@adonisjs/core/bodyparser' - -const bodyParserConfig = defineConfig({ - /** - * The bodyparser middleware will parse the request body - * for the following HTTP methods. - */ - allowedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'], - - /** - * Config for the "application/x-www-form-urlencoded" - * content-type parser - */ - form: { - convertEmptyStringsToNull: true, - types: ['application/x-www-form-urlencoded'], - }, - - /** - * Config for the JSON parser - */ - json: { - convertEmptyStringsToNull: true, - types: [ - 'application/json', - 'application/json-patch+json', - 'application/vnd.api+json', - 'application/csp-report', - ], - }, - - /** - * Config for the "multipart/form-data" content-type parser. - * File uploads are handled by the multipart parser. - */ - multipart: { - /** - * Enabling auto process allows bodyparser middleware to - * move all uploaded files inside the tmp folder of your - * operating system - */ - autoProcess: true, - convertEmptyStringsToNull: true, - processManually: [], - - /** - * Maximum limit of data to parse including all files - * and fields - */ - limit: '20mb', - types: ['multipart/form-data'], - }, -}) - -export default bodyParserConfig diff --git a/packages/openapi-adonis/example/config/cors.ts b/packages/openapi-adonis/example/config/cors.ts deleted file mode 100644 index 328934b3d..000000000 --- a/packages/openapi-adonis/example/config/cors.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { defineConfig } from '@adonisjs/cors' - -/** - * Configuration options to tweak the CORS policy. The following - * options are documented on the official documentation website. - * - * https://docs.adonisjs.com/guides/security/cors - */ -const corsConfig = defineConfig({ - enabled: true, - origin: true, - methods: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE'], - headers: true, - exposeHeaders: [], - credentials: true, - maxAge: 90, -}) - -export default corsConfig diff --git a/packages/openapi-adonis/example/config/hash.ts b/packages/openapi-adonis/example/config/hash.ts deleted file mode 100644 index ab1030084..000000000 --- a/packages/openapi-adonis/example/config/hash.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { defineConfig, drivers } from '@adonisjs/core/hash' - -const hashConfig = defineConfig({ - default: 'scrypt', - - list: { - scrypt: drivers.scrypt({ - cost: 16384, - blockSize: 8, - parallelization: 1, - maxMemory: 33554432, - }), - }, -}) - -export default hashConfig - -/** - * Inferring types for the list of hashers you have configured - * in your application. - */ -declare module '@adonisjs/core/types' { - export interface HashersList extends InferHashers {} -} diff --git a/packages/openapi-adonis/example/config/logger.ts b/packages/openapi-adonis/example/config/logger.ts deleted file mode 100644 index b96130040..000000000 --- a/packages/openapi-adonis/example/config/logger.ts +++ /dev/null @@ -1,35 +0,0 @@ -import env from '#start/env' -import app from '@adonisjs/core/services/app' -import { defineConfig, targets } from '@adonisjs/core/logger' - -const loggerConfig = defineConfig({ - default: 'app', - - /** - * The loggers object can be used to define multiple loggers. - * By default, we configure only one logger (named "app"). - */ - loggers: { - app: { - enabled: true, - name: env.get('APP_NAME'), - level: env.get('LOG_LEVEL'), - transport: { - targets: targets() - .pushIf(!app.inProduction, targets.pretty()) - .pushIf(app.inProduction, targets.file({ destination: 1 })) - .toArray(), - }, - }, - }, -}) - -export default loggerConfig - -/** - * Inferring types for the list of loggers you have configured - * in your application. - */ -declare module '@adonisjs/core/types' { - export interface LoggersList extends InferLoggers {} -} diff --git a/packages/openapi-adonis/example/package.json b/packages/openapi-adonis/example/package.json deleted file mode 100644 index af4aa0bac..000000000 --- a/packages/openapi-adonis/example/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@example/openapi-adonis", - "version": "0.0.0", - "private": true, - "type": "module", - "license": "UNLICENSED", - "scripts": { - "start": "node bin/server.js", - "dev": "node ace serve --watch", - "typecheck": "tsc --noEmit" - }, - "imports": { - "#controllers/*": "./app/controllers/*.js", - "#exceptions/*": "./app/exceptions/*.js", - "#models/*": "./app/models/*.js", - "#mails/*": "./app/mails/*.js", - "#services/*": "./app/services/*.js", - "#listeners/*": "./app/listeners/*.js", - "#events/*": "./app/events/*.js", - "#middleware/*": "./app/middleware/*.js", - "#validators/*": "./app/validators/*.js", - "#providers/*": "./providers/*.js", - "#policies/*": "./app/policies/*.js", - "#abilities/*": "./app/abilities/*.js", - "#database/*": "./database/*.js", - "#start/*": "./start/*.js", - "#tests/*": "./tests/*.js", - "#config/*": "./config/*.js" - }, - "devDependencies": { - "@adonisjs/assembler": "^7.7.0", - "@adonisjs/http-server": "^7.2.3", - "@adonisjs/tsconfig": "^1.3.0", - "@swc/core": "^1.6.5", - "@types/node": "^20.14.9", - "hot-hook": "^0.2.6", - "pino-pretty": "^11.2.1", - "ts-node": "^10.9.2", - "typescript": "~5.4" - }, - "dependencies": { - "@adonisjs/auth": "^9.2.3", - "@adonisjs/core": "^6.12.1", - "@adonisjs/cors": "^2.2.1", - "@adonisjs/lucid": "^21.1.0", - "@vinejs/vine": "^2.1.0", - "luxon": "^3.5.0", - "openapi-adonis": "workspace:^", - "reflect-metadata": "^0.2.2" - }, - "hotHook": { - "boundaries": [ - "./app/controllers/**/*.ts", - "./app/middleware/*.ts" - ] - } -} diff --git a/packages/openapi-adonis/example/start/env.ts b/packages/openapi-adonis/example/start/env.ts deleted file mode 100644 index 3676c3525..000000000 --- a/packages/openapi-adonis/example/start/env.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| Environment variables service -|-------------------------------------------------------------------------- -| -| The `Env.create` method creates an instance of the Env service. The -| service validates the environment variables and also cast values -| to JavaScript data types. -| -*/ - -import { Env } from '@adonisjs/core/env' - -export default await Env.create(new URL('../', import.meta.url), { - NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const), - PORT: Env.schema.number(), - APP_KEY: Env.schema.string(), - HOST: Env.schema.string({ format: 'host' }), - LOG_LEVEL: Env.schema.enum(['fatal', 'error', 'warn', 'info', 'debug', 'trace']), -}) diff --git a/packages/openapi-adonis/example/start/kernel.ts b/packages/openapi-adonis/example/start/kernel.ts deleted file mode 100644 index 865831760..000000000 --- a/packages/openapi-adonis/example/start/kernel.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| HTTP kernel file -|-------------------------------------------------------------------------- -| -| The HTTP kernel file is used to register the middleware with the server -| or the router. -| -*/ - -import router from '@adonisjs/core/services/router' -import server from '@adonisjs/core/services/server' - -/** - * The error handler is used to convert an exception - * to a HTTP response. - */ -server.errorHandler(() => import('#exceptions/handler')) - -/** - * The server middleware stack runs middleware on all the HTTP - * requests, even if there is no route registered for - * the request URL. - */ -server.use([ - () => import('#middleware/container_bindings_middleware'), - () => import('#middleware/force_json_response_middleware'), - () => import('@adonisjs/cors/cors_middleware'), -]) - -/** - * The router middleware stack runs middleware on all the HTTP - * requests with a registered route. - */ -router.use([() => import('@adonisjs/core/bodyparser_middleware')]) - -/** - * Named middleware collection must be explicitly assigned to - * the routes or the routes group. - */ -export const middleware = router.named({}) diff --git a/packages/openapi-adonis/example/start/routes.ts b/packages/openapi-adonis/example/start/routes.ts deleted file mode 100644 index 4e645d0d2..000000000 --- a/packages/openapi-adonis/example/start/routes.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* -|-------------------------------------------------------------------------- -| Routes file -|-------------------------------------------------------------------------- -| -| The routes file is used for defining the HTTP routes. -| -*/ - -import router from "@adonisjs/core/services/router"; -import AdonisOpenAPI from "openapi-adonis"; - -const UsersController = () => import("#controllers/users_controller"); - -router.get("/", async () => { - return { - hello: "world", - }; -}); - -// router.get("/users/:id", [UsersController, "index"]); -// router.post("/users", [UsersController, "create"]); -router.resource("users", UsersController).apiOnly(); - -const builder = AdonisOpenAPI.document().setTitle("OpenAPI Adonis Example"); -AdonisOpenAPI.setup("/docs", router, builder); diff --git a/packages/openapi-adonis/example/tsconfig.json b/packages/openapi-adonis/example/tsconfig.json deleted file mode 100644 index 86b69e8be..000000000 --- a/packages/openapi-adonis/example/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "@adonisjs/tsconfig/tsconfig.app.json", - "compilerOptions": { - "rootDir": "./", - "outDir": "./build" - } -} diff --git a/packages/openapi-adonis/package.json b/packages/openapi-adonis/package.json deleted file mode 100644 index 72fe7631a..000000000 --- a/packages/openapi-adonis/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "openapi-adonis", - "description": "Auto-Generate OpenAPI specifications for AdonisJS", - "version": "0.0.0-20240826235548", - "author": { - "name": "Martin PAUCOT", - "email": "contact@martin-paucot.Fr" - }, - "type": "module", - "main": "./dist/index.js", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - }, - "./decorators": { - "types": "./dist/decorators/index.d.ts", - "default": "./dist/decorators/index.js" - } - }, - "homepage": "https://openapi-ts.dev", - "repository": { - "type": "git", - "url": "https://github.com/openapi-ts/openapi-typescript", - "directory": "packages/openapi-adonis" - }, - "bugs": { - "url": "https://github.com/openapi-ts/openapi-typescript/issues" - }, - "keywords": [ - "openapi", - "swagger", - "rest", - "api", - "oapi_3", - "oapi_3_1", - "typescript", - "adonis" - ], - "scripts": { - "build": "tsup", - "dev": "tsup --watch", - "format": "biome format . --write", - "lint": "biome check .", - "test": "vitest run", - "coverage": "vitest run --coverage", - "version": "pnpm run prepare && pnpm run build" - }, - "dependencies": { - "@fastify/deepmerge": "^2.0.0", - "@vinejs/vine": "^2.1.0", - "lodash": "^4.17.21", - "openapi-metadata": "workspace:^", - "openapi-types": "^12.1.3", - "reflect-metadata": "^0.2.2" - }, - "devDependencies": { - "@adonisjs/core": "^6.12.1", - "@adonisjs/http-server": "^7.2.3", - "@types/lodash": "^4.17.7", - "@types/node": "^22.1.0", - "@vitest/coverage-v8": "^2.0.5", - "tsup": "^8.2.4", - "typescript": "^5.4.5", - "unplugin-swc": "^1.5.1" - } -} diff --git a/packages/openapi-adonis/src/decorators/index.ts b/packages/openapi-adonis/src/decorators/index.ts deleted file mode 100644 index 6f8994bbf..000000000 --- a/packages/openapi-adonis/src/decorators/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "openapi-metadata"; diff --git a/packages/openapi-adonis/src/index.ts b/packages/openapi-adonis/src/index.ts deleted file mode 100644 index d19c65d9c..000000000 --- a/packages/openapi-adonis/src/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; - -import type { Router } from "@adonisjs/http-server"; -import { DocumentBuilder } from "openapi-metadata/builders"; -import { generateScalarUI } from "openapi-metadata/ui"; -import { loadRouter } from "./loaders/loadRouter"; -import { VineTypeResolver } from "./resolvers/vine-type.resolver"; - -export { VineType } from "./resolvers/vine-type.resolver"; -export { ModelType } from "openapi-metadata/resolvers"; - -// biome-ignore lint/complexity/noStaticOnlyClass: TODO: move out of class -export default class AdonisOpenAPI { - public static document() { - return new DocumentBuilder().addResolver(VineTypeResolver); - } - - public static async load(builder: DocumentBuilder, router: Router): Promise { - await loadRouter(builder, router); - return builder.build(); - } - - public static setup(pattern: string, router: Router, builder: DocumentBuilder) { - router.get(pattern, () => { - return generateScalarUI("/docs.json"); - }); - - router.get(`${pattern}.json`, async () => { - await AdonisOpenAPI.load(builder, router); - return builder.build(); - }); - } -} diff --git a/packages/openapi-adonis/src/loaders/loadRoute.ts b/packages/openapi-adonis/src/loaders/loadRoute.ts deleted file mode 100644 index 24b957dfb..000000000 --- a/packages/openapi-adonis/src/loaders/loadRoute.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import { OperationBuilder, type DocumentBuilder } from "openapi-metadata/builders"; -import type { AdonisRoute } from "../types"; -import { loadApiOperation, loadApiParam, loadControllerOperation } from "openapi-metadata/loaders"; -import { normalizeRoutePattern } from "../utils/normalizeRoutePattern"; - -export async function loadRoute(document: DocumentBuilder, route: AdonisRoute) { - if (typeof route.handler !== "object" || !Array.isArray(route.handler.reference)) { - return; - } - - const importer = route.handler.reference[0] as () => Promise<{ - default: any; - }>; - const propertyKey = route.handler.reference[1] as string; - - const target = (await importer().then((t: any) => t.default)) as any; - - for (const method of route.methods) { - if (method === "HEAD") { - continue; - } - - const operation = new OperationBuilder(); - - const { params, pattern } = normalizeRoutePattern(route.pattern); - - loadApiOperation(operation, { - method: method.toLowerCase() as `${OpenAPIV3.HttpMethods}`, - pattern, - }); - - for (const name of params) { - loadApiParam(document, operation, { name, type: "string" }); - } - - loadControllerOperation(document, operation, target.prototype, propertyKey); - - document.addOperation(operation); - } -} diff --git a/packages/openapi-adonis/src/loaders/loadRouter.ts b/packages/openapi-adonis/src/loaders/loadRouter.ts deleted file mode 100644 index 5229313fb..000000000 --- a/packages/openapi-adonis/src/loaders/loadRouter.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Router } from "@adonisjs/http-server"; -import type { DocumentBuilder } from "openapi-metadata/builders"; -import { loadRoute } from "./loadRoute"; - -/** - * Enrich document from Adonis Router. - */ -export async function loadRouter(document: DocumentBuilder, router: Router) { - const routerJson = router.toJSON(); - - for (const [_, routes] of Object.entries(routerJson)) { - for (const route of routes) { - await loadRoute(document, route); - } - } -} diff --git a/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts b/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts deleted file mode 100644 index 8e44062c2..000000000 --- a/packages/openapi-adonis/src/resolvers/vine-type.resolver.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { SimpleMessagesProvider, type VineValidator } from "@vinejs/vine"; -import type { SchemaTypes } from "@vinejs/vine/types"; -import { TypeResolver } from "openapi-metadata/resolvers"; -import type { OpenAPIV3 } from "openapi-types"; -import _ from "lodash"; - -type Validator = ReturnType["toJSON"]>; -type Refs = Validator["refs"]; -type CompilerNode = Validator["schema"]["schema"]; -type ObjectNode = CompilerNode & { type: "object" }; -type LiteralNode = CompilerNode & { type: "literal" }; -type ArrayNode = CompilerNode & { type: "array" }; -type ValidationNode = ObjectNode["validations"][number]; - -// TODO: We might want to autoload validators and import theme dynamically to discover constant name - -export class VineTypeResolver< - Schema extends SchemaTypes, - Metadata extends Record | undefined, -> extends TypeResolver { - #name: string; - - constructor( - private readonly validator: VineValidator, - name: string, - ) { - super(); - this.#name = name; - } - - name(): string { - return this.#name; - } - - public static supports(type: any): boolean { - // console.log(type); - return true; - } - - async schema(): Promise { - const validator = this.validator.toJSON(); - const node = validator.schema.schema; - - if (node.type !== "object") { - // TODO: Better errors - throw new Error("Only object top-level schemas are currently supported"); - } - - const schema = parseCompilerNode(node, validator.refs); - - await enrichType(this.validator, schema); - - return schema; - } -} - -export function parseValidations(validations: ValidationNode[], refs: Refs): Partial { - const schema: Partial = {}; - - for (const validation of validations) { - const rule = refs[validation.ruleFnId]; - - if (!rule || !("options" in rule) || !rule.options) { - continue; - } - - if (rule.options.min) { - schema.minimum = rule.options.min; - } - - if (rule.options.max) { - schema.maximum = rule.options.max; - } - - // TODO: Surely a cleaner way to identify regex - if (rule.options.toString().includes("/")) { - schema.pattern = rule.options.toString(); - } - - // TODO: Choices - } - - return schema; -} - -export function parseCompilerNode(node: CompilerNode, refs: Refs): OpenAPIV3.SchemaObject { - let schema: OpenAPIV3.SchemaObject; - - switch (node.type) { - case "object": - schema = parseObjectNode(node, refs); - break; - case "literal": - schema = parseLiteralNode(node, refs); - break; - case "array": - schema = parseArrayNode(node, refs); - break; - default: - throw new Error(`No parser found for type ${node.type}`); - } - - // TODO: FIX TYPE - return { - ...parseValidations(node.validations, refs), - ...schema, - } as OpenAPIV3.SchemaObject; -} - -export function parseObjectNode(node: ObjectNode, refs: Refs): OpenAPIV3.SchemaObject { - const schema: OpenAPIV3.SchemaObject = { - type: "object", - }; - - for (const property of node.properties) { - schema.properties = { - ...schema.properties, - [property.fieldName]: parseCompilerNode(property, refs), - }; - - if ("isOptional" in property && property.isOptional === false) { - schema.required = [...(schema.required ?? []), property.fieldName]; - } - } - - return schema; -} - -export function parseArrayNode(node: ArrayNode, refs: Refs): OpenAPIV3.SchemaObject { - return { - type: "array", - items: parseCompilerNode(node.each, refs), - }; -} - -// A literal is always marked as string and is then specified properly depending on validator -export function parseLiteralNode(node: LiteralNode, refs: Refs): OpenAPIV3.SchemaObject { - return { - type: "string", - }; -} - -export async function enrichType(validator: VineValidator, schema: OpenAPIV3.SchemaObject) { - if (!schema.properties) { - return; - } - - const obj = nodeToTestObject(schema); - - const [error] = await validator.tryValidate(obj, { - messagesProvider: new SimpleMessagesProvider({ - required: "REQUIRED", - string: "TYPE", - object: "TYPE", - number: "TYPE", - boolean: "TYPE", - }), - }); - - if (!error) { - return schema; - } - - for (const message of error.messages) { - // TODO: This should break if property name starts with 0 - const fieldPath = message.field.replaceAll(/\.(?!0)/g, ".properties.").replaceAll(".0", ".items"); - - if (message.message === "TYPE") { - _.set(schema.properties, `${fieldPath}.type`, message.rule); - } - } -} - -function nodeToTestObject(schema: OpenAPIV3.SchemaObject) { - const res: any = {}; - - for (const [name, property] of Object.entries(schema.properties ?? {})) { - if (!("type" in property)) { - continue; - } - - if (property.type === "object") { - res[name] = nodeToTestObject(property); - } else if (property.type === "array") { - if (!("type" in property.items)) { - continue; - } - - if (property.items.type === "object") { - res[name] = [nodeToTestObject(property.items)]; - } else { - res[name] = ["example"]; - } - } else { - res[name] = "example"; - } - } - - return res; -} - -export function VineType | undefined>( - validator: VineValidator, - name: string, -): TypeResolver { - return new VineTypeResolver(validator, name); -} diff --git a/packages/openapi-adonis/src/types.ts b/packages/openapi-adonis/src/types.ts deleted file mode 100644 index b1b24181f..000000000 --- a/packages/openapi-adonis/src/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Router } from "@adonisjs/http-server"; - -export type AdonisRoutes = ReturnType[string]; -export type AdonisRoute = AdonisRoutes[number]; diff --git a/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts b/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts deleted file mode 100644 index c65c9f521..000000000 --- a/packages/openapi-adonis/src/utils/normalizeRoutePattern.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const normalizeRoutePattern = (pattern: string) => { - const segments = pattern.split("/"); - - const params: string[] = []; - const path = segments - .map((s) => { - if (s.startsWith(":")) { - const param = s.replace(":", ""); - params.push(param); - return `{${param}}`; - } - - return s; - }) - .join("/"); - - return { pattern: path, params }; -}; diff --git a/packages/openapi-adonis/test/index.test.ts b/packages/openapi-adonis/test/index.test.ts deleted file mode 100644 index 4cc4fd7ba..000000000 --- a/packages/openapi-adonis/test/index.test.ts +++ /dev/null @@ -1,3 +0,0 @@ -it("placeholder", () => { - expect(true).toBe(true); -}); diff --git a/packages/openapi-adonis/test/vine.test.ts b/packages/openapi-adonis/test/vine.test.ts deleted file mode 100644 index 43ab1f94a..000000000 --- a/packages/openapi-adonis/test/vine.test.ts +++ /dev/null @@ -1,123 +0,0 @@ -import vine from "@vinejs/vine"; -import { - VineTypeResolver, - enrichType, - parseArrayNode, - parseLiteralNode, - parseObjectNode, -} from "../src/resolvers/vine-type.resolver"; -import { DocumentBuilder } from "openapi-metadata/builders"; - -describe("parseLiteralNode", () => { - // INFO: This test is not really necessary - it("should always returns string", () => { - const validator = vine.compile(vine.string()); - const json = validator.toJSON(); - const result = parseLiteralNode(json.schema.schema as any, json.refs); - - expect(result.type).toBe("string"); - }); -}); - -describe("parseArrayNode", () => { - it("should parse array of string", () => { - const validator = vine.compile(vine.array(vine.string())); - const json = validator.toJSON(); - const result: any = parseArrayNode(json.schema.schema as any, json.refs); - - expect(result.type).toBe("array"); - expect(result.items.type).toBe("string"); - }); -}); - -describe("parseObjectNode", () => { - it("should parse object", () => { - const validator = vine.compile( - vine.object({ - email: vine.string().email(), - password: vine.string(), - }), - ); - const json = validator.toJSON(); - const result: any = parseObjectNode(json.schema.schema as any, json.refs); - - expect(result.properties.email).toBeDefined(); - expect(result.properties.password).toBeDefined(); - }); - - it("should parse nested object", () => { - const validator = vine.compile( - vine.object({ - nested: vine.object({ - again: vine.object({ - example: vine.string(), - }), - }), - }), - ); - const json = validator.toJSON(); - - const result: any = parseObjectNode(json.schema.schema as any, json.refs); - - expect(result.properties.nested.properties.again.properties.example).toBeDefined(); - }); - - it("should mark properties as required by default", () => { - const validator = vine.compile( - vine.object({ - example: vine.string(), - }), - ); - const json = validator.toJSON(); - const result: any = parseObjectNode(json.schema.schema as any, json.refs); - - expect(result.required).toContain("example"); - }); - - it("should handle optional properties", () => { - const validator = vine.compile( - vine.object({ - required: vine.string(), - notRequired: vine.string().optional(), - }), - ); - const json = validator.toJSON(); - const result: any = parseObjectNode(json.schema.schema as any, json.refs); - - expect(result.required).toContain("required"); - expect(result.required).not.toContain("notRequired"); - }); -}); - -describe("enrichType", () => { - it("should properly find types using validators", async () => { - const validator = vine.compile( - vine.object({ - boolean: vine.boolean(), - number: vine.number(), - string: vine.string(), - }), - ); - - const schema: any = { - type: "object", - properties: { - boolean: { - type: "string", - }, - number: { - type: "string", - }, - string: { - type: "string", - }, - }, - }; - - await enrichType(validator, schema); - - expect(schema.properties.string.type).toBe("string"); - expect(schema.properties.boolean.type).toBe("boolean"); - expect(schema.properties.number.type).toBe("number"); - }); -}); diff --git a/packages/openapi-adonis/tsconfig.json b/packages/openapi-adonis/tsconfig.json deleted file mode 100644 index 856c8f0d6..000000000 --- a/packages/openapi-adonis/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "declaration": true, - "downlevelIteration": false, - "esModuleInterop": true, - "lib": ["ESNext", "DOM"], - "module": "ESNext", - "moduleResolution": "Bundler", - "noUncheckedIndexedAccess": true, - "outDir": "dist", - "skipLibCheck": false, - "strict": true, - "target": "ESNext", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "types": ["vitest/globals", "reflect-metadata"] - }, - "include": ["src", "test"], - "exclude": ["example", "node_modules"] -} diff --git a/packages/openapi-adonis/tsup.config.ts b/packages/openapi-adonis/tsup.config.ts deleted file mode 100644 index dc745a36c..000000000 --- a/packages/openapi-adonis/tsup.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts", "src/decorators/index.ts"], - format: ["esm"], - dts: true, - sourcemap: true, -}); diff --git a/packages/openapi-adonis/vitest.config.ts b/packages/openapi-adonis/vitest.config.ts deleted file mode 100644 index 8debcd30d..000000000 --- a/packages/openapi-adonis/vitest.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from "vitest/config"; -import swc from "unplugin-swc"; - -export default defineConfig({ - plugins: [ - // Required to have typescript metadata working. See https://github.com/vitest-dev/vitest/discussions/3320 - swc.vite(), - ], - test: { - globals: true, - }, -}); diff --git a/packages/openapi-metadata/package.json b/packages/openapi-metadata/package.json index fee234465..a818e5a9e 100644 --- a/packages/openapi-metadata/package.json +++ b/packages/openapi-metadata/package.json @@ -12,17 +12,17 @@ "types": "./dist/index.d.ts", "import": "./dist/index.js" }, - "./builders": { - "types": "./dist/builders/index.d.ts", - "import": "./dist/builders/index.js" + "./decorators": { + "types": "./dist/decorators/index.d.ts", + "import": "./dist/decorators/index.js" }, - "./loaders": { - "types": "./dist/loaders/index.d.ts", - "import": "./dist/loaders/index.js" + "./metadata": { + "types": "./dist/metadata/index.d.ts", + "import": "./dist/metadata/index.js" }, - "./resolvers": { - "types": "./dist/resolvers/index.d.ts", - "import": "./dist/resolvers/index.js" + "./errors": { + "types": "./dist/errors/index.d.ts", + "import": "./dist/errors/index.js" }, "./ui": { "types": "./dist/ui/index.d.ts", @@ -57,9 +57,10 @@ "version": "pnpm run prepare && pnpm run build" }, "dependencies": { - "@fastify/deepmerge": "^2.0.0", - "lodash": "^4.17.21", - "openapi-types": "^12.1.3", + "deepmerge": "^4.3.1", + "openapi-types": "^12.1.3" + }, + "peerDependencies": { "reflect-metadata": "^0.2.2" }, "devDependencies": { @@ -69,7 +70,9 @@ "del-cli": "^5.1.0", "esbuild": "^0.20.2", "execa": "^8.0.1", + "reflect-metadata": "^0.2.2", "tsup": "^8.2.4", + "type-fest": "^4.26.1", "typescript": "^5.4.5", "unplugin-swc": "^1.5.1" } diff --git a/packages/openapi-metadata/src/builders/base-builder.ts b/packages/openapi-metadata/src/builders/base-builder.ts deleted file mode 100644 index 42feac807..000000000 --- a/packages/openapi-metadata/src/builders/base-builder.ts +++ /dev/null @@ -1,3 +0,0 @@ -export abstract class BaseBuilder { - public abstract build(): T; -} diff --git a/packages/openapi-metadata/src/builders/document-builder.ts b/packages/openapi-metadata/src/builders/document-builder.ts deleted file mode 100644 index f72fa4808..000000000 --- a/packages/openapi-metadata/src/builders/document-builder.ts +++ /dev/null @@ -1,129 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import { buildDocumentBase } from "../fixtures/document-base"; -import { BaseBuilder } from "./base-builder"; -import { generateScalarUI } from "../ui/scalar"; -import type { Type } from "../types"; -import { TypeResolver } from "../resolvers/type-resolver"; -import { ModelTypeResolver } from "../resolvers/model-resolver"; -import type { OperationBuilder } from "./operation-builder"; - -export class DocumentBuilder extends BaseBuilder { - private readonly document: OpenAPIV3.Document = buildDocumentBase(); - private readonly operations: OperationBuilder[] = []; - private readonly resolvers: Type[] = [ModelTypeResolver]; - - public setTitle(title: string): this { - this.document.info.title = title; - return this; - } - - public setDescription(description: string): this { - this.document.info.description = description; - return this; - } - - public schemaRef(name: string): OpenAPIV3.ReferenceObject | false { - const schema = this.document.components?.schemas?.[name]; - if (!schema) { - return false; - } - - return { - $ref: `#/components/schemas/${name}`, - }; - } - - public addOperation(operation: OperationBuilder) { - this.operations.push(operation); - } - - // public setOperation(method: OpenAPIV3.HttpMethods, pattern: string, operation: OpenAPIV3.OperationObject) { - // if (!this.document.paths[pattern]) { - // this.document.paths[pattern] = {}; - // } - // - // // biome-ignore lint/style/noNonNullAssertion: Defined two lines above - // this.document.paths[pattern]![method] = operation; - // } - - public scalar(url: string): string { - return generateScalarUI(url); - } - - public addResolver(resolver: Type): this { - this.resolvers.push(resolver); - return this; - } - - public async resolve(type: any): Promise { - if (type instanceof TypeResolver) { - return this.resolveFromTypeResolver(type); - } - - for (const typeResolver of this.resolvers) { - // TODO: Fix type - if (!(typeResolver as any).supports(type)) { - continue; - } - - const resolver = new typeResolver(type); - return this.resolveFromTypeResolver(resolver); - } - - throw new Error("Cannot resolve type"); - } - - private async resolveFromTypeResolver(typeResolver: TypeResolver): Promise { - const name = typeResolver.name(); - const existing = this.schemaRef(name); - if (existing) { - return existing; - } - - // TODO: Do this properly - this.document.components = { - ...this.document.components, - schemas: { - ...this.document.components?.schemas, - [name]: {}, - }, - }; - - const schema = await typeResolver.schema(this); - - this.document.components = { - ...this.document.components, - schemas: { - ...this.document.components?.schemas, - [name]: schema, - }, - }; - - return { - $ref: `#/components/schemas/${name}`, - }; - } - - // TODO: Add proper errors - public build(): OpenAPIV3.Document { - for (const operation of this.operations) { - if (!operation.pattern) { - throw new Error("Operation does not have a pattern"); - } - - if (!operation.method) { - throw new Error("Operation does not have a method"); - } - - this.document.paths = { - ...this.document.paths, - [operation.pattern]: { - ...this.document.paths[operation.pattern], - [operation.method]: operation.build(), - }, - }; - } - - return this.document; - } -} diff --git a/packages/openapi-metadata/src/builders/index.ts b/packages/openapi-metadata/src/builders/index.ts deleted file mode 100644 index 7155e5a4b..000000000 --- a/packages/openapi-metadata/src/builders/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./base-builder"; -export * from "./document-builder"; -export * from "./operation-builder"; diff --git a/packages/openapi-metadata/src/builders/operation-builder.ts b/packages/openapi-metadata/src/builders/operation-builder.ts deleted file mode 100644 index c26b9c8eb..000000000 --- a/packages/openapi-metadata/src/builders/operation-builder.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import { BaseBuilder } from "./base-builder"; -import { deepmerge } from "../utils/deepmerge"; - -export class OperationBuilder extends BaseBuilder { - method: `${OpenAPIV3.HttpMethods}` | undefined; - pattern: string | undefined; - - #operation: OpenAPIV3.OperationObject = { - responses: {}, - }; - - setRequestBody(body: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject) { - this.#operation.requestBody = body; - return this; - } - - addTags(...tags: string[]) { - this.#operation.tags = [...(this.#operation.tags ?? []), ...tags]; - return this; - } - - setResponse(code: string, response: OpenAPIV3.ResponseObject) { - this.#operation.responses[code] = response; - return this; - } - - addParameter(parameter: OpenAPIV3.ParameterObject) { - this.#operation.parameters = [...(this.#operation.parameters ?? []), parameter]; - } - - merge(operation: Partial) { - this.#operation = deepmerge(this.#operation, operation); - return this; - } - - build(): OpenAPIV3.OperationObject { - return this.#operation; - } -} diff --git a/packages/openapi-metadata/src/context.ts b/packages/openapi-metadata/src/context.ts new file mode 100644 index 000000000..8c2983171 --- /dev/null +++ b/packages/openapi-metadata/src/context.ts @@ -0,0 +1,13 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { Logger, TypeLoaderFn } from "./types"; + +export class Context { + schemas: Record = {}; + typeLoaders: TypeLoaderFn[]; + logger: Logger; + + constructor(logger?: Logger, typeLoaders?: TypeLoaderFn[]) { + this.logger = logger ?? console; + this.typeLoaders = typeLoaders ?? []; + } +} diff --git a/packages/openapi-metadata/src/decorators/api-body.ts b/packages/openapi-metadata/src/decorators/api-body.ts index 581a4ad91..f58e22808 100644 --- a/packages/openapi-metadata/src/decorators/api-body.ts +++ b/packages/openapi-metadata/src/decorators/api-body.ts @@ -1,19 +1,20 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { SchemaType } from "../types"; +import type { SetOptional } from "type-fest"; +import { + type OperationBodyMetadata, + OperationBodyMetadataStorage, +} from "../metadata/operation-body"; -export const ApiBodyMetadataKey = Symbol("apiBodyKey"); +export type ApiBodyOptions = SetOptional; -export type ApiBodyMetadata = Omit & { - type?: SchemaType; - isArray?: boolean; -}; - -export type ApiBodyOptions = ApiBodyMetadata; - -export function apiBody(options: ApiBodyMetadata): MethodDecorator { - return Reflect.metadata(ApiBodyMetadataKey, options); -} - -export function getApiBody(target: any, propertyKey: string): ApiBodyMetadata | undefined { - return Reflect.getMetadata(ApiBodyMetadataKey, target, propertyKey); +export function ApiBody(options: ApiBodyOptions): MethodDecorator { + return (target, propertyKey) => { + OperationBodyMetadataStorage.defineMetadata( + target, + { + mediaType: "application/json", + ...options, + }, + propertyKey, + ); + }; } diff --git a/packages/openapi-metadata/src/decorators/api-cookie.ts b/packages/openapi-metadata/src/decorators/api-cookie.ts new file mode 100644 index 000000000..5396c0f5b --- /dev/null +++ b/packages/openapi-metadata/src/decorators/api-cookie.ts @@ -0,0 +1,16 @@ +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata"; + +export type ApiCookieOptions = Omit; + +export function ApiCookie(options: ApiCookieOptions) { + return (target: Object, propertyKey?: string | symbol) => { + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "cookie", ...options }], + propertyKey, + ); + }; +} diff --git a/packages/openapi-metadata/src/decorators/api-exclude.ts b/packages/openapi-metadata/src/decorators/api-exclude.ts new file mode 100644 index 000000000..5e2103487 --- /dev/null +++ b/packages/openapi-metadata/src/decorators/api-exclude.ts @@ -0,0 +1,13 @@ +import { ExcludeMetadataStorage } from "../metadata/exclude"; + +export function ApiExcludeController(): ClassDecorator { + return (target) => { + ExcludeMetadataStorage.defineMetadata(target, true); + }; +} + +export function ApiExcludeOperation(): MethodDecorator { + return (target, propertyKey) => { + ExcludeMetadataStorage.defineMetadata(target, true, propertyKey); + }; +} diff --git a/packages/openapi-metadata/src/decorators/api-extra-models.ts b/packages/openapi-metadata/src/decorators/api-extra-models.ts new file mode 100644 index 000000000..3b8815fc1 --- /dev/null +++ b/packages/openapi-metadata/src/decorators/api-extra-models.ts @@ -0,0 +1,8 @@ +import { ExtraModelsMetadataStorage } from "../metadata/extra-models"; +import type { Thunk, TypeValue } from "../types"; + +export function ApiExtraModels(...models: (TypeValue | Thunk)[]) { + return (target: Object) => { + ExtraModelsMetadataStorage.mergeMetadata(target, models); + }; +} diff --git a/packages/openapi-metadata/src/decorators/api-header.ts b/packages/openapi-metadata/src/decorators/api-header.ts new file mode 100644 index 000000000..45eeda5f2 --- /dev/null +++ b/packages/openapi-metadata/src/decorators/api-header.ts @@ -0,0 +1,16 @@ +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata"; + +export type ApiHeaderOptions = Omit; + +export function ApiHeader(options: ApiHeaderOptions) { + return (target: Object, propertyKey?: string | symbol) => { + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "header", ...options }], + propertyKey, + ); + }; +} diff --git a/packages/openapi-metadata/src/decorators/api-operation.ts b/packages/openapi-metadata/src/decorators/api-operation.ts index 85afdd7cd..8aee5d287 100644 --- a/packages/openapi-metadata/src/decorators/api-operation.ts +++ b/packages/openapi-metadata/src/decorators/api-operation.ts @@ -1,18 +1,12 @@ -import type { OpenAPIV3 } from "openapi-types"; +import { + type OperationMetadata, + OperationMetadataStorage, +} from "../metadata/operation"; -export const ApiOperationMetadataKey = Symbol("ApiOperation"); +export type ApiOperationOptions = OperationMetadata; -export type ApiOperationOptions = Partial< - OpenAPIV3.OperationObject & { - method: `${OpenAPIV3.HttpMethods}`; - pattern: string; - } ->; - -export function apiOperation(options: ApiOperationOptions): MethodDecorator { - return Reflect.metadata(ApiOperationMetadataKey, options); -} - -export function getApiOperation(target: any, propertyKey: string) { - return Reflect.getMetadata(ApiOperationMetadataKey, target, propertyKey) as ApiOperationOptions | undefined; +export function ApiOperation(options: ApiOperationOptions): MethodDecorator { + return (target, propertyKey) => { + OperationMetadataStorage.defineMetadata(target, options, propertyKey); + }; } diff --git a/packages/openapi-metadata/src/decorators/api-param.ts b/packages/openapi-metadata/src/decorators/api-param.ts index 17da18b04..66caca67d 100644 --- a/packages/openapi-metadata/src/decorators/api-param.ts +++ b/packages/openapi-metadata/src/decorators/api-param.ts @@ -1,22 +1,16 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { MetadataKey, SchemaType } from "../types"; +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata/operation-parameter"; -export const ApiParamMetadataKeyPrefix = "__api_param"; +export type ApiParamOptions = Omit; -export type ApiParamOptions = Omit & { - type?: SchemaType; -}; - -export function apiParam(options: ApiParamOptions): MethodDecorator { - return Reflect.metadata(`${ApiParamMetadataKeyPrefix}${options.name}`, options); -} - -export function getApiParams(target: any, propertyKey: string): ApiParamOptions[] { - const keys = Reflect.getMetadataKeys(target, propertyKey) as MetadataKey[]; - - return keys - .filter((k) => typeof k === "string" && k.startsWith(ApiParamMetadataKeyPrefix)) - .map((key) => { - return Reflect.getMetadata(key.toString(), target, propertyKey); - }); +export function ApiParam(options: ApiParamOptions) { + return function (target: Object, propertyKey?: string | symbol) { + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "path", ...options }], + propertyKey, + ); + }; } diff --git a/packages/openapi-metadata/src/decorators/api-property.ts b/packages/openapi-metadata/src/decorators/api-property.ts index 0186b1c5d..d2ce21747 100644 --- a/packages/openapi-metadata/src/decorators/api-property.ts +++ b/packages/openapi-metadata/src/decorators/api-property.ts @@ -1,34 +1,62 @@ -import type { MetadataKey, SchemaType } from "../types"; -import type { OpenAPIV3 } from "openapi-types"; -import { getMetadataPropertyType } from "../utils/metadata"; +import type { Context } from "../context"; +import { SymbolKeysNotSupportedError } from "../errors/symbol-keys-not-supported"; +import { + type PropertyMetadata, + PropertyMetadataStorage, +} from "../metadata/property"; +import { findType } from "../utils/metadata"; -export type ApiPropertyOptions = Omit & { - type?: SchemaType; - required?: boolean; -}; +export type ApiPropertyOptions = Partial; -const ApiPropertyMetadataKeyPrefix = "__api_property_"; +export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator; +export function ApiProperty(options?: ApiPropertyOptions): MethodDecorator; +export function ApiProperty( + options?: ApiPropertyOptions, +): PropertyDecorator | MethodDecorator { + return (prototype, propertyKey, descriptor) => { + const isMethod = Boolean(descriptor?.value); -export function apiProperty(options: ApiPropertyOptions = {}): PropertyDecorator { - return (target: any, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => { - if (!options.type) { - options.type = getMetadataPropertyType(target, propertyKey, descriptor); + if (typeof propertyKey === "symbol") { + throw new SymbolKeysNotSupportedError(); } - Reflect.defineMetadata(`${ApiPropertyMetadataKeyPrefix}${propertyKey.toString()}`, options, target); - }; -} + const metadata = { + name: options?.name ?? propertyKey, + required: true, + ...options, + } as PropertyMetadata; -export function getApiProperties(target: any) { - const keys = Reflect.getMetadataKeys(target) as MetadataKey[]; - const properties: Record = {}; + if ( + !("type" in metadata) && + !("schema" in metadata) && + !("enum" in metadata) + ) { + (metadata as any).type = (context: Context) => + findType({ + context, + metadataKey: isMethod ? "design:returntype" : "design:type", + prototype, + propertyKey, + }); + } - for (const key of keys.filter( - (k) => typeof k === "string" && k.startsWith(ApiPropertyMetadataKeyPrefix), - ) as string[]) { - const propertyKey = key.replace(ApiPropertyMetadataKeyPrefix, ""); - properties[propertyKey] = Reflect.getMetadata(key, target); - } + PropertyMetadataStorage.mergeMetadata(prototype, { + [metadata.name]: metadata as PropertyMetadata, + }); + }; +} - return properties; +export function ApiPropertyOptional( + options?: Omit, +): PropertyDecorator; +export function ApiPropertyOptional( + options?: Omit, +): MethodDecorator; +export function ApiPropertyOptional( + options?: Omit, +): PropertyDecorator | MethodDecorator { + return ApiProperty({ + ...options, + required: false, + }); } diff --git a/packages/openapi-metadata/src/decorators/api-query.ts b/packages/openapi-metadata/src/decorators/api-query.ts index 18a09449d..a0905e98e 100644 --- a/packages/openapi-metadata/src/decorators/api-query.ts +++ b/packages/openapi-metadata/src/decorators/api-query.ts @@ -1,22 +1,16 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { MetadataKey, SchemaType } from "../types"; +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata/operation-parameter"; -export const ApiQueryMetadataKeyPrefix = "__api_query"; +export type ApiQueryOptions = Omit; -export type ApiQueryOptions = Omit & { - type?: SchemaType; -}; - -export function apiQuery(options: ApiQueryOptions): MethodDecorator { - return Reflect.metadata(`${ApiQueryMetadataKeyPrefix}${options.name}`, options); -} - -export function getApiQueries(target: any, propertyKey: string): ApiQueryOptions[] { - const keys = Reflect.getMetadataKeys(target, propertyKey) as MetadataKey[]; - - return keys - .filter((k) => typeof k === "string" && k.startsWith(ApiQueryMetadataKeyPrefix)) - .map((key) => { - return Reflect.getMetadata(key.toString(), target, propertyKey); - }); +export function ApiQuery(options: ApiQueryOptions) { + return function (target: Object, propertyKey?: string | symbol) { + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "query", ...options }], + propertyKey, + ); + }; } diff --git a/packages/openapi-metadata/src/decorators/api-response.ts b/packages/openapi-metadata/src/decorators/api-response.ts index 7f6cbfd92..0b62ce206 100644 --- a/packages/openapi-metadata/src/decorators/api-response.ts +++ b/packages/openapi-metadata/src/decorators/api-response.ts @@ -1,26 +1,27 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { MetadataKey, SchemaType } from "../types"; +import type { SetOptional } from "type-fest"; +import { + type OperationResponseMetadata, + OperationResponseMetadataStorage, +} from "../metadata/operation-response"; -const ApiResponseMetadataKeyPrefix = "__api_response_"; +export type ApiResponseOptions = SetOptional< + OperationResponseMetadata, + "status" | "mediaType" +>; -export type ApiResponseMetadata = { - status?: number; - type?: SchemaType; -} & Omit; - -export type ApiResponseOptions = ApiResponseMetadata; - -export function apiResponse(options: ApiResponseOptions): MethodDecorator { - const status = options.status ?? "default"; - return Reflect.metadata(`${ApiResponseMetadataKeyPrefix}${status}`, options); -} - -export function getApiResponses(target: any, propertyKey: string): ApiResponseOptions[] { - const keys = Reflect.getMetadataKeys(target, propertyKey) as MetadataKey[]; - - return keys - .filter((k) => typeof k === "string" && k.startsWith(ApiResponseMetadataKeyPrefix)) - .map((key) => { - return Reflect.getMetadata(key.toString(), target, propertyKey); - }); +export function ApiResponse(options: ApiResponseOptions) { + return function (target: Object, propertyKey?: string | symbol) { + const metadata = { + status: "default" as const, + mediaType: "application/json", + ...options, + }; + OperationResponseMetadataStorage.mergeMetadata( + target, + { + [metadata.status.toString()]: metadata, + }, + propertyKey, + ); + }; } diff --git a/packages/openapi-metadata/src/decorators/api-security.ts b/packages/openapi-metadata/src/decorators/api-security.ts new file mode 100644 index 000000000..6785c71ab --- /dev/null +++ b/packages/openapi-metadata/src/decorators/api-security.ts @@ -0,0 +1,29 @@ +import { OperationSecurityMetadataStorage } from "../metadata/operation-security"; + +export function ApiSecurity(name: string, ...scopes: string[]) { + return (target: Object, propertyKey?: string | symbol) => { + OperationSecurityMetadataStorage.mergeMetadata( + target, + { + [name]: scopes, + }, + propertyKey, + ); + }; +} + +export function ApiBasicAuth() { + return ApiSecurity("basic"); +} + +export function ApiBearerAuth() { + return ApiSecurity("bearer"); +} + +export function ApiCookieAuth() { + return ApiSecurity("cookie"); +} + +export function ApiOauth2(...scopes: string[]) { + return ApiSecurity("oauth2", ...scopes); +} diff --git a/packages/openapi-metadata/src/decorators/api-tags.ts b/packages/openapi-metadata/src/decorators/api-tags.ts index e22e3d993..e0db2e12f 100644 --- a/packages/openapi-metadata/src/decorators/api-tags.ts +++ b/packages/openapi-metadata/src/decorators/api-tags.ts @@ -1,12 +1,7 @@ -export const ApiTagsMetadataKey = Symbol("ApiTags"); +import { OperationMetadataStorage } from "../metadata/operation.js"; -export function apiTags(...tags: string[]): ClassDecorator & MethodDecorator { - return Reflect.metadata(ApiTagsMetadataKey, tags); -} - -export function getApiTags(target: any, propertyKey?: string): string[] | undefined { - if (propertyKey) { - return Reflect.getMetadata(ApiTagsMetadataKey, target, propertyKey); - } - return Reflect.getMetadata(ApiTagsMetadataKey, target); +export function ApiTags(...tags: string[]) { + return (target: Object, propertyKey?: string | symbol) => { + OperationMetadataStorage.mergeMetadata(target, { tags }, propertyKey); + }; } diff --git a/packages/openapi-metadata/src/decorators/index.ts b/packages/openapi-metadata/src/decorators/index.ts index 97a6fb419..fcdc6bc0b 100644 --- a/packages/openapi-metadata/src/decorators/index.ts +++ b/packages/openapi-metadata/src/decorators/index.ts @@ -1,7 +1,12 @@ -export * from "./api-body"; -export * from "./api-operation"; -export * from "./api-property"; -export * from "./api-response"; -export * from "./api-tags"; -export * from "./api-param"; -export * from "./api-query"; +export { ApiBody } from "./api-body"; +export { ApiCookie } from "./api-cookie"; +export { ApiHeader } from "./api-header"; +export { ApiOperation } from "./api-operation"; +export { ApiParam } from "./api-param"; +export { ApiProperty, ApiPropertyOptional } from "./api-property"; +export { ApiQuery } from "./api-query"; +export { ApiResponse } from "./api-response"; +export { ApiSecurity } from "./api-security"; +export { ApiTags } from "./api-tags"; +export { ApiExcludeController, ApiExcludeOperation } from "./api-exclude"; +export { ApiExtraModels } from "./api-extra-models"; diff --git a/packages/openapi-metadata/src/errors/invalid-configuration.ts b/packages/openapi-metadata/src/errors/invalid-configuration.ts new file mode 100644 index 000000000..c4c466bfa --- /dev/null +++ b/packages/openapi-metadata/src/errors/invalid-configuration.ts @@ -0,0 +1,7 @@ +export class InvalidConfigurationError extends Error { + constructor(message: string) { + super(`Invalid configuration: ${message}`); + + Object.setPrototypeOf(this, new.target.prototype); + } +} diff --git a/packages/openapi-metadata/src/errors/no-explicit-type.ts b/packages/openapi-metadata/src/errors/no-explicit-type.ts new file mode 100644 index 000000000..36191a60e --- /dev/null +++ b/packages/openapi-metadata/src/errors/no-explicit-type.ts @@ -0,0 +1,21 @@ +export class NoExplicitTypeError extends Error { + constructor( + typeName: string, + propertyKey: string, + parameterIndex?: number, + argName?: string, + ) { + let errorMessage = + "Unable to infer OpenAPI type from TypeScript reflection system. " + + "You need to provide explicit type for "; + if (argName) { + errorMessage += `argument named '${argName}' of `; + } else if (parameterIndex !== undefined) { + errorMessage += `parameter #${parameterIndex} of `; + } + errorMessage += `'${propertyKey}' of '${typeName}' class.`; + super(errorMessage); + + Object.setPrototypeOf(this, new.target.prototype); + } +} diff --git a/packages/openapi-metadata/src/errors/reflect-metadata-missing.ts b/packages/openapi-metadata/src/errors/reflect-metadata-missing.ts new file mode 100644 index 000000000..9d88bb3ea --- /dev/null +++ b/packages/openapi-metadata/src/errors/reflect-metadata-missing.ts @@ -0,0 +1,9 @@ +export class ReflectMetadataMissingError extends Error { + constructor() { + super( + "Looks like you've forgot to provide experimental metadata API polyfill. " + + "Please read the installation instruction for more details.", + ); + Object.setPrototypeOf(this, new.target.prototype); + } +} diff --git a/packages/openapi-metadata/src/errors/symbol-keys-not-supported.ts b/packages/openapi-metadata/src/errors/symbol-keys-not-supported.ts new file mode 100644 index 000000000..6d3232671 --- /dev/null +++ b/packages/openapi-metadata/src/errors/symbol-keys-not-supported.ts @@ -0,0 +1,6 @@ +export class SymbolKeysNotSupportedError extends Error { + constructor() { + super("Symbol keys are not supported yet!"); + Object.setPrototypeOf(this, new.target.prototype); + } +} diff --git a/packages/openapi-metadata/src/fixtures/document-base.ts b/packages/openapi-metadata/src/fixtures/document-base.ts deleted file mode 100644 index 1445f73c0..000000000 --- a/packages/openapi-metadata/src/fixtures/document-base.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; - -export const buildDocumentBase = (): OpenAPIV3.Document => ({ - openapi: "3.0.0", - info: { - title: "", - description: "", - version: "1.0.0", - contact: {}, - }, - tags: [], - servers: [], - paths: {}, - components: { - schemas: {}, - }, -}); diff --git a/packages/openapi-metadata/src/generators/document.ts b/packages/openapi-metadata/src/generators/document.ts new file mode 100644 index 000000000..c19e53cb0 --- /dev/null +++ b/packages/openapi-metadata/src/generators/document.ts @@ -0,0 +1,55 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { OpenAPIDocument, TypeLoaderFn } from "../index"; +import type { Logger } from "../types"; +import type { SetOptional } from "type-fest"; +import { Context } from "../context"; +import { generatePaths } from "./paths"; +import deepmerge from "deepmerge"; + +export type GenerateDocumentOptions = { + /** + * List of Controller constructors that will be loaded into the document. + * + * @example [UsersController, PostsController] + */ + controllers: Function[]; + + /** + * Base document that will be deep merged with the result. + * + * @example { info: { name: "My Api", version: "1.0.0" } } + */ + document: SetOptional; + + /** + * Custom logger. + * + * @example { warn: (message) => myLogger.warn(mesage) } + * @default console + */ + customLogger?: Logger; + + /** + * Additional type loaders. + * + * @example [VineTypeLoader, LuxonTypeLoader] + */ + loaders?: TypeLoaderFn[]; +}; + +/** + * Generates a compliant OpenAPIV3 schema. + */ +export async function generateDocument( + options: GenerateDocumentOptions, +): Promise { + const context = new Context(options.customLogger, options.loaders); + + return deepmerge(options.document, { + openapi: "3.0.0", + paths: await generatePaths(context, options.controllers), + components: { + schemas: context.schemas, + }, + }); +} diff --git a/packages/openapi-metadata/src/generators/operation-body.ts b/packages/openapi-metadata/src/generators/operation-body.ts new file mode 100644 index 000000000..c8fdd001a --- /dev/null +++ b/packages/openapi-metadata/src/generators/operation-body.ts @@ -0,0 +1,19 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { Context } from "../context"; +import type { OperationBodyMetadata } from "../metadata/operation-body"; +import { loadType } from "../loaders/type"; + +export async function generateOperationBody( + context: Context, + metadata: OperationBodyMetadata, +): Promise { + const schema = await loadType(context, metadata); + + return { + content: { + [metadata.mediaType]: { + schema: schema, + }, + }, + }; +} diff --git a/packages/openapi-metadata/src/generators/operation-parameters.ts b/packages/openapi-metadata/src/generators/operation-parameters.ts new file mode 100644 index 000000000..f8c5dca10 --- /dev/null +++ b/packages/openapi-metadata/src/generators/operation-parameters.ts @@ -0,0 +1,16 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { Context } from "../context"; +import type { OperationParameterMetadata } from "../metadata/operation-parameter"; +import { loadType } from "../loaders/type"; + +export async function generateOperationParameters( + context: Context, + metadata: OperationParameterMetadata, +): Promise { + const { schema: s, enum: e, type, ...parameter } = metadata as any; + + return { + ...parameter, + schema: await loadType(context, { type: "string", ...metadata }), + }; +} diff --git a/packages/openapi-metadata/src/generators/operation-response.ts b/packages/openapi-metadata/src/generators/operation-response.ts new file mode 100644 index 000000000..7f14b2814 --- /dev/null +++ b/packages/openapi-metadata/src/generators/operation-response.ts @@ -0,0 +1,21 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { Context } from "../context"; +import type { OperationResponseMetadata } from "../metadata/operation-response"; +import { loadType } from "../loaders/type"; + +export async function generateOperationResponse( + context: Context, + metadata: OperationResponseMetadata, +): Promise { + const { type, schema: s, enum: e, ...response } = metadata as any; + + return { + description: "", + ...response, + content: { + [metadata.mediaType]: { + schema: await loadType(context, metadata), + }, + }, + }; +} diff --git a/packages/openapi-metadata/src/generators/operation.ts b/packages/openapi-metadata/src/generators/operation.ts new file mode 100644 index 000000000..a562f20e9 --- /dev/null +++ b/packages/openapi-metadata/src/generators/operation.ts @@ -0,0 +1,64 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { Context } from "../context"; +import type { OperationMetadata } from "../metadata/operation"; +import { OperationBodyMetadataStorage } from "../metadata/operation-body"; +import { generateOperationBody } from "./operation-body"; +import { OperationParameterMetadataStorage } from "../metadata/operation-parameter"; +import { generateOperationParameters } from "./operation-parameters"; +import { OperationResponseMetadataStorage } from "../metadata/operation-response"; +import { generateOperationResponse } from "./operation-response"; +import { OperationSecurityMetadataStorage } from "../metadata/operation-security"; +import { ExtraModelsMetadataStorage } from "../metadata/extra-models"; +import { loadType } from "../loaders/type"; + +export async function generateOperation( + context: Context, + controller: Function, + propertyKey: string, + { path, methods, ...metadata }: OperationMetadata, +): Promise { + const operation: OpenAPIV3.OperationObject = { ...metadata, responses: {} }; + + const target = controller.prototype; + + const extraModels = ExtraModelsMetadataStorage.getMetadata(target); + + await Promise.all(extraModels.map((m) => loadType(context, { type: m }))); + + const body = OperationBodyMetadataStorage.getMetadata(target, propertyKey); + if (body) { + operation.requestBody = await generateOperationBody(context, body); + } + + const parameters = OperationParameterMetadataStorage.getMetadata( + target, + propertyKey, + ); + operation.parameters = []; + for (const parameter of parameters) { + operation.parameters.push( + await generateOperationParameters(context, parameter), + ); + } + + const responses = OperationResponseMetadataStorage.getMetadata( + target, + propertyKey, + ); + for (const [status, response] of Object.entries(responses)) { + operation.responses[status] = await generateOperationResponse( + context, + response, + ); + } + + const security = OperationSecurityMetadataStorage.getMetadata( + target, + propertyKey, + true, + ); + + operation.security = [security]; + + return operation; +} diff --git a/packages/openapi-metadata/src/generators/paths.ts b/packages/openapi-metadata/src/generators/paths.ts new file mode 100644 index 000000000..679a8270b --- /dev/null +++ b/packages/openapi-metadata/src/generators/paths.ts @@ -0,0 +1,49 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { Context } from "../context"; +import { generateOperation } from "./operation"; +import { ExcludeMetadataStorage, OperationMetadataStorage } from "../metadata"; + +export async function generatePaths( + context: Context, + controllers: Function[], +): Promise { + const paths: OpenAPIV3.PathsObject = {}; + + for (const controller of controllers) { + const target = controller.prototype; + const keys = Object.getOwnPropertyNames(target); + for (const key of keys) { + const metadata = OperationMetadataStorage.getMetadata(target, key); + if (!metadata) { + continue; + } + + if (!metadata.path || !metadata.methods) { + continue; + } + + const excludeController = ExcludeMetadataStorage.getMetadata(target); + if (excludeController === true) { + continue; + } + + for (const method of metadata.methods) { + const excludeOperation = ExcludeMetadataStorage.getMetadata( + target, + key, + ); + + if (excludeOperation === true) { + continue; + } + + paths[metadata.path] = { + ...paths[metadata.path], + [method]: await generateOperation(context, controller, key, metadata), + }; + } + } + } + + return paths; +} diff --git a/packages/openapi-metadata/src/index.ts b/packages/openapi-metadata/src/index.ts index 37b909e72..5c9ea542b 100644 --- a/packages/openapi-metadata/src/index.ts +++ b/packages/openapi-metadata/src/index.ts @@ -1 +1,5 @@ -export * from "./decorators"; +import type { OpenAPIV3 } from "openapi-types"; +export { generateDocument } from "./generators/document"; + +export type { TypeLoaderFn } from "./types"; +export type OpenAPIDocument = OpenAPIV3.Document; diff --git a/packages/openapi-metadata/src/loaders/index.ts b/packages/openapi-metadata/src/loaders/index.ts deleted file mode 100644 index 4436909ad..000000000 --- a/packages/openapi-metadata/src/loaders/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from "./loadApiBody"; -export * from "./loadApiOperation"; -export * from "./loadApiParam"; -export * from "./loadApiProperty"; -export * from "./loadApiQuery"; -export * from "./loadApiResponse"; -export * from "./loadApiTags"; -export * from "./loadControllerOperation"; -export * from "./loadType"; diff --git a/packages/openapi-metadata/src/loaders/loadApiBody.ts b/packages/openapi-metadata/src/loaders/loadApiBody.ts deleted file mode 100644 index 2310e3187..000000000 --- a/packages/openapi-metadata/src/loaders/loadApiBody.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { DocumentBuilder } from "../builders/document-builder"; -import type { OperationBuilder } from "../builders/operation-builder"; -import type { ApiBodyOptions } from "../decorators"; -import { resolveType } from "./loadType"; - -export async function loadApiBody(document: DocumentBuilder, operation: OperationBuilder, apiBody: ApiBodyOptions) { - const { type, isArray, ...rest } = apiBody; - - const schema = type ? await resolveType(document, type) : undefined; - - operation.setRequestBody({ - ...rest, - content: { - "application/json": { - schema, - }, - }, - }); -} diff --git a/packages/openapi-metadata/src/loaders/loadApiOperation.ts b/packages/openapi-metadata/src/loaders/loadApiOperation.ts deleted file mode 100644 index 5fbab8944..000000000 --- a/packages/openapi-metadata/src/loaders/loadApiOperation.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { OperationBuilder } from "../builders/operation-builder"; -import type { ApiOperationOptions } from "../decorators/api-operation"; - -export function loadApiOperation(operation: OperationBuilder, apiOperation: ApiOperationOptions) { - const { pattern, method, ...rest } = apiOperation; - - if (pattern) { - operation.pattern = pattern; - } - - if (method) { - operation.method = method; - } - - operation.merge(rest); -} diff --git a/packages/openapi-metadata/src/loaders/loadApiParam.ts b/packages/openapi-metadata/src/loaders/loadApiParam.ts deleted file mode 100644 index 1cfec7fe0..000000000 --- a/packages/openapi-metadata/src/loaders/loadApiParam.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { DocumentBuilder } from "../builders/document-builder"; -import type { OperationBuilder } from "../builders/operation-builder"; -import type { ApiParamOptions } from "../decorators/api-param"; -import { resolveType } from "./loadType"; - -export async function loadApiParam(document: DocumentBuilder, operation: OperationBuilder, apiParam: ApiParamOptions) { - const { type, ...rest } = apiParam; - - const schema = await resolveType(document, type ?? "string"); - - operation.addParameter({ - in: "path", - schema, - ...rest, - }); -} diff --git a/packages/openapi-metadata/src/loaders/loadApiProperty.ts b/packages/openapi-metadata/src/loaders/loadApiProperty.ts deleted file mode 100644 index 832f8c013..000000000 --- a/packages/openapi-metadata/src/loaders/loadApiProperty.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { DocumentBuilder } from "../builders/document-builder"; -import type { ApiPropertyOptions } from "../decorators/api-property"; -import { resolveType } from "./loadType"; - -export async function loadApiProperty( - document: DocumentBuilder, - schema: OpenAPIV3.SchemaObject, - name: string, - apiProperty: ApiPropertyOptions, -) { - const { type, required, ...rest } = apiProperty; - - const resolved = type ? await resolveType(document, type) : undefined; - - schema.properties = { - ...schema.properties, - [name]: { - ...resolved, - ...rest, - }, - }; - - if (required !== false) { - schema.required = [...(schema.required ?? []), name]; - } -} diff --git a/packages/openapi-metadata/src/loaders/loadApiQuery.ts b/packages/openapi-metadata/src/loaders/loadApiQuery.ts deleted file mode 100644 index 7c5e9f919..000000000 --- a/packages/openapi-metadata/src/loaders/loadApiQuery.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { DocumentBuilder } from "../builders/document-builder"; -import type { OperationBuilder } from "../builders/operation-builder"; -import type { ApiQueryOptions } from "../decorators/api-query"; -import { resolveType } from "./loadType"; - -export async function loadApiQuery(document: DocumentBuilder, operation: OperationBuilder, apiQuery: ApiQueryOptions) { - const { type, ...rest } = apiQuery; - - const schema = await resolveType(document, type ?? "string"); - - operation.addParameter({ - in: "query", - schema, - ...rest, - }); -} diff --git a/packages/openapi-metadata/src/loaders/loadApiResponse.ts b/packages/openapi-metadata/src/loaders/loadApiResponse.ts deleted file mode 100644 index f921c8a76..000000000 --- a/packages/openapi-metadata/src/loaders/loadApiResponse.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { DocumentBuilder } from "../builders/document-builder"; -import type { OperationBuilder } from "../builders/operation-builder"; -import type { ApiResponseOptions } from "../decorators/api-response"; -import { resolveType } from "./loadType"; - -export async function loadApiResponse( - document: DocumentBuilder, - operation: OperationBuilder, - apiResponse: ApiResponseOptions, -) { - const { type, status, ...rest } = apiResponse; - const schema = type ? await resolveType(document, type) : undefined; - - operation.setResponse(status?.toString() ?? "200", { - description: "OK", // TODO: Depends on status, - content: { - "application/json": { - schema, - }, - }, - ...rest, - }); -} diff --git a/packages/openapi-metadata/src/loaders/loadApiTags.ts b/packages/openapi-metadata/src/loaders/loadApiTags.ts deleted file mode 100644 index 16e889aa0..000000000 --- a/packages/openapi-metadata/src/loaders/loadApiTags.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { OperationBuilder } from "../builders/operation-builder"; - -export function loadApiTags(operation: OperationBuilder, apiTags: string[]) { - return operation.addTags(...apiTags); -} diff --git a/packages/openapi-metadata/src/loaders/loadController.ts b/packages/openapi-metadata/src/loaders/loadController.ts deleted file mode 100644 index 5a67fa79a..000000000 --- a/packages/openapi-metadata/src/loaders/loadController.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { DocumentBuilder } from "../builders"; - -export function loadController(document: DocumentBuilder, target: any) {} diff --git a/packages/openapi-metadata/src/loaders/loadControllerOperation.ts b/packages/openapi-metadata/src/loaders/loadControllerOperation.ts deleted file mode 100644 index 147ae7039..000000000 --- a/packages/openapi-metadata/src/loaders/loadControllerOperation.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { DocumentBuilder } from "../builders/document-builder"; -import type { OperationBuilder } from "../builders/operation-builder"; -import { getApiBody } from "../decorators/api-body"; -import { getApiOperation } from "../decorators/api-operation"; -import { getApiParams } from "../decorators/api-param"; -import { getApiQueries } from "../decorators/api-query"; -import { getApiResponses } from "../decorators/api-response"; -import { getApiTags } from "../decorators/api-tags"; -import { loadApiBody } from "./loadApiBody"; -import { loadApiOperation } from "./loadApiOperation"; -import { loadApiParam } from "./loadApiParam"; -import { loadApiQuery } from "./loadApiQuery"; -import { loadApiResponse } from "./loadApiResponse"; -import { loadApiTags } from "./loadApiTags"; - -export async function loadControllerOperation( - document: DocumentBuilder, - operation: OperationBuilder, - target: any, - propertyKey: string, -) { - const globalApiTags = getApiTags(target.constructor); - if (globalApiTags) { - loadApiTags(operation, globalApiTags); - } - - const apiOperation = getApiOperation(target, propertyKey); - if (apiOperation) { - loadApiOperation(operation, apiOperation); - } - - const apiTags = getApiTags(target, propertyKey); - if (apiTags) { - loadApiTags(operation, apiTags); - } - - const apiBody = getApiBody(target, propertyKey); - if (apiBody) { - await loadApiBody(document, operation, apiBody); - } - - const apiResponses = getApiResponses(target, propertyKey); - for (const apiResponse of apiResponses) { - await loadApiResponse(document, operation, apiResponse); - } - - const apiParams = getApiParams(target, propertyKey); - for (const apiParam of apiParams) { - await loadApiParam(document, operation, apiParam); - } - - const apiQueries = getApiQueries(target, propertyKey); - for (const apiQuery of apiQueries) { - await loadApiQuery(document, operation, apiQuery); - } - - const name = target.constructor.name.replace("Controller", ""); - loadApiTags(operation, [name]); -} diff --git a/packages/openapi-metadata/src/loaders/loadType.ts b/packages/openapi-metadata/src/loaders/loadType.ts deleted file mode 100644 index 6d50da3fd..000000000 --- a/packages/openapi-metadata/src/loaders/loadType.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { DocumentBuilder } from "../builders/document-builder"; -import type { SchemaType } from "../types"; - -export async function resolveType( - document: DocumentBuilder, - type: SchemaType, -): Promise { - if (Array.isArray(type)) { - return { - type: "array", - items: await resolveType(document, type[0]), - }; - } - - if (typeof type === "string") { - return { - type: type as OpenAPIV3.NonArraySchemaObjectType, // TODO: Fix that - }; - } - - if (type === String) { - return { - type: "string", - }; - } - - if (type === Number) { - return { - type: "number", - }; - } - - if (type === Boolean) { - return { - type: "boolean", - }; - } - - if (typeof type === "object" && "$ref" in type) { - return type; - } - - return document.resolve(type); -} diff --git a/packages/openapi-metadata/src/loaders/type.ts b/packages/openapi-metadata/src/loaders/type.ts new file mode 100644 index 000000000..92664cc22 --- /dev/null +++ b/packages/openapi-metadata/src/loaders/type.ts @@ -0,0 +1,118 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { Context } from "../context"; +import type { TypeLoaderFn, TypeOptions } from "../types"; +import type { SetRequired } from "type-fest"; +import { getEnumType, getEnumValues } from "../utils/enum"; +import { PropertyMetadataStorage } from "../metadata/property"; +import { schemaPath } from "../utils/schema"; +import { isThunk } from "../utils/metadata"; + +const PrimitiveTypeLoader: TypeLoaderFn = async (_context, value) => { + if (typeof value === "string") { + return { type: value }; + } + + // biome-ignore lint/suspicious/noDoubleEquals: strict comparaison might fail to catch it + if (value == String) { + return { type: "string" }; + } + + // biome-ignore lint/suspicious/noDoubleEquals: strict comparaison might fail to catch it + if (value == Boolean) { + return { type: "boolean" }; + } + + // biome-ignore lint/suspicious/noDoubleEquals: strict comparaison might fail to catch it + if (value == Number) { + return { type: "number" }; + } +}; + +const ClassTypeLoader: TypeLoaderFn = async (context, value) => { + if (typeof value !== "function" || !value.prototype) { + return; + } + + const model = value.name; + + if (context.schemas[model]) { + return { $ref: schemaPath(model) }; + } + + const schema: SetRequired = + { + type: "object", + properties: {}, + required: [], + }; + + const properties = PropertyMetadataStorage.getMetadata(value.prototype); + + if (!properties) { + context.logger.warn( + `You tried to use '${model}' as a type but it does not contain any ApiProperty.`, + ); + + return; + } + + context.schemas[model] = schema; + + for (const [key, property] of Object.entries(properties)) { + const { + required, + type, + name, + enum: e, + schema: s, + ...metadata + } = property as any; + schema.properties[key] = { + ...(await loadType(context, property)), + ...metadata, + }; + + if (property.required) { + schema.required.push(key); + } + } + + return { $ref: schemaPath(model) }; +}; + +export async function loadType( + context: Context, + options: TypeOptions, +): Promise { + if ("schema" in options) { + return options.schema; + } + + if ("enum" in options) { + const enumValues = getEnumValues(options.enum); + const enumType = getEnumType(enumValues); + + return { + type: enumType, + enum: enumValues, + }; + } + + const thunk = isThunk(options.type); + const value = thunk ? (options.type as Function)(context) : options.type; + + for (const loader of [ + PrimitiveTypeLoader, + ...context.typeLoaders, + ClassTypeLoader, + ]) { + const result = await loader(context, value, options.type); + if (result) { + return result; + } + } + + context.logger.warn( + `You tried to use '${options.type.toString()}' as a type but no loader supports it ${thunk}`, + ); +} diff --git a/packages/openapi-metadata/src/metadata/exclude.ts b/packages/openapi-metadata/src/metadata/exclude.ts new file mode 100644 index 000000000..e01fb34ad --- /dev/null +++ b/packages/openapi-metadata/src/metadata/exclude.ts @@ -0,0 +1,8 @@ +import { createMetadataStorage } from "./factory"; + +export const ExcludeMetadataKey = Symbol("Exclude"); + +export const ExcludeMetadataStorage = createMetadataStorage( + ExcludeMetadataKey, + false, +); diff --git a/packages/openapi-metadata/src/metadata/extra-models.ts b/packages/openapi-metadata/src/metadata/extra-models.ts new file mode 100644 index 000000000..3708a242c --- /dev/null +++ b/packages/openapi-metadata/src/metadata/extra-models.ts @@ -0,0 +1,8 @@ +import type { Thunk, TypeValue } from "../types"; +import { createMetadataStorage } from "./factory"; + +export const ExtraModelsMetadataKey = Symbol("ExtraModels"); + +export const ExtraModelsMetadataStorage = createMetadataStorage< + (TypeValue | Thunk)[] +>(ExtraModelsMetadataKey, []); diff --git a/packages/openapi-metadata/src/metadata/factory.ts b/packages/openapi-metadata/src/metadata/factory.ts new file mode 100644 index 000000000..67be62ce2 --- /dev/null +++ b/packages/openapi-metadata/src/metadata/factory.ts @@ -0,0 +1,54 @@ +import deepmerge from "deepmerge"; + +export function createMetadataStorage( + key: Symbol | string, + defaultMetadata?: T, +) { + function defineMetadata( + object: Object, + metadata: T, + propertyKey?: string | symbol, + ) { + if (propertyKey) { + Reflect.defineMetadata(key, metadata, object, propertyKey); + } else { + Reflect.defineMetadata(key, metadata, object); + } + } + + function getMetadata( + object: Object, + propertyKey?: string | symbol, + withParent = false, + ): T { + if (propertyKey) { + let metadata = + Reflect.getMetadata(key, object, propertyKey) ?? defaultMetadata; + + if (withParent) { + metadata = deepmerge(getMetadata(object.constructor), metadata); + } + + return metadata; + } else { + return Reflect.getMetadata(key, object) ?? defaultMetadata; + } + } + + function mergeMetadata( + object: Object, + metadata: T, + propertyKey?: string | symbol, + ): T { + const existing = getMetadata(object, propertyKey); + const merged = deepmerge(existing, metadata) as T; + defineMetadata(object, merged, propertyKey); + return merged; + } + + return { + defineMetadata, + getMetadata, + mergeMetadata, + }; +} diff --git a/packages/openapi-metadata/src/metadata/index.ts b/packages/openapi-metadata/src/metadata/index.ts new file mode 100644 index 000000000..f4089eb58 --- /dev/null +++ b/packages/openapi-metadata/src/metadata/index.ts @@ -0,0 +1,9 @@ +export * from "./operation-body"; +export * from "./operation-header"; +export * from "./operation-parameter"; +export * from "./operation-response"; +export * from "./operation-security"; +export * from "./operation"; +export * from "./property"; +export * from "./exclude"; +export * from "./extra-models"; diff --git a/packages/openapi-metadata/src/metadata/operation-body.ts b/packages/openapi-metadata/src/metadata/operation-body.ts new file mode 100644 index 000000000..855b8b34b --- /dev/null +++ b/packages/openapi-metadata/src/metadata/operation-body.ts @@ -0,0 +1,13 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { TypeOptions } from "../types"; +import { createMetadataStorage } from "./factory"; + +export type OperationBodyMetadata = Omit< + OpenAPIV3.RequestBodyObject, + "content" +> & { mediaType: string } & TypeOptions; + +export const OperationBodyMetadataKey = Symbol("OperationBody"); + +export const OperationBodyMetadataStorage = + createMetadataStorage(OperationBodyMetadataKey); diff --git a/packages/openapi-metadata/src/metadata/operation-header.ts b/packages/openapi-metadata/src/metadata/operation-header.ts new file mode 100644 index 000000000..6d1d2578b --- /dev/null +++ b/packages/openapi-metadata/src/metadata/operation-header.ts @@ -0,0 +1,13 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { TypeOptions } from "../types"; +import { createMetadataStorage } from "./factory"; + +export type OperationHeaderMetadata = Omit & { + name: string; +} & Partial; + +export const OperationHeaderSymbol = Symbol("OperationHeader"); + +export const OperationHeaderMetadataStorage = createMetadataStorage< + Record +>(OperationHeaderSymbol); diff --git a/packages/openapi-metadata/src/metadata/operation-parameter.ts b/packages/openapi-metadata/src/metadata/operation-parameter.ts new file mode 100644 index 000000000..a5877a74d --- /dev/null +++ b/packages/openapi-metadata/src/metadata/operation-parameter.ts @@ -0,0 +1,17 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { TypeOptions } from "../types"; +import { createMetadataStorage } from "./factory"; + +export type OperationParameterMetadata = Omit< + OpenAPIV3.ParameterObject, + "in" | "schema" +> & { + name: string; + in: "path" | "query" | "header" | "cookie"; +} & Partial; + +export const OperationParameterMetadataKey = Symbol("OperationParameter"); + +export const OperationParameterMetadataStorage = createMetadataStorage< + OperationParameterMetadata[] +>(OperationParameterMetadataKey, []); diff --git a/packages/openapi-metadata/src/metadata/operation-response.ts b/packages/openapi-metadata/src/metadata/operation-response.ts new file mode 100644 index 000000000..99fb2f8ad --- /dev/null +++ b/packages/openapi-metadata/src/metadata/operation-response.ts @@ -0,0 +1,18 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { TypeOptions } from "../types"; +import type { SetOptional } from "type-fest"; +import { createMetadataStorage } from "./factory"; + +export type OperationResponseMetadata = Omit< + SetOptional, + "content" +> & { + status: number | "default"; + mediaType: string; +} & TypeOptions; + +export const OperationResponseMetadataKey = Symbol("OperationResponse"); + +export const OperationResponseMetadataStorage = createMetadataStorage< + Record +>(OperationResponseMetadataKey, {}); diff --git a/packages/openapi-metadata/src/metadata/operation-security.ts b/packages/openapi-metadata/src/metadata/operation-security.ts new file mode 100644 index 000000000..4bb2e7abc --- /dev/null +++ b/packages/openapi-metadata/src/metadata/operation-security.ts @@ -0,0 +1,11 @@ +import type { OpenAPIV3 } from "openapi-types"; +import { createMetadataStorage } from "./factory"; + +export type OperationSecurityMetadata = OpenAPIV3.SecurityRequirementObject; + +export const OperationSecurityMetadataKey = Symbol("OperationSecurity"); + +export const OperationSecurityMetadataStorage = + createMetadataStorage( + OperationSecurityMetadataKey, + ); diff --git a/packages/openapi-metadata/src/metadata/operation.ts b/packages/openapi-metadata/src/metadata/operation.ts new file mode 100644 index 000000000..c41810ec5 --- /dev/null +++ b/packages/openapi-metadata/src/metadata/operation.ts @@ -0,0 +1,13 @@ +import type { OpenAPIV3 } from "openapi-types"; +import type { HttpMethods } from "../types"; +import { createMetadataStorage } from "./factory"; + +export type OperationMetadata = Omit & { + path?: string; + methods?: HttpMethods[]; +}; + +export const OperationMetadataKey = Symbol("Operation"); + +export const OperationMetadataStorage = + createMetadataStorage(OperationMetadataKey, {}); diff --git a/packages/openapi-metadata/src/metadata/property.ts b/packages/openapi-metadata/src/metadata/property.ts new file mode 100644 index 000000000..6c892ccc0 --- /dev/null +++ b/packages/openapi-metadata/src/metadata/property.ts @@ -0,0 +1,12 @@ +import type { TypeOptions } from "../types"; +import { createMetadataStorage } from "./factory"; + +export type PropertyMetadata = { + name: string; + required: boolean; +} & TypeOptions; + +export const PropertyMetadataKey = Symbol("Property"); + +export const PropertyMetadataStorage = + createMetadataStorage>(PropertyMetadataKey); diff --git a/packages/openapi-metadata/src/resolvers/index.ts b/packages/openapi-metadata/src/resolvers/index.ts deleted file mode 100644 index a510488ea..000000000 --- a/packages/openapi-metadata/src/resolvers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./type-resolver"; -export { ModelType } from "./model-resolver"; diff --git a/packages/openapi-metadata/src/resolvers/model-resolver.ts b/packages/openapi-metadata/src/resolvers/model-resolver.ts deleted file mode 100644 index ae25152be..000000000 --- a/packages/openapi-metadata/src/resolvers/model-resolver.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import { TypeResolver } from "./type-resolver"; -import { getApiProperties } from "../decorators/api-property"; -import { loadApiProperty } from "../loaders"; -import type { DocumentBuilder } from "../builders"; - -export class ModelTypeResolver extends TypeResolver { - constructor(private readonly type: any) { - super(); - } - - public name(): string { - return this.type.name; - } - - public async schema(document: DocumentBuilder): Promise { - const schema: OpenAPIV3.SchemaObject = { - type: "object", - }; - - const properties = getApiProperties(this.type.prototype); - - for (const [name, apiProperty] of Object.entries(properties)) { - loadApiProperty(document, schema, name, apiProperty); - } - - return schema; - } - - public static supports(type: any): boolean { - return true; - } -} - -export function ModelType(type: any) { - return new ModelTypeResolver(type); -} diff --git a/packages/openapi-metadata/src/resolvers/type-resolver.ts b/packages/openapi-metadata/src/resolvers/type-resolver.ts deleted file mode 100644 index f37b17833..000000000 --- a/packages/openapi-metadata/src/resolvers/type-resolver.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { OpenAPIV3 } from "openapi-types"; -import type { DocumentBuilder } from "../builders"; - -export abstract class TypeResolver { - public abstract name(): string; - public abstract schema(document: DocumentBuilder): Promise; - - public static supports(type: any): boolean { - return false; - } -} diff --git a/packages/openapi-metadata/src/types.ts b/packages/openapi-metadata/src/types.ts index 752a95ffb..767650438 100644 --- a/packages/openapi-metadata/src/types.ts +++ b/packages/openapi-metadata/src/types.ts @@ -1,18 +1,31 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { TypeResolver } from "./resolvers"; +import type { Context } from "./context"; -export interface Type extends Function { - new (...args: any[]): T; -} +export type HttpMethods = `${OpenAPIV3.HttpMethods}`; -export type MetadataKey = string | Symbol; +export type PrimitiveType = OpenAPIV3.NonArraySchemaObjectType; -export type SchemaType = - | Type - | TypeResolver - | OpenAPIV3.NonArraySchemaObjectType - | OpenAPIV3.ReferenceObject - | any - | {}; +export type TypeValue = Function | PrimitiveType; +export type Thunk = (context: Context) => T; +export type EnumTypeValue = string[] | number[] | Record; -export type Resolver = (target: any) => OpenAPIV3.SchemaObject | false; +export type Logger = { + warn: (typeof console)["warn"]; +}; + +export type TypeOptions = + | { + type: Thunk | TypeValue; + } + | { + schema: OpenAPIV3.SchemaObject; + } + | { + enum: EnumTypeValue; + }; + +export type TypeLoaderFn = ( + context: Context, + value: TypeValue, + original: Thunk | TypeValue, +) => Promise; diff --git a/packages/openapi-metadata/src/ui/index.ts b/packages/openapi-metadata/src/ui/index.ts index c9b39ccbf..380e32cb6 100644 --- a/packages/openapi-metadata/src/ui/index.ts +++ b/packages/openapi-metadata/src/ui/index.ts @@ -1 +1,3 @@ -export * from "./scalar"; +export { generateScalarUI } from "./scalar"; +export { generateSwaggerUI } from "./swagger"; +export { generateRapidocUI } from "./rapidoc"; diff --git a/packages/openapi-metadata/src/ui/rapidoc.ts b/packages/openapi-metadata/src/ui/rapidoc.ts new file mode 100644 index 000000000..442267e6f --- /dev/null +++ b/packages/openapi-metadata/src/ui/rapidoc.ts @@ -0,0 +1,39 @@ +export function generateRapidocUI(url: string) { + return ` + + + + + + Documentation + + + + + + + `; +} diff --git a/packages/openapi-metadata/src/ui/swagger.ts b/packages/openapi-metadata/src/ui/swagger.ts new file mode 100644 index 000000000..71a76d037 --- /dev/null +++ b/packages/openapi-metadata/src/ui/swagger.ts @@ -0,0 +1,43 @@ +export type GenerateSwaggerUIOptions = { + persistAuthorization?: boolean; +}; + +export function generateSwaggerUI( + url: string, + options?: GenerateSwaggerUIOptions, +) { + const swaggerOptions = { + url, + ...options, + }; + + return ` + + + + + + + + + Documentation + + +
+ + + `; +} diff --git a/packages/openapi-metadata/src/utils/deepmerge.ts b/packages/openapi-metadata/src/utils/deepmerge.ts deleted file mode 100644 index c6cf0b8c2..000000000 --- a/packages/openapi-metadata/src/utils/deepmerge.ts +++ /dev/null @@ -1,6 +0,0 @@ -import deepmergeBase from "@fastify/deepmerge"; - -export function deepmerge(target: T, source: Partial): T { - const dm = deepmergeBase(); - return dm(target, source) as T; -} diff --git a/packages/openapi-metadata/src/utils/enum.ts b/packages/openapi-metadata/src/utils/enum.ts new file mode 100644 index 000000000..bd3495e7a --- /dev/null +++ b/packages/openapi-metadata/src/utils/enum.ts @@ -0,0 +1,31 @@ +import type { EnumTypeValue } from "../types"; + +export function getEnumType(values: (string | number)[]): "string" | "number" { + return values.some((v) => typeof v === "string") ? "string" : "number"; +} + +export function getEnumValues(enumType: EnumTypeValue) { + if (Array.isArray(enumType)) { + return enumType; + } + + // Enums with numeric values + // enum Size { + // SMALL = 1, + // BIG = 2 + // } + // are transpiled to include a reverse mapping + // const Size = { + // "1": "SMALL", + // "2": "BIG", + // "SMALL": 1, + // "BIG": 2, + // } + const numericValues = Object.values(enumType) + .filter((value) => typeof value === "number") + .map((value: any) => value.toString()); + + return Object.keys(enumType) + .filter((key) => !numericValues.includes(key)) + .map((key) => enumType[key as any]) as (string | number)[]; +} diff --git a/packages/openapi-metadata/src/utils/metadata.ts b/packages/openapi-metadata/src/utils/metadata.ts index ee4513578..a9492e303 100644 --- a/packages/openapi-metadata/src/utils/metadata.ts +++ b/packages/openapi-metadata/src/utils/metadata.ts @@ -1,13 +1,62 @@ -import type { Type } from "../types"; +import type { Context } from "../context.js"; +import type { TypeValue } from "../types.js"; +import { NoExplicitTypeError } from "../errors/no-explicit-type.js"; +import { ReflectMetadataMissingError } from "../errors/reflect-metadata-missing.js"; -export function getMetadataPropertyType( - target: any, - propertyKey: string | symbol, - descriptor?: PropertyDescriptor, -): Type | undefined { - if (descriptor?.get || descriptor?.value) { - return Reflect.getMetadata("design:returntype", target, propertyKey); +export function ensureReflectMetadataExists() { + if ( + typeof Reflect !== "object" || + typeof Reflect.getMetadata !== "function" + ) { + throw new ReflectMetadataMissingError(); + } +} + +export type MetadataKey = + | "design:type" + | "design:returntype" + | "design:paramtypes"; + +export type FindTypeOptions = { + context: Context; + metadataKey: MetadataKey; + prototype: Object; + propertyKey: string; +}; + +export function findType({ + metadataKey, + prototype, + propertyKey, +}: FindTypeOptions) { + ensureReflectMetadataExists(); + const reflectedType: Function | undefined = Reflect.getMetadata( + metadataKey, + prototype, + propertyKey, + ); + + if (!reflectedType) { + throw new NoExplicitTypeError(prototype.constructor.name, propertyKey); + } + + return reflectedType; +} + +const IS_THUNK_REG = /.+=>[\w\d\s\t\n\r]*/; + +export function isThunk(value: any): boolean { + if (typeof value !== "function") { + return false; + } + + return Boolean(IS_THUNK_REG.exec(value)); +} + +export function typeToString(value: TypeValue) { + if (typeof value === "function") { + return value.name; } - return Reflect.getMetadata("design:type", target, propertyKey); + return value.toString(); } diff --git a/packages/openapi-metadata/src/utils/schema.ts b/packages/openapi-metadata/src/utils/schema.ts new file mode 100644 index 000000000..ef1dfb0b3 --- /dev/null +++ b/packages/openapi-metadata/src/utils/schema.ts @@ -0,0 +1,4 @@ +export function schemaPath(model: string | Function): string { + const modelName = typeof model === "string" ? model : model.name; + return `#/components/schemas/${modelName}`; +} diff --git a/packages/openapi-metadata/test/decorators.test.ts b/packages/openapi-metadata/test/decorators.test.ts index 491b4402d..59750b68d 100644 --- a/packages/openapi-metadata/test/decorators.test.ts +++ b/packages/openapi-metadata/test/decorators.test.ts @@ -1,132 +1,233 @@ import "reflect-metadata"; import { - apiBody, - apiOperation, - apiParam, - apiProperty, - apiQuery, - apiResponse, - apiTags, - getApiBody, - getApiOperation, - getApiParams, - getApiProperties, - getApiQueries, - getApiResponses, - getApiTags, + ApiBody, + ApiCookie, + ApiExcludeController, + ApiExcludeOperation, + ApiExtraModels, + ApiHeader, + ApiOperation, + ApiParam, + ApiQuery, + ApiResponse, + ApiSecurity, + ApiTags, } from "../src/decorators"; +import { + ExcludeMetadataStorage, + ExtraModelsMetadataStorage, + OperationBodyMetadataStorage, + OperationMetadataStorage, + OperationParameterMetadataStorage, + OperationResponseMetadataStorage, + OperationSecurityMetadataStorage, +} from "../src/metadata"; +import { + ApiBasicAuth, + ApiBearerAuth, + ApiCookieAuth, + ApiOauth2, +} from "../src/decorators/api-security"; + +test("@ApiOperation", () => { + class MyController { + @ApiOperation({ summary: "Hello", path: "/test", methods: ["get"] }) + operation() {} + } + + const metadata = OperationMetadataStorage.getMetadata( + MyController.prototype, + "operation", + ); + + expect(metadata).toEqual({ + summary: "Hello", + path: "/test", + methods: ["get"], + }); +}); + +test("@ApiBody", () => { + class MyController { + @ApiBody({ type: "string" }) + operation() {} + } -describe("decorators", () => { - describe("apiBody", () => { - it("should apply decorator properly", () => { - class TestController { - @apiBody({ type: "string" }) - public index() {} - } + const metadata = OperationBodyMetadataStorage.getMetadata( + MyController.prototype, + "operation", + ); - expect(getApiBody(TestController.prototype, "index")).toEqual({ type: "string" }); - }); + expect(metadata).toEqual({ + type: "string", + mediaType: "application/json", }); +}); - describe("apiOperation", () => { - it("should apply decorator properly", () => { - class TestController { - @apiOperation({ summary: "TEST", tags: ["Test"] }) - public index() {} - } +test("@ApiParam", () => { + @ApiParam({ name: "test" }) + class MyController { + @ApiParam({ name: "hello" }) + operation() {} + } + + const metadata = OperationParameterMetadataStorage.getMetadata( + MyController.prototype, + "operation", + true, + ); + + expect(metadata).toEqual([ + { in: "path", name: "test" }, + { in: "path", name: "hello" }, + ]); +}); - expect(getApiOperation(TestController.prototype, "index")).toEqual({ summary: "TEST", tags: ["Test"] }); - }); - }); +test("@ApiHeader", () => { + @ApiHeader({ name: "test" }) + class MyController { + @ApiHeader({ name: "hello" }) + operation() {} + } + + const metadata = OperationParameterMetadataStorage.getMetadata( + MyController.prototype, + "operation", + true, + ); + + expect(metadata).toEqual([ + { in: "header", name: "test" }, + { in: "header", name: "hello" }, + ]); +}); - describe("apiParam", () => { - it("should apply decorator properly", () => { - class TestController { - @apiParam({ name: "test", type: "string" }) - @apiParam({ name: "hello" }) - public index() {} - } - - const apiParams = getApiParams(TestController.prototype, "index"); - expect(apiParams).toContainEqual({ name: "test", type: "string" }); - expect(apiParams).toContainEqual({ name: "hello" }); - }); - }); +test("@ApiCookie", () => { + @ApiCookie({ name: "test" }) + class MyController { + @ApiCookie({ name: "hello" }) + operation() {} + } + + const metadata = OperationParameterMetadataStorage.getMetadata( + MyController.prototype, + "operation", + true, + ); + + expect(metadata).toEqual([ + { in: "cookie", name: "test" }, + { in: "cookie", name: "hello" }, + ]); +}); - describe("apiProperty", () => { - it("should apply decorator properly", () => { - class User { - @apiProperty({ type: String }) - exampleProperty = "test"; - - @apiProperty() - declare exampleDeclared: number; - - @apiProperty() - public exampleMethod(): string { - return this.exampleProperty; - } - - @apiProperty() - public get exampleGetter(): number { - return this.exampleDeclared; - } - } - - expect(getApiProperties(User.prototype)).toEqual({ - exampleProperty: { type: String }, - exampleDeclared: { type: Number }, - exampleMethod: { type: String }, - exampleGetter: { type: Number }, - }); - }); - }); +test("@ApiQuery", () => { + @ApiQuery({ name: "test" }) + class MyController { + @ApiQuery({ name: "hello" }) + operation() {} + } + + const metadata = OperationParameterMetadataStorage.getMetadata( + MyController.prototype, + "operation", + true, + ); + + expect(metadata).toEqual([ + { in: "query", name: "test" }, + { in: "query", name: "hello" }, + ]); +}); - describe("apiQuery", () => { - it("should apply decorator properly", () => { - class TestController { - @apiQuery({ name: "query" }) - @apiQuery({ name: "filter" }) - public index() {} - } - - const apiQueries = getApiQueries(TestController.prototype, "index"); - expect(apiQueries).toContainEqual({ name: "query" }); - expect(apiQueries).toContainEqual({ name: "filter" }); - }); +test("@ApiResponse", () => { + @ApiResponse({ type: "string", mediaType: "text/html" }) + class MyController { + @ApiResponse({ status: 404, type: "number" }) + operation() {} + } + + const metadata = OperationResponseMetadataStorage.getMetadata( + MyController.prototype, + "operation", + true, + ); + + expect(metadata).toEqual({ + default: { status: "default", mediaType: "text/html", type: "string" }, + "404": { status: 404, mediaType: "application/json", type: "number" }, }); +}); + +test("@ApiTags", () => { + @ApiTags("Root") + class MyController { + @ApiTags("Hello", "World") + operation() {} + } + + const metadata = OperationMetadataStorage.getMetadata( + MyController.prototype, + "operation", + true, + ); + + expect(metadata.tags).toEqual(["Root", "Hello", "World"]); +}); - describe("apiResponse", () => { - it("should apply decorator properly", () => { - class TestController { - @apiResponse({ status: 200, type: String }) - @apiResponse({ status: 400 }) - public index() {} - } - - const apiResponses = getApiResponses(TestController.prototype, "index"); - expect(apiResponses).toContainEqual({ status: 200, type: String }); - expect(apiResponses).toContainEqual({ status: 400 }); - }); +test("@ApiSecurity", () => { + @ApiBasicAuth() + @ApiCookieAuth() + class MyController { + @ApiSecurity("custom") + @ApiBearerAuth() + @ApiOauth2("pets:write") + operation() {} + } + + const metadata = OperationSecurityMetadataStorage.getMetadata( + MyController.prototype, + "operation", + true, + ); + + expect(metadata).toEqual({ + custom: [], + cookie: [], + basic: [], + bearer: [], + oauth2: ["pets:write"], }); +}); + +test("@ApiExcludeController", () => { + @ApiExcludeController() + class MyController {} + + const metadata = ExcludeMetadataStorage.getMetadata(MyController); + expect(metadata).toBe(true); +}); - describe("apiTags", () => { - it("should apply decorator on methods", () => { - class TestController { - @apiTags("test") - public index() {} - } +test("@ApiExcludeOperation", () => { + class MyController { + @ApiExcludeOperation() + operation() {} + } + + const metadata = ExcludeMetadataStorage.getMetadata( + MyController.prototype, + "operation", + ); + expect(metadata).toBe(true); +}); - expect(getApiTags(TestController.prototype, "index")).toContainEqual("test"); - }); +test("@ApiExtraModels", () => { + @ApiExtraModels("string") + class MyController { + operation() {} + } - it("should apply decorator on classes", () => { - @apiTags("test") - class TestController { - public index() {} - } + const metadata = ExtraModelsMetadataStorage.getMetadata(MyController); - expect(getApiTags(TestController)).toContainEqual("test"); - }); - }); + expect(metadata).toEqual(["string"]); }); diff --git a/packages/openapi-metadata/test/loaders.test.ts b/packages/openapi-metadata/test/loaders.test.ts deleted file mode 100644 index 950bd3108..000000000 --- a/packages/openapi-metadata/test/loaders.test.ts +++ /dev/null @@ -1,342 +0,0 @@ -import "reflect-metadata"; -import { DocumentBuilder } from "../src/builders/document-builder"; -import { OperationBuilder } from "../src/builders/operation-builder"; -import { loadApiBody } from "../src/loaders/loadApiBody"; -import { loadApiOperation } from "../src/loaders/loadApiOperation"; -import { loadApiParam } from "../src/loaders/loadApiParam"; -import { loadApiProperty } from "../src/loaders/loadApiProperty"; -import { loadApiQuery } from "../src/loaders/loadApiQuery"; -import { loadApiResponse } from "../src/loaders/loadApiResponse"; -import { loadApiTags } from "../src/loaders/loadApiTags"; -import { resolveType } from "../src/loaders/loadType"; -import type { OpenAPIV3 } from "openapi-types"; -import { apiBody, apiOperation, apiParam, apiQuery, apiResponse, apiTags } from "../src"; -import { loadControllerOperation } from "../src/loaders"; - -describe("loaders", () => { - describe("loadApiBody", () => { - it("should properly enrich operation", async () => { - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadApiBody(document, operation, { - type: "string", - }); - - expect(operation.build().requestBody).toEqual({ - content: { - "application/json": { - schema: { - type: "string", - }, - }, - }, - }); - }); - }); - - describe("loadApiOperation", () => { - it("should properly enrich operation", () => { - const operation = new OperationBuilder(); - - loadApiOperation(operation, { - summary: "Test summary", - }); - - expect(operation.build()).toEqual({ - summary: "Test summary", - responses: {}, - }); - }); - - it("should properly merge tags", () => { - const operation = new OperationBuilder().addTags("Hello"); - - loadApiOperation(operation, { - tags: ["World"], - }); - - expect(operation.build()).toEqual({ - tags: ["Hello", "World"], - responses: {}, - }); - }); - - it("should override method and pattern", () => { - const operation = new OperationBuilder(); - operation.pattern = "/nop"; - operation.method = "post"; - - loadApiOperation(operation, { - method: "get", - pattern: "/users", - }); - - expect(operation.method).toBe("get"); - expect(operation.pattern).toBe("/users"); - }); - }); - - describe("loadApiParam", () => { - it("should properly enrich operation", async () => { - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadApiParam(document, operation, { - name: "userId", - }); - - await loadApiParam(document, operation, { - name: "collectionId", - type: "number", - }); - - const parameters = operation.build().parameters; - expect(parameters).toContainEqual({ name: "userId", in: "path", schema: { type: "string" } }); - expect(parameters).toContainEqual({ name: "collectionId", in: "path", schema: { type: "number" } }); - }); - }); - - describe("loadApiProperty", () => { - it("should properly enrich schema", async () => { - const document = new DocumentBuilder(); - const schema: OpenAPIV3.SchemaObject = {}; - - await loadApiProperty(document, schema, "id", {}); - await loadApiProperty(document, schema, "name", { type: "string" }); - await loadApiProperty(document, schema, "notRequired", { type: "number", required: false }); - - expect(schema.required).toContainEqual("id"); - expect(schema.required).toContainEqual("name"); - expect(schema.required).not.toContainEqual("notRequired"); - - expect(schema.properties?.id).toEqual({}); - expect(schema.properties?.name).toEqual({ type: "string" }); - expect(schema.properties?.notRequired).toEqual({ type: "number" }); - }); - }); - - describe("loadApiQuery", () => { - it("should properly enrich operation", async () => { - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadApiQuery(document, operation, { - name: "userId", - }); - - await loadApiQuery(document, operation, { - name: "collectionId", - type: "number", - }); - - const parameters = operation.build().parameters; - expect(parameters).toContainEqual({ name: "userId", in: "query", schema: { type: "string" } }); - expect(parameters).toContainEqual({ name: "collectionId", in: "query", schema: { type: "number" } }); - }); - }); - - describe("loadApiResponse", () => { - it("should properly enrich operation", async () => { - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadApiResponse(document, operation, { - status: 200, - type: "string", - }); - - await loadApiResponse(document, operation, { - status: 500, - type: "number", - }); - - const responses = operation.build().responses; - expect(responses[200]).toEqual({ - description: "OK", - content: { - "application/json": { - schema: { - type: "string", - }, - }, - }, - }); - - expect(responses[500]).toEqual({ - description: "OK", // TODO: Wrong description - content: { - "application/json": { - schema: { - type: "number", - }, - }, - }, - }); - }); - }); - - describe("loadApiTags", () => { - it("should properly enrich operation", () => { - const operation = new OperationBuilder(); - - loadApiTags(operation, ["hello"]); - - const tags = operation.build().tags; - - expect(tags).toContain("hello"); - }); - }); - - describe("loadType", () => { - it("should accept string types", async () => { - const document = new DocumentBuilder(); - expect(await resolveType(document, "boolean")).toEqual({ type: "boolean" }); - expect(await resolveType(document, "integer")).toEqual({ type: "integer" }); - expect(await resolveType(document, "number")).toEqual({ type: "number" }); - expect(await resolveType(document, "string")).toEqual({ type: "string" }); - }); - - it("should accept schema reference", async () => { - const document = new DocumentBuilder(); - expect(await resolveType(document, { $ref: "#/components/schemas/User" })).toEqual({ - $ref: "#/components/schemas/User", - }); - }); - - it("should accept function types", async () => { - const document = new DocumentBuilder(); - expect(await resolveType(document, Boolean)).toEqual({ type: "boolean" }); - expect(await resolveType(document, Number)).toEqual({ type: "number" }); - expect(await resolveType(document, String)).toEqual({ type: "string" }); - }); - - it("should properly resolve array", async () => { - const document = new DocumentBuilder(); - expect(await resolveType(document, [Boolean])).toEqual({ type: "array", items: { type: "boolean" } }); - }); - }); -}); - -// TODO: Move (and maybe rename) this elsewhere as it is different of other loaders -describe("loadController", () => { - it("should load apiOperation", async () => { - class UsersController { - @apiOperation({ - method: "post", - pattern: "/users", - }) - public create() {} - } - - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadControllerOperation(document, operation, UsersController.prototype, "create"); - - expect(operation.pattern).toBe("/users"); - expect(operation.method).toBe("post"); - }); - - it("should load tags", async () => { - @apiTags("Hello") - class UsersController { - @apiOperation({ - method: "post", - pattern: "/users", - }) - @apiTags("World") - public create() {} - } - - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadControllerOperation(document, operation, UsersController.prototype, "create"); - const res = operation.build(); - - expect(res.tags).toContain("Hello"); - expect(res.tags).toContain("World"); - }); - - it("should load apiBody", async () => { - class UsersController { - @apiOperation({ - method: "post", - pattern: "/users", - }) - @apiBody({ type: String }) - public create() {} - } - - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadControllerOperation(document, operation, UsersController.prototype, "create"); - - const res: any = operation.build(); - - expect(res.requestBody.content["application/json"].schema).toBeDefined(); - }); - - it("should load apiResponse", async () => { - class UsersController { - @apiOperation({ - method: "post", - pattern: "/users", - }) - @apiResponse({ type: String }) - public create() {} - } - - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadControllerOperation(document, operation, UsersController.prototype, "create"); - - const res: any = operation.build(); - - expect(res.responses[200].content["application/json"].schema).toBeDefined(); - }); - - it("should load apiParam", async () => { - class UsersController { - @apiOperation({ - method: "post", - pattern: "/users", - }) - @apiParam({ name: "userId", type: String }) - @apiParam({ name: "testId", type: String }) - public create() {} - } - - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadControllerOperation(document, operation, UsersController.prototype, "create"); - - const res: any = operation.build(); - - expect(res.parameters).toHaveLength(2); - }); - - it("should load apiQuery", async () => { - class UsersController { - @apiOperation({ - method: "post", - pattern: "/users", - }) - @apiQuery({ name: "filter", type: String }) - public create() {} - } - - const document = new DocumentBuilder(); - const operation = new OperationBuilder(); - - await loadControllerOperation(document, operation, UsersController.prototype, "create"); - - const res: any = operation.build(); - - expect(res.parameters).toHaveLength(1); - }); -}); diff --git a/packages/openapi-metadata/test/utils/metadata.test.ts b/packages/openapi-metadata/test/utils/metadata.test.ts new file mode 100644 index 000000000..9bd238511 --- /dev/null +++ b/packages/openapi-metadata/test/utils/metadata.test.ts @@ -0,0 +1,20 @@ +import { isThunk } from "../../src/utils/metadata"; + +test("isThunk", () => { + expect(isThunk(() => true)).toBe(true); + expect(isThunk(true)).toBe(false); + expect(isThunk(() => ({ hello: "world" }))).toBe(true); + + const data = { type: () => "string" }; + expect(isThunk(data.type)).toBe(true); + + class User {} + expect(isThunk(User)).toBe(false); + expect(isThunk(() => User)).toBe(true); + + expect( + isThunk(() => { + return "TESTEST"; + }), + ).toBe(true); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f966f6b16..e6da1ca68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,107 +48,6 @@ importers: specifier: 1.3.2 version: 1.3.2(@algolia/client-search@4.23.3)(@types/node@22.9.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3) - packages/openapi-adonis: - dependencies: - '@fastify/deepmerge': - specifier: ^2.0.0 - version: 2.0.0 - '@vinejs/vine': - specifier: ^2.1.0 - version: 2.1.0 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - openapi-metadata: - specifier: workspace:^ - version: link:../openapi-metadata - openapi-types: - specifier: ^12.1.3 - version: 12.1.3 - reflect-metadata: - specifier: ^0.2.2 - version: 0.2.2 - devDependencies: - '@adonisjs/core': - specifier: ^6.12.1 - version: 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.6.3))(@vinejs/vine@2.1.0) - '@adonisjs/http-server': - specifier: ^7.2.3 - version: 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) - '@types/lodash': - specifier: ^4.17.7 - version: 4.17.7 - '@types/node': - specifier: ^22.1.0 - version: 22.9.0 - '@vitest/coverage-v8': - specifier: ^2.0.5 - version: 2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))) - tsup: - specifier: ^8.2.4 - version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1) - typescript: - specifier: ^5.4.5 - version: 5.6.3 - unplugin-swc: - specifier: ^1.5.1 - version: 1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0) - - packages/openapi-adonis/example: - dependencies: - '@adonisjs/auth': - specifier: ^9.2.3 - version: 9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/plugin-adonisjs@3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2)) - '@adonisjs/core': - specifier: ^6.12.1 - version: 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) - '@adonisjs/cors': - specifier: ^2.2.1 - version: 2.2.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)) - '@adonisjs/lucid': - specifier: ^21.1.0 - version: 21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0) - '@vinejs/vine': - specifier: ^2.1.0 - version: 2.1.0 - luxon: - specifier: ^3.5.0 - version: 3.5.0 - openapi-adonis: - specifier: workspace:^ - version: link:.. - reflect-metadata: - specifier: ^0.2.2 - version: 0.2.2 - devDependencies: - '@adonisjs/assembler': - specifier: ^7.7.0 - version: 7.8.2(typescript@5.4.5) - '@adonisjs/http-server': - specifier: ^7.2.3 - version: 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) - '@adonisjs/tsconfig': - specifier: ^1.3.0 - version: 1.4.0 - '@swc/core': - specifier: ^1.6.5 - version: 1.7.4(@swc/helpers@0.5.13) - '@types/node': - specifier: ^20.14.9 - version: 20.14.14 - hot-hook: - specifier: ^0.2.6 - version: 0.2.6 - pino-pretty: - specifier: ^11.2.1 - version: 11.3.0 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.4(@swc/helpers@0.5.13))(@types/node@20.14.14)(typescript@5.4.5) - typescript: - specifier: ~5.4 - version: 5.4.5 - packages/openapi-fetch: dependencies: openapi-typescript-helpers: @@ -318,18 +217,12 @@ importers: packages/openapi-metadata: dependencies: - '@fastify/deepmerge': - specifier: ^2.0.0 - version: 2.0.0 - lodash: - specifier: ^4.17.21 - version: 4.17.21 + deepmerge: + specifier: ^4.3.1 + version: 4.3.1 openapi-types: specifier: ^12.1.3 version: 12.1.3 - reflect-metadata: - specifier: ^0.2.2 - version: 0.2.2 devDependencies: '@types/lodash': specifier: ^4.17.7 @@ -349,9 +242,15 @@ importers: execa: specifier: ^8.0.1 version: 8.0.1 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 tsup: specifier: ^8.2.4 version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.4.5)(yaml@2.5.1) + type-fest: + specifier: ^4.26.1 + version: 4.26.1 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -508,161 +407,6 @@ importers: packages: - '@adonisjs/ace@13.3.0': - resolution: {integrity: sha512-68dveDFd766p69cBvK/MtOrOP0+YKYLeHspa9KLEWcWk9suPf3pbGkHQ2pwDnvLJxBPHk4932KbbSSzzpGNZGw==} - engines: {node: '>=18.16.0'} - - '@adonisjs/application@8.3.1': - resolution: {integrity: sha512-hfZBgZ23BQAXvoSHDkc/I0hTSXyFVxypNqHPQ/WCk4VoWlBVWVgGaGnHLvIGhrZ3RMvyoC5NBgC0PR5G+/fGSw==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/config': ^5.0.0 - '@adonisjs/fold': ^10.0.0 - - '@adonisjs/assembler@7.8.2': - resolution: {integrity: sha512-csLdMW58cwuRjdPEDE0dqwHZCT5snCh+1sQ19HPnQ/BLKPPAvQdDRdw0atoC8LVmouB8ghXVHp3SxnVxlvXYWQ==} - engines: {node: '>=20.6.0'} - peerDependencies: - typescript: ^4.0.0 || ^5.0.0 - - '@adonisjs/auth@9.2.3': - resolution: {integrity: sha512-my/dqQJo1LQRhT3bW0RuK/1BhDTWcY3tVrGZmVMedCRBfYGt91OAreMy0muukJcWr8AkXBtbBsju2D+myaDa4Q==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/core': ^6.11.0 - '@adonisjs/lucid': ^20.0.0 || ^21.0.1 - '@adonisjs/session': ^7.4.1 - '@japa/api-client': ^2.0.3 - '@japa/browser-client': ^2.0.3 - '@japa/plugin-adonisjs': ^3.0.1 - peerDependenciesMeta: - '@adonisjs/lucid': - optional: true - '@adonisjs/session': - optional: true - '@japa/api-client': - optional: true - '@japa/browser-client': - optional: true - '@japa/plugin-adonisjs': - optional: true - - '@adonisjs/bodyparser@10.0.2': - resolution: {integrity: sha512-dkbn+DK5B1dODTwk5367gHPhaD4ZIoGon/jvq47iX2cnHjk3a0SyQrBEjoFhnrNkVOJZ76I3OJ3oixqgMcE+yA==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/http-server': ^7.0.2 - - '@adonisjs/config@5.0.2': - resolution: {integrity: sha512-NXjFqDHNGRTZ1EnA4zr20GFEt7qw/JvZ4ZV8/PzFyVc7dPoFprpoyE3bw7kmlKHhcQdBbF7YXCGB4q+HQUnqiQ==} - engines: {node: '>=18.16.0'} - - '@adonisjs/core@6.14.1': - resolution: {integrity: sha512-pwQ57tWYBMtc3LP7/eIkQuK/Ag9RrDFmcjjj04XSHR+ormeC/I94EwH89EJ0f4ejidshobtaE/OmW6it0vJfuA==} - engines: {node: '>=20.6.0'} - hasBin: true - peerDependencies: - '@adonisjs/assembler': ^7.8.0 - '@vinejs/vine': ^2.1.0 - argon2: ^0.31.2 || ^0.41.0 - bcrypt: ^5.1.1 - edge.js: ^6.2.0 - peerDependenciesMeta: - '@adonisjs/assembler': - optional: true - '@vinejs/vine': - optional: true - argon2: - optional: true - bcrypt: - optional: true - edge.js: - optional: true - - '@adonisjs/cors@2.2.1': - resolution: {integrity: sha512-qnrSG8ylpgTeZBOYEN3yXxY0PBUEg1KGDhgn9VKVFGxLKT+o9GGVOSZxUK3wG341B1zB9w5vuZN1z4M0Jitb6g==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/core': ^6.2.0 - - '@adonisjs/encryption@6.0.2': - resolution: {integrity: sha512-37XqVPsZi6zXMbC0Me1/qlcTP0uE+KAtYOFx7D7Tvtz377NL/6gqxqgpW/BopgOSD+CVDXjzO/Wx3M2UrbkJRQ==} - engines: {node: '>=18.16.0'} - - '@adonisjs/env@6.1.0': - resolution: {integrity: sha512-CzK+njXTH3EK+d/UJPqckyqWocOItmLgHIUbvhpd6WvveBnfv1Dz5j9H3k+ogHqThDSJCXu1RkaRAC+HNym9gA==} - engines: {node: '>=18.16.0'} - - '@adonisjs/events@9.0.2': - resolution: {integrity: sha512-qZn2e9V9C8tF4MNqEWv5JGxMG7gcHSJM8RncGpjuJ4cwFwd2jF4xrN6wkCprTVwoyZSxNS0Cp9NkAonySjG5vg==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/application': ^8.0.2 - '@adonisjs/fold': ^10.0.1 - - '@adonisjs/fold@10.1.2': - resolution: {integrity: sha512-zNlPUpX0HdNLP9lateEqQ+frO+u0Ecs1OW3eS+8CbPTKgfPP1fFP9cZeuYFJK0FwQIFdP1rLVkpUBZAR//5Bfw==} - engines: {node: '>=18.16.0'} - - '@adonisjs/hash@9.0.5': - resolution: {integrity: sha512-oY8PafBrdGsr5UY8cAzzxPCtehZDW7KsPcI47dZpjydOdL/PQrT4liX+cGujL6mSbi3JEgQLBgBs/+SlPFvCrg==} - engines: {node: '>=20.6.0'} - peerDependencies: - argon2: ^0.31.2 || ^0.41.0 - bcrypt: ^5.1.1 - peerDependenciesMeta: - argon2: - optional: true - bcrypt: - optional: true - - '@adonisjs/health@2.0.0': - resolution: {integrity: sha512-dEAABiAJew1imzwi+OvV/SAnjkMp8TbD5ZIzx1dMRnPynJAlRf37//bHLwZ5Cw44ke5kPzZ/l1n9cx/VeBCicA==} - engines: {node: '>=20.6.0'} - - '@adonisjs/http-server@7.2.5': - resolution: {integrity: sha512-85uvY0msXVEfFl+jkpc+V2kSFvruOvRWncyiKxEkiTsma5YjnwV9OT7E/85XPGhZDMZCFHDxWeeQKNH/EOHQaQ==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/application': ^8.0.2 - '@adonisjs/encryption': ^6.0.0 - '@adonisjs/events': ^9.0.0 - '@adonisjs/fold': ^10.0.1 - '@adonisjs/logger': ^6.0.1 - - '@adonisjs/logger@6.0.3': - resolution: {integrity: sha512-CKxIpWBEX/e6duRE6qq8GJ90NQC8q26Q0aSuj+bUO6X4mgcgawxhciJTfpxmJNj9KEUmNAeHOn0hSpTITdk8Lg==} - engines: {node: '>=18.16.0'} - - '@adonisjs/lucid@21.3.0': - resolution: {integrity: sha512-m2r+LyOl0VJzZK6vVOAk3yAaUR6QLiL1tUxSPKl1E/49dkQTVwkH1/2XDgkm/kTXjsgK60WD/alYnm419xb/rw==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/assembler': ^7.7.0 - '@adonisjs/core': ^6.10.1 - luxon: ^3.4.4 - peerDependenciesMeta: - '@adonisjs/assembler': - optional: true - luxon: - optional: true - - '@adonisjs/presets@2.6.3': - resolution: {integrity: sha512-ADCdslOgsSZPFnDQO0I6en/PL8Hg+VDHaOI+KyPxKZ5UEy5uFHuQm2BPo+0OaoSLClIm8SJnZFaXwNK9uN55bA==} - peerDependencies: - '@adonisjs/assembler': ^7.8.2 - '@adonisjs/core': ^6.13.0 - peerDependenciesMeta: - '@adonisjs/assembler': - optional: true - - '@adonisjs/repl@4.0.1': - resolution: {integrity: sha512-fgDRC5I8RBKHzsJPM4rRQF/OWI0K9cNihCIf4yHdqQt3mhFqWSOUjSi4sXWykdICLiddmyBO86au7i0d0dj5vQ==} - engines: {node: '>=18.16.0'} - - '@adonisjs/tsconfig@1.4.0': - resolution: {integrity: sha512-go5KlxE8jJaeoIRzm51PcF2YJSK5i022douVk9OjAqvDiU1t2UepcDoEsSiEOgogUDojp9kbRQmFyf0y0YqvOg==} - '@algolia/autocomplete-core@1.9.3': resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} @@ -735,9 +479,6 @@ packages: '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} - '@antfu/install-pkg@0.4.1': - resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} - '@apidevtools/json-schema-ref-parser@9.0.9': resolution: {integrity: sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==} @@ -750,10 +491,6 @@ packages: resolution: {integrity: sha512-gAYzWaIbq8m9MuvxKmeDn24Or4mIWCSpRR0NNXAVoGUTPraB1SP3blPa5NycUPTnToKLA5DAwHLhwtWpslMbKQ==} engines: {node: '>=18'} - '@arr/every@1.0.1': - resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} - engines: {node: '>=4'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -998,10 +735,6 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - '@docsearch/css@3.6.0': resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} @@ -1592,13 +1325,6 @@ packages: cpu: [x64] os: [win32] - '@faker-js/faker@9.2.0': - resolution: {integrity: sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==} - engines: {node: '>=18.0.0', npm: '>=9.0.0'} - - '@fastify/deepmerge@2.0.0': - resolution: {integrity: sha512-fsaybTGDyQ5KpPsplQqb9yKdCf2x/pbNpMNk8Tvp3rRz7lVcupKysH4b2ELMN2P4Hak1+UqTYdTj/u4FNV2p0g==} - '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1732,49 +1458,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@japa/api-client@2.0.3': - resolution: {integrity: sha512-2Eh68Kg1+7glMo+mLSPfBGN21wUEA61niTMwdmhEXyw5VrS4IctZxQWhn5fzwj5KnQJfPpxrRnt9432Zs0uN/g==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@japa/assert': ^2.0.0 || ^3.0.0 - '@japa/runner': ^3.1.2 - peerDependenciesMeta: - '@japa/assert': - optional: true - - '@japa/core@9.0.1': - resolution: {integrity: sha512-snngJNbvYC92nn+dB69DT2iyosWZLXPRnOp8NJnVEeotkkKAWSmcDqBKw9qq2+MVdshwClvKFVXTxko4MtmlEQ==} - engines: {node: '>=18.16.0'} - - '@japa/errors-printer@3.0.4': - resolution: {integrity: sha512-gqBWkc8X6n5y91HH7H8fXyfe3rKV1+YeMNgE/+CY6hXf0/BS7J55s/QldosKEV2ZiWj/WmE6UPZiFH8W873fGw==} - engines: {node: '>=18.16.0'} - - '@japa/plugin-adonisjs@3.0.1': - resolution: {integrity: sha512-xUZOzfBXSz2sWRoQT+qs+6LZBtWWE+cCBZ3j9ckz6+nPw3VI0nV6yLaX+oud3AY8Zb+BH+pErABBhaovZYv9dA==} - engines: {node: '>=18.16.0'} - peerDependencies: - '@adonisjs/core': ^6.5.0 - '@japa/api-client': ^2.0.3 - '@japa/browser-client': ^2.0.3 - '@japa/runner': ^3.1.2 - playwright: ^1.42.1 - peerDependenciesMeta: - '@japa/api-client': - optional: true - '@japa/browser-client': - optional: true - playwright: - optional: true - - '@japa/runner@3.1.4': - resolution: {integrity: sha512-ShaVZLdYq3GbFwyNiqQMCfdEoNq9vgYC0P6Z9gflqPcSUfOmN5jeJTLrLpChCBM5Sx9kYuAm5Bh6cqv1ZrArkQ==} - engines: {node: '>=18.16.0'} - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1793,16 +1476,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - '@lukeed/ms@2.0.2': - resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} - engines: {node: '>=8'} - '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -1864,10 +1540,6 @@ packages: cpu: [x64] os: [win32] - '@noble/hashes@1.5.0': - resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} - engines: {node: ^14.21.3 || >=16} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1889,13 +1561,6 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@paralleldrive/cuid2@2.2.2': - resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} - - '@phc/format@1.0.0': - resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} - engines: {node: '>=10'} - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1908,52 +1573,6 @@ packages: '@polka/url@1.0.0-next.25': resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} - '@poppinss/chokidar-ts@4.1.4': - resolution: {integrity: sha512-iX+QSNOo2PAvkv+8ggBkCyv2gZHskJemtsl1PcEbjM7dJOf+n4LSPHAqj4+B0raqZHznXFhKKoQfN1a9j/YuUg==} - engines: {node: '>=18.16.0'} - peerDependencies: - typescript: ^4.0.0 || ^5.0.0 - - '@poppinss/cliui@6.4.1': - resolution: {integrity: sha512-tdV3QpAfrPFRLPOh98F8QxWBvwYF3ziWGGtpVqfZtFNTFkC7nQnVQlUW55UtQ7rkeMmFohxfDI+2JNWScGJ1jQ==} - engines: {node: '>=18.16.0'} - - '@poppinss/colors@4.1.3': - resolution: {integrity: sha512-A0FjJ6x14donWDN3bHAFFjJaPWTwM2PgWT834+bPKVK6Xukf25CscoRqCPYI939a8yuJFX9PYWWnVbUVI0E2Cg==} - engines: {node: '>=18.16.0'} - - '@poppinss/dumper@0.4.2': - resolution: {integrity: sha512-dZBY7t0lp4fMabTQZM5mXYKoTpl0ZwZIwON0gsMmZDyHyhXzIPZw7btOr8OKqFyOKhKBPN+X4Vfmfjeq5NIC7w==} - - '@poppinss/hooks@7.2.4': - resolution: {integrity: sha512-AoKSHC8ts199+PPa/R+XFF1A9FFhbiGibizOp0M54kCzvhwErGNLJd8Yk/b5nzodmsvApX7cjWVKPM5+12r2VA==} - engines: {node: '>=18.16.0'} - - '@poppinss/macroable@1.0.3': - resolution: {integrity: sha512-B4iV6QxW//Fn17+qF1EMZRmoThIUJlCtcO85yoRDJnMyHeAthjz4ig9OTkfGGXKtQhcdPX0me75gU5K9J897+w==} - engines: {node: '>=18.16.0'} - - '@poppinss/matchit@3.1.2': - resolution: {integrity: sha512-Bx+jY+vmdQFmwYiHliiPjr+oVBaGnh79B1h1FSAm3jME1QylLFt8PPYC0ymO8Q5PzJj/KuE3jeTnZhRHOWqq8g==} - - '@poppinss/middleware@3.2.4': - resolution: {integrity: sha512-Klz8kInSN2hL3C/IRkt2DBFIc/kZ225SZpb4Mj2fS7k+YXRmogUF1sVi6W/xkuHuY523mNWgMkt/Ym5HoOC03A==} - engines: {node: '>=18.16.0'} - - '@poppinss/multiparty@2.0.1': - resolution: {integrity: sha512-Pf3V9PFyZDIkDBBiAOT2hdmA+1l/+hverHbUnMzNzwtwgO50s2ZPt5KxUydVA0hceg9gryo5unQ0WUF1SO9tkQ==} - - '@poppinss/prompts@3.1.3': - resolution: {integrity: sha512-lNAcOcvB7YhfaWYIsu8tatF9V61A0SEu8PGpGx9RqTVmImKhLT0AAcRPr/5z4UQMl7SIf5REQKMJhHK50xakYQ==} - engines: {node: '>=18.16.0'} - - '@poppinss/utils@6.8.3': - resolution: {integrity: sha512-YGeH7pIUm9ExONURNH3xN61dBZ0SXgVuPA9E76t7EHeZHXPNrmR8TlbXQaka6kd5n+cpBNcHG4VsVfYf59bZ7g==} - engines: {node: '>=18.16.0'} - - '@poppinss/validator-lite@1.0.3': - resolution: {integrity: sha512-u4dmT7PDHwNtxY3q1jHVp/u+hMEEcBlkzd37QwwM4tVt/0mLlEDttSfPQ+TT7sqPG4VEtWKwVSlMInwPUYyJpA==} - '@redocly/ajv@8.11.2': resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} @@ -2053,9 +1672,6 @@ packages: cpu: [x64] os: [win32] - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/core@1.22.2': resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} @@ -2074,29 +1690,10 @@ packages: '@shikijs/vscode-textmate@9.3.0': resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@sindresorhus/is@6.3.1': - resolution: {integrity: sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==} - engines: {node: '>=16'} - - '@sindresorhus/is@7.0.1': - resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} - engines: {node: '>=18'} - - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - '@size-limit/esbuild@11.1.6': resolution: {integrity: sha512-0nBKYSxeRjUVCVoCkWZbmGkGBwpm0HdwHedWgxksBGxTKU0PjOMSHc3XTjKOrXBKXQzw90Ue0mgOd4n6zct9SA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -2143,135 +1740,66 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 - '@swc/core-darwin-arm64@1.7.4': - resolution: {integrity: sha512-RbWrdGh+x9xKFUA9/kPZRR8OPxUsDUuPyLjPIGLYZMO+ftht2vhVH7QsUq6lg+jAP34eIya72UA1isiZe+BRaA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - '@swc/core-darwin-arm64@1.9.1': resolution: {integrity: sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.4': - resolution: {integrity: sha512-TxCWMJs4OrqApjFuT8cUiqMz0zg97F0JsXBEeZ7zjkyv9XJ/rN2pdwqMlZv0Wv2C2rivOPo6FsWYlZ3V8ZHhyA==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - '@swc/core-darwin-x64@1.9.1': resolution: {integrity: sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.4': - resolution: {integrity: sha512-5IhwIJZAgkkfI6PqgQ3xk0/2hTAVsAczIPLiR2Epp30EgsNo1KIFL0ZHzrnvJPy5BZ3jy3T1dEbDE/memBOEmA==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - '@swc/core-linux-arm-gnueabihf@1.9.1': resolution: {integrity: sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.4': - resolution: {integrity: sha512-0787jri83jigf26mF8FndWehh7jqMaHwAm/OV6VdToyNo/g+d1AxVpkEizrywZK46el+AObnHUIHIHwZgO21LA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - '@swc/core-linux-arm64-gnu@1.9.1': resolution: {integrity: sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.4': - resolution: {integrity: sha512-A45hGKWAGcjU5Ol0uQUoK0tHerwEKxfprYUZbmPLpD2yrpMZr+dTrwY2n075sixs7RuZEccBkgGNpehEe5BPBQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - '@swc/core-linux-arm64-musl@1.9.1': resolution: {integrity: sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.4': - resolution: {integrity: sha512-bcO1MpAm39TXqqHuYW4ox4vDvhB7jkguwMwxvmL+cKBGsUHrIoUTfGt9NM9N4D4CvOwULlxqbyt19veUJ7CVPw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - '@swc/core-linux-x64-gnu@1.9.1': resolution: {integrity: sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.4': - resolution: {integrity: sha512-N6nXuHyDO/q5kPN2xQxz5BEvhFpgnFSkP+9wxg5xWq+qIQL5bv37jk8dkKvMLx/8fHzTqrIjPDSRzVbcL7sqXg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - '@swc/core-linux-x64-musl@1.9.1': resolution: {integrity: sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.4': - resolution: {integrity: sha512-7W1owqCNR1cG+mpS55juiZlR/lrAdxB1pH32egeOipNKOLGwyqmlzQ0g9tkQTNgzwgfpCUg8z606+GqqXvajZw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - '@swc/core-win32-arm64-msvc@1.9.1': resolution: {integrity: sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.4': - resolution: {integrity: sha512-saLkY+q7zNPk4gYiUBCc93FYPo4ECXMjHcSPtLVHoPZBIxRrklgaAf6aDpblBo30nVdoBE2V3YPd0Y/cPiY6RQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - '@swc/core-win32-ia32-msvc@1.9.1': resolution: {integrity: sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.4': - resolution: {integrity: sha512-zKF6jpRBNuVKgOf2W5dMcPyjwcNCp21syjl9lvLRbCeIg+1U+zjdoQCAmMWWoPNE7fLg+yfvohnnOJG2AdzQ9Q==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - '@swc/core-win32-x64-msvc@1.9.1': resolution: {integrity: sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.4': - resolution: {integrity: sha512-+wSycNxOw9QQz81AJAZlNS34EtOIifwUXMPACg05PWjECsjOKDTXLCVPx6J0lRaxhHSGBU2OYs9mRfIvxGt3CA==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - '@swc/core@1.9.1': resolution: {integrity: sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==} engines: {node: '>=10'} @@ -2287,9 +1815,6 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - '@swc/types@0.1.12': - resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} - '@swc/types@0.1.14': resolution: {integrity: sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==} @@ -2320,28 +1845,10 @@ packages: '@types/react-dom': optional: true - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@ts-morph/common@0.24.0': - resolution: {integrity: sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tsconfig/node20@20.1.4': resolution: {integrity: sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==} @@ -2360,15 +1867,9 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/bytes@3.1.4': - resolution: {integrity: sha512-A0uYgOj3zNc4hNjHc5lYUfJQ/HVyBXiUMKdXd7ysclaE6k9oJdavQzODHuwjpUu2/boCP8afjQYi8z/GtvNCWA==} - '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/cookiejar@2.1.5': - resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} - '@types/degit@2.8.6': resolution: {integrity: sha512-y0M7sqzsnHB6cvAeTCBPrCQNQiZe8U4qdzf8uBVmOWYap5MMTN/gB2iEqrIqFiYcsyvP74GnGD5tgsHttielFw==} @@ -2378,9 +1879,6 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/he@1.2.3': - resolution: {integrity: sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==} - '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -2402,36 +1900,24 @@ packages: '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - '@types/methods@1.1.4': - resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} - '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@20.14.14': - resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} - '@types/node@22.9.0': resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/pluralize@0.0.33': - resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} - '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} '@types/pug@2.0.10': resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} - '@types/qs@6.9.17': - resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} - '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} @@ -2450,32 +1936,18 @@ packages: '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} - '@types/superagent@8.1.9': - resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} - '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/validator@13.12.2': - resolution: {integrity: sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==} - '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vinejs/compiler@2.5.0': - resolution: {integrity: sha512-hg4ekaB5Y2zh+IWzBiC/WCDWrIfpVnKu/ubUvelKlidc/VbulsexoFRw5kJGHZenPVI5YzNnDeTdYSALkTV7jQ==} - engines: {node: '>=18.0.0'} - - '@vinejs/vine@2.1.0': - resolution: {integrity: sha512-09aJ2OauxpblqiNqd8qC9RAzzm5SV6fTqZhE4e25j4cM7fmNoXRTjM7Oo8llFADMO4eSA44HqYEO3mkRRYdbYw==} - engines: {node: '>=18.16.0'} - '@vitejs/plugin-react-swc@3.7.1': resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==} peerDependencies: @@ -2664,17 +2136,6 @@ packages: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - abstract-logging@2.0.1: - resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -2752,9 +2213,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2772,9 +2230,6 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -2782,16 +2237,9 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - atomic-sleep@1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} - engines: {node: '>=8.0.0'} - axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} @@ -2802,13 +2250,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - basic-auth@2.0.1: - resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} - engines: {node: '>= 0.8'} - better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -2843,9 +2284,6 @@ packages: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bundle-require@5.0.0: resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2860,10 +2298,6 @@ packages: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2883,20 +2317,12 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} - engines: {node: '>=16'} - caniuse-lite@1.0.30001646: resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==} caniuse-lite@1.0.30001677: resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} - case-anything@3.1.0: - resolution: {integrity: sha512-rRYnn5Elur8RuNHKoJ2b0tgn+pjYxL7BzWom+JZ7NKKn1lt/yGV/tUNwOovxYa9l9VL5hnXQdMc+mENbhJzosQ==} - engines: {node: '>=18'} - ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2936,10 +2362,6 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - check-disk-space@3.4.0: - resolution: {integrity: sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==} - engines: {node: '>=16'} - check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -2963,10 +2385,6 @@ packages: resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} engines: {node: '>=12'} - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -2998,9 +2416,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - code-block-writer@13.0.3: - resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} - code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} @@ -3027,9 +2442,6 @@ packages: colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -3056,9 +2468,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -3069,14 +2478,6 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - convert-hrtime@5.0.0: - resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} - engines: {node: '>=12'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -3088,14 +2489,6 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cookie@1.0.1: - resolution: {integrity: sha512-Xd8lFX4LM9QEEwxQpF9J9NTUh8pmdJO0cyRJhFiDoLTk2eH8FXlRv2IFGYVadZpqI3j8fhNrSdKCeYPxiAhLXw==} - engines: {node: '>=18'} - cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} @@ -3103,19 +2496,8 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} - copy-file@11.0.0: - resolution: {integrity: sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==} - engines: {node: '>=18'} - - cpy@11.1.0: - resolution: {integrity: sha512-QGHetPSSuprVs+lJmMDcivvrBwTKASzXQ5qxFvRC2RFESjjod71bDvFvhxTjDgkNjrrb72AI6JPjfYwxrIy33A==} - engines: {node: '>=18'} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -3138,9 +2520,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -3148,24 +2527,9 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - dateformat@4.6.3: - resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - - dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} @@ -3199,14 +2563,6 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -3237,18 +2593,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -3266,21 +2614,10 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -3289,10 +2626,6 @@ packages: engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -3300,16 +2633,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.52: resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==} - emittery@1.0.3: - resolution: {integrity: sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==} - engines: {node: '>=14.16'} - emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -3322,13 +2648,6 @@ packages: emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -3344,9 +2663,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - error-stack-parser-es@0.1.5: - resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} - es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -3355,9 +2671,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} @@ -3405,10 +2718,6 @@ packages: esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -3428,21 +2737,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -3451,10 +2748,6 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - execa@9.5.1: - resolution: {integrity: sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==} - engines: {node: ^18.19.0 || >=20.5.0} - expect-type@1.1.0: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} @@ -3466,9 +2759,6 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} - fast-copy@3.0.2: - resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3476,17 +2766,9 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} - fast-redact@3.5.0: - resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} - engines: {node: '>=6'} - fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -3504,14 +2786,6 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} - - file-type@19.6.0: - resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==} - engines: {node: '>=18'} - fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3520,14 +2794,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-cache-dir@5.0.0: - resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==} - engines: {node: '>=16'} - - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} - engines: {node: '>=18'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3536,14 +2802,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - flattie@1.1.1: - resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} - engines: {node: '>=8'} - focus-trap@7.5.4: resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} @@ -3564,20 +2822,9 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} - formidable@2.1.2: - resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} - formidable@3.5.2: resolution: {integrity: sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==} - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -3625,17 +2872,6 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-port@7.1.0: - resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} - engines: {node: '>=16'} - - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3644,21 +2880,10 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - - getopts@2.3.0: - resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -3682,10 +2907,6 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - globby@14.0.2: - resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} - engines: {node: '>=18'} - globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -3744,13 +2965,6 @@ packages: headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - help-me@5.0.0: - resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} - - hexoid@1.0.0: - resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} - engines: {node: '>=8'} - hexoid@2.0.0: resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} engines: {node: '>=8'} @@ -3765,13 +2979,6 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} - - hot-hook@0.2.6: - resolution: {integrity: sha512-sMqK0sejkw+gUh/WiyqYBk8AKB2qM1a1wsC4v0JlnK/1x8CUFF60oPawZy/EOtLmN1Om1GTGVJLIwShxOnuI9Q==} - html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -3782,10 +2989,6 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} @@ -3809,10 +3012,6 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - human-signals@8.0.0: - resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} - engines: {node: '>=18.18.0'} - husky@9.1.5: resolution: {integrity: sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==} engines: {node: '>=18'} @@ -3826,13 +3025,6 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - igniculus@1.5.0: - resolution: {integrity: sha512-vhj2J/cSzNg2G5tcK4Z1KZdeYmQa5keoxFULUYAxctK/zHJb1oraO7noCqnJxKe1b2eZdiiaSL1IHPOFAI8UYQ==} - engines: {node: '>=4.0.0'} - ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -3848,10 +3040,6 @@ packages: resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} engines: {node: '>=18'} - inflation@2.1.0: - resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} - engines: {node: '>= 0.8.0'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -3859,14 +3047,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - interpret@2.2.0: - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} - engines: {node: '>= 0.10'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -3919,10 +3099,6 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -3937,18 +3113,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} - is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} @@ -3979,14 +3147,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jiti@2.4.0: resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} hasBin: true @@ -4046,13 +3206,6 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonschema@1.4.1: - resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} - - junk@4.0.1: - resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} - engines: {node: '>=12.20'} - kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -4061,38 +3214,6 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knex-dynamic-connection@3.2.0: - resolution: {integrity: sha512-+j6KeUSim0FR8EobOqA1a/TZbN9mahjzHzJgOfQVkv6PUnSqJp70c/5n63M2YVNgNHETyBIUhV8stuQ0T/mG3g==} - engines: {node: '>=14.0.0'} - - knex@3.1.0: - resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==} - engines: {node: '>=16'} - hasBin: true - peerDependencies: - better-sqlite3: '*' - mysql: '*' - mysql2: '*' - pg: '*' - pg-native: '*' - sqlite3: '*' - tedious: '*' - peerDependenciesMeta: - better-sqlite3: - optional: true - mysql: - optional: true - mysql2: - optional: true - pg: - optional: true - pg-native: - optional: true - sqlite3: - optional: true - tedious: - optional: true - lilconfig@3.1.2: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} @@ -4124,10 +3245,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} @@ -4167,10 +3284,6 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - luxon@3.5.0: - resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} - engines: {node: '>=12'} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -4188,9 +3301,6 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -4219,18 +3329,6 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - - memoize@10.0.0: - resolution: {integrity: sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==} - engines: {node: '>=18'} - meow@10.1.5: resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4334,11 +3432,6 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -4366,10 +3459,6 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4390,10 +3479,6 @@ packages: nanospinner@1.2.0: resolution: {integrity: sha512-dGxYcEj8YhuxjVO3PYmnj1nBhtwUkvuwYbLl/MduBPmQUPy3xBtG/ScJgqZgntQkX44UQaCSlFeW4rS5fUR/Sw==} - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -4438,18 +3523,10 @@ packages: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} - engines: {node: ^16.14.0 || >=18.0.0} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} - engines: {node: '>=14.16'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4458,10 +3535,6 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} - engines: {node: '>=18'} - nwsapi@2.2.12: resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} @@ -4472,14 +3545,6 @@ packages: object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - on-exit-leak-free@2.1.2: - resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} - engines: {node: '>=14.0.0'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -4519,18 +3584,10 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - p-event@6.0.1: - resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} - engines: {node: '>=16.17'} - p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} - p-filter@4.1.0: - resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} - engines: {node: '>=18'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4539,10 +3596,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4551,10 +3604,6 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -4563,14 +3612,6 @@ packages: resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} engines: {node: '>=12'} - p-map@7.0.2: - resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==} - engines: {node: '>=18'} - - p-timeout@6.1.3: - resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} - engines: {node: '>=14.16'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -4581,10 +3622,6 @@ packages: package-manager-detector@0.2.2: resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} - parse-imports@2.2.1: - resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} - engines: {node: '>= 18'} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -4593,10 +3630,6 @@ packages: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} - parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - parse5-htmlparser2-tree-adapter@6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} @@ -4616,10 +3649,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -4632,9 +3661,6 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -4646,10 +3672,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -4657,19 +3679,12 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} - peek-readable@5.3.1: - resolution: {integrity: sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==} - engines: {node: '>=14.16'} - perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - pg-connection-string@2.6.2: - resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} - picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -4693,31 +3708,10 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pino-abstract-transport@1.2.0: - resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} - - pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - - pino-pretty@11.3.0: - resolution: {integrity: sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==} - hasBin: true - - pino-std-serializers@6.2.2: - resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} - - pino@8.21.0: - resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} - hasBin: true - pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} - playwright-core@1.48.2: resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} engines: {node: '>=18'} @@ -4775,35 +3769,9 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - - pretty-ms@9.1.0: - resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} - engines: {node: '>=18'} - - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - - process-warning@3.0.0: - resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -4813,9 +3781,6 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4824,31 +3789,16 @@ packages: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - random-bytes@1.0.0: - resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} - engines: {node: '>= 0.8'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -4862,9 +3812,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -4873,10 +3820,6 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - read-package-up@11.0.0: - resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} - engines: {node: '>=18'} - read-pkg-up@8.0.0: resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} engines: {node: '>=12'} @@ -4885,18 +3828,10 @@ packages: resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} engines: {node: '>=12'} - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} - read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} - readable-stream@4.5.2: - resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -4905,14 +3840,6 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} - real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} - - rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} - redent@4.0.0: resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} engines: {node: '>=12'} @@ -4941,18 +3868,10 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -4982,16 +3901,6 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -5008,9 +3917,6 @@ packages: search-insights@2.13.0: resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==} - secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -5020,10 +3926,6 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-error@11.0.3: - resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} - engines: {node: '>=14.16'} - set-cookie-parser@2.7.0: resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} @@ -5031,9 +3933,6 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sharp@0.33.5: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -5095,13 +3994,6 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - slashes@3.0.12: - resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -5110,16 +4002,6 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} - slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} - engines: {node: '>=8.0.0'} - - sonic-boom@3.8.1: - resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} - - sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} - sorcery@0.11.1: resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} hasBin: true @@ -5162,23 +4044,12 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} - split-lines@3.0.0: - resolution: {integrity: sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==} - engines: {node: '>=12'} - - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -5209,9 +4080,6 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -5235,10 +4103,6 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -5247,14 +4111,6 @@ packages: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - strtok3@9.0.1: - resolution: {integrity: sha512-ERPW+XkvX9W2A+ov07iy+ZFJpVdik04GhDA4eVogiG9hpC97Kem2iucyzhFxbFRvQ5o2UckFtKZdp1hkGvnrEw==} - engines: {node: '>=16'} - styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -5277,11 +4133,6 @@ packages: resolution: {integrity: sha512-9pIwrHrOj3uAnqg9gDlW7EA2xv+N5au/dSM0kM22HTqmUu8jBxNT+8uA7tA3UoCnmiqzpSbu8rasIUZvbyamMQ==} engines: {node: '>=14.18.0'} - superagent@8.1.2: - resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} - engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net - superjson@2.2.1: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} @@ -5302,10 +4153,6 @@ packages: resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==} engines: {node: '>=14.18'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - svelte-check@3.8.6: resolution: {integrity: sha512-ij0u4Lw/sOTREP13BdWZjiXD/BlHE6/e2e34XzmVmsp5IN4kVa3PWP65NM32JAgwjZlwBg/+JtiNV1MM8khu0Q==} hasBin: true @@ -5370,22 +4217,10 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tarn@3.0.2: - resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} - engines: {node: '>=8.0.0'} - - tempura@0.4.1: - resolution: {integrity: sha512-NQ4Cs23jM6UUp3CcS5vjmyjTC6dtA5EsflBG2cyG0wZvP65AV26tJ920MGvTRYIImCY13RBpOhc7q4/pu+FG5A==} - engines: {node: '>=10'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - terminal-size@4.0.0: - resolution: {integrity: sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==} - engines: {node: '>=18'} - test-exclude@7.0.1: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} @@ -5397,17 +4232,6 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thread-stream@2.7.0: - resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} - - tildify@2.0.0: - resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} - engines: {node: '>=8'} - - time-span@5.1.0: - resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} - engines: {node: '>=12'} - tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} @@ -5444,10 +4268,6 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tmp-cache@1.1.0: - resolution: {integrity: sha512-j040fkL/x+XAZQ9K3bKGEPwgYhOZNBQLa3NXEADUiuno9C+3N2JJA4bVPDREixp604G3/vTXWA3DIPpA9lu1RQ==} - engines: {node: '>=6'} - tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -5460,14 +4280,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - token-types@6.0.0: - resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} - engines: {node: '>=14.16'} - totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -5497,31 +4309,11 @@ packages: resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} engines: {node: '>=12'} - truncatise@0.0.8: - resolution: {integrity: sha512-cXzueh9pzBCsLzhToB4X4gZCb3KYkrsAcBAX97JnazE74HOl3cpBJYEV7nabHeG/6/WXCU5Yujlde/WPBUwnsg==} - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-morph@23.0.0: - resolution: {integrity: sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==} - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - ts-results-es@4.2.0: - resolution: {integrity: sha512-GfpRk+qvHxa/6gADH8WMN/jXvs5oHYbKtMQc6X9L3VhToy5Lri3iQowyYSytaRcvPDiTT2z3vurzQZXFQFXKRA==} + ts-results-es@4.2.0: + resolution: {integrity: sha512-GfpRk+qvHxa/6gADH8WMN/jXvs5oHYbKtMQc6X9L3VhToy5Lri3iQowyYSytaRcvPDiTT2z3vurzQZXFQFXKRA==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5553,10 +4345,6 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - type-fest@4.20.1: resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} engines: {node: '>=16'} @@ -5565,10 +4353,6 @@ packages: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -5594,17 +4378,6 @@ packages: engines: {node: '>=0.8.0'} hasBin: true - uid-safe@2.1.5: - resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} - engines: {node: '>= 0.8'} - - uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} - engines: {node: '>=18'} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -5612,14 +4385,6 @@ packages: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -5647,10 +4412,6 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - unplugin-swc@1.5.1: resolution: {integrity: sha512-/ZLrPNjChhGx3Z95pxJ4tQgfI6rWqukgYHKflrNB4zAV1izOQuDhkTn55JWeivpBxDCoK7M/TStb2aS/14PS/g==} peerDependencies: @@ -5677,9 +4438,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5687,14 +4445,6 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} @@ -5971,321 +4721,19 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} - engines: {node: '>=12.20'} - yoctocolors-cjs@2.1.2: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} - yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} - engines: {node: '>=18'} - - youch-terminal@2.2.3: - resolution: {integrity: sha512-/PE77ZwG072tXBvF47S9RL9/G80u86icZ5QwyjblyM67L4n/T5qQeM3Xrecbu8kkDDr/9T/PTj/X+6G/OSRQug==} - - youch@3.3.4: - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} - zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@adonisjs/ace@13.3.0': - dependencies: - '@poppinss/cliui': 6.4.1 - '@poppinss/hooks': 7.2.4 - '@poppinss/macroable': 1.0.3 - '@poppinss/prompts': 3.1.3 - '@poppinss/utils': 6.8.3 - fastest-levenshtein: 1.0.16 - jsonschema: 1.4.1 - string-width: 7.2.0 - yargs-parser: 21.1.1 - youch: 3.3.4 - youch-terminal: 2.2.3 - - '@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2)': - dependencies: - '@adonisjs/config': 5.0.2 - '@adonisjs/fold': 10.1.2 - '@poppinss/hooks': 7.2.4 - '@poppinss/macroable': 1.0.3 - '@poppinss/utils': 6.8.3 - glob-parent: 6.0.2 - tempura: 0.4.1 - - '@adonisjs/assembler@7.8.2(typescript@5.4.5)': - dependencies: - '@adonisjs/env': 6.1.0 - '@antfu/install-pkg': 0.4.1 - '@poppinss/chokidar-ts': 4.1.4(typescript@5.4.5) - '@poppinss/cliui': 6.4.1 - '@poppinss/hooks': 7.2.4 - '@poppinss/utils': 6.8.3 - cpy: 11.1.0 - dedent: 1.5.3 - execa: 9.5.1 - fast-glob: 3.3.2 - get-port: 7.1.0 - junk: 4.0.1 - picomatch: 4.0.2 - pretty-hrtime: 1.0.3 - slash: 5.1.0 - ts-morph: 23.0.0 - typescript: 5.4.5 - transitivePeerDependencies: - - babel-plugin-macros - - '@adonisjs/assembler@7.8.2(typescript@5.6.3)': - dependencies: - '@adonisjs/env': 6.1.0 - '@antfu/install-pkg': 0.4.1 - '@poppinss/chokidar-ts': 4.1.4(typescript@5.6.3) - '@poppinss/cliui': 6.4.1 - '@poppinss/hooks': 7.2.4 - '@poppinss/utils': 6.8.3 - cpy: 11.1.0 - dedent: 1.5.3 - execa: 9.5.1 - fast-glob: 3.3.2 - get-port: 7.1.0 - junk: 4.0.1 - picomatch: 4.0.2 - pretty-hrtime: 1.0.3 - slash: 5.1.0 - ts-morph: 23.0.0 - typescript: 5.6.3 - transitivePeerDependencies: - - babel-plugin-macros - optional: true - - '@adonisjs/auth@9.2.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/plugin-adonisjs@3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2))': - dependencies: - '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) - '@adonisjs/presets': 2.6.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)) - basic-auth: 2.0.1 - optionalDependencies: - '@adonisjs/lucid': 21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0) - '@japa/api-client': 2.0.3(@japa/runner@3.1.4) - '@japa/plugin-adonisjs': 3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2) - transitivePeerDependencies: - - '@adonisjs/assembler' - - '@adonisjs/bodyparser@10.0.2(@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3))': - dependencies: - '@adonisjs/http-server': 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) - '@paralleldrive/cuid2': 2.2.2 - '@poppinss/macroable': 1.0.3 - '@poppinss/multiparty': 2.0.1 - '@poppinss/utils': 6.8.3 - '@types/qs': 6.9.17 - bytes: 3.1.2 - file-type: 19.6.0 - inflation: 2.1.0 - media-typer: 1.1.0 - qs: 6.12.1 - raw-body: 2.5.2 - - '@adonisjs/config@5.0.2': - dependencies: - '@poppinss/utils': 6.8.3 - - '@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)': - dependencies: - '@adonisjs/ace': 13.3.0 - '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) - '@adonisjs/bodyparser': 10.0.2(@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3)) - '@adonisjs/config': 5.0.2 - '@adonisjs/encryption': 6.0.2 - '@adonisjs/env': 6.1.0 - '@adonisjs/events': 9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2) - '@adonisjs/fold': 10.1.2 - '@adonisjs/hash': 9.0.5 - '@adonisjs/health': 2.0.0 - '@adonisjs/http-server': 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) - '@adonisjs/logger': 6.0.3 - '@adonisjs/repl': 4.0.1 - '@antfu/install-pkg': 0.4.1 - '@paralleldrive/cuid2': 2.2.2 - '@poppinss/colors': 4.1.3 - '@poppinss/dumper': 0.4.2 - '@poppinss/macroable': 1.0.3 - '@poppinss/utils': 6.8.3 - '@sindresorhus/is': 7.0.1 - '@types/he': 1.2.3 - error-stack-parser-es: 0.1.5 - he: 1.2.0 - parse-imports: 2.2.1 - pretty-hrtime: 1.0.3 - string-width: 7.2.0 - youch: 3.3.4 - youch-terminal: 2.2.3 - optionalDependencies: - '@adonisjs/assembler': 7.8.2(typescript@5.4.5) - '@vinejs/vine': 2.1.0 - - '@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.6.3))(@vinejs/vine@2.1.0)': - dependencies: - '@adonisjs/ace': 13.3.0 - '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) - '@adonisjs/bodyparser': 10.0.2(@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3)) - '@adonisjs/config': 5.0.2 - '@adonisjs/encryption': 6.0.2 - '@adonisjs/env': 6.1.0 - '@adonisjs/events': 9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2) - '@adonisjs/fold': 10.1.2 - '@adonisjs/hash': 9.0.5 - '@adonisjs/health': 2.0.0 - '@adonisjs/http-server': 7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3) - '@adonisjs/logger': 6.0.3 - '@adonisjs/repl': 4.0.1 - '@antfu/install-pkg': 0.4.1 - '@paralleldrive/cuid2': 2.2.2 - '@poppinss/colors': 4.1.3 - '@poppinss/dumper': 0.4.2 - '@poppinss/macroable': 1.0.3 - '@poppinss/utils': 6.8.3 - '@sindresorhus/is': 7.0.1 - '@types/he': 1.2.3 - error-stack-parser-es: 0.1.5 - he: 1.2.0 - parse-imports: 2.2.1 - pretty-hrtime: 1.0.3 - string-width: 7.2.0 - youch: 3.3.4 - youch-terminal: 2.2.3 - optionalDependencies: - '@adonisjs/assembler': 7.8.2(typescript@5.6.3) - '@vinejs/vine': 2.1.0 - - '@adonisjs/cors@2.2.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))': - dependencies: - '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) - - '@adonisjs/encryption@6.0.2': - dependencies: - '@poppinss/utils': 6.8.3 - - '@adonisjs/env@6.1.0': - dependencies: - '@poppinss/utils': 6.8.3 - '@poppinss/validator-lite': 1.0.3 - dotenv: 16.4.5 - split-lines: 3.0.0 - - '@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)': - dependencies: - '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) - '@adonisjs/fold': 10.1.2 - '@poppinss/utils': 6.8.3 - '@sindresorhus/is': 6.3.1 - emittery: 1.0.3 - - '@adonisjs/fold@10.1.2': - dependencies: - '@poppinss/utils': 6.8.3 - - '@adonisjs/hash@9.0.5': - dependencies: - '@phc/format': 1.0.0 - '@poppinss/utils': 6.8.3 - - '@adonisjs/health@2.0.0': - dependencies: - '@poppinss/utils': 6.8.3 - check-disk-space: 3.4.0 - - '@adonisjs/http-server@7.2.5(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/encryption@6.0.2)(@adonisjs/events@9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2)(@adonisjs/logger@6.0.3)': - dependencies: - '@adonisjs/application': 8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2) - '@adonisjs/encryption': 6.0.2 - '@adonisjs/events': 9.0.2(@adonisjs/application@8.3.1(@adonisjs/config@5.0.2)(@adonisjs/fold@10.1.2))(@adonisjs/fold@10.1.2) - '@adonisjs/fold': 10.1.2 - '@adonisjs/logger': 6.0.3 - '@paralleldrive/cuid2': 2.2.2 - '@poppinss/macroable': 1.0.3 - '@poppinss/matchit': 3.1.2 - '@poppinss/middleware': 3.2.4 - '@poppinss/utils': 6.8.3 - '@sindresorhus/is': 7.0.1 - accepts: 1.3.8 - content-disposition: 0.5.4 - cookie: 1.0.1 - destroy: 1.2.0 - encodeurl: 2.0.0 - etag: 1.8.1 - fresh: 0.5.2 - mime-types: 2.1.35 - on-finished: 2.4.1 - proxy-addr: 2.0.7 - qs: 6.13.0 - tmp-cache: 1.1.0 - type-is: 1.6.18 - vary: 1.1.2 - youch: 3.3.4 - - '@adonisjs/logger@6.0.3': - dependencies: - '@poppinss/utils': 6.8.3 - abstract-logging: 2.0.1 - pino: 8.21.0 - - '@adonisjs/lucid@21.3.0(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(luxon@3.5.0)': - dependencies: - '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) - '@adonisjs/presets': 2.6.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0)) - '@faker-js/faker': 9.2.0 - '@poppinss/hooks': 7.2.4 - '@poppinss/macroable': 1.0.3 - '@poppinss/utils': 6.8.3 - fast-deep-equal: 3.1.3 - igniculus: 1.5.0 - kleur: 4.1.5 - knex: 3.1.0 - knex-dynamic-connection: 3.2.0 - pretty-hrtime: 1.0.3 - qs: 6.13.0 - slash: 5.1.0 - tarn: 3.0.2 - optionalDependencies: - '@adonisjs/assembler': 7.8.2(typescript@5.4.5) - luxon: 3.5.0 - transitivePeerDependencies: - - better-sqlite3 - - mysql - - mysql2 - - pg - - pg-native - - sqlite3 - - supports-color - - tedious - - '@adonisjs/presets@2.6.3(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))': - dependencies: - '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) - '@poppinss/utils': 6.8.3 - optionalDependencies: - '@adonisjs/assembler': 7.8.2(typescript@5.4.5) - - '@adonisjs/repl@4.0.1': - dependencies: - '@poppinss/colors': 4.1.3 - string-width: 7.2.0 - - '@adonisjs/tsconfig@1.4.0': {} - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': dependencies: '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) @@ -6397,11 +4845,6 @@ snapshots: '@andrewbranch/untar.js@1.0.3': {} - '@antfu/install-pkg@0.4.1': - dependencies: - package-manager-detector: 0.2.2 - tinyexec: 0.3.1 - '@apidevtools/json-schema-ref-parser@9.0.9': dependencies: '@jsdevtools/ono': 7.1.3 @@ -6429,8 +4872,6 @@ snapshots: typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 - '@arr/every@1.0.1': {} - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -6785,10 +5226,6 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - '@docsearch/css@3.6.0': {} '@docsearch/js@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': @@ -7103,10 +5540,6 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true - '@faker-js/faker@9.2.0': {} - - '@fastify/deepmerge@2.0.0': {} - '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -7219,68 +5652,6 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@japa/api-client@2.0.3(@japa/runner@3.1.4)': - dependencies: - '@japa/runner': 3.1.4 - '@poppinss/hooks': 7.2.4 - '@poppinss/macroable': 1.0.3 - '@types/superagent': 8.1.9 - cookie: 0.6.0 - set-cookie-parser: 2.7.0 - superagent: 8.1.2 - transitivePeerDependencies: - - supports-color - optional: true - - '@japa/core@9.0.1': - dependencies: - '@poppinss/cliui': 6.4.1 - '@poppinss/hooks': 7.2.4 - '@poppinss/macroable': 1.0.3 - async-retry: 1.3.3 - emittery: 1.0.3 - string-width: 7.2.0 - time-span: 5.1.0 - optional: true - - '@japa/errors-printer@3.0.4': - dependencies: - '@poppinss/colors': 4.1.3 - jest-diff: 29.7.0 - supports-color: 9.4.0 - youch: 3.3.4 - youch-terminal: 2.2.3 - optional: true - - '@japa/plugin-adonisjs@3.0.1(@adonisjs/core@6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0))(@japa/api-client@2.0.3(@japa/runner@3.1.4))(@japa/runner@3.1.4)(playwright@1.48.2)': - dependencies: - '@adonisjs/core': 6.14.1(@adonisjs/assembler@7.8.2(typescript@5.4.5))(@vinejs/vine@2.1.0) - '@japa/runner': 3.1.4 - optionalDependencies: - '@japa/api-client': 2.0.3(@japa/runner@3.1.4) - playwright: 1.48.2 - optional: true - - '@japa/runner@3.1.4': - dependencies: - '@japa/core': 9.0.1 - '@japa/errors-printer': 3.0.4 - '@poppinss/colors': 4.1.3 - '@poppinss/hooks': 7.2.4 - fast-glob: 3.3.2 - find-cache-dir: 5.0.0 - getopts: 2.3.0 - ms: 2.1.3 - serialize-error: 11.0.3 - slash: 5.1.0 - supports-color: 9.4.0 - optional: true - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - optional: true - '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -7298,15 +5669,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jsdevtools/ono@7.1.3': {} - '@lukeed/ms@2.0.2': {} - '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.25.0 @@ -7358,8 +5722,6 @@ snapshots: '@next/swc-win32-x64-msvc@15.0.1': optional: true - '@noble/hashes@1.5.0': {} - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7381,12 +5743,6 @@ snapshots: '@open-draft/until@2.1.0': {} - '@paralleldrive/cuid2@2.2.2': - dependencies: - '@noble/hashes': 1.5.0 - - '@phc/format@1.0.0': {} - '@pkgjs/parseargs@0.11.0': optional: true @@ -7396,89 +5752,6 @@ snapshots: '@polka/url@1.0.0-next.25': {} - '@poppinss/chokidar-ts@4.1.4(typescript@5.4.5)': - dependencies: - chokidar: 3.6.0 - emittery: 1.0.3 - memoize: 10.0.0 - picomatch: 4.0.2 - slash: 5.1.0 - typescript: 5.4.5 - - '@poppinss/chokidar-ts@4.1.4(typescript@5.6.3)': - dependencies: - chokidar: 3.6.0 - emittery: 1.0.3 - memoize: 10.0.0 - picomatch: 4.0.2 - slash: 5.1.0 - typescript: 5.6.3 - optional: true - - '@poppinss/cliui@6.4.1': - dependencies: - '@poppinss/colors': 4.1.3 - cli-boxes: 3.0.0 - cli-table3: 0.6.5 - cli-truncate: 4.0.0 - log-update: 6.1.0 - pretty-hrtime: 1.0.3 - string-width: 7.2.0 - supports-color: 9.4.0 - terminal-size: 4.0.0 - wordwrap: 1.0.0 - - '@poppinss/colors@4.1.3': - dependencies: - kleur: 4.1.5 - - '@poppinss/dumper@0.4.2': - dependencies: - '@poppinss/colors': 4.1.3 - '@sindresorhus/is': 7.0.1 - supports-color: 9.4.0 - - '@poppinss/hooks@7.2.4': {} - - '@poppinss/macroable@1.0.3': {} - - '@poppinss/matchit@3.1.2': - dependencies: - '@arr/every': 1.0.1 - - '@poppinss/middleware@3.2.4': {} - - '@poppinss/multiparty@2.0.1': - dependencies: - http-errors: 2.0.0 - safe-buffer: 5.2.1 - uid-safe: 2.1.5 - - '@poppinss/prompts@3.1.3': - dependencies: - '@poppinss/colors': 4.1.3 - '@poppinss/utils': 6.8.3 - enquirer: 2.4.1 - - '@poppinss/utils@6.8.3': - dependencies: - '@lukeed/ms': 2.0.2 - '@types/bytes': 3.1.4 - '@types/pluralize': 0.0.33 - bytes: 3.1.2 - case-anything: 3.1.0 - flattie: 1.1.1 - pluralize: 8.0.0 - safe-stable-stringify: 2.5.0 - secure-json-parse: 2.7.0 - slash: 5.1.0 - slugify: 1.6.6 - truncatise: 0.0.8 - - '@poppinss/validator-lite@1.0.3': - dependencies: - validator: 13.12.0 - '@redocly/ajv@8.11.2': dependencies: fast-deep-equal: 3.1.3 @@ -7561,8 +5834,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true - '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/core@1.22.2': dependencies: '@shikijs/engine-javascript': 1.22.2 @@ -7594,19 +5865,8 @@ snapshots: '@shikijs/vscode-textmate@9.3.0': {} - '@sinclair/typebox@0.27.8': - optional: true - '@sindresorhus/is@4.6.0': {} - '@sindresorhus/is@6.3.1': {} - - '@sindresorhus/is@7.0.1': {} - - '@sindresorhus/merge-streams@2.3.0': {} - - '@sindresorhus/merge-streams@4.0.0': {} - '@size-limit/esbuild@11.1.6(size-limit@11.1.6)': dependencies: esbuild: 0.24.0 @@ -7669,83 +5929,36 @@ snapshots: transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.7.4': - optional: true - '@swc/core-darwin-arm64@1.9.1': optional: true - '@swc/core-darwin-x64@1.7.4': - optional: true - '@swc/core-darwin-x64@1.9.1': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.4': - optional: true - '@swc/core-linux-arm-gnueabihf@1.9.1': optional: true - '@swc/core-linux-arm64-gnu@1.7.4': - optional: true - '@swc/core-linux-arm64-gnu@1.9.1': optional: true - '@swc/core-linux-arm64-musl@1.7.4': - optional: true - '@swc/core-linux-arm64-musl@1.9.1': optional: true - '@swc/core-linux-x64-gnu@1.7.4': - optional: true - '@swc/core-linux-x64-gnu@1.9.1': optional: true - '@swc/core-linux-x64-musl@1.7.4': - optional: true - '@swc/core-linux-x64-musl@1.9.1': optional: true - '@swc/core-win32-arm64-msvc@1.7.4': - optional: true - '@swc/core-win32-arm64-msvc@1.9.1': optional: true - '@swc/core-win32-ia32-msvc@1.7.4': - optional: true - '@swc/core-win32-ia32-msvc@1.9.1': optional: true - '@swc/core-win32-x64-msvc@1.7.4': - optional: true - '@swc/core-win32-x64-msvc@1.9.1': optional: true - '@swc/core@1.7.4(@swc/helpers@0.5.13)': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.12 - optionalDependencies: - '@swc/core-darwin-arm64': 1.7.4 - '@swc/core-darwin-x64': 1.7.4 - '@swc/core-linux-arm-gnueabihf': 1.7.4 - '@swc/core-linux-arm64-gnu': 1.7.4 - '@swc/core-linux-arm64-musl': 1.7.4 - '@swc/core-linux-x64-gnu': 1.7.4 - '@swc/core-linux-x64-musl': 1.7.4 - '@swc/core-win32-arm64-msvc': 1.7.4 - '@swc/core-win32-ia32-msvc': 1.7.4 - '@swc/core-win32-x64-msvc': 1.7.4 - '@swc/helpers': 0.5.13 - '@swc/core@1.9.1(@swc/helpers@0.5.13)': dependencies: '@swc/counter': 0.1.3 @@ -7769,10 +5982,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/types@0.1.12': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types@0.1.14': dependencies: '@swc/counter': 0.1.3 @@ -7805,26 +6014,9 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.1 - '@tokenizer/token@0.3.0': {} - '@tootallnate/once@2.0.0': optional: true - '@ts-morph/common@0.24.0': - dependencies: - fast-glob: 3.3.2 - minimatch: 9.0.5 - mkdirp: 3.0.1 - path-browserify: 1.0.1 - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - '@tsconfig/node20@20.1.4': {} '@types/aria-query@5.0.4': {} @@ -7850,13 +6042,8 @@ snapshots: dependencies: '@babel/types': 7.25.2 - '@types/bytes@3.1.4': {} - '@types/cookie@0.6.0': {} - '@types/cookiejar@2.1.5': - optional: true - '@types/degit@2.8.6': {} '@types/estree@1.0.5': {} @@ -7865,8 +6052,6 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/he@1.2.3': {} - '@types/js-yaml@4.0.9': {} '@types/json-schema@7.0.15': {} @@ -7886,31 +6071,20 @@ snapshots: '@types/mdurl@2.0.0': {} - '@types/methods@1.1.4': - optional: true - '@types/minimist@1.2.5': {} '@types/node@12.20.55': {} - '@types/node@20.14.14': - dependencies: - undici-types: 5.26.5 - '@types/node@22.9.0': dependencies: undici-types: 6.19.8 '@types/normalize-package-data@2.4.4': {} - '@types/pluralize@0.0.33': {} - '@types/prop-types@15.7.12': {} '@types/pug@2.0.10': {} - '@types/qs@6.9.17': {} - '@types/react-dom@18.3.0': dependencies: '@types/react': 18.3.12 @@ -7936,37 +6110,14 @@ snapshots: '@types/statuses@2.0.5': {} - '@types/superagent@8.1.9': - dependencies: - '@types/cookiejar': 2.1.5 - '@types/methods': 1.1.4 - '@types/node': 22.9.0 - form-data: 4.0.0 - optional: true - '@types/tough-cookie@4.0.5': {} '@types/unist@3.0.3': {} - '@types/validator@13.12.2': {} - '@types/web-bluetooth@0.0.20': {} '@ungap/structured-clone@1.2.0': {} - '@vinejs/compiler@2.5.0': {} - - '@vinejs/vine@2.1.0': - dependencies: - '@poppinss/macroable': 1.0.3 - '@types/validator': 13.12.2 - '@vinejs/compiler': 2.5.0 - camelcase: 8.0.0 - dayjs: 1.11.13 - dlv: 1.1.3 - normalize-url: 8.0.1 - validator: 13.12.0 - '@vitejs/plugin-react-swc@3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.9.0))': dependencies: '@swc/core': 1.9.1(@swc/helpers@0.5.13) @@ -8008,24 +6159,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)))': - dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.6(supports-color@9.4.0) - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.11 - magicast: 0.3.4 - std-env: 3.7.0 - test-exclude: 7.0.1 - tinyrainbow: 1.2.0 - vitest: 2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)) - transitivePeerDependencies: - - supports-color - '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -8249,17 +6382,6 @@ snapshots: abab@2.0.6: optional: true - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - abstract-logging@2.0.1: {} - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - acorn-globals@7.0.1: dependencies: acorn: 8.12.1 @@ -8269,6 +6391,7 @@ snapshots: acorn-walk@8.3.3: dependencies: acorn: 8.12.1 + optional: true acorn@8.12.1: {} @@ -8345,8 +6468,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - arg@4.1.3: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -8361,23 +6482,12 @@ snapshots: arrify@1.0.1: {} - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - asap@2.0.6: {} assertion-error@2.0.1: {} - async-retry@1.3.3: - dependencies: - retry: 0.13.1 - optional: true - asynckit@0.4.0: {} - atomic-sleep@1.0.0: {} - axios@1.7.7: dependencies: follow-redirects: 1.15.6 @@ -8390,12 +6500,6 @@ snapshots: balanced-match@1.0.2: {} - base64-js@1.5.1: {} - - basic-auth@2.0.1: - dependencies: - safe-buffer: 5.1.2 - better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -8430,11 +6534,6 @@ snapshots: buffer-crc32@1.0.0: {} - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bundle-require@5.0.0(esbuild@0.23.1): dependencies: esbuild: 0.23.1 @@ -8446,8 +6545,6 @@ snapshots: bytes-iec@3.1.1: {} - bytes@3.1.2: {} - cac@6.7.14: {} call-bind@1.0.7: @@ -8469,14 +6566,10 @@ snapshots: camelcase@6.3.0: {} - camelcase@8.0.0: {} - caniuse-lite@1.0.30001646: {} caniuse-lite@1.0.30001677: {} - case-anything@3.1.0: {} - ccount@2.0.1: {} chai@5.1.1: @@ -8518,8 +6611,6 @@ snapshots: chardet@0.7.0: {} - check-disk-space@3.4.0: {} - check-error@2.1.1: {} chokidar@3.6.0: @@ -8546,8 +6637,6 @@ snapshots: dependencies: escape-string-regexp: 5.0.0 - cli-boxes@3.0.0: {} - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -8588,8 +6677,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - code-block-writer@13.0.3: {} - code-red@1.0.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -8624,8 +6711,6 @@ snapshots: colorette@1.4.0: {} - colorette@2.0.19: {} - colorette@2.0.20: {} combined-stream@1.0.8: @@ -8642,54 +6727,24 @@ snapshots: commander@4.1.1: {} - common-path-prefix@3.0.0: - optional: true - component-emitter@1.3.1: {} concat-map@0.0.1: {} consola@3.2.3: {} - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - convert-hrtime@5.0.0: - optional: true - convert-source-map@2.0.0: {} cookie@0.5.0: {} cookie@0.6.0: {} - cookie@0.7.2: {} - - cookie@1.0.1: {} - cookiejar@2.1.4: {} copy-anything@3.0.5: dependencies: is-what: 4.1.16 - copy-file@11.0.0: - dependencies: - graceful-fs: 4.2.11 - p-event: 6.0.1 - - cpy@11.1.0: - dependencies: - copy-file: 11.0.0 - globby: 14.0.2 - junk: 4.0.1 - micromatch: 4.0.7 - p-filter: 4.1.0 - p-map: 7.0.2 - - create-require@1.1.1: {} - cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -8720,8 +6775,6 @@ snapshots: csstype@3.1.3: {} - data-uri-to-buffer@2.0.2: {} - data-urls@3.0.2: dependencies: abab: 2.0.6 @@ -8731,16 +6784,8 @@ snapshots: dataloader@1.4.0: {} - dateformat@4.6.3: {} - - dayjs@1.11.13: {} - de-indent@1.0.2: {} - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.3.6(supports-color@9.4.0): dependencies: ms: 2.1.2 @@ -8765,8 +6810,6 @@ snapshots: decimal.js@10.4.3: optional: true - dedent@1.5.3: {} - deep-eql@5.0.2: {} deepmerge@4.3.1: {} @@ -8797,12 +6840,8 @@ snapshots: delayed-stream@1.0.0: {} - depd@2.0.0: {} - dequal@2.0.3: {} - destroy@1.2.0: {} - detect-indent@6.1.0: {} detect-libc@2.0.3: @@ -8819,17 +6858,10 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 - diff-sequences@29.6.3: - optional: true - - diff@4.0.2: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dlv@1.1.3: {} - dom-accessibility-api@0.5.16: {} domexception@4.0.0: @@ -8837,18 +6869,12 @@ snapshots: webidl-conversions: 7.0.0 optional: true - dotenv@16.4.5: {} - dotenv@8.6.0: {} eastasianwidth@0.2.0: {} - ee-first@1.1.1: {} - electron-to-chromium@1.5.52: {} - emittery@1.0.3: {} - emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -8857,12 +6883,6 @@ snapshots: emojilib@2.4.0: {} - encodeurl@2.0.0: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -8876,16 +6896,12 @@ snapshots: dependencies: is-arrayish: 0.2.1 - error-stack-parser-es@0.1.5: {} - es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 es-errors@1.3.0: {} - es-module-lexer@1.5.4: {} - es6-promise@3.3.1: {} esbuild@0.20.2: @@ -9013,8 +7029,6 @@ snapshots: esm-env@1.0.0: {} - esm@3.2.25: {} - esprima@4.0.1: {} estraverse@5.3.0: @@ -9029,14 +7043,8 @@ snapshots: esutils@2.0.3: optional: true - etag@1.8.1: {} - - event-target-shim@5.0.1: {} - eventemitter3@5.0.1: {} - events@3.3.0: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.3 @@ -9061,21 +7069,6 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - execa@9.5.1: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.3 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.0 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.1.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.1 - expect-type@1.1.0: {} extendable-error@0.1.7: {} @@ -9086,8 +7079,6 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 - fast-copy@3.0.2: {} - fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -9098,12 +7089,8 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.5 - fast-redact@3.5.0: {} - fast-safe-stringify@2.1.1: {} - fastest-levenshtein@1.0.16: {} - fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -9120,17 +7107,6 @@ snapshots: fflate@0.8.2: {} - figures@6.1.0: - dependencies: - is-unicode-supported: 2.1.0 - - file-type@19.6.0: - dependencies: - get-stream: 9.0.1 - strtok3: 9.0.1 - token-types: 6.0.0 - uint8array-extras: 1.4.0 - fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 @@ -9139,14 +7115,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-cache-dir@5.0.0: - dependencies: - common-path-prefix: 3.0.0 - pkg-dir: 7.0.0 - optional: true - - find-up-simple@1.0.0: {} - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -9157,14 +7125,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-up@6.3.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - optional: true - - flattie@1.1.1: {} - focus-trap@7.5.4: dependencies: tabbable: 6.2.0 @@ -9182,24 +7142,12 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - formidable@2.1.2: - dependencies: - dezalgo: 1.0.4 - hexoid: 1.0.0 - once: 1.4.0 - qs: 6.13.0 - optional: true - formidable@3.5.2: dependencies: dezalgo: 1.0.4 hexoid: 2.0.0 once: 1.4.0 - forwarded@0.2.0: {} - - fresh@0.5.2: {} - fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 @@ -9244,34 +7192,14 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 - get-package-type@0.1.0: {} - - get-port@7.1.0: {} - - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - get-stream@6.0.1: {} get-stream@8.0.1: {} - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - - getopts@2.3.0: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -9311,15 +7239,6 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 - globby@14.0.2: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.2 - ignore: 5.3.1 - path-type: 5.0.0 - slash: 5.1.0 - unicorn-magic: 0.1.0 - globrex@0.1.2: {} gopd@1.0.1: @@ -9379,31 +7298,15 @@ snapshots: headers-polyfill@4.0.3: {} - help-me@5.0.0: {} - - hexoid@1.0.0: - optional: true - hexoid@2.0.0: {} highlight.js@10.7.3: {} hookable@5.5.3: {} - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - hosted-git-info@7.0.2: - dependencies: - lru-cache: 10.4.3 - - hot-hook@0.2.6: + hosted-git-info@4.1.0: dependencies: - chokidar: 3.6.0 - fast-glob: 3.3.2 - picomatch: 4.0.2 - read-package-up: 11.0.0 + lru-cache: 6.0.0 html-encoding-sniffer@3.0.0: dependencies: @@ -9414,14 +7317,6 @@ snapshots: html-void-elements@3.0.0: {} - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 @@ -9452,8 +7347,6 @@ snapshots: human-signals@5.0.0: {} - human-signals@8.0.0: {} - husky@9.1.5: {} iconv-lite@0.4.24: @@ -9465,10 +7358,6 @@ snapshots: safer-buffer: 2.1.2 optional: true - ieee754@1.2.1: {} - - igniculus@1.5.0: {} - ignore@5.3.1: {} import-meta-resolve@4.1.0: {} @@ -9477,8 +7366,6 @@ snapshots: index-to-position@0.1.2: {} - inflation@2.1.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -9486,10 +7373,6 @@ snapshots: inherits@2.0.4: {} - interpret@2.2.0: {} - - ipaddr.js@1.9.1: {} - is-arrayish@0.2.1: {} is-arrayish@0.3.2: @@ -9527,8 +7410,6 @@ snapshots: is-plain-obj@1.1.0: {} - is-plain-obj@4.1.0: {} - is-potential-custom-element-name@1.0.1: optional: true @@ -9540,14 +7421,10 @@ snapshots: is-stream@3.0.0: {} - is-stream@4.0.1: {} - is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - is-unicode-supported@2.1.0: {} - is-what@4.1.16: {} is-windows@1.0.2: {} @@ -9581,17 +7458,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - optional: true - - jest-get-type@29.6.3: - optional: true - jiti@2.4.0: {} joycon@3.1.1: {} @@ -9665,47 +7531,10 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonschema@1.4.1: {} - - junk@4.0.1: {} - kind-of@6.0.3: {} kleur@4.1.5: {} - knex-dynamic-connection@3.2.0: - dependencies: - debug: 4.3.6(supports-color@9.4.0) - knex: 3.1.0 - transitivePeerDependencies: - - better-sqlite3 - - mysql - - mysql2 - - pg - - pg-native - - sqlite3 - - supports-color - - tedious - - knex@3.1.0: - dependencies: - colorette: 2.0.19 - commander: 10.0.1 - debug: 4.3.4 - escalade: 3.1.2 - esm: 3.2.25 - get-package-type: 0.1.0 - getopts: 2.3.0 - interpret: 2.2.0 - lodash: 4.17.21 - pg-connection-string: 2.6.2 - rechoir: 0.8.0 - resolve-from: 5.0.0 - tarn: 3.0.2 - tildify: 2.0.0 - transitivePeerDependencies: - - supports-color - lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} @@ -9746,11 +7575,6 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - optional: true - lodash.isequal@4.5.0: {} lodash.sortby@4.7.0: {} @@ -9792,8 +7616,6 @@ snapshots: dependencies: yallist: 4.0.0 - luxon@3.5.0: {} - lz-string@1.5.0: {} magic-string@0.30.11: @@ -9814,8 +7636,6 @@ snapshots: dependencies: semver: 7.6.3 - make-error@1.3.6: {} - map-obj@1.0.1: {} map-obj@4.3.0: {} @@ -9849,14 +7669,6 @@ snapshots: mdn-data@2.0.30: {} - media-typer@0.3.0: {} - - media-typer@1.1.0: {} - - memoize@10.0.0: - dependencies: - mimic-function: 5.0.1 - meow@10.1.5: dependencies: '@types/minimist': 1.2.5 @@ -9956,8 +7768,6 @@ snapshots: dependencies: minimist: 1.2.8 - mkdirp@3.0.1: {} - mri@1.2.0: {} mrmime@2.0.0: {} @@ -10019,8 +7829,6 @@ snapshots: muggle-string@0.4.1: {} - mustache@4.2.0: {} - mute-stream@2.0.0: {} mz@2.7.0: @@ -10037,8 +7845,6 @@ snapshots: dependencies: picocolors: 1.1.1 - negotiator@0.6.3: {} - neo-async@2.6.2: {} next@15.0.1(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -10087,16 +7893,8 @@ snapshots: semver: 7.6.3 validate-npm-package-license: 3.0.4 - normalize-package-data@6.0.2: - dependencies: - hosted-git-info: 7.0.2 - semver: 7.6.3 - validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - normalize-url@8.0.1: {} - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -10105,11 +7903,6 @@ snapshots: dependencies: path-key: 4.0.0 - npm-run-path@6.0.0: - dependencies: - path-key: 4.0.0 - unicorn-magic: 0.3.0 - nwsapi@2.2.12: optional: true @@ -10117,12 +7910,6 @@ snapshots: object-inspect@1.13.1: {} - on-exit-leak-free@2.1.2: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -10161,18 +7948,10 @@ snapshots: outvariant@1.4.3: {} - p-event@6.0.1: - dependencies: - p-timeout: 6.1.3 - p-filter@2.1.0: dependencies: p-map: 2.1.0 - p-filter@4.1.0: - dependencies: - p-map: 7.0.2 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -10181,11 +7960,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.1.1 - optional: true - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -10194,32 +7968,18 @@ snapshots: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - optional: true - p-map@2.1.0: {} p-map@5.5.0: dependencies: aggregate-error: 4.0.1 - p-map@7.0.2: {} - - p-timeout@6.1.3: {} - p-try@2.2.0: {} package-json-from-dist@1.0.0: {} package-manager-detector@0.2.2: {} - parse-imports@2.2.1: - dependencies: - es-module-lexer: 1.5.4 - slashes: 3.0.12 - parse-json@5.2.0: dependencies: '@babel/code-frame': 7.24.7 @@ -10233,8 +7993,6 @@ snapshots: index-to-position: 0.1.2 type-fest: 4.20.1 - parse-ms@4.0.0: {} - parse5-htmlparser2-tree-adapter@6.0.1: dependencies: parse5: 6.0.1 @@ -10252,17 +8010,12 @@ snapshots: path-exists@4.0.0: {} - path-exists@5.0.0: - optional: true - path-is-absolute@1.0.1: {} path-key@3.1.1: {} path-key@4.0.0: {} - path-parse@1.0.7: {} - path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -10272,14 +8025,10 @@ snapshots: path-type@4.0.0: {} - path-type@5.0.0: {} - pathe@1.1.2: {} pathval@2.0.0: {} - peek-readable@5.3.1: {} - perfect-debounce@1.0.0: {} periscopic@3.1.0: @@ -10288,8 +8037,6 @@ snapshots: estree-walker: 3.0.3 is-reference: 3.0.2 - pg-connection-string@2.6.2: {} - picocolors@1.0.1: {} picocolors@1.1.1: {} @@ -10302,55 +8049,8 @@ snapshots: pify@4.0.1: {} - pino-abstract-transport@1.2.0: - dependencies: - readable-stream: 4.5.2 - split2: 4.2.0 - - pino-abstract-transport@2.0.0: - dependencies: - split2: 4.2.0 - - pino-pretty@11.3.0: - dependencies: - colorette: 2.0.20 - dateformat: 4.6.3 - fast-copy: 3.0.2 - fast-safe-stringify: 2.1.1 - help-me: 5.0.0 - joycon: 3.1.1 - minimist: 1.2.8 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 - pump: 3.0.2 - readable-stream: 4.5.2 - secure-json-parse: 2.7.0 - sonic-boom: 4.2.0 - strip-json-comments: 3.1.1 - - pino-std-serializers@6.2.2: {} - - pino@8.21.0: - dependencies: - atomic-sleep: 1.0.0 - fast-redact: 3.5.0 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.2.0 - pino-std-serializers: 6.2.2 - process-warning: 3.0.0 - quick-format-unescaped: 4.0.4 - real-require: 0.2.0 - safe-stable-stringify: 2.5.0 - sonic-boom: 3.8.1 - thread-stream: 2.7.0 - pirates@4.0.6: {} - pkg-dir@7.0.0: - dependencies: - find-up: 6.3.0 - optional: true - playwright-core@1.48.2: {} playwright@1.48.2: @@ -10393,70 +8093,26 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - optional: true - - pretty-hrtime@1.0.3: {} - - pretty-ms@9.1.0: - dependencies: - parse-ms: 4.0.0 - - printable-characters@1.0.42: {} - - process-warning@3.0.0: {} - - process@0.11.10: {} - property-information@6.5.0: {} - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - proxy-from-env@1.1.0: {} pseudomap@1.0.2: {} psl@1.9.0: {} - pump@3.0.2: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - punycode@2.3.1: {} qs@6.12.1: dependencies: side-channel: 1.0.6 - qs@6.13.0: - dependencies: - side-channel: 1.0.6 - querystringify@2.2.0: {} queue-microtask@1.2.3: {} - quick-format-unescaped@4.0.4: {} - quick-lru@5.1.1: {} - random-bytes@1.0.0: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -10470,21 +8126,12 @@ snapshots: react-is@17.0.2: {} - react-is@18.3.1: - optional: true - react-refresh@0.14.2: {} react@18.3.1: dependencies: loose-envify: 1.4.0 - read-package-up@11.0.0: - dependencies: - find-up-simple: 1.0.0 - read-pkg: 9.0.1 - type-fest: 4.26.1 - read-pkg-up@8.0.0: dependencies: find-up: 5.0.0 @@ -10498,14 +8145,6 @@ snapshots: parse-json: 5.2.0 type-fest: 1.4.0 - read-pkg@9.0.1: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 - parse-json: 8.1.0 - type-fest: 4.26.1 - unicorn-magic: 0.1.0 - read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -10513,26 +8152,12 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 - readable-stream@4.5.2: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - readdirp@3.6.0: dependencies: picomatch: 2.3.1 readdirp@4.0.2: {} - real-require@0.2.0: {} - - rechoir@0.8.0: - dependencies: - resolve: 1.22.8 - redent@4.0.0: dependencies: indent-string: 5.0.0 @@ -10552,20 +8177,11 @@ snapshots: resolve-from@5.0.0: {} - resolve@1.22.8: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 signal-exit: 4.1.0 - retry@0.13.1: - optional: true - reusify@1.0.4: {} rfdc@1.4.1: {} @@ -10608,12 +8224,6 @@ snapshots: dependencies: mri: 1.2.0 - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - safe-stable-stringify@2.5.0: {} - safer-buffer@2.1.2: {} sander@0.5.1: @@ -10634,17 +8244,10 @@ snapshots: search-insights@2.13.0: {} - secure-json-parse@2.7.0: {} - semver@6.3.1: {} semver@7.6.3: {} - serialize-error@11.0.3: - dependencies: - type-fest: 2.19.0 - optional: true - set-cookie-parser@2.7.0: {} set-function-length@1.2.2: @@ -10656,8 +8259,6 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - setprototypeof@1.2.0: {} - sharp@0.33.5: dependencies: color: 4.2.3 @@ -10748,10 +8349,6 @@ snapshots: slash@4.0.0: {} - slash@5.1.0: {} - - slashes@3.0.12: {} - slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -10762,16 +8359,6 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - slugify@1.6.6: {} - - sonic-boom@3.8.1: - dependencies: - atomic-sleep: 1.0.0 - - sonic-boom@4.2.0: - dependencies: - atomic-sleep: 1.0.0 - sorcery@0.11.1: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -10812,19 +8399,10 @@ snapshots: speakingurl@14.0.1: {} - split-lines@3.0.0: {} - - split2@4.2.0: {} - sprintf-js@1.0.3: {} stackback@0.0.2: {} - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - statuses@2.0.1: {} std-env@3.7.0: {} @@ -10853,10 +8431,6 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -10876,8 +8450,6 @@ snapshots: strip-final-newline@3.0.0: {} - strip-final-newline@4.0.0: {} - strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -10886,13 +8458,6 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-json-comments@3.1.1: {} - - strtok3@9.0.1: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 5.3.1 - styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 @@ -10922,22 +8487,6 @@ snapshots: transitivePeerDependencies: - supports-color - superagent@8.1.2: - dependencies: - component-emitter: 1.3.1 - cookiejar: 2.1.4 - debug: 4.3.7(supports-color@9.4.0) - fast-safe-stringify: 2.1.1 - form-data: 4.0.0 - formidable: 2.1.2 - methods: 1.1.2 - mime: 2.6.0 - qs: 6.13.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - optional: true - superjson@2.2.1: dependencies: copy-anything: 3.0.5 @@ -10957,8 +8506,6 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 - supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@3.8.6(@babel/core@7.26.0)(postcss@8.4.47)(svelte@4.2.19): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -11024,14 +8571,8 @@ snapshots: tabbable@6.2.0: {} - tarn@3.0.2: {} - - tempura@0.4.1: {} - term-size@2.2.1: {} - terminal-size@4.0.0: {} - test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 @@ -11046,17 +8587,6 @@ snapshots: dependencies: any-promise: 1.3.0 - thread-stream@2.7.0: - dependencies: - real-require: 0.2.0 - - tildify@2.0.0: {} - - time-span@5.1.0: - dependencies: - convert-hrtime: 5.0.0 - optional: true - tiny-glob@0.2.9: dependencies: globalyzer: 0.1.0 @@ -11083,8 +8613,6 @@ snapshots: tinyspy@3.0.2: {} - tmp-cache@1.1.0: {} - tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -11095,13 +8623,6 @@ snapshots: dependencies: is-number: 7.0.0 - toidentifier@1.0.1: {} - - token-types@6.0.0: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - totalist@3.0.1: {} tough-cookie@4.1.4: @@ -11128,35 +8649,8 @@ snapshots: trim-newlines@4.1.1: {} - truncatise@0.0.8: {} - ts-interface-checker@0.1.13: {} - ts-morph@23.0.0: - dependencies: - '@ts-morph/common': 0.24.0 - code-block-writer: 13.0.3 - - ts-node@10.9.2(@swc/core@1.7.4(@swc/helpers@0.5.13))(@types/node@20.14.14)(typescript@5.4.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.14 - acorn: 8.12.1 - acorn-walk: 8.3.3 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.7.4(@swc/helpers@0.5.13) - ts-results-es@4.2.0: {} tslib@2.8.1: {} @@ -11167,12 +8661,12 @@ snapshots: cac: 6.7.14 chokidar: 3.6.0 consola: 3.2.3 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) esbuild: 0.23.1 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - picocolors: 1.0.1 + picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.47)(yaml@2.5.1) resolve-from: 5.0.0 rollup: 4.20.0 @@ -11189,50 +8683,14 @@ snapshots: - tsx - yaml - tsup@8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1): - dependencies: - bundle-require: 5.0.0(esbuild@0.23.1) - cac: 6.7.14 - chokidar: 3.6.0 - consola: 3.2.3 - debug: 4.3.6(supports-color@9.4.0) - esbuild: 0.23.1 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - picocolors: 1.0.1 - postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.47)(yaml@2.5.1) - resolve-from: 5.0.0 - rollup: 4.20.0 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tree-kill: 1.2.2 - optionalDependencies: - '@swc/core': 1.9.1(@swc/helpers@0.5.13) - postcss: 8.4.47 - typescript: 5.6.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - type-fest@0.21.3: {} type-fest@1.4.0: {} - type-fest@2.19.0: - optional: true - type-fest@4.20.1: {} type-fest@4.26.1: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - typescript@5.4.5: {} typescript@5.5.4: {} @@ -11244,22 +8702,10 @@ snapshots: uglify-js@3.18.0: optional: true - uid-safe@2.1.5: - dependencies: - random-bytes: 1.0.0 - - uint8array-extras@1.4.0: {} - - undici-types@5.26.5: {} - undici-types@6.19.8: {} unicode-emoji-modifier-base@1.0.0: {} - unicorn-magic@0.1.0: {} - - unicorn-magic@0.3.0: {} - unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 @@ -11289,8 +8735,6 @@ snapshots: universalify@2.0.1: {} - unpipe@1.0.0: {} - unplugin-swc@1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.20.0) @@ -11324,8 +8768,6 @@ snapshots: dependencies: react: 18.3.1 - v8-compile-cache-lib@3.0.1: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -11333,10 +8775,6 @@ snapshots: validate-npm-package-name@5.0.1: {} - validator@13.12.0: {} - - vary@1.1.2: {} - vfile-message@4.0.2: dependencies: '@types/unist': 3.0.3 @@ -11699,27 +9137,8 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yn@3.1.1: {} - yocto-queue@0.1.0: {} - yocto-queue@1.1.1: - optional: true - yoctocolors-cjs@2.1.2: {} - yoctocolors@2.1.1: {} - - youch-terminal@2.2.3: - dependencies: - kleur: 4.1.5 - string-width: 4.2.3 - wordwrap: 1.0.0 - - youch@3.3.4: - dependencies: - cookie: 0.7.2 - mustache: 4.2.0 - stacktracey: 2.1.8 - zwitch@2.0.4: {} From 38fdfa27ee56d30d6f66728cfdd76c88889122a4 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 18:52:24 +0100 Subject: [PATCH 15/25] docs(openapi-metadata): cleanup doc --- docs/openapi-metadata/examples.md | 6 ++++-- docs/openapi-metadata/integrations.md | 0 2 files changed, 4 insertions(+), 2 deletions(-) delete mode 100644 docs/openapi-metadata/integrations.md diff --git a/docs/openapi-metadata/examples.md b/docs/openapi-metadata/examples.md index 03b3a5e22..1f9091c9b 100644 --- a/docs/openapi-metadata/examples.md +++ b/docs/openapi-metadata/examples.md @@ -15,8 +15,9 @@ import { generateScalarUI } from "openapi-metadata/ui"; const app = express(); +const document = await generateDocument(yourConfiguration); + app.get("/api", async (req, res) => { - const document = await generateDocument(yourConfiguration); res.send(JSON.stringify(document)); }); @@ -35,8 +36,9 @@ import { generateScalarUI } from "openapi-metadata/ui"; const app = Fastify(); +const document = await generateDocument(yourConfiguration); + app.get("/api", async () => { - const document = await generateDocument(yourConfiguration); return document; }); diff --git a/docs/openapi-metadata/integrations.md b/docs/openapi-metadata/integrations.md deleted file mode 100644 index e69de29bb..000000000 From 47834d9c24312177bd8da6bd656ac8efca6604ab Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 19:06:13 +0100 Subject: [PATCH 16/25] docs(openapi-metadata): fix typos and cleanup nav config --- docs/.vitepress/en.ts | 26 ++++++++++++++------------ docs/openapi-metadata/index.md | 10 +++++----- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/docs/.vitepress/en.ts b/docs/.vitepress/en.ts index fab755b5b..31a6ccaec 100644 --- a/docs/.vitepress/en.ts +++ b/docs/.vitepress/en.ts @@ -71,17 +71,18 @@ export default defineConfig({ }, { text: "openapi-react-query", + base: "/openapi-react-query", items: [ - { text: "Getting Started", link: "/openapi-react-query/" }, - { text: "useQuery", link: "/openapi-react-query/use-query" }, - { text: "useMutation", link: "/openapi-react-query/use-mutation" }, + { text: "Getting Started", link: "/" }, + { text: "useQuery", link: "/use-query" }, + { text: "useMutation", link: "/use-mutation" }, { text: "useSuspenseQuery", - link: "/openapi-react-query/use-suspense-query", + link: "/use-suspense-query", }, { text: "queryOptions", - link: "/openapi-react-query/query-options", + link: "/query-options", }, { text: "About", link: "/openapi-react-query/about" }, ], @@ -101,14 +102,15 @@ export default defineConfig({ }, { text: "openapi-metadata", + base: "/openapi-metadata", items: [ - { text: "Getting Started", link: "/openapi-metadata/" }, - { text: "Decorators", link: "/openapi-metadata/decorators" }, - { text: "Metadata", link: "/openapi-metadata/metadata" }, - { text: "Type loader", link: "/openapi-metadata/type-loader" }, - { text: "UI Integrations", link: "/openapi-metadata/ui" }, - { text: "Examples", link: "/openapi-metadata/examples" }, - { text: "About", link: "/openapi-metadata/about" }, + { text: "Getting Started", link: "/" }, + { text: "Decorators", link: "/decorators" }, + { text: "Metadata", link: "/metadata" }, + { text: "Type loader", link: "/type-loader" }, + { text: "UI Integrations", link: "/ui" }, + { text: "Examples", link: "/examples" }, + { text: "About", link: "/about" }, ], }, ], diff --git a/docs/openapi-metadata/index.md b/docs/openapi-metadata/index.md index 916dfe164..24b35bc64 100644 --- a/docs/openapi-metadata/index.md +++ b/docs/openapi-metadata/index.md @@ -13,12 +13,12 @@ import { ApiOperation, ApiResponse } from "openapi-metadata/decorators"; import User from "./user"; class UsersController { - @apiOperation({ + @ApiOperation({ method: "get", pattern: "/users", summary: "List users" }) - @apiResponse({ type: [User] }) + @ApiResponse({ type: [User] }) async list() { ... } @@ -29,13 +29,13 @@ class UsersController { import { ApiProperty } from "openapi-metadata/decorators"; class User { - @apiProperty() + @ApiProperty() declare id: number; - @apiProperty() + @ApiProperty() declare name: string; - @apiProperty({ required: false }) + @ApiProperty({ required: false }) declare mobile?: string; } ``` From 006a8aa54edd46f10ee8ff389e0316a0aee3d5d8 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 19:09:18 +0100 Subject: [PATCH 17/25] chore: bump dependencies --- pnpm-lock.yaml | 1977 ++++++++++++++++++++---------------------------- 1 file changed, 808 insertions(+), 1169 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6da1ca68..3ae0fba4a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,13 +19,13 @@ importers: version: 2.27.9 '@playwright/test': specifier: ^1.48.1 - version: 1.48.2 + version: 1.48.1 '@size-limit/preset-small-lib': specifier: ^11.1.6 version: 11.1.6(size-limit@11.1.6) '@types/node': specifier: ^22.8.0 - version: 22.9.0 + version: 22.8.0 del-cli: specifier: ^5.1.0 version: 5.1.0 @@ -40,13 +40,13 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)) + version: 2.1.3(@types/node@22.8.0)(jsdom@20.0.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3)) docs: devDependencies: vitepress: specifier: 1.3.2 - version: 1.3.2(@algolia/client-search@4.23.3)(@types/node@22.9.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3) + version: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.8.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3) packages/openapi-fetch: dependencies: @@ -86,13 +86,13 @@ importers: version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.9.0) + version: 5.4.10(@types/node@22.8.0) packages/openapi-fetch/examples/nextjs: dependencies: next: specifier: 15.0.1 - version: 15.0.1(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.0.1(@playwright/test@1.48.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) openapi-fetch: specifier: workspace:^ version: link:../.. @@ -120,7 +120,7 @@ importers: dependencies: '@tanstack/react-query': specifier: ^5.59.16 - version: 5.59.20(react@18.3.1) + version: 5.59.16(react@18.3.1) openapi-fetch: specifier: workspace:^ version: link:../.. @@ -142,13 +142,13 @@ importers: version: 18.3.0 '@vitejs/plugin-react-swc': specifier: ^3.7.1 - version: 3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.9.0)) + version: 3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.8.0)) typescript: specifier: ^5.6.3 version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.9.0) + version: 5.4.10(@types/node@22.8.0) packages/openapi-fetch/examples/sveltekit: dependencies: @@ -158,13 +158,13 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.3.1 - version: 3.3.1(@sveltejs/kit@2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))) + version: 3.3.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))) '@sveltejs/kit': specifier: ^2.7.3 - version: 2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) + version: 2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.2 - version: 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) + version: 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) openapi-typescript: specifier: workspace:^ version: link:../../../openapi-typescript @@ -176,13 +176,13 @@ importers: version: 3.8.6(@babel/core@7.26.0)(postcss@8.4.47)(svelte@4.2.19) tslib: specifier: ^2.8.0 - version: 2.8.1 + version: 2.8.0 typescript: specifier: ^5.6.3 version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.9.0) + version: 5.4.10(@types/node@22.8.0) packages/openapi-fetch/examples/vue-3: dependencies: @@ -198,7 +198,7 @@ importers: version: 20.1.4 '@vitejs/plugin-vue': specifier: ^5.1.4 - version: 5.1.4(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3)) + version: 5.1.4(vite@5.4.10(@types/node@22.8.0))(vue@3.5.12(typescript@5.6.3)) '@vue/tsconfig': specifier: ^0.5.1 version: 0.5.1 @@ -210,10 +210,10 @@ importers: version: 5.6.3 vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.9.0) + version: 5.4.10(@types/node@22.8.0) vue-tsc: specifier: ^2.1.6 - version: 2.1.10(typescript@5.6.3) + version: 2.1.6(typescript@5.6.3) packages/openapi-metadata: dependencies: @@ -229,10 +229,10 @@ importers: version: 4.17.7 '@types/node': specifier: ^22.1.0 - version: 22.9.0 + version: 22.8.0 '@vitest/coverage-v8': specifier: ^2.0.5 - version: 2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5))) + version: 2.1.4(vitest@2.1.3(@types/node@22.8.0)(jsdom@20.0.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3))) del-cli: specifier: ^5.1.0 version: 5.1.0 @@ -247,16 +247,16 @@ importers: version: 0.2.2 tsup: specifier: ^8.2.4 - version: 8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.4.5)(yaml@2.5.1) + version: 8.3.5(@swc/core@1.7.39(@swc/helpers@0.5.13))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1) type-fest: specifier: ^4.26.1 version: 4.26.1 typescript: specifier: ^5.4.5 - version: 5.4.5 + version: 5.6.3 unplugin-swc: specifier: ^1.5.1 - version: 1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0) + version: 1.5.1(@swc/core@1.7.39(@swc/helpers@0.5.13))(rollup@4.24.0) packages/openapi-react-query: dependencies: @@ -266,7 +266,7 @@ importers: devDependencies: '@tanstack/react-query': specifier: ^5.59.16 - version: 5.59.20(react@18.3.1) + version: 5.59.16(react@18.3.1) '@testing-library/react': specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.1.0)(@types/react-dom@18.3.1)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -275,7 +275,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.3.3(vite@5.4.10(@types/node@22.9.0)) + version: 4.3.3(vite@5.4.10(@types/node@22.8.0)) del-cli: specifier: ^5.1.0 version: 5.1.0 @@ -287,7 +287,7 @@ importers: version: 8.0.1 msw: specifier: ^2.5.1 - version: 2.6.0(@types/node@22.9.0)(typescript@5.6.3) + version: 2.5.1(@types/node@22.8.0)(typescript@5.6.3) openapi-fetch: specifier: workspace:^ version: link:../openapi-fetch @@ -305,7 +305,7 @@ importers: dependencies: '@redocly/openapi-core': specifier: ^1.25.9 - version: 1.25.11(supports-color@9.4.0) + version: 1.25.9(supports-color@9.4.0) ansi-colors: specifier: ^4.1.3 version: 4.1.3 @@ -348,13 +348,13 @@ importers: version: 5.6.3 vite-node: specifier: ^2.1.3 - version: 2.1.4(@types/node@22.9.0)(supports-color@9.4.0) + version: 2.1.3(@types/node@22.8.0)(supports-color@9.4.0) packages/openapi-typescript-helpers: devDependencies: typescript: specifier: ^5.5.4 - version: 5.6.3 + version: 5.5.4 packages/swr-openapi: dependencies: @@ -403,7 +403,7 @@ importers: version: 5.5.4 vitest: specifier: 2.0.5 - version: 2.0.5(@types/node@22.9.0)(jsdom@20.0.3) + version: 2.0.5(@types/node@22.8.0)(jsdom@20.0.3) packages: @@ -427,50 +427,50 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/cache-browser-local-storage@4.23.3': - resolution: {integrity: sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==} + '@algolia/cache-browser-local-storage@4.24.0': + resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} - '@algolia/cache-common@4.23.3': - resolution: {integrity: sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==} + '@algolia/cache-common@4.24.0': + resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} - '@algolia/cache-in-memory@4.23.3': - resolution: {integrity: sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==} + '@algolia/cache-in-memory@4.24.0': + resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} - '@algolia/client-account@4.23.3': - resolution: {integrity: sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==} + '@algolia/client-account@4.24.0': + resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} - '@algolia/client-analytics@4.23.3': - resolution: {integrity: sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==} + '@algolia/client-analytics@4.24.0': + resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} - '@algolia/client-common@4.23.3': - resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} + '@algolia/client-common@4.24.0': + resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} - '@algolia/client-personalization@4.23.3': - resolution: {integrity: sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==} + '@algolia/client-personalization@4.24.0': + resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} - '@algolia/client-search@4.23.3': - resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} + '@algolia/client-search@4.24.0': + resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} - '@algolia/logger-common@4.23.3': - resolution: {integrity: sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==} + '@algolia/logger-common@4.24.0': + resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} - '@algolia/logger-console@4.23.3': - resolution: {integrity: sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==} + '@algolia/logger-console@4.24.0': + resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} - '@algolia/recommend@4.23.3': - resolution: {integrity: sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==} + '@algolia/recommend@4.24.0': + resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} - '@algolia/requester-browser-xhr@4.23.3': - resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} + '@algolia/requester-browser-xhr@4.24.0': + resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} - '@algolia/requester-common@4.23.3': - resolution: {integrity: sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==} + '@algolia/requester-common@4.24.0': + resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - '@algolia/requester-node-http@4.23.3': - resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} + '@algolia/requester-node-http@4.24.0': + resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} - '@algolia/transporter@4.23.3': - resolution: {integrity: sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==} + '@algolia/transporter@4.24.0': + resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -491,24 +491,20 @@ packages: resolution: {integrity: sha512-gAYzWaIbq8m9MuvxKmeDn24Or4mIWCSpRR0NNXAVoGUTPraB1SP3blPa5NycUPTnToKLA5DAwHLhwtWpslMbKQ==} engines: {node: '>=18'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + '@babel/code-frame@7.26.0': + resolution: {integrity: sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.2': - resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + '@babel/compat-data@7.26.0': + resolution: {integrity: sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==} engines: {node: '>=6.9.0'} '@babel/core@7.26.0': resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.2': - resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + '@babel/generator@7.26.0': + resolution: {integrity: sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.25.9': @@ -525,22 +521,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} @@ -553,34 +541,25 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.3': - resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + '@babel/parser@7.26.0': + resolution: {integrity: sha512-aP8x5pIw3xvYr/sXT+SEUwyhrXT8rUJRZltK/qN3Db80dcKpTett8cJxHyjk+xYSVXvNnl2SfcJVjbwxpOSscA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.24.7': - resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.24.7': - resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.0': - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} '@babel/template@7.25.9': @@ -591,10 +570,6 @@ packages: resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} @@ -735,14 +710,14 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@docsearch/css@3.6.0': - resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} + '@docsearch/css@3.6.2': + resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==} - '@docsearch/js@3.6.0': - resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} + '@docsearch/js@3.6.2': + resolution: {integrity: sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==} - '@docsearch/react@3.6.0': - resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} + '@docsearch/react@3.6.2': + resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -1430,14 +1405,12 @@ packages: cpu: [x64] os: [win32] - '@inquirer/confirm@5.0.1': - resolution: {integrity: sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw==} + '@inquirer/confirm@5.0.0': + resolution: {integrity: sha512-6QEzj6bZg8atviRIL+pR0tODC854cYSjvZxkyCarr8DVaOJPEyuGys7GmEG3W0Rb8kKSQec7P6okt0sJvNneFw==} engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - '@inquirer/core@10.0.1': - resolution: {integrity: sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==} + '@inquirer/core@10.0.0': + resolution: {integrity: sha512-7dwoKCGvgZGHWTZfOj2KLmbIAIdiXP9NTrwGaTO/XDfKMEmyBahZpnombiG6JDHmiOrmK3GLEJRXrWExXCDLmQ==} engines: {node: '>=18'} '@inquirer/figures@1.0.7': @@ -1485,8 +1458,8 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@mswjs/interceptors@0.36.10': - resolution: {integrity: sha512-GXrJgakgJW3DWKueebkvtYgGKkxA7s0u5B0P5syJM5rvQUnrpLPigvci8Hukl7yEM+sU06l+er2Fgvx/gmiRgg==} + '@mswjs/interceptors@0.36.6': + resolution: {integrity: sha512-issnYydStyH0wPEeU7CMwfO7kI668ffVtzKRMRS7H7BliOYuPuwEZxh9dwiXV+oeHBxT5SXT0wPwV8T7V2PJUA==} engines: {node: '>=18'} '@next/env@15.0.1': @@ -1565,26 +1538,26 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.48.2': - resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==} + '@playwright/test@1.48.1': + resolution: {integrity: sha512-s9RtWoxkOLmRJdw3oFvhFbs9OJS0BzrLUc8Hf6l2UdCNd1rqeEyD4BhCJkvzeEoD1FsK4mirsWwGerhVmYKtZg==} engines: {node: '>=18'} hasBin: true - '@polka/url@1.0.0-next.25': - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} '@redocly/ajv@8.11.2': resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} - '@redocly/config@0.16.0': - resolution: {integrity: sha512-t9jnODbUcuANRSl/K4L9nb12V+U5acIHnVSl26NWrtSdDZVtoqUXk2yGFPZzohYf62cCfEQUT8ouJ3bhPfpnJg==} + '@redocly/config@0.15.0': + resolution: {integrity: sha512-QmzuqbhzrbiktRGw+FV7iim+TsfQRU8crJb2s7ls8gP+BMkE1RHZnmJ1lAA/QwzyXbEmKZeGFTdM6PWuRwNlRA==} - '@redocly/openapi-core@1.25.11': - resolution: {integrity: sha512-bH+a8izQz4fnKROKoX3bEU8sQ9rjvEIZOqU6qTmxlhOJ0NsKa5e+LmU18SV0oFeg5YhWQhhEDihXkvKJ1wMMNQ==} + '@redocly/openapi-core@1.25.9': + resolution: {integrity: sha512-tod9bhIxBJQOeGQ3Ot5Zk707Wcg5YgEcEG766cGxwHqjRUNF5kwZnleBO7CpaLusOMWnQefj7RfFWLZS+IqnhA==} engines: {node: '>=14.19.0', npm: '>=7.0.0'} - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1592,100 +1565,100 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.20.0': - resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.20.0': - resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.20.0': - resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.20.0': - resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.20.0': - resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.20.0': - resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.20.0': - resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.20.0': - resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': - resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.20.0': - resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.20.0': - resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.20.0': - resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.20.0': - resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.20.0': - resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.20.0': - resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.20.0': - resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] - '@shikijs/core@1.22.2': - resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} + '@shikijs/core@1.22.1': + resolution: {integrity: sha512-bqAhT/Ri5ixV4oYsvJNH8UJjpjbINWlWyXY6tBTsP4OmD6XnFv43nRJ+lTdxd2rmG5pgam/x+zGR6kLRXrpEKA==} - '@shikijs/engine-javascript@1.22.2': - resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} + '@shikijs/engine-javascript@1.22.1': + resolution: {integrity: sha512-540pyoy0LWe4jj2BVbgELwOFu1uFvRI7lg4hdsExrSXA9x7gqfzZ/Nnh4RfX86aDAgJ647gx4TCmRwACbnQSvw==} - '@shikijs/engine-oniguruma@1.22.2': - resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} + '@shikijs/engine-oniguruma@1.22.1': + resolution: {integrity: sha512-L+1Vmd+a2kk8HtogUFymQS6BjUfJnzcWoUp1BUgxoDiklbKSMvrsMuLZGevTOP1m0rEjgnC5MsDmsr8lX1lC+Q==} - '@shikijs/transformers@1.22.2': - resolution: {integrity: sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==} + '@shikijs/transformers@1.22.1': + resolution: {integrity: sha512-KvG49YFV6gV116sC4L3Sn1Rp6HXsioMKBBG373j088rw849440hm8s2r+/dgjsGLvT4p+QB7newev+5a3ARM6w==} - '@shikijs/types@1.22.2': - resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} + '@shikijs/types@1.22.1': + resolution: {integrity: sha512-+45f8mu/Hxqs6Kyhfm98Nld5n7Q7lwhjU8UtdQwrOPs7BnM4VAb929O3IQ2ce+4D7SlNFlZGd8CnKRSnwbQreQ==} '@shikijs/vscode-textmate@9.3.0': resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} @@ -1716,8 +1689,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/kit@2.7.7': - resolution: {integrity: sha512-EvNErTd0QuIUX6SbZecOJQus3cILJR87XyIQXF4kfwWap63/OV58GGTEI47k3ydrFssAWGw4eu3RlB2dmBYETA==} + '@sveltejs/kit@2.7.3': + resolution: {integrity: sha512-Vx7nq5MJ86I8qXYsVidC5PX6xm+uxt8DydvOdmJoyOK7LvGP18OFEG359yY+aa51t6pENvqZAMqAREQQx1OI2Q==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1740,68 +1713,68 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 - '@swc/core-darwin-arm64@1.9.1': - resolution: {integrity: sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==} + '@swc/core-darwin-arm64@1.7.39': + resolution: {integrity: sha512-o2nbEL6scMBMCTvY9OnbyVXtepLuNbdblV9oNJEFia5v5eGj9WMrnRQiylH3Wp/G2NYkW7V1/ZVW+kfvIeYe9A==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.9.1': - resolution: {integrity: sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==} + '@swc/core-darwin-x64@1.7.39': + resolution: {integrity: sha512-qMlv3XPgtPi/Fe11VhiPDHSLiYYk2dFYl747oGsHZPq+6tIdDQjIhijXPcsUHIXYDyG7lNpODPL8cP/X1sc9MA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.9.1': - resolution: {integrity: sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==} + '@swc/core-linux-arm-gnueabihf@1.7.39': + resolution: {integrity: sha512-NP+JIkBs1ZKnpa3Lk2W1kBJMwHfNOxCUJXuTa2ckjFsuZ8OUu2gwdeLFkTHbR43dxGwH5UzSmuGocXeMowra/Q==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.9.1': - resolution: {integrity: sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==} + '@swc/core-linux-arm64-gnu@1.7.39': + resolution: {integrity: sha512-cPc+/HehyHyHcvAsk3ML/9wYcpWVIWax3YBaA+ScecJpSE04l/oBHPfdqKUPslqZ+Gcw0OWnIBGJT/fBZW2ayw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.9.1': - resolution: {integrity: sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==} + '@swc/core-linux-arm64-musl@1.7.39': + resolution: {integrity: sha512-8RxgBC6ubFem66bk9XJ0vclu3exJ6eD7x7CwDhp5AD/tulZslTYXM7oNPjEtje3xxabXuj/bEUMNvHZhQRFdqA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.9.1': - resolution: {integrity: sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==} + '@swc/core-linux-x64-gnu@1.7.39': + resolution: {integrity: sha512-3gtCPEJuXLQEolo9xsXtuPDocmXQx12vewEyFFSMSjOfakuPOBmOQMa0sVL8Wwius8C1eZVeD1fgk0omMqeC+Q==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.9.1': - resolution: {integrity: sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==} + '@swc/core-linux-x64-musl@1.7.39': + resolution: {integrity: sha512-mg39pW5x/eqqpZDdtjZJxrUvQNSvJF4O8wCl37fbuFUqOtXs4TxsjZ0aolt876HXxxhsQl7rS+N4KioEMSgTZw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.9.1': - resolution: {integrity: sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==} + '@swc/core-win32-arm64-msvc@1.7.39': + resolution: {integrity: sha512-NZwuS0mNJowH3e9bMttr7B1fB8bW5svW/yyySigv9qmV5VcQRNz1kMlCvrCLYRsa93JnARuiaBI6FazSeG8mpA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.9.1': - resolution: {integrity: sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==} + '@swc/core-win32-ia32-msvc@1.7.39': + resolution: {integrity: sha512-qFmvv5UExbJPXhhvCVDBnjK5Duqxr048dlVB6ZCgGzbRxuarOlawCzzLK4N172230pzlAWGLgn9CWl3+N6zfHA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.9.1': - resolution: {integrity: sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==} + '@swc/core-win32-x64-msvc@1.7.39': + resolution: {integrity: sha512-o+5IMqgOtj9+BEOp16atTfBgCogVak9svhBpwsbcJQp67bQbxGYhAPPDW/hZ2rpSSF7UdzbY9wudoX9G4trcuQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.9.1': - resolution: {integrity: sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==} + '@swc/core@1.7.39': + resolution: {integrity: sha512-jns6VFeOT49uoTKLWIEfiQqJAlyqldNAt80kAr8f7a5YjX0zgnG3RBiLMpksx4Ka4SlK4O6TJ/lumIM3Trp82g==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1815,14 +1788,14 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - '@swc/types@0.1.14': - resolution: {integrity: sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==} + '@swc/types@0.1.13': + resolution: {integrity: sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==} - '@tanstack/query-core@5.59.20': - resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} + '@tanstack/query-core@5.59.16': + resolution: {integrity: sha512-crHn+G3ltqb5JG0oUv6q+PMz1m1YkjpASrXTU+sYWW9pLk0t2GybUHNRqYPZWhxgjPaVGC4yp92gSFEJgYEsPw==} - '@tanstack/react-query@5.59.20': - resolution: {integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw==} + '@tanstack/react-query@5.59.16': + resolution: {integrity: sha512-MuyWheG47h6ERd4PKQ6V8gDyBu3ThNG22e1fRVwvq6ap3EqsFhyuxCAwhNP/03m/mLg+DAb0upgbPaX6VB+CkQ==} peerDependencies: react: ^18 || ^19 @@ -1873,8 +1846,8 @@ packages: '@types/degit@2.8.6': resolution: {integrity: sha512-y0M7sqzsnHB6cvAeTCBPrCQNQiZe8U4qdzf8uBVmOWYap5MMTN/gB2iEqrIqFiYcsyvP74GnGD5tgsHttielFw==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -1891,8 +1864,8 @@ packages: '@types/lodash@4.17.7': resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} - '@types/markdown-it@14.1.1': - resolution: {integrity: sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==} + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1906,14 +1879,14 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.9.0': - resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@22.8.0': + resolution: {integrity: sha512-84rafSBHC/z1i1E3p0cJwKA+CfYDNSXX9WSZBRopjIzLET8oNt6ht2tei4C7izwDeEiLLfdeSVBv1egOH916hg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/prop-types@15.7.12': - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} '@types/pug@2.0.10': resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} @@ -1966,21 +1939,26 @@ packages: vite: ^5.0.0 vue: ^3.2.25 - '@vitest/coverage-v8@2.0.5': - resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==} + '@vitest/coverage-v8@2.1.4': + resolution: {integrity: sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==} peerDependencies: - vitest: 2.0.5 + '@vitest/browser': 2.1.4 + vitest: 2.1.4 + peerDependenciesMeta: + '@vitest/browser': + optional: true '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@2.1.4': - resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} + '@vitest/expect@2.1.3': + resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==} - '@vitest/mocker@2.1.4': - resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} + '@vitest/mocker@2.1.3': + resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==} peerDependencies: - msw: ^2.4.9 + '@vitest/spy': 2.1.3 + msw: ^2.3.5 vite: ^5.0.0 peerDependenciesMeta: msw: @@ -1991,41 +1969,44 @@ packages: '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - '@vitest/pretty-format@2.1.4': - resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} + '@vitest/pretty-format@2.1.1': + resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + + '@vitest/pretty-format@2.1.3': + resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==} '@vitest/runner@2.0.5': resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} - '@vitest/runner@2.1.4': - resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} + '@vitest/runner@2.1.3': + resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==} '@vitest/snapshot@2.0.5': resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} - '@vitest/snapshot@2.1.4': - resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} + '@vitest/snapshot@2.1.3': + resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==} '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@2.1.4': - resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} + '@vitest/spy@2.1.3': + resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==} '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - '@vitest/utils@2.1.4': - resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} + '@vitest/utils@2.1.3': + resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} - '@volar/language-core@2.4.8': - resolution: {integrity: sha512-K/GxMOXGq997bO00cdFhTNuR85xPxj0BEEAy+BaqqayTmy9Tmhfgmq2wpJcVspRhcwfgPoE2/mEJa26emUhG/g==} + '@volar/language-core@2.4.7': + resolution: {integrity: sha512-G/EB0vkArVB04F8DVBf30AlRK/QAOx63CzsuKKuda2ZIJamQlv4t6gEJrFVmYF560kbslFtaAJcmn8cyg7QmLA==} - '@volar/source-map@2.4.8': - resolution: {integrity: sha512-jeWJBkC/WivdelMwxKkpFL811uH/jJ1kVxa+c7OvG48DXc3VrP7pplSWPP2W1dLMqBxD+awRlg55FQQfiup4cA==} + '@volar/source-map@2.4.7': + resolution: {integrity: sha512-c+7IJrD4mht1s8FLlCf6dAUC1aTUY9leKeLosfUiuMxavcG/sY3IPBiD1rdLL5qrhzYVmUWRGxhWvJeyYa/bsQ==} - '@volar/typescript@2.4.8': - resolution: {integrity: sha512-6xkIYJ5xxghVBhVywMoPMidDDAFT1OoQeXwa27HSgJ6AiIKRe61RXLoik+14Z7r0JvnblXVsjsRLmCr42SGzqg==} + '@volar/typescript@2.4.7': + resolution: {integrity: sha512-sp3mFLmMtXY47S8GrMwFnwjGiW7aVtCLMAwnePRJA4P7CfSkrRj2DjoSxl//0pt+KR7oGG/48T2q413b8TvPbg==} '@vue/compiler-core@3.5.12': resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} @@ -2042,17 +2023,17 @@ packages: '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/devtools-api@7.6.3': - resolution: {integrity: sha512-H2TRzFA9hNezdtM6I0y3RCMhIg5T3gib/p9qI2IAS8gB9tvkAv4JZHAZZl5BZHhO7btuHkvHzU5qpO/vdsjYMg==} + '@vue/devtools-api@7.5.4': + resolution: {integrity: sha512-j9UC/KeYUNZ6AyCJxBROBCbogB5YHW6PZv9VnCNp2ntE4rq426Lfc8WP5B9V+rXBwqWmrgZTGYBa31CBSxdAUg==} - '@vue/devtools-kit@7.6.3': - resolution: {integrity: sha512-ETsFc8GlOp04rSFN79tB2TpVloWfsSx9BoCSElV3w3CaJTSBfz42KsIi5Ka+dNTJs1jY7QVLTDeoBmUGgA9h2A==} + '@vue/devtools-kit@7.5.4': + resolution: {integrity: sha512-0i7WFgc1B2TL52tstn82zlb9opSA0aIiHfkUYFXtZb8CIpmlFMTkHtgwVl6PMWNBj3LNhYou1YJCLpCYvJYYoA==} - '@vue/devtools-shared@7.6.3': - resolution: {integrity: sha512-wJW5QF27i16+sNQIaes8QoEZg1eqEgF83GkiPUlEQe9k7ZoHXHV7PRrnrxOKem42sIHPU813J2V/ZK1uqTJe6g==} + '@vue/devtools-shared@7.5.4': + resolution: {integrity: sha512-dwuq4YmwTyLc7eBOqX63s3JB8il7qnKsNgENglSMkUPwiItHkVAYYfPESN1rxSdYkl1RCux1l5TBidYqfUDNAA==} - '@vue/language-core@2.1.10': - resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==} + '@vue/language-core@2.1.6': + resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2073,20 +2054,17 @@ packages: peerDependencies: vue: 3.5.12 - '@vue/shared@3.4.35': - resolution: {integrity: sha512-hvuhBYYDe+b1G8KHxsQ0diDqDMA8D9laxWZhNAjE83VZb5UDaXl9Xnz7cGdDSyiHM90qqI/CyGMcpBpiDy6VVQ==} - '@vue/shared@3.5.12': resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} '@vue/tsconfig@0.5.1': resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==} - '@vueuse/core@10.11.0': - resolution: {integrity: sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==} + '@vueuse/core@10.11.1': + resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} - '@vueuse/integrations@10.11.0': - resolution: {integrity: sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==} + '@vueuse/integrations@10.11.1': + resolution: {integrity: sha512-Y5hCGBguN+vuVYTZmdd/IMXLOdfS60zAmDmFYc4BKBcMUPZH1n4tdyDECCPjXm0bNT3ZRUy1xzTLGaUje8Xyaw==} peerDependencies: async-validator: ^4 axios: ^1 @@ -2126,11 +2104,11 @@ packages: universal-cookie: optional: true - '@vueuse/metadata@10.11.0': - resolution: {integrity: sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==} + '@vueuse/metadata@10.11.1': + resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} - '@vueuse/shared@10.11.0': - resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==} + '@vueuse/shared@10.11.1': + resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -2139,12 +2117,17 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.13.0: + resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -2160,11 +2143,8 @@ packages: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - algoliasearch@4.23.3: - resolution: {integrity: sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==} - - alien-signals@0.2.0: - resolution: {integrity: sha512-StlonZhBBrsPPwrDjiPAiVTf/rolxffLxVPT60Qv/t88BZ81BvUVzHgGqEFvJ1ii8HXtm1+zU2Icr59tfWEcag==} + algoliasearch@4.24.0: + resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -2182,18 +2162,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - ansi-regex@6.1.0: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2222,6 +2194,10 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2267,10 +2243,6 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2317,27 +2289,16 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001646: - resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==} - - caniuse-lite@1.0.30001677: - resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} + caniuse-lite@1.0.30001669: + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.1.1: - resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} - engines: {node: '>=12'} - chai@5.1.2: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2419,16 +2380,10 @@ packages: code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -2471,6 +2426,9 @@ packages: component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2530,15 +2488,6 @@ packages: de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -2633,8 +2582,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.52: - resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==} + electron-to-chromium@1.5.45: + resolution: {integrity: sha512-vOzZS6uZwhhbkZbcRyiy99Wg+pYFV5hk+5YaECvx0+Z31NR3Tt5zS6dze2OepT6PCTzVzT0dIJItti+uAW5zmw==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -2694,18 +2643,10 @@ packages: engines: {node: '>=18'} hasBin: true - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2740,18 +2681,10 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} - engines: {node: '>=12.0.0'} - extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -2786,10 +2719,6 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2802,11 +2731,11 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - focus-trap@7.5.4: - resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + focus-trap@7.6.0: + resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==} - follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -2818,8 +2747,8 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} formidable@3.5.2: @@ -2861,21 +2790,14 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -2916,8 +2838,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql@16.8.2: - resolution: {integrity: sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==} + graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} handlebars@4.7.8: @@ -2929,10 +2851,6 @@ packages: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2997,17 +2915,13 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -3029,6 +2943,10 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -3105,10 +3023,6 @@ packages: is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3147,8 +3061,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@2.4.0: - resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} + jiti@2.3.3: + resolution: {integrity: sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==} hasBin: true joycon@3.1.1: @@ -3226,8 +3140,8 @@ packages: engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + listr2@8.2.4: + resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} engines: {node: '>=18.0.0'} load-tsconfig@0.2.5: @@ -3265,9 +3179,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} - loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} @@ -3288,14 +3199,11 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} - magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} - magicast@0.3.4: - resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -3312,11 +3220,11 @@ packages: mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - marked-terminal@7.2.1: - resolution: {integrity: sha512-rQ1MoMFXZICWNsKMiiHwP/Z+92PLKskTPXj+e7uwXmuMPkNn7iTqC+IvDekVm1MPeC9wYQeLxeFaOvudRR/XbQ==} + marked-terminal@7.1.0: + resolution: {integrity: sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==} engines: {node: '>=16.0.0'} peerDependencies: - marked: '>=1 <15' + marked: '>=1 <14' marked@9.1.6: resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} @@ -3359,14 +3267,6 @@ packages: micromark-util-types@2.0.0: resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3384,10 +3284,6 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -3440,14 +3336,11 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.6.0: - resolution: {integrity: sha512-n3tx2w0MZ3H4pxY0ozrQ4sNPzK/dGtlr2cIIyuEsgq2Bhy4wvcW6ZH2w/gXM9+MEUY6HC1fWhqtcXDxVZr5Jxw==} + msw@2.5.1: + resolution: {integrity: sha512-V0BmHvFkbWGXqbyrc+XiuQ8DU3qzcb6lb8gB9Vzltp3cgHLHLCDF/KmmFo0xw58StNaRMTebw3/xpWVvU9xq9g==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -3471,13 +3364,13 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.0.8: - resolution: {integrity: sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==} + nanoid@5.0.7: + resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} engines: {node: ^18 || >=20} hasBin: true - nanospinner@1.2.0: - resolution: {integrity: sha512-dGxYcEj8YhuxjVO3PYmnj1nBhtwUkvuwYbLl/MduBPmQUPy3xBtG/ScJgqZgntQkX44UQaCSlFeW4rS5fUR/Sw==} + nanospinner@1.1.0: + resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -3527,31 +3420,24 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nwsapi@2.2.12: - resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -3616,8 +3502,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} package-manager-detector@0.2.2: resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} @@ -3639,8 +3525,8 @@ packages: parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.2.0: + resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3685,9 +3571,6 @@ packages: periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3712,13 +3595,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.48.2: - resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} + playwright-core@1.48.1: + resolution: {integrity: sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==} engines: {node: '>=18'} hasBin: true - playwright@1.48.2: - resolution: {integrity: sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==} + playwright@1.48.1: + resolution: {integrity: sha512-j8CiHW/V6HxmbntOfyB4+T/uk08tBy6ph0MpBXwuoofkSnLmlfdYNNkFTYD6ofzzlSqLA1fwH4vwvVFvJgLN0w==} engines: {node: '>=18'} hasBin: true @@ -3752,8 +3635,8 @@ packages: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} - preact@10.22.0: - resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==} + preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} @@ -3785,8 +3668,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} querystringify@2.2.0: @@ -3850,8 +3733,8 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex@4.4.0: - resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==} + regex@4.3.3: + resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -3889,8 +3772,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@4.20.0: - resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3926,8 +3809,8 @@ packages: engines: {node: '>=10'} hasBin: true - set-cookie-parser@2.7.0: - resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -3953,8 +3836,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.22.2: - resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} + shiki@1.22.1: + resolution: {integrity: sha512-PbJ6XxrWLMwB2rm3qdjIHNm3zq4SfFnOx0B3rEoi4AN8AUngsdyZ1tRe5slMPtn6jQkbUURLNZPpLR7Do3k78g==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -4006,10 +3889,6 @@ packages: resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} hasBin: true - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -4095,10 +3974,6 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -4137,10 +4012,6 @@ packages: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -4235,9 +4106,6 @@ packages: tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - tinybench@2.8.0: - resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -4248,10 +4116,6 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} - tinypool@1.0.0: - resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} - engines: {node: ^18.0.0 || >=20.0.0} - tinypool@1.0.1: resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4260,10 +4124,6 @@ packages: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} - tinyspy@3.0.0: - resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} - engines: {node: '>=14.0.0'} - tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} @@ -4272,10 +4132,6 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4315,11 +4171,11 @@ packages: ts-results-es@4.2.0: resolution: {integrity: sha512-GfpRk+qvHxa/6gADH8WMN/jXvs5oHYbKtMQc6X9L3VhToy5Lri3iQowyYSytaRcvPDiTT2z3vurzQZXFQFXKRA==} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tslib@2.8.0: + resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} - tsup@8.2.4: - resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} + tsup@8.3.5: + resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -4345,10 +4201,6 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} - type-fest@4.20.1: - resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} - engines: {node: '>=16'} - type-fest@4.26.1: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} @@ -4373,8 +4225,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - uglify-js@3.18.0: - resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true @@ -4417,9 +4269,14 @@ packages: peerDependencies: '@swc/core': ^1.2.108 - unplugin@1.12.1: - resolution: {integrity: sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==} + unplugin@1.15.0: + resolution: {integrity: sha512-jTPIs63W+DUEDW207ztbaoO7cQ4p5aVaB823LSlxpsFEU3Mykwxf3ZGC/wzxFJeZlASZYgVrWeo7LgOrqJZ8RA==} engines: {node: '>=14.0.0'} + peerDependencies: + webpack-sources: ^3 + peerDependenciesMeta: + webpack-sources: + optional: true update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} @@ -4456,8 +4313,8 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@2.1.4: - resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} + vite-node@2.1.3: + resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -4537,15 +4394,15 @@ packages: jsdom: optional: true - vitest@2.1.4: - resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} + vitest@2.1.3: + resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.4 - '@vitest/ui': 2.1.4 + '@vitest/browser': 2.1.3 + '@vitest/ui': 2.1.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4565,8 +4422,8 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - vue-demi@0.14.8: - resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==} + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} engines: {node: '>=12'} hasBin: true peerDependencies: @@ -4576,8 +4433,8 @@ packages: '@vue/composition-api': optional: true - vue-tsc@2.1.10: - resolution: {integrity: sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==} + vue-tsc@2.1.6: + resolution: {integrity: sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -4604,10 +4461,6 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -4734,109 +4587,109 @@ packages: snapshots: - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) search-insights: 2.13.0 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': dependencies: - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 - '@algolia/cache-browser-local-storage@4.23.3': + '@algolia/cache-browser-local-storage@4.24.0': dependencies: - '@algolia/cache-common': 4.23.3 + '@algolia/cache-common': 4.24.0 - '@algolia/cache-common@4.23.3': {} + '@algolia/cache-common@4.24.0': {} - '@algolia/cache-in-memory@4.23.3': + '@algolia/cache-in-memory@4.24.0': dependencies: - '@algolia/cache-common': 4.23.3 + '@algolia/cache-common': 4.24.0 - '@algolia/client-account@4.23.3': + '@algolia/client-account@4.24.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/client-analytics@4.23.3': + '@algolia/client-analytics@4.24.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/client-common@4.23.3': + '@algolia/client-common@4.24.0': dependencies: - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/client-personalization@4.23.3': + '@algolia/client-personalization@4.24.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/client-search@4.23.3': + '@algolia/client-search@4.24.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/logger-common@4.23.3': {} + '@algolia/logger-common@4.24.0': {} - '@algolia/logger-console@4.23.3': + '@algolia/logger-console@4.24.0': dependencies: - '@algolia/logger-common': 4.23.3 + '@algolia/logger-common': 4.24.0 - '@algolia/recommend@4.23.3': + '@algolia/recommend@4.24.0': dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/requester-browser-xhr@4.23.3': + '@algolia/requester-browser-xhr@4.24.0': dependencies: - '@algolia/requester-common': 4.23.3 + '@algolia/requester-common': 4.24.0 - '@algolia/requester-common@4.23.3': {} + '@algolia/requester-common@4.24.0': {} - '@algolia/requester-node-http@4.23.3': + '@algolia/requester-node-http@4.24.0': dependencies: - '@algolia/requester-common': 4.23.3 + '@algolia/requester-common': 4.24.0 - '@algolia/transporter@4.23.3': + '@algolia/transporter@4.24.0': dependencies: - '@algolia/cache-common': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/requester-common': 4.23.3 + '@algolia/cache-common': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/requester-common': 4.24.0 '@ampproject/remapping@2.3.0': dependencies: @@ -4859,7 +4712,7 @@ snapshots: cli-table3: 0.6.5 commander: 10.0.1 marked: 9.1.6 - marked-terminal: 7.2.1(marked@9.1.6) + marked-terminal: 7.1.0(marked@9.1.6) semver: 7.6.3 '@arethetypeswrong/core@0.16.2': @@ -4872,42 +4725,37 @@ snapshots: typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/code-frame@7.26.2': + '@babel/code-frame@7.26.0': dependencies: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.1 - '@babel/compat-data@7.26.2': {} + '@babel/compat-data@7.26.0': {} '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 + '@babel/code-frame': 7.26.0 + '@babel/generator': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.0 '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.2': + '@babel/generator@7.26.0': dependencies: - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.0 '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 @@ -4915,7 +4763,7 @@ snapshots: '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.26.2 + '@babel/compat-data': 7.26.0 '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.2 lru-cache: 5.1.1 @@ -4937,14 +4785,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.24.7': {} - - '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-plugin-utils@7.25.9': {} '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.25.9': {} @@ -4954,59 +4798,42 @@ snapshots: '@babel/template': 7.25.9 '@babel/types': 7.26.0 - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.25.3': - dependencies: - '@babel/types': 7.25.2 - - '@babel/parser@7.26.2': + '@babel/parser@7.26.0': dependencies: '@babel/types': 7.26.0 - '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/runtime@7.25.0': + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.2 + '@babel/code-frame': 7.26.0 + '@babel/parser': 7.26.0 '@babel/types': 7.26.0 '@babel/traverse@7.25.9': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 + '@babel/code-frame': 7.26.0 + '@babel/generator': 7.26.0 + '@babel/parser': 7.26.0 '@babel/template': 7.25.9 '@babel/types': 7.26.0 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.2': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - '@babel/types@7.26.0': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -5142,7 +4969,7 @@ snapshots: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - micromatch: 4.0.7 + micromatch: 4.0.8 '@changesets/errors@0.2.0': dependencies: @@ -5178,7 +5005,7 @@ snapshots: '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 - micromatch: 4.0.7 + micromatch: 4.0.8 spawndamnit: 2.0.0 '@changesets/logger@0.1.1': @@ -5226,12 +5053,12 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@docsearch/css@3.6.0': {} + '@docsearch/css@3.6.2': {} - '@docsearch/js@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': + '@docsearch/js@3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) - preact: 10.22.0 + '@docsearch/react': 3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) + preact: 10.24.3 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -5239,12 +5066,12 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': + '@docsearch/react@3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@docsearch/css': 3.6.0 - algoliasearch: 4.23.3 + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@docsearch/css': 3.6.2 + algoliasearch: 4.24.0 optionalDependencies: '@types/react': 18.3.12 react: 18.3.1 @@ -5255,7 +5082,7 @@ snapshots: '@emnapi/runtime@1.3.1': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 optional: true '@esbuild/aix-ppc64@0.20.2': @@ -5615,16 +5442,17 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@inquirer/confirm@5.0.1(@types/node@22.9.0)': + '@inquirer/confirm@5.0.0(@types/node@22.8.0)': dependencies: - '@inquirer/core': 10.0.1(@types/node@22.9.0) - '@inquirer/type': 3.0.0(@types/node@22.9.0) - '@types/node': 22.9.0 + '@inquirer/core': 10.0.0(@types/node@22.8.0) + '@inquirer/type': 3.0.0(@types/node@22.8.0) + transitivePeerDependencies: + - '@types/node' - '@inquirer/core@10.0.1(@types/node@22.9.0)': + '@inquirer/core@10.0.0(@types/node@22.8.0)': dependencies: '@inquirer/figures': 1.0.7 - '@inquirer/type': 3.0.0(@types/node@22.9.0) + '@inquirer/type': 3.0.0(@types/node@22.8.0) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -5637,9 +5465,9 @@ snapshots: '@inquirer/figures@1.0.7': {} - '@inquirer/type@3.0.0(@types/node@22.9.0)': + '@inquirer/type@3.0.0(@types/node@22.8.0)': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.8.0 '@isaacs/cliui@8.0.2': dependencies: @@ -5673,21 +5501,21 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - '@mswjs/interceptors@0.36.10': + '@mswjs/interceptors@0.36.6': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -5746,11 +5574,11 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.48.2': + '@playwright/test@1.48.1': dependencies: - playwright: 1.48.2 + playwright: 1.48.1 - '@polka/url@1.0.0-next.25': {} + '@polka/url@1.0.0-next.28': {} '@redocly/ajv@8.11.2': dependencies: @@ -5759,14 +5587,14 @@ snapshots: require-from-string: 2.0.2 uri-js-replace: 1.0.1 - '@redocly/config@0.16.0': {} + '@redocly/config@0.15.0': {} - '@redocly/openapi-core@1.25.11(supports-color@9.4.0)': + '@redocly/openapi-core@1.25.9(supports-color@9.4.0)': dependencies: '@redocly/ajv': 8.11.2 - '@redocly/config': 0.16.0 + '@redocly/config': 0.15.0 colorette: 1.4.0 - https-proxy-agent: 7.0.4(supports-color@9.4.0) + https-proxy-agent: 7.0.5(supports-color@9.4.0) js-levenshtein: 1.1.6 js-yaml: 4.1.0 lodash.isequal: 4.5.0 @@ -5778,87 +5606,87 @@ snapshots: - encoding - supports-color - '@rollup/pluginutils@5.1.0(rollup@4.20.0)': + '@rollup/pluginutils@5.1.3(rollup@4.24.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: - rollup: 4.20.0 + rollup: 4.24.0 - '@rollup/rollup-android-arm-eabi@4.20.0': + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-android-arm64@4.20.0': + '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.20.0': + '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-x64@4.20.0': + '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.20.0': + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.20.0': + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.20.0': + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.20.0': + '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.20.0': + '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.20.0': + '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.20.0': + '@rollup/rollup-linux-x64-musl@4.24.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.20.0': + '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.20.0': + '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.20.0': + '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true - '@shikijs/core@1.22.2': + '@shikijs/core@1.22.1': dependencies: - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 + '@shikijs/engine-javascript': 1.22.1 + '@shikijs/engine-oniguruma': 1.22.1 + '@shikijs/types': 1.22.1 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 hast-util-to-html: 9.0.3 - '@shikijs/engine-javascript@1.22.2': + '@shikijs/engine-javascript@1.22.1': dependencies: - '@shikijs/types': 1.22.2 + '@shikijs/types': 1.22.1 '@shikijs/vscode-textmate': 9.3.0 oniguruma-to-js: 0.4.3 - '@shikijs/engine-oniguruma@1.22.2': + '@shikijs/engine-oniguruma@1.22.1': dependencies: - '@shikijs/types': 1.22.2 + '@shikijs/types': 1.22.1 '@shikijs/vscode-textmate': 9.3.0 - '@shikijs/transformers@1.22.2': + '@shikijs/transformers@1.22.1': dependencies: - shiki: 1.22.2 + shiki: 1.22.1 - '@shikijs/types@1.22.2': + '@shikijs/types@1.22.1': dependencies: '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -5870,7 +5698,7 @@ snapshots: '@size-limit/esbuild@11.1.6(size-limit@11.1.6)': dependencies: esbuild: 0.24.0 - nanoid: 5.0.8 + nanoid: 5.0.7 size-limit: 11.1.6 '@size-limit/file@11.1.6(size-limit@11.1.6)': @@ -5883,120 +5711,120 @@ snapshots: '@size-limit/file': 11.1.6(size-limit@11.1.6) size-limit: 11.1.6 - '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))': + '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))': dependencies: - '@sveltejs/kit': 2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) + '@sveltejs/kit': 2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) import-meta-resolve: 4.1.0 - '@sveltejs/kit@2.7.7(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))': + '@sveltejs/kit@2.7.3(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 esm-env: 1.0.0 import-meta-resolve: 4.1.0 kleur: 4.1.5 - magic-string: 0.30.11 + magic-string: 0.30.12 mrmime: 2.0.0 sade: 1.8.1 - set-cookie-parser: 2.7.0 + set-cookie-parser: 2.7.1 sirv: 3.0.0 svelte: 4.2.19 tiny-glob: 0.2.9 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.8.0) - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))': + '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) - debug: 4.3.6(supports-color@9.4.0) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) + debug: 4.3.7(supports-color@9.4.0) svelte: 4.2.19 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.8.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0))': + '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.9.0)) - debug: 4.3.6(supports-color@9.4.0) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)))(svelte@4.2.19)(vite@5.4.10(@types/node@22.8.0)) + debug: 4.3.7(supports-color@9.4.0) deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.11 + magic-string: 0.30.12 svelte: 4.2.19 svelte-hmr: 0.16.0(svelte@4.2.19) - vite: 5.4.10(@types/node@22.9.0) - vitefu: 0.2.5(vite@5.4.10(@types/node@22.9.0)) + vite: 5.4.10(@types/node@22.8.0) + vitefu: 0.2.5(vite@5.4.10(@types/node@22.8.0)) transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.9.1': + '@swc/core-darwin-arm64@1.7.39': optional: true - '@swc/core-darwin-x64@1.9.1': + '@swc/core-darwin-x64@1.7.39': optional: true - '@swc/core-linux-arm-gnueabihf@1.9.1': + '@swc/core-linux-arm-gnueabihf@1.7.39': optional: true - '@swc/core-linux-arm64-gnu@1.9.1': + '@swc/core-linux-arm64-gnu@1.7.39': optional: true - '@swc/core-linux-arm64-musl@1.9.1': + '@swc/core-linux-arm64-musl@1.7.39': optional: true - '@swc/core-linux-x64-gnu@1.9.1': + '@swc/core-linux-x64-gnu@1.7.39': optional: true - '@swc/core-linux-x64-musl@1.9.1': + '@swc/core-linux-x64-musl@1.7.39': optional: true - '@swc/core-win32-arm64-msvc@1.9.1': + '@swc/core-win32-arm64-msvc@1.7.39': optional: true - '@swc/core-win32-ia32-msvc@1.9.1': + '@swc/core-win32-ia32-msvc@1.7.39': optional: true - '@swc/core-win32-x64-msvc@1.9.1': + '@swc/core-win32-x64-msvc@1.7.39': optional: true - '@swc/core@1.9.1(@swc/helpers@0.5.13)': + '@swc/core@1.7.39(@swc/helpers@0.5.13)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.14 + '@swc/types': 0.1.13 optionalDependencies: - '@swc/core-darwin-arm64': 1.9.1 - '@swc/core-darwin-x64': 1.9.1 - '@swc/core-linux-arm-gnueabihf': 1.9.1 - '@swc/core-linux-arm64-gnu': 1.9.1 - '@swc/core-linux-arm64-musl': 1.9.1 - '@swc/core-linux-x64-gnu': 1.9.1 - '@swc/core-linux-x64-musl': 1.9.1 - '@swc/core-win32-arm64-msvc': 1.9.1 - '@swc/core-win32-ia32-msvc': 1.9.1 - '@swc/core-win32-x64-msvc': 1.9.1 + '@swc/core-darwin-arm64': 1.7.39 + '@swc/core-darwin-x64': 1.7.39 + '@swc/core-linux-arm-gnueabihf': 1.7.39 + '@swc/core-linux-arm64-gnu': 1.7.39 + '@swc/core-linux-arm64-musl': 1.7.39 + '@swc/core-linux-x64-gnu': 1.7.39 + '@swc/core-linux-x64-musl': 1.7.39 + '@swc/core-win32-arm64-msvc': 1.7.39 + '@swc/core-win32-ia32-msvc': 1.7.39 + '@swc/core-win32-x64-msvc': 1.7.39 '@swc/helpers': 0.5.13 '@swc/counter@0.1.3': {} '@swc/helpers@0.5.13': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 - '@swc/types@0.1.14': + '@swc/types@0.1.13': dependencies: '@swc/counter': 0.1.3 - '@tanstack/query-core@5.59.20': {} + '@tanstack/query-core@5.59.16': {} - '@tanstack/react-query@5.59.20(react@18.3.1)': + '@tanstack/react-query@5.59.16(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.59.20 + '@tanstack/query-core': 5.59.16 react: 18.3.1 '@testing-library/dom@10.1.0': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.25.0 + '@babel/code-frame': 7.26.0 + '@babel/runtime': 7.26.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -6006,7 +5834,7 @@ snapshots: '@testing-library/react@16.0.1(@testing-library/dom@10.1.0)(@types/react-dom@18.3.1)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@testing-library/dom': 10.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6023,30 +5851,30 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@babel/parser': 7.26.0 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@babel/parser': 7.26.0 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@types/cookie@0.6.0': {} '@types/degit@2.8.6': {} - '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} '@types/hast@3.0.4': dependencies: @@ -6060,7 +5888,7 @@ snapshots: '@types/lodash@4.17.7': {} - '@types/markdown-it@14.1.1': + '@types/markdown-it@14.1.2': dependencies: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 @@ -6075,19 +5903,19 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.9.0': + '@types/node@22.8.0': dependencies: undici-types: 6.19.8 '@types/normalize-package-data@2.4.4': {} - '@types/prop-types@15.7.12': {} + '@types/prop-types@15.7.13': {} '@types/pug@2.0.10': {} '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.1 '@types/react-dom@18.3.1': dependencies: @@ -6095,17 +5923,17 @@ snapshots: '@types/react@18.3.1': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 '@types/react@18.3.12': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 '@types/react@18.3.5': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 '@types/statuses@2.0.5': {} @@ -6118,44 +5946,44 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.9.0))': + '@vitejs/plugin-react-swc@3.7.1(@swc/helpers@0.5.13)(vite@5.4.10(@types/node@22.8.0))': dependencies: - '@swc/core': 1.9.1(@swc/helpers@0.5.13) - vite: 5.4.10(@types/node@22.9.0) + '@swc/core': 1.7.39(@swc/helpers@0.5.13) + vite: 5.4.10(@types/node@22.8.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.9.0))': + '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.8.0))': dependencies: '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.8.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@22.8.0))(vue@3.5.12(typescript@5.6.3))': dependencies: - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.8.0) vue: 3.5.12(typescript@5.6.3) - '@vitest/coverage-v8@2.0.5(vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5)))': + '@vitest/coverage-v8@2.1.4(vitest@2.1.3(@types/node@22.8.0)(jsdom@20.0.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3)))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.11 - magicast: 0.3.4 + magic-string: 0.30.12 + magicast: 0.3.5 std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5)) + vitest: 2.1.3(@types/node@22.8.0)(jsdom@20.0.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3)) transitivePeerDependencies: - supports-color @@ -6163,39 +5991,34 @@ snapshots: dependencies: '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.1.1 + chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/expect@2.1.4': + '@vitest/expect@2.1.3': dependencies: - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5))(vite@5.4.10(@types/node@22.9.0))': + '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.8.0))': dependencies: - '@vitest/spy': 2.1.4 + '@vitest/spy': 2.1.3 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - msw: 2.6.0(@types/node@22.9.0)(typescript@5.4.5) - vite: 5.4.10(@types/node@22.9.0) + msw: 2.5.1(@types/node@22.8.0)(typescript@5.6.3) + vite: 5.4.10(@types/node@22.8.0) - '@vitest/mocker@2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.9.0))': + '@vitest/pretty-format@2.0.5': dependencies: - '@vitest/spy': 2.1.4 - estree-walker: 3.0.3 - magic-string: 0.30.12 - optionalDependencies: - msw: 2.6.0(@types/node@22.9.0)(typescript@5.6.3) - vite: 5.4.10(@types/node@22.9.0) + tinyrainbow: 1.2.0 - '@vitest/pretty-format@2.0.5': + '@vitest/pretty-format@2.1.1': dependencies: tinyrainbow: 1.2.0 - '@vitest/pretty-format@2.1.4': + '@vitest/pretty-format@2.1.3': dependencies: tinyrainbow: 1.2.0 @@ -6204,28 +6027,28 @@ snapshots: '@vitest/utils': 2.0.5 pathe: 1.1.2 - '@vitest/runner@2.1.4': + '@vitest/runner@2.1.3': dependencies: - '@vitest/utils': 2.1.4 + '@vitest/utils': 2.1.3 pathe: 1.1.2 '@vitest/snapshot@2.0.5': dependencies: '@vitest/pretty-format': 2.0.5 - magic-string: 0.30.11 + magic-string: 0.30.12 pathe: 1.1.2 - '@vitest/snapshot@2.1.4': + '@vitest/snapshot@2.1.3': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.3 magic-string: 0.30.12 pathe: 1.1.2 '@vitest/spy@2.0.5': dependencies: - tinyspy: 3.0.0 + tinyspy: 3.0.2 - '@vitest/spy@2.1.4': + '@vitest/spy@2.1.3': dependencies: tinyspy: 3.0.2 @@ -6233,34 +6056,34 @@ snapshots: dependencies: '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 - loupe: 3.1.1 + loupe: 3.1.2 tinyrainbow: 1.2.0 - '@vitest/utils@2.1.4': + '@vitest/utils@2.1.3': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.3 loupe: 3.1.2 tinyrainbow: 1.2.0 - '@volar/language-core@2.4.8': + '@volar/language-core@2.4.7': dependencies: - '@volar/source-map': 2.4.8 + '@volar/source-map': 2.4.7 - '@volar/source-map@2.4.8': {} + '@volar/source-map@2.4.7': {} - '@volar/typescript@2.4.8': + '@volar/typescript@2.4.7': dependencies: - '@volar/language-core': 2.4.8 + '@volar/language-core': 2.4.7 path-browserify: 1.0.1 vscode-uri: 3.0.8 '@vue/compiler-core@3.5.12': dependencies: - '@babel/parser': 7.25.3 + '@babel/parser': 7.26.0 '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.5.12': dependencies: @@ -6269,15 +6092,15 @@ snapshots: '@vue/compiler-sfc@3.5.12': dependencies: - '@babel/parser': 7.25.3 + '@babel/parser': 7.26.0 '@vue/compiler-core': 3.5.12 '@vue/compiler-dom': 3.5.12 '@vue/compiler-ssr': 3.5.12 '@vue/shared': 3.5.12 estree-walker: 2.0.2 - magic-string: 0.30.11 + magic-string: 0.30.12 postcss: 8.4.47 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.12': dependencies: @@ -6289,13 +6112,13 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/devtools-api@7.6.3': + '@vue/devtools-api@7.5.4': dependencies: - '@vue/devtools-kit': 7.6.3 + '@vue/devtools-kit': 7.5.4 - '@vue/devtools-kit@7.6.3': + '@vue/devtools-kit@7.5.4': dependencies: - '@vue/devtools-shared': 7.6.3 + '@vue/devtools-shared': 7.5.4 birpc: 0.2.19 hookable: 5.5.3 mitt: 3.0.1 @@ -6303,17 +6126,17 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.1 - '@vue/devtools-shared@7.6.3': + '@vue/devtools-shared@7.5.4': dependencies: rfdc: 1.4.1 - '@vue/language-core@2.1.10(typescript@5.6.3)': + '@vue/language-core@2.1.6(typescript@5.6.3)': dependencies: - '@volar/language-core': 2.4.8 + '@volar/language-core': 2.4.7 '@vue/compiler-dom': 3.5.12 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.12 - alien-signals: 0.2.0 + computeds: 0.0.1 minimatch: 9.0.5 muggle-string: 0.4.1 path-browserify: 1.0.1 @@ -6342,39 +6165,37 @@ snapshots: '@vue/shared': 3.5.12 vue: 3.5.12(typescript@5.6.3) - '@vue/shared@3.4.35': {} - '@vue/shared@3.5.12': {} '@vue/tsconfig@0.5.1': {} - '@vueuse/core@10.11.0(vue@3.5.12(typescript@5.6.3))': + '@vueuse/core@10.11.1(vue@3.5.12(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.11.0 - '@vueuse/shared': 10.11.0(vue@3.5.12(typescript@5.6.3)) - vue-demi: 0.14.8(vue@3.5.12(typescript@5.6.3)) + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.12(typescript@5.6.3))': + '@vueuse/integrations@10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3))': dependencies: - '@vueuse/core': 10.11.0(vue@3.5.12(typescript@5.6.3)) - '@vueuse/shared': 10.11.0(vue@3.5.12(typescript@5.6.3)) - vue-demi: 0.14.8(vue@3.5.12(typescript@5.6.3)) + '@vueuse/core': 10.11.1(vue@3.5.12(typescript@5.6.3)) + '@vueuse/shared': 10.11.1(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) optionalDependencies: axios: 1.7.7 - focus-trap: 7.5.4 + focus-trap: 7.6.0 transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/metadata@10.11.0': {} + '@vueuse/metadata@10.11.1': {} - '@vueuse/shared@10.11.0(vue@3.5.12(typescript@5.6.3))': + '@vueuse/shared@10.11.1(vue@3.5.12(typescript@5.6.3))': dependencies: - vue-demi: 0.14.8(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -6384,16 +6205,18 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.12.1 - acorn-walk: 8.3.3 + acorn: 8.14.0 + acorn-walk: 8.3.4 optional: true - acorn-walk@8.3.3: + acorn-walk@8.3.4: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 optional: true - acorn@8.12.1: {} + acorn@8.13.0: {} + + acorn@8.14.0: {} agent-base@6.0.2: dependencies: @@ -6404,7 +6227,7 @@ snapshots: agent-base@7.1.1(supports-color@9.4.0): dependencies: - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -6413,25 +6236,23 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - algoliasearch@4.23.3: - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-account': 4.23.3 - '@algolia/client-analytics': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-personalization': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/recommend': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 - - alien-signals@0.2.0: {} + algoliasearch@4.24.0: + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-account': 4.24.0 + '@algolia/client-analytics': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-personalization': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/recommend': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 ansi-colors@4.1.3: {} @@ -6445,14 +6266,8 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} - ansi-regex@6.1.0: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -6478,6 +6293,8 @@ snapshots: dependencies: dequal: 2.0.3 + aria-query@5.3.2: {} + array-union@2.1.0: {} arrify@1.0.1: {} @@ -6490,8 +6307,8 @@ snapshots: axios@1.7.7: dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 + follow-redirects: 1.15.9 + form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -6517,26 +6334,22 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - braces@3.0.3: dependencies: fill-range: 7.1.1 browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001677 - electron-to-chromium: 1.5.52 + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.45 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) buffer-crc32@1.0.0: {} - bundle-require@5.0.0(esbuild@0.23.1): + bundle-require@5.0.0(esbuild@0.24.0): dependencies: - esbuild: 0.23.1 + esbuild: 0.24.0 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -6566,34 +6379,18 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001646: {} - - caniuse-lite@1.0.30001677: {} + caniuse-lite@1.0.30001669: {} ccount@2.0.1: {} - chai@5.1.1: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.1 - pathval: 2.0.0 - chai@5.1.2: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.1 + loupe: 3.1.2 pathval: 2.0.0 - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -6680,21 +6477,15 @@ snapshots: code-red@1.0.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - '@types/estree': 1.0.5 - acorn: 8.12.1 + '@types/estree': 1.0.6 + acorn: 8.13.0 estree-walker: 3.0.3 periscopic: 3.1.0 - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} color-string@1.9.1: @@ -6729,6 +6520,8 @@ snapshots: component-emitter@1.3.1: {} + computeds@0.0.1: {} + concat-map@0.0.1: {} consola@3.2.3: {} @@ -6760,7 +6553,7 @@ snapshots: css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 cssom@0.3.8: optional: true @@ -6786,12 +6579,6 @@ snapshots: de-indent@1.0.2: {} - debug@4.3.6(supports-color@9.4.0): - dependencies: - ms: 2.1.2 - optionalDependencies: - supports-color: 9.4.0 - debug@4.3.7(supports-color@9.4.0): dependencies: ms: 2.1.3 @@ -6873,7 +6660,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.52: {} + electron-to-chromium@1.5.45: {} emoji-regex@10.4.0: {} @@ -7010,12 +6797,8 @@ snapshots: '@esbuild/win32-ia32': 0.24.0 '@esbuild/win32-x64': 0.24.0 - escalade@3.1.2: {} - escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -7038,25 +6821,13 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: optional: true eventemitter3@5.0.1: {} - execa@5.1.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - execa@8.0.1: dependencies: cross-spawn: 7.0.3 @@ -7069,8 +6840,6 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - expect-type@1.1.0: {} - extendable-error@0.1.7: {} external-editor@3.1.0: @@ -7087,7 +6856,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 fast-safe-stringify@2.1.1: {} @@ -7107,10 +6876,6 @@ snapshots: fflate@0.8.2: {} - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -7125,18 +6890,18 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - focus-trap@7.5.4: + focus-trap@7.6.0: dependencies: tabbable: 6.2.0 - follow-redirects@1.15.6: {} + follow-redirects@1.15.9: {} foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - form-data@4.0.0: + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -7180,9 +6945,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} - - get-func-name@2.0.2: {} + get-east-asian-width@1.2.0: {} get-intrinsic@1.2.4: dependencies: @@ -7192,8 +6955,6 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 - get-stream@6.0.1: {} - get-stream@8.0.1: {} glob-parent@5.1.2: @@ -7206,7 +6967,7 @@ snapshots: jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@7.2.3: @@ -7227,7 +6988,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -7247,7 +7008,7 @@ snapshots: graceful-fs@4.2.11: {} - graphql@16.8.2: {} + graphql@16.9.0: {} handlebars@4.7.8: dependencies: @@ -7256,12 +7017,10 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.18.0 + uglify-js: 3.19.3 hard-rejection@2.1.0: {} - has-flag@3.0.0: {} - has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -7334,17 +7093,15 @@ snapshots: - supports-color optional: true - https-proxy-agent@7.0.4(supports-color@9.4.0): + https-proxy-agent@7.0.5(supports-color@9.4.0): dependencies: agent-base: 7.1.1(supports-color@9.4.0) - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) transitivePeerDependencies: - supports-color human-id@1.0.2: {} - human-signals@2.1.0: {} - human-signals@5.0.0: {} husky@9.1.5: {} @@ -7360,6 +7117,8 @@ snapshots: ignore@5.3.1: {} + ignore@5.3.2: {} + import-meta-resolve@4.1.0: {} indent-string@5.0.0: {} @@ -7394,7 +7153,7 @@ snapshots: is-fullwidth-code-point@5.0.0: dependencies: - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.2.0 is-glob@4.0.3: dependencies: @@ -7415,9 +7174,7 @@ snapshots: is-reference@3.0.2: dependencies: - '@types/estree': 1.0.5 - - is-stream@2.0.1: {} + '@types/estree': 1.0.6 is-stream@3.0.0: {} @@ -7442,7 +7199,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -7458,7 +7215,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@2.4.0: {} + jiti@2.3.3: {} joycon@3.1.1: {} @@ -7478,7 +7235,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.12.1 + acorn: 8.14.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -7486,13 +7243,13 @@ snapshots: decimal.js: 10.4.3 domexception: 4.0.0 escodegen: 2.1.0 - form-data: 4.0.0 + form-data: 4.0.1 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 - parse5: 7.1.2 + nwsapi: 2.2.13 + parse5: 7.2.0 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.4 @@ -7543,10 +7300,10 @@ snapshots: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) execa: 8.0.1 lilconfig: 3.1.2 - listr2: 8.2.5 + listr2: 8.2.4 micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 @@ -7554,7 +7311,7 @@ snapshots: transitivePeerDependencies: - supports-color - listr2@8.2.5: + listr2@8.2.4: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -7595,10 +7352,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.1: - dependencies: - get-func-name: 2.0.2 - loupe@3.1.2: {} lru-cache@10.4.3: {} @@ -7618,19 +7371,15 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.11: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magicast@0.3.4: + magicast@0.3.5: dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - source-map-js: 1.2.0 + '@babel/parser': 7.26.0 + '@babel/types': 7.26.0 + source-map-js: 1.2.1 make-dir@4.0.0: dependencies: @@ -7642,10 +7391,9 @@ snapshots: mark.js@8.11.1: {} - marked-terminal@7.2.1(marked@9.1.6): + marked-terminal@7.1.0(marked@9.1.6): dependencies: ansi-escapes: 7.0.0 - ansi-regex: 6.1.0 chalk: 5.3.0 cli-highlight: 2.1.11 cli-table3: 0.6.5 @@ -7707,16 +7455,6 @@ snapshots: micromark-util-types@2.0.0: {} - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - micromatch@4.0.7: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -7730,8 +7468,6 @@ snapshots: mime@2.6.0: {} - mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} mimic-function@5.0.1: {} @@ -7772,49 +7508,20 @@ snapshots: mrmime@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} - msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5): - dependencies: - '@bundled-es-modules/cookie': 2.0.0 - '@bundled-es-modules/statuses': 1.0.1 - '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.0.1(@types/node@22.9.0) - '@mswjs/interceptors': 0.36.10 - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.6.0 - '@types/statuses': 2.0.5 - chalk: 4.1.2 - graphql: 16.8.2 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - strict-event-emitter: 0.5.1 - type-fest: 4.26.1 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - '@types/node' - optional: true - - msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3): + msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3): dependencies: '@bundled-es-modules/cookie': 2.0.0 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.0.1(@types/node@22.9.0) - '@mswjs/interceptors': 0.36.10 - '@open-draft/deferred-promise': 2.2.0 + '@inquirer/confirm': 5.0.0(@types/node@22.8.0) + '@mswjs/interceptors': 0.36.6 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.5 chalk: 4.1.2 - graphql: 16.8.2 + graphql: 16.9.0 headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 @@ -7839,21 +7546,21 @@ snapshots: nanoid@3.3.7: {} - nanoid@5.0.8: {} + nanoid@5.0.7: {} - nanospinner@1.2.0: + nanospinner@1.1.0: dependencies: picocolors: 1.1.1 neo-async@2.6.2: {} - next@15.0.1(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.0.1(@playwright/test@1.48.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.0.1 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.13 busboy: 1.6.0 - caniuse-lite: 1.0.30001646 + caniuse-lite: 1.0.30001669 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7867,7 +7574,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.0.1 '@next/swc-win32-arm64-msvc': 15.0.1 '@next/swc-win32-x64-msvc': 15.0.1 - '@playwright/test': 1.48.2 + '@playwright/test': 1.48.1 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -7895,29 +7602,21 @@ snapshots: normalize-path@3.0.0: {} - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 - nwsapi@2.2.12: + nwsapi@2.2.13: optional: true object-assign@4.1.1: {} - object-inspect@1.13.1: {} + object-inspect@1.13.2: {} once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -7928,7 +7627,7 @@ snapshots: oniguruma-to-js@0.4.3: dependencies: - regex: 4.4.0 + regex: 4.3.3 openapi-types@12.1.3: {} @@ -7976,22 +7675,22 @@ snapshots: p-try@2.2.0: {} - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} package-manager-detector@0.2.2: {} parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.0 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.0 index-to-position: 0.1.2 - type-fest: 4.20.1 + type-fest: 4.26.1 parse5-htmlparser2-tree-adapter@6.0.1: dependencies: @@ -8001,7 +7700,7 @@ snapshots: parse5@6.0.1: {} - parse5@7.1.2: + parse5@7.2.0: dependencies: entities: 4.5.0 optional: true @@ -8033,12 +7732,10 @@ snapshots: periscopic@3.1.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 3.0.3 is-reference: 3.0.2 - picocolors@1.0.1: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -8051,29 +7748,29 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.48.2: {} + playwright-core@1.48.1: {} - playwright@1.48.2: + playwright@1.48.1: dependencies: - playwright-core: 1.48.2 + playwright-core: 1.48.1 optionalDependencies: fsevents: 2.3.2 pluralize@8.0.0: {} - postcss-load-config@6.0.1(jiti@2.4.0)(postcss@8.4.47)(yaml@2.5.1): + postcss-load-config@6.0.1(jiti@2.3.3)(postcss@8.4.47)(yaml@2.5.1): dependencies: lilconfig: 3.1.2 optionalDependencies: - jiti: 2.4.0 + jiti: 2.3.3 postcss: 8.4.47 yaml: 2.5.1 postcss@8.4.31: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + picocolors: 1.1.1 + source-map-js: 1.2.1 postcss@8.4.47: dependencies: @@ -8081,7 +7778,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.22.0: {} + preact@10.24.3: {} prettier@2.8.8: {} @@ -8103,7 +7800,7 @@ snapshots: punycode@2.3.1: {} - qs@6.12.1: + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -8121,7 +7818,7 @@ snapshots: react-error-boundary@4.1.2(react@18.3.1): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 react: 18.3.1 react-is@17.0.2: {} @@ -8167,7 +7864,7 @@ snapshots: regenerator-runtime@0.14.1: {} - regex@4.4.0: {} + regex@4.3.3: {} require-directory@2.1.1: {} @@ -8194,26 +7891,26 @@ snapshots: dependencies: glob: 7.2.3 - rollup@4.20.0: + rollup@4.24.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.20.0 - '@rollup/rollup-android-arm64': 4.20.0 - '@rollup/rollup-darwin-arm64': 4.20.0 - '@rollup/rollup-darwin-x64': 4.20.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 - '@rollup/rollup-linux-arm-musleabihf': 4.20.0 - '@rollup/rollup-linux-arm64-gnu': 4.20.0 - '@rollup/rollup-linux-arm64-musl': 4.20.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 - '@rollup/rollup-linux-riscv64-gnu': 4.20.0 - '@rollup/rollup-linux-s390x-gnu': 4.20.0 - '@rollup/rollup-linux-x64-gnu': 4.20.0 - '@rollup/rollup-linux-x64-musl': 4.20.0 - '@rollup/rollup-win32-arm64-msvc': 4.20.0 - '@rollup/rollup-win32-ia32-msvc': 4.20.0 - '@rollup/rollup-win32-x64-msvc': 4.20.0 + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -8248,7 +7945,7 @@ snapshots: semver@7.6.3: {} - set-cookie-parser@2.7.0: {} + set-cookie-parser@2.7.1: {} set-function-length@1.2.2: dependencies: @@ -8298,12 +7995,12 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.22.2: + shiki@1.22.1: dependencies: - '@shikijs/core': 1.22.2 - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 + '@shikijs/core': 1.22.1 + '@shikijs/engine-javascript': 1.22.1 + '@shikijs/engine-oniguruma': 1.22.1 + '@shikijs/types': 1.22.1 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -8312,7 +8009,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 siginfo@2.0.0: {} @@ -8327,7 +8024,7 @@ snapshots: sirv@3.0.0: dependencies: - '@polka/url': 1.0.0-next.25 + '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 @@ -8335,9 +8032,9 @@ snapshots: dependencies: bytes-iec: 3.1.1 chokidar: 4.0.1 - jiti: 2.4.0 + jiti: 2.3.3 lilconfig: 3.1.2 - nanospinner: 1.2.0 + nanospinner: 1.1.0 picocolors: 1.1.1 tinyglobby: 0.2.10 @@ -8366,8 +8063,6 @@ snapshots: minimist: 1.2.8 sander: 0.5.1 - source-map-js@1.2.0: {} - source-map-js@1.2.1: {} source-map@0.6.1: {} @@ -8428,7 +8123,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 stringify-entities@4.0.4: @@ -8442,12 +8137,10 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 strip-bom@3.0.0: {} - strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} strip-indent@3.0.0: @@ -8477,13 +8170,13 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) fast-safe-stringify: 2.1.1 - form-data: 4.0.0 + form-data: 4.0.1 formidable: 3.5.2 methods: 1.1.2 mime: 2.6.0 - qs: 6.12.1 + qs: 6.13.0 transitivePeerDependencies: - supports-color @@ -8491,10 +8184,6 @@ snapshots: dependencies: copy-anything: 3.0.5 - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -8510,7 +8199,7 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 3.6.0 - picocolors: 1.0.1 + picocolors: 1.1.1 sade: 1.8.1 svelte: 4.2.19 svelte-preprocess: 5.1.4(@babel/core@7.26.0)(postcss@8.4.47)(svelte@4.2.19)(typescript@5.6.3) @@ -8534,7 +8223,7 @@ snapshots: dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 - magic-string: 0.30.11 + magic-string: 0.30.12 sorcery: 0.11.1 strip-indent: 3.0.0 svelte: 4.2.19 @@ -8548,16 +8237,16 @@ snapshots: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@types/estree': 1.0.5 - acorn: 8.12.1 - aria-query: 5.3.0 + '@types/estree': 1.0.6 + acorn: 8.13.0 + aria-query: 5.3.2 axobject-query: 4.1.0 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.11 + magic-string: 0.30.12 periscopic: 3.1.0 swr@2.2.5(react@18.3.1): @@ -8592,8 +8281,6 @@ snapshots: globalyzer: 0.1.0 globrex: 0.1.2 - tinybench@2.8.0: {} - tinybench@2.9.0: {} tinyexec@0.3.1: {} @@ -8603,22 +8290,16 @@ snapshots: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.0.0: {} - tinypool@1.0.1: {} tinyrainbow@1.2.0: {} - tinyspy@3.0.0: {} - tinyspy@3.0.2: {} tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -8653,30 +8334,30 @@ snapshots: ts-results-es@4.2.0: {} - tslib@2.8.1: {} + tslib@2.8.0: {} - tsup@8.2.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(jiti@2.4.0)(postcss@8.4.47)(typescript@5.4.5)(yaml@2.5.1): + tsup@8.3.5(@swc/core@1.7.39(@swc/helpers@0.5.13))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.5.1): dependencies: - bundle-require: 5.0.0(esbuild@0.23.1) + bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 - chokidar: 3.6.0 + chokidar: 4.0.1 consola: 3.2.3 debug: 4.3.7(supports-color@9.4.0) - esbuild: 0.23.1 - execa: 5.1.1 - globby: 11.1.0 + esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.47)(yaml@2.5.1) + postcss-load-config: 6.0.1(jiti@2.3.3)(postcss@8.4.47)(yaml@2.5.1) resolve-from: 5.0.0 - rollup: 4.20.0 + rollup: 4.24.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 + tinyexec: 0.3.1 + tinyglobby: 0.2.10 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.9.1(@swc/helpers@0.5.13) + '@swc/core': 1.7.39(@swc/helpers@0.5.13) postcss: 8.4.47 - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - jiti - supports-color @@ -8687,8 +8368,6 @@ snapshots: type-fest@1.4.0: {} - type-fest@4.20.1: {} - type-fest@4.26.1: {} typescript@5.4.5: {} @@ -8699,7 +8378,7 @@ snapshots: typescript@5.6.3: {} - uglify-js@3.18.0: + uglify-js@3.19.3: optional: true undici-types@6.19.8: {} @@ -8735,20 +8414,19 @@ snapshots: universalify@2.0.1: {} - unplugin-swc@1.5.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(rollup@4.20.0): + unplugin-swc@1.5.1(@swc/core@1.7.39(@swc/helpers@0.5.13))(rollup@4.24.0): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.20.0) - '@swc/core': 1.9.1(@swc/helpers@0.5.13) + '@rollup/pluginutils': 5.1.3(rollup@4.24.0) + '@swc/core': 1.7.39(@swc/helpers@0.5.13) load-tsconfig: 0.2.5 - unplugin: 1.12.1 + unplugin: 1.15.0 transitivePeerDependencies: - rollup + - webpack-sources - unplugin@1.12.1: + unplugin@1.15.0: dependencies: - acorn: 8.12.1 - chokidar: 3.6.0 - webpack-sources: 3.2.3 + acorn: 8.14.0 webpack-virtual-modules: 0.6.2 update-browserslist-db@1.1.1(browserslist@4.24.2): @@ -8785,13 +8463,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.0.5(@types/node@22.9.0): + vite-node@2.0.5(@types/node@22.8.0): dependencies: cac: 6.7.14 - debug: 4.3.6(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.8.0) transitivePeerDependencies: - '@types/node' - less @@ -8803,12 +8481,12 @@ snapshots: - supports-color - terser - vite-node@2.1.4(@types/node@22.9.0)(supports-color@9.4.0): + vite-node@2.1.3(@types/node@22.8.0)(supports-color@9.4.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@9.4.0) pathe: 1.1.2 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.8.0) transitivePeerDependencies: - '@types/node' - less @@ -8820,36 +8498,36 @@ snapshots: - supports-color - terser - vite@5.4.10(@types/node@22.9.0): + vite@5.4.10(@types/node@22.8.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 - rollup: 4.20.0 + rollup: 4.24.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.8.0 fsevents: 2.3.3 - vitefu@0.2.5(vite@5.4.10(@types/node@22.9.0)): + vitefu@0.2.5(vite@5.4.10(@types/node@22.8.0)): optionalDependencies: - vite: 5.4.10(@types/node@22.9.0) - - vitepress@1.3.2(@algolia/client-search@4.23.3)(@types/node@22.9.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3): - dependencies: - '@docsearch/css': 3.6.0 - '@docsearch/js': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) - '@shikijs/core': 1.22.2 - '@shikijs/transformers': 1.22.2 - '@types/markdown-it': 14.1.1 - '@vitejs/plugin-vue': 5.1.4(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3)) - '@vue/devtools-api': 7.6.3 - '@vue/shared': 3.4.35 - '@vueuse/core': 10.11.0(vue@3.5.12(typescript@5.6.3)) - '@vueuse/integrations': 10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.5.12(typescript@5.6.3)) - focus-trap: 7.5.4 + vite: 5.4.10(@types/node@22.8.0) + + vitepress@1.3.2(@algolia/client-search@4.24.0)(@types/node@22.8.0)(@types/react@18.3.12)(axios@1.7.7)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.6.3): + dependencies: + '@docsearch/css': 3.6.2 + '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) + '@shikijs/core': 1.22.1 + '@shikijs/transformers': 1.22.1 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.1.4(vite@5.4.10(@types/node@22.8.0))(vue@3.5.12(typescript@5.6.3)) + '@vue/devtools-api': 7.5.4 + '@vue/shared': 3.5.12 + '@vueuse/core': 10.11.1(vue@3.5.12(typescript@5.6.3)) + '@vueuse/integrations': 10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3)) + focus-trap: 7.6.0 mark.js: 8.11.1 minisearch: 7.1.0 - shiki: 1.22.2 - vite: 5.4.10(@types/node@22.9.0) + shiki: 1.22.1 + vite: 5.4.10(@types/node@22.8.0) vue: 3.5.12(typescript@5.6.3) optionalDependencies: postcss: 8.4.47 @@ -8881,69 +8559,33 @@ snapshots: - typescript - universal-cookie - vitest@2.0.5(@types/node@22.9.0)(jsdom@20.0.3): + vitest@2.0.5(@types/node@22.8.0)(jsdom@20.0.3): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 - '@vitest/pretty-format': 2.0.5 + '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.0.5 '@vitest/snapshot': 2.0.5 '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.1.1 - debug: 4.3.6(supports-color@9.4.0) - execa: 8.0.1 - magic-string: 0.30.11 - pathe: 1.1.2 - std-env: 3.7.0 - tinybench: 2.8.0 - tinypool: 1.0.0 - tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.9.0) - vite-node: 2.0.5(@types/node@22.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 22.9.0 - jsdom: 20.0.3 - transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5)): - dependencies: - '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.4.5))(vite@5.4.10(@types/node@22.9.0)) - '@vitest/pretty-format': 2.1.4 - '@vitest/runner': 2.1.4 - '@vitest/snapshot': 2.1.4 - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 chai: 5.1.2 debug: 4.3.7(supports-color@9.4.0) - expect-type: 1.1.0 + execa: 8.0.1 magic-string: 0.30.12 pathe: 1.1.2 std-env: 3.7.0 tinybench: 2.9.0 - tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.9.0) - vite-node: 2.1.4(@types/node@22.9.0)(supports-color@9.4.0) + vite: 5.4.10(@types/node@22.8.0) + vite-node: 2.0.5(@types/node@22.8.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.8.0 jsdom: 20.0.3 transitivePeerDependencies: - less - lightningcss - - msw - sass - sass-embedded - stylus @@ -8951,18 +8593,17 @@ snapshots: - supports-color - terser - vitest@2.1.4(@types/node@22.9.0)(jsdom@20.0.3)(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3)): + vitest@2.1.3(@types/node@22.8.0)(jsdom@20.0.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3)): dependencies: - '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(msw@2.6.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.9.0)) - '@vitest/pretty-format': 2.1.4 - '@vitest/runner': 2.1.4 - '@vitest/snapshot': 2.1.4 - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + '@vitest/expect': 2.1.3 + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(msw@2.5.1(@types/node@22.8.0)(typescript@5.6.3))(vite@5.4.10(@types/node@22.8.0)) + '@vitest/pretty-format': 2.1.3 + '@vitest/runner': 2.1.3 + '@vitest/snapshot': 2.1.3 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 chai: 5.1.2 debug: 4.3.7(supports-color@9.4.0) - expect-type: 1.1.0 magic-string: 0.30.12 pathe: 1.1.2 std-env: 3.7.0 @@ -8970,11 +8611,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.9.0) - vite-node: 2.1.4(@types/node@22.9.0)(supports-color@9.4.0) + vite: 5.4.10(@types/node@22.8.0) + vite-node: 2.1.3(@types/node@22.8.0)(supports-color@9.4.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.8.0 jsdom: 20.0.3 transitivePeerDependencies: - less @@ -8989,14 +8630,14 @@ snapshots: vscode-uri@3.0.8: {} - vue-demi@0.14.8(vue@3.5.12(typescript@5.6.3)): + vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)): dependencies: vue: 3.5.12(typescript@5.6.3) - vue-tsc@2.1.10(typescript@5.6.3): + vue-tsc@2.1.6(typescript@5.6.3): dependencies: - '@volar/typescript': 2.4.8 - '@vue/language-core': 2.1.10(typescript@5.6.3) + '@volar/typescript': 2.4.7 + '@vue/language-core': 2.1.6(typescript@5.6.3) semver: 7.6.3 typescript: 5.6.3 @@ -9022,8 +8663,6 @@ snapshots: webidl-conversions@7.0.0: optional: true - webpack-sources@3.2.3: {} - webpack-virtual-modules@0.6.2: {} whatwg-encoding@2.0.0: @@ -9120,7 +8759,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -9130,7 +8769,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 From 4dfb3ef3b86381c79a6b0155ba84053d8f253a45 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 19:12:59 +0100 Subject: [PATCH 18/25] style(openapi-metadata): lint --- .../src/decorators/api-body.ts | 5 +- .../src/decorators/api-cookie.ts | 11 +--- .../src/decorators/api-header.ts | 11 +--- .../src/decorators/api-operation.ts | 5 +- .../src/decorators/api-param.ts | 11 +--- .../src/decorators/api-property.ts | 23 ++----- .../src/decorators/api-query.ts | 11 +--- .../src/decorators/api-response.ts | 10 +-- .../src/errors/no-explicit-type.ts | 10 +-- .../src/generators/document.ts | 4 +- .../src/generators/operation.ts | 25 ++------ .../openapi-metadata/src/generators/paths.ts | 10 +-- packages/openapi-metadata/src/loaders/type.ts | 34 +++------- .../openapi-metadata/src/metadata/exclude.ts | 5 +- .../src/metadata/extra-models.ts | 7 +- .../openapi-metadata/src/metadata/factory.ts | 26 ++------ .../src/metadata/operation-body.ts | 8 +-- .../src/metadata/operation-header.ts | 5 +- .../src/metadata/operation-parameter.ts | 12 ++-- .../src/metadata/operation-response.ts | 12 ++-- .../src/metadata/operation-security.ts | 4 +- .../src/metadata/operation.ts | 3 +- .../openapi-metadata/src/metadata/property.ts | 3 +- packages/openapi-metadata/src/ui/swagger.ts | 5 +- .../openapi-metadata/src/utils/metadata.ts | 22 ++----- .../openapi-metadata/test/decorators.test.ts | 64 ++++--------------- 26 files changed, 79 insertions(+), 267 deletions(-) diff --git a/packages/openapi-metadata/src/decorators/api-body.ts b/packages/openapi-metadata/src/decorators/api-body.ts index f58e22808..628cea0fd 100644 --- a/packages/openapi-metadata/src/decorators/api-body.ts +++ b/packages/openapi-metadata/src/decorators/api-body.ts @@ -1,8 +1,5 @@ import type { SetOptional } from "type-fest"; -import { - type OperationBodyMetadata, - OperationBodyMetadataStorage, -} from "../metadata/operation-body"; +import { type OperationBodyMetadata, OperationBodyMetadataStorage } from "../metadata/operation-body"; export type ApiBodyOptions = SetOptional; diff --git a/packages/openapi-metadata/src/decorators/api-cookie.ts b/packages/openapi-metadata/src/decorators/api-cookie.ts index 5396c0f5b..423d099d4 100644 --- a/packages/openapi-metadata/src/decorators/api-cookie.ts +++ b/packages/openapi-metadata/src/decorators/api-cookie.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata"; export type ApiCookieOptions = Omit; export function ApiCookie(options: ApiCookieOptions) { return (target: Object, propertyKey?: string | symbol) => { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "cookie", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "cookie", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-header.ts b/packages/openapi-metadata/src/decorators/api-header.ts index 45eeda5f2..f431f8353 100644 --- a/packages/openapi-metadata/src/decorators/api-header.ts +++ b/packages/openapi-metadata/src/decorators/api-header.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata"; export type ApiHeaderOptions = Omit; export function ApiHeader(options: ApiHeaderOptions) { return (target: Object, propertyKey?: string | symbol) => { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "header", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "header", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-operation.ts b/packages/openapi-metadata/src/decorators/api-operation.ts index 8aee5d287..4b450508b 100644 --- a/packages/openapi-metadata/src/decorators/api-operation.ts +++ b/packages/openapi-metadata/src/decorators/api-operation.ts @@ -1,7 +1,4 @@ -import { - type OperationMetadata, - OperationMetadataStorage, -} from "../metadata/operation"; +import { type OperationMetadata, OperationMetadataStorage } from "../metadata/operation"; export type ApiOperationOptions = OperationMetadata; diff --git a/packages/openapi-metadata/src/decorators/api-param.ts b/packages/openapi-metadata/src/decorators/api-param.ts index 66caca67d..bd834cb9a 100644 --- a/packages/openapi-metadata/src/decorators/api-param.ts +++ b/packages/openapi-metadata/src/decorators/api-param.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata/operation-parameter"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter"; export type ApiParamOptions = Omit; export function ApiParam(options: ApiParamOptions) { return function (target: Object, propertyKey?: string | symbol) { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "path", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "path", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-property.ts b/packages/openapi-metadata/src/decorators/api-property.ts index d2ce21747..fcc59c41f 100644 --- a/packages/openapi-metadata/src/decorators/api-property.ts +++ b/packages/openapi-metadata/src/decorators/api-property.ts @@ -1,18 +1,13 @@ import type { Context } from "../context"; import { SymbolKeysNotSupportedError } from "../errors/symbol-keys-not-supported"; -import { - type PropertyMetadata, - PropertyMetadataStorage, -} from "../metadata/property"; +import { type PropertyMetadata, PropertyMetadataStorage } from "../metadata/property"; import { findType } from "../utils/metadata"; export type ApiPropertyOptions = Partial; export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator; export function ApiProperty(options?: ApiPropertyOptions): MethodDecorator; -export function ApiProperty( - options?: ApiPropertyOptions, -): PropertyDecorator | MethodDecorator { +export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator | MethodDecorator { return (prototype, propertyKey, descriptor) => { const isMethod = Boolean(descriptor?.value); @@ -26,11 +21,7 @@ export function ApiProperty( ...options, } as PropertyMetadata; - if ( - !("type" in metadata) && - !("schema" in metadata) && - !("enum" in metadata) - ) { + if (!("type" in metadata) && !("schema" in metadata) && !("enum" in metadata)) { (metadata as any).type = (context: Context) => findType({ context, @@ -46,12 +37,8 @@ export function ApiProperty( }; } -export function ApiPropertyOptional( - options?: Omit, -): PropertyDecorator; -export function ApiPropertyOptional( - options?: Omit, -): MethodDecorator; +export function ApiPropertyOptional(options?: Omit): PropertyDecorator; +export function ApiPropertyOptional(options?: Omit): MethodDecorator; export function ApiPropertyOptional( options?: Omit, ): PropertyDecorator | MethodDecorator { diff --git a/packages/openapi-metadata/src/decorators/api-query.ts b/packages/openapi-metadata/src/decorators/api-query.ts index a0905e98e..00539a5c1 100644 --- a/packages/openapi-metadata/src/decorators/api-query.ts +++ b/packages/openapi-metadata/src/decorators/api-query.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata/operation-parameter"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter"; export type ApiQueryOptions = Omit; export function ApiQuery(options: ApiQueryOptions) { return function (target: Object, propertyKey?: string | symbol) { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "query", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "query", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-response.ts b/packages/openapi-metadata/src/decorators/api-response.ts index 0b62ce206..829e3fa85 100644 --- a/packages/openapi-metadata/src/decorators/api-response.ts +++ b/packages/openapi-metadata/src/decorators/api-response.ts @@ -1,13 +1,7 @@ import type { SetOptional } from "type-fest"; -import { - type OperationResponseMetadata, - OperationResponseMetadataStorage, -} from "../metadata/operation-response"; +import { type OperationResponseMetadata, OperationResponseMetadataStorage } from "../metadata/operation-response"; -export type ApiResponseOptions = SetOptional< - OperationResponseMetadata, - "status" | "mediaType" ->; +export type ApiResponseOptions = SetOptional; export function ApiResponse(options: ApiResponseOptions) { return function (target: Object, propertyKey?: string | symbol) { diff --git a/packages/openapi-metadata/src/errors/no-explicit-type.ts b/packages/openapi-metadata/src/errors/no-explicit-type.ts index 36191a60e..914cd4315 100644 --- a/packages/openapi-metadata/src/errors/no-explicit-type.ts +++ b/packages/openapi-metadata/src/errors/no-explicit-type.ts @@ -1,13 +1,7 @@ export class NoExplicitTypeError extends Error { - constructor( - typeName: string, - propertyKey: string, - parameterIndex?: number, - argName?: string, - ) { + constructor(typeName: string, propertyKey: string, parameterIndex?: number, argName?: string) { let errorMessage = - "Unable to infer OpenAPI type from TypeScript reflection system. " + - "You need to provide explicit type for "; + "Unable to infer OpenAPI type from TypeScript reflection system. " + "You need to provide explicit type for "; if (argName) { errorMessage += `argument named '${argName}' of `; } else if (parameterIndex !== undefined) { diff --git a/packages/openapi-metadata/src/generators/document.ts b/packages/openapi-metadata/src/generators/document.ts index c19e53cb0..31c74b1d5 100644 --- a/packages/openapi-metadata/src/generators/document.ts +++ b/packages/openapi-metadata/src/generators/document.ts @@ -40,9 +40,7 @@ export type GenerateDocumentOptions = { /** * Generates a compliant OpenAPIV3 schema. */ -export async function generateDocument( - options: GenerateDocumentOptions, -): Promise { +export async function generateDocument(options: GenerateDocumentOptions): Promise { const context = new Context(options.customLogger, options.loaders); return deepmerge(options.document, { diff --git a/packages/openapi-metadata/src/generators/operation.ts b/packages/openapi-metadata/src/generators/operation.ts index a562f20e9..484ba7c7c 100644 --- a/packages/openapi-metadata/src/generators/operation.ts +++ b/packages/openapi-metadata/src/generators/operation.ts @@ -30,33 +30,18 @@ export async function generateOperation( operation.requestBody = await generateOperationBody(context, body); } - const parameters = OperationParameterMetadataStorage.getMetadata( - target, - propertyKey, - ); + const parameters = OperationParameterMetadataStorage.getMetadata(target, propertyKey); operation.parameters = []; for (const parameter of parameters) { - operation.parameters.push( - await generateOperationParameters(context, parameter), - ); + operation.parameters.push(await generateOperationParameters(context, parameter)); } - const responses = OperationResponseMetadataStorage.getMetadata( - target, - propertyKey, - ); + const responses = OperationResponseMetadataStorage.getMetadata(target, propertyKey); for (const [status, response] of Object.entries(responses)) { - operation.responses[status] = await generateOperationResponse( - context, - response, - ); + operation.responses[status] = await generateOperationResponse(context, response); } - const security = OperationSecurityMetadataStorage.getMetadata( - target, - propertyKey, - true, - ); + const security = OperationSecurityMetadataStorage.getMetadata(target, propertyKey, true); operation.security = [security]; diff --git a/packages/openapi-metadata/src/generators/paths.ts b/packages/openapi-metadata/src/generators/paths.ts index 679a8270b..45f97bb59 100644 --- a/packages/openapi-metadata/src/generators/paths.ts +++ b/packages/openapi-metadata/src/generators/paths.ts @@ -3,10 +3,7 @@ import type { Context } from "../context"; import { generateOperation } from "./operation"; import { ExcludeMetadataStorage, OperationMetadataStorage } from "../metadata"; -export async function generatePaths( - context: Context, - controllers: Function[], -): Promise { +export async function generatePaths(context: Context, controllers: Function[]): Promise { const paths: OpenAPIV3.PathsObject = {}; for (const controller of controllers) { @@ -28,10 +25,7 @@ export async function generatePaths( } for (const method of metadata.methods) { - const excludeOperation = ExcludeMetadataStorage.getMetadata( - target, - key, - ); + const excludeOperation = ExcludeMetadataStorage.getMetadata(target, key); if (excludeOperation === true) { continue; diff --git a/packages/openapi-metadata/src/loaders/type.ts b/packages/openapi-metadata/src/loaders/type.ts index 92664cc22..40df885eb 100644 --- a/packages/openapi-metadata/src/loaders/type.ts +++ b/packages/openapi-metadata/src/loaders/type.ts @@ -39,19 +39,16 @@ const ClassTypeLoader: TypeLoaderFn = async (context, value) => { return { $ref: schemaPath(model) }; } - const schema: SetRequired = - { - type: "object", - properties: {}, - required: [], - }; + const schema: SetRequired = { + type: "object", + properties: {}, + required: [], + }; const properties = PropertyMetadataStorage.getMetadata(value.prototype); if (!properties) { - context.logger.warn( - `You tried to use '${model}' as a type but it does not contain any ApiProperty.`, - ); + context.logger.warn(`You tried to use '${model}' as a type but it does not contain any ApiProperty.`); return; } @@ -59,14 +56,7 @@ const ClassTypeLoader: TypeLoaderFn = async (context, value) => { context.schemas[model] = schema; for (const [key, property] of Object.entries(properties)) { - const { - required, - type, - name, - enum: e, - schema: s, - ...metadata - } = property as any; + const { required, type, name, enum: e, schema: s, ...metadata } = property as any; schema.properties[key] = { ...(await loadType(context, property)), ...metadata, @@ -101,18 +91,12 @@ export async function loadType( const thunk = isThunk(options.type); const value = thunk ? (options.type as Function)(context) : options.type; - for (const loader of [ - PrimitiveTypeLoader, - ...context.typeLoaders, - ClassTypeLoader, - ]) { + for (const loader of [PrimitiveTypeLoader, ...context.typeLoaders, ClassTypeLoader]) { const result = await loader(context, value, options.type); if (result) { return result; } } - context.logger.warn( - `You tried to use '${options.type.toString()}' as a type but no loader supports it ${thunk}`, - ); + context.logger.warn(`You tried to use '${options.type.toString()}' as a type but no loader supports it ${thunk}`); } diff --git a/packages/openapi-metadata/src/metadata/exclude.ts b/packages/openapi-metadata/src/metadata/exclude.ts index e01fb34ad..e491abb82 100644 --- a/packages/openapi-metadata/src/metadata/exclude.ts +++ b/packages/openapi-metadata/src/metadata/exclude.ts @@ -2,7 +2,4 @@ import { createMetadataStorage } from "./factory"; export const ExcludeMetadataKey = Symbol("Exclude"); -export const ExcludeMetadataStorage = createMetadataStorage( - ExcludeMetadataKey, - false, -); +export const ExcludeMetadataStorage = createMetadataStorage(ExcludeMetadataKey, false); diff --git a/packages/openapi-metadata/src/metadata/extra-models.ts b/packages/openapi-metadata/src/metadata/extra-models.ts index 3708a242c..705325650 100644 --- a/packages/openapi-metadata/src/metadata/extra-models.ts +++ b/packages/openapi-metadata/src/metadata/extra-models.ts @@ -3,6 +3,7 @@ import { createMetadataStorage } from "./factory"; export const ExtraModelsMetadataKey = Symbol("ExtraModels"); -export const ExtraModelsMetadataStorage = createMetadataStorage< - (TypeValue | Thunk)[] ->(ExtraModelsMetadataKey, []); +export const ExtraModelsMetadataStorage = createMetadataStorage<(TypeValue | Thunk)[]>( + ExtraModelsMetadataKey, + [], +); diff --git a/packages/openapi-metadata/src/metadata/factory.ts b/packages/openapi-metadata/src/metadata/factory.ts index 67be62ce2..bca9286e7 100644 --- a/packages/openapi-metadata/src/metadata/factory.ts +++ b/packages/openapi-metadata/src/metadata/factory.ts @@ -1,14 +1,7 @@ import deepmerge from "deepmerge"; -export function createMetadataStorage( - key: Symbol | string, - defaultMetadata?: T, -) { - function defineMetadata( - object: Object, - metadata: T, - propertyKey?: string | symbol, - ) { +export function createMetadataStorage(key: Symbol | string, defaultMetadata?: T) { + function defineMetadata(object: Object, metadata: T, propertyKey?: string | symbol) { if (propertyKey) { Reflect.defineMetadata(key, metadata, object, propertyKey); } else { @@ -16,14 +9,9 @@ export function createMetadataStorage( } } - function getMetadata( - object: Object, - propertyKey?: string | symbol, - withParent = false, - ): T { + function getMetadata(object: Object, propertyKey?: string | symbol, withParent = false): T { if (propertyKey) { - let metadata = - Reflect.getMetadata(key, object, propertyKey) ?? defaultMetadata; + let metadata = Reflect.getMetadata(key, object, propertyKey) ?? defaultMetadata; if (withParent) { metadata = deepmerge(getMetadata(object.constructor), metadata); @@ -35,11 +23,7 @@ export function createMetadataStorage( } } - function mergeMetadata( - object: Object, - metadata: T, - propertyKey?: string | symbol, - ): T { + function mergeMetadata(object: Object, metadata: T, propertyKey?: string | symbol): T { const existing = getMetadata(object, propertyKey); const merged = deepmerge(existing, metadata) as T; defineMetadata(object, merged, propertyKey); diff --git a/packages/openapi-metadata/src/metadata/operation-body.ts b/packages/openapi-metadata/src/metadata/operation-body.ts index 855b8b34b..3dfc5da92 100644 --- a/packages/openapi-metadata/src/metadata/operation-body.ts +++ b/packages/openapi-metadata/src/metadata/operation-body.ts @@ -2,12 +2,8 @@ import type { OpenAPIV3 } from "openapi-types"; import type { TypeOptions } from "../types"; import { createMetadataStorage } from "./factory"; -export type OperationBodyMetadata = Omit< - OpenAPIV3.RequestBodyObject, - "content" -> & { mediaType: string } & TypeOptions; +export type OperationBodyMetadata = Omit & { mediaType: string } & TypeOptions; export const OperationBodyMetadataKey = Symbol("OperationBody"); -export const OperationBodyMetadataStorage = - createMetadataStorage(OperationBodyMetadataKey); +export const OperationBodyMetadataStorage = createMetadataStorage(OperationBodyMetadataKey); diff --git a/packages/openapi-metadata/src/metadata/operation-header.ts b/packages/openapi-metadata/src/metadata/operation-header.ts index 6d1d2578b..235e6a0d1 100644 --- a/packages/openapi-metadata/src/metadata/operation-header.ts +++ b/packages/openapi-metadata/src/metadata/operation-header.ts @@ -8,6 +8,5 @@ export type OperationHeaderMetadata = Omit & { export const OperationHeaderSymbol = Symbol("OperationHeader"); -export const OperationHeaderMetadataStorage = createMetadataStorage< - Record ->(OperationHeaderSymbol); +export const OperationHeaderMetadataStorage = + createMetadataStorage>(OperationHeaderSymbol); diff --git a/packages/openapi-metadata/src/metadata/operation-parameter.ts b/packages/openapi-metadata/src/metadata/operation-parameter.ts index a5877a74d..0d22f7450 100644 --- a/packages/openapi-metadata/src/metadata/operation-parameter.ts +++ b/packages/openapi-metadata/src/metadata/operation-parameter.ts @@ -2,16 +2,14 @@ import type { OpenAPIV3 } from "openapi-types"; import type { TypeOptions } from "../types"; import { createMetadataStorage } from "./factory"; -export type OperationParameterMetadata = Omit< - OpenAPIV3.ParameterObject, - "in" | "schema" -> & { +export type OperationParameterMetadata = Omit & { name: string; in: "path" | "query" | "header" | "cookie"; } & Partial; export const OperationParameterMetadataKey = Symbol("OperationParameter"); -export const OperationParameterMetadataStorage = createMetadataStorage< - OperationParameterMetadata[] ->(OperationParameterMetadataKey, []); +export const OperationParameterMetadataStorage = createMetadataStorage( + OperationParameterMetadataKey, + [], +); diff --git a/packages/openapi-metadata/src/metadata/operation-response.ts b/packages/openapi-metadata/src/metadata/operation-response.ts index 99fb2f8ad..383616179 100644 --- a/packages/openapi-metadata/src/metadata/operation-response.ts +++ b/packages/openapi-metadata/src/metadata/operation-response.ts @@ -3,16 +3,14 @@ import type { TypeOptions } from "../types"; import type { SetOptional } from "type-fest"; import { createMetadataStorage } from "./factory"; -export type OperationResponseMetadata = Omit< - SetOptional, - "content" -> & { +export type OperationResponseMetadata = Omit, "content"> & { status: number | "default"; mediaType: string; } & TypeOptions; export const OperationResponseMetadataKey = Symbol("OperationResponse"); -export const OperationResponseMetadataStorage = createMetadataStorage< - Record ->(OperationResponseMetadataKey, {}); +export const OperationResponseMetadataStorage = createMetadataStorage>( + OperationResponseMetadataKey, + {}, +); diff --git a/packages/openapi-metadata/src/metadata/operation-security.ts b/packages/openapi-metadata/src/metadata/operation-security.ts index 4bb2e7abc..65723b3f2 100644 --- a/packages/openapi-metadata/src/metadata/operation-security.ts +++ b/packages/openapi-metadata/src/metadata/operation-security.ts @@ -6,6 +6,4 @@ export type OperationSecurityMetadata = OpenAPIV3.SecurityRequirementObject; export const OperationSecurityMetadataKey = Symbol("OperationSecurity"); export const OperationSecurityMetadataStorage = - createMetadataStorage( - OperationSecurityMetadataKey, - ); + createMetadataStorage(OperationSecurityMetadataKey); diff --git a/packages/openapi-metadata/src/metadata/operation.ts b/packages/openapi-metadata/src/metadata/operation.ts index c41810ec5..359f11c78 100644 --- a/packages/openapi-metadata/src/metadata/operation.ts +++ b/packages/openapi-metadata/src/metadata/operation.ts @@ -9,5 +9,4 @@ export type OperationMetadata = Omit & { export const OperationMetadataKey = Symbol("Operation"); -export const OperationMetadataStorage = - createMetadataStorage(OperationMetadataKey, {}); +export const OperationMetadataStorage = createMetadataStorage(OperationMetadataKey, {}); diff --git a/packages/openapi-metadata/src/metadata/property.ts b/packages/openapi-metadata/src/metadata/property.ts index 6c892ccc0..9698bac16 100644 --- a/packages/openapi-metadata/src/metadata/property.ts +++ b/packages/openapi-metadata/src/metadata/property.ts @@ -8,5 +8,4 @@ export type PropertyMetadata = { export const PropertyMetadataKey = Symbol("Property"); -export const PropertyMetadataStorage = - createMetadataStorage>(PropertyMetadataKey); +export const PropertyMetadataStorage = createMetadataStorage>(PropertyMetadataKey); diff --git a/packages/openapi-metadata/src/ui/swagger.ts b/packages/openapi-metadata/src/ui/swagger.ts index 71a76d037..159c20954 100644 --- a/packages/openapi-metadata/src/ui/swagger.ts +++ b/packages/openapi-metadata/src/ui/swagger.ts @@ -2,10 +2,7 @@ export type GenerateSwaggerUIOptions = { persistAuthorization?: boolean; }; -export function generateSwaggerUI( - url: string, - options?: GenerateSwaggerUIOptions, -) { +export function generateSwaggerUI(url: string, options?: GenerateSwaggerUIOptions) { const swaggerOptions = { url, ...options, diff --git a/packages/openapi-metadata/src/utils/metadata.ts b/packages/openapi-metadata/src/utils/metadata.ts index a9492e303..395e2a066 100644 --- a/packages/openapi-metadata/src/utils/metadata.ts +++ b/packages/openapi-metadata/src/utils/metadata.ts @@ -4,18 +4,12 @@ import { NoExplicitTypeError } from "../errors/no-explicit-type.js"; import { ReflectMetadataMissingError } from "../errors/reflect-metadata-missing.js"; export function ensureReflectMetadataExists() { - if ( - typeof Reflect !== "object" || - typeof Reflect.getMetadata !== "function" - ) { + if (typeof Reflect !== "object" || typeof Reflect.getMetadata !== "function") { throw new ReflectMetadataMissingError(); } } -export type MetadataKey = - | "design:type" - | "design:returntype" - | "design:paramtypes"; +export type MetadataKey = "design:type" | "design:returntype" | "design:paramtypes"; export type FindTypeOptions = { context: Context; @@ -24,17 +18,9 @@ export type FindTypeOptions = { propertyKey: string; }; -export function findType({ - metadataKey, - prototype, - propertyKey, -}: FindTypeOptions) { +export function findType({ metadataKey, prototype, propertyKey }: FindTypeOptions) { ensureReflectMetadataExists(); - const reflectedType: Function | undefined = Reflect.getMetadata( - metadataKey, - prototype, - propertyKey, - ); + const reflectedType: Function | undefined = Reflect.getMetadata(metadataKey, prototype, propertyKey); if (!reflectedType) { throw new NoExplicitTypeError(prototype.constructor.name, propertyKey); diff --git a/packages/openapi-metadata/test/decorators.test.ts b/packages/openapi-metadata/test/decorators.test.ts index 59750b68d..a04772f7d 100644 --- a/packages/openapi-metadata/test/decorators.test.ts +++ b/packages/openapi-metadata/test/decorators.test.ts @@ -22,12 +22,7 @@ import { OperationResponseMetadataStorage, OperationSecurityMetadataStorage, } from "../src/metadata"; -import { - ApiBasicAuth, - ApiBearerAuth, - ApiCookieAuth, - ApiOauth2, -} from "../src/decorators/api-security"; +import { ApiBasicAuth, ApiBearerAuth, ApiCookieAuth, ApiOauth2 } from "../src/decorators/api-security"; test("@ApiOperation", () => { class MyController { @@ -35,10 +30,7 @@ test("@ApiOperation", () => { operation() {} } - const metadata = OperationMetadataStorage.getMetadata( - MyController.prototype, - "operation", - ); + const metadata = OperationMetadataStorage.getMetadata(MyController.prototype, "operation"); expect(metadata).toEqual({ summary: "Hello", @@ -53,10 +45,7 @@ test("@ApiBody", () => { operation() {} } - const metadata = OperationBodyMetadataStorage.getMetadata( - MyController.prototype, - "operation", - ); + const metadata = OperationBodyMetadataStorage.getMetadata(MyController.prototype, "operation"); expect(metadata).toEqual({ type: "string", @@ -71,11 +60,7 @@ test("@ApiParam", () => { operation() {} } - const metadata = OperationParameterMetadataStorage.getMetadata( - MyController.prototype, - "operation", - true, - ); + const metadata = OperationParameterMetadataStorage.getMetadata(MyController.prototype, "operation", true); expect(metadata).toEqual([ { in: "path", name: "test" }, @@ -90,11 +75,7 @@ test("@ApiHeader", () => { operation() {} } - const metadata = OperationParameterMetadataStorage.getMetadata( - MyController.prototype, - "operation", - true, - ); + const metadata = OperationParameterMetadataStorage.getMetadata(MyController.prototype, "operation", true); expect(metadata).toEqual([ { in: "header", name: "test" }, @@ -109,11 +90,7 @@ test("@ApiCookie", () => { operation() {} } - const metadata = OperationParameterMetadataStorage.getMetadata( - MyController.prototype, - "operation", - true, - ); + const metadata = OperationParameterMetadataStorage.getMetadata(MyController.prototype, "operation", true); expect(metadata).toEqual([ { in: "cookie", name: "test" }, @@ -128,11 +105,7 @@ test("@ApiQuery", () => { operation() {} } - const metadata = OperationParameterMetadataStorage.getMetadata( - MyController.prototype, - "operation", - true, - ); + const metadata = OperationParameterMetadataStorage.getMetadata(MyController.prototype, "operation", true); expect(metadata).toEqual([ { in: "query", name: "test" }, @@ -147,11 +120,7 @@ test("@ApiResponse", () => { operation() {} } - const metadata = OperationResponseMetadataStorage.getMetadata( - MyController.prototype, - "operation", - true, - ); + const metadata = OperationResponseMetadataStorage.getMetadata(MyController.prototype, "operation", true); expect(metadata).toEqual({ default: { status: "default", mediaType: "text/html", type: "string" }, @@ -166,11 +135,7 @@ test("@ApiTags", () => { operation() {} } - const metadata = OperationMetadataStorage.getMetadata( - MyController.prototype, - "operation", - true, - ); + const metadata = OperationMetadataStorage.getMetadata(MyController.prototype, "operation", true); expect(metadata.tags).toEqual(["Root", "Hello", "World"]); }); @@ -185,11 +150,7 @@ test("@ApiSecurity", () => { operation() {} } - const metadata = OperationSecurityMetadataStorage.getMetadata( - MyController.prototype, - "operation", - true, - ); + const metadata = OperationSecurityMetadataStorage.getMetadata(MyController.prototype, "operation", true); expect(metadata).toEqual({ custom: [], @@ -214,10 +175,7 @@ test("@ApiExcludeOperation", () => { operation() {} } - const metadata = ExcludeMetadataStorage.getMetadata( - MyController.prototype, - "operation", - ); + const metadata = ExcludeMetadataStorage.getMetadata(MyController.prototype, "operation"); expect(metadata).toBe(true); }); From 45fd6de6b0429377cbe865ed588ed8b569265593 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 19:16:28 +0100 Subject: [PATCH 19/25] docs(openapi-metadata): README, CONTRIBUTING and LICENSE file --- packages/openapi-metadata/CONTRIBUTING.md | 91 +++++++++++++++++++++++ packages/openapi-metadata/LICENSE | 21 ++++++ packages/openapi-metadata/README.md | 19 +++++ 3 files changed, 131 insertions(+) create mode 100644 packages/openapi-metadata/CONTRIBUTING.md create mode 100644 packages/openapi-metadata/LICENSE create mode 100644 packages/openapi-metadata/README.md diff --git a/packages/openapi-metadata/CONTRIBUTING.md b/packages/openapi-metadata/CONTRIBUTING.md new file mode 100644 index 000000000..e64717c75 --- /dev/null +++ b/packages/openapi-metadata/CONTRIBUTING.md @@ -0,0 +1,91 @@ +# Contributing + +Thanks for being willing to contribute! 🙏 + +**Working on your first Pull Request (PR)?** You can learn how from this free series [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github). + +## Open issues + +Please check out the [the open issues](https://github.com/openapi-ts/openapi-typescript/issues). Issues labelled [**Good First Issue**](https://github.com/openapi-ts/openapi-typescript/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) are especially good to start with. + +Contributing doesn’t have to be in code. Simply answering questions in open issues or providing workarounds is as important as making pull requests. + +## Writing code + +### Setup + +1. Install [pnpm](https://pnpm.io/) +2. [Fork this repo](https://docs.github.com/en/get-started/quickstart/fork-a-repo) and clone your copy locally +3. Run `pnpm i` to install dependencies + +### Testing + +This library uses [Vitest](https://vitest.dev/) for testing. There’s a great [VS Code extension](https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer) you can optionally use if you’d like in-editor debugging tools. + +To run the entire test suite, run: + +```bash +pnpm test +``` + +To run an individual test: + +```bash +pnpm test -- [partial filename] +``` + +To start the entire test suite in watch mode: + +```bash +npx vitest +``` + +#### TypeScript tests + +**Don’t neglect writing TS tests!** In the test suite, you’ll see `// @ts-expect-error` comments. These are critical tests in and of themselves—they are asserting that TypeScript throws an error when it should be throwing an error (the test suite will actually fail in places if a TS error is _not_ raised). + +As this is just a minimal fetch wrapper meant to provide deep type inference for API schemas, **testing TS types** is arguably more important than testing the runtime. So please make liberal use of `// @ts-expect-error`, and as a general rule of thumb, write more **unwanted** output tests than _wanted_ output tests. + +### Running linting + +Linting is handled via [Biome](https://biomejs.dev), a faster ESLint replacement. It was installed with `pnpm i` and can be run with: + +```bash +pnpm run lint +``` + +### Changelogs + +The changelog is generated via [changesets](https://github.com/changesets/changesets), and is separate from Git commit messages and pull request titles. To write a human-readable changelog for your changes, run: + +``` +npx changeset +``` + +This will ask if it’s a `patch`, `minor`, or `major` change ([semver](https://semver.org/)), along with a plain description of what you did. Commit this new file along with the rest of your PR, and during the next release this will go into the official changelog! + +## Opening a Pull Request + +Pull requests are **welcome** for this repo! + +Bugfixes will always be accepted, though in some cases some small changes may be requested. + +However, if adding a feature or breaking change, please **open an issue first to discuss.** This ensures no time or work is wasted writing code that won’t be accepted to the project (see [Project Goals](https://openapi-ts.dev/openapi-fetch/about/#project-goals)). Undiscussed feature work may be rejected at the discretion of the maintainers. + +### Writing the commit + +Create a new branch for your PR with `git checkout -b your-branch-name`. Add the relevant code as well as docs and tests. When you push everything up (`git push`), navigate back to your repo in GitHub and you should see a prompt to open a new PR. + +While best practices for commit messages are encouraged (e.g. start with an imperative verb, keep it short, use the body if needed), this repo doesn’t follow any specific guidelines. Clarity is favored over strict rules. Changelogs are generated separately from git (see [the Changelogs section](#changelogs)). + +### Writing the PR notes + +**Please fill out the template!** It’s a very lightweight template 🙂. + +### Adding docs + +If you added a feature, or changed how something worked, please [update the docs](../../docs/)! + +### Passing CI + +All PRs must fix lint errors, and all tests must pass. PRs will not be merged until all CI checks are “green” (✅). diff --git a/packages/openapi-metadata/LICENSE b/packages/openapi-metadata/LICENSE new file mode 100644 index 000000000..5de76d308 --- /dev/null +++ b/packages/openapi-metadata/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Drew Powers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/openapi-metadata/README.md b/packages/openapi-metadata/README.md new file mode 100644 index 000000000..7ae42aafb --- /dev/null +++ b/packages/openapi-metadata/README.md @@ -0,0 +1,19 @@ +# openapi-metadata + +`openapi-metadata` is a framework agnostic library to automatically generate OpenAPI schemas and documentation by using Typescript decorators and metadata. + +- ✅ Fully compliant [OpenAPI V3](https://swagger.io/specification/) +- ✅ Automatic type inference +- ✅ Supports [Scalar](https://scalar.com/), [Swagger UI](https://swagger.io/tools/swagger-ui/) and [Rapidoc](https://rapidocweb.com/) +- ✅ Extensible with custom type loaders +- ✅ Ready to be integrated with your favorite framework + +## Installation + +```bash +npm i openapi-metadata reflect-metadata +``` + +## 📓 Docs + +[View Docs](https://openapi-ts.dev/openapi-metadata/) From f59e14d9a8901be6b7399bb3b450fe7ab7d0fbbe Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 19:21:36 +0100 Subject: [PATCH 20/25] chore(openapi-metadata): fix build --- packages/openapi-metadata/tsup.config.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/openapi-metadata/tsup.config.ts b/packages/openapi-metadata/tsup.config.ts index 30c8b1761..71535a3be 100644 --- a/packages/openapi-metadata/tsup.config.ts +++ b/packages/openapi-metadata/tsup.config.ts @@ -1,7 +1,13 @@ import { defineConfig } from "tsup"; export default defineConfig({ - entry: ["src/index.ts", "src/builders/index.ts", "src/loaders/index.ts", "src/resolvers/index.ts", "src/ui/index.ts"], + entry: [ + "src/index.ts", + "src/decorators/index.ts", + "src/errors/index.ts", + "src/metadata/index.ts", + "src/ui/index.ts", + ], format: ["esm"], dts: true, sourcemap: true, From 9b4df61bb6cda0f9e6eb402e7211918c611aa473 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Wed, 6 Nov 2024 19:23:48 +0100 Subject: [PATCH 21/25] style(openapi-metadata): lint --- packages/openapi-metadata/tsup.config.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/openapi-metadata/tsup.config.ts b/packages/openapi-metadata/tsup.config.ts index 71535a3be..f45c89948 100644 --- a/packages/openapi-metadata/tsup.config.ts +++ b/packages/openapi-metadata/tsup.config.ts @@ -1,13 +1,7 @@ import { defineConfig } from "tsup"; export default defineConfig({ - entry: [ - "src/index.ts", - "src/decorators/index.ts", - "src/errors/index.ts", - "src/metadata/index.ts", - "src/ui/index.ts", - ], + entry: ["src/index.ts", "src/decorators/index.ts", "src/errors/index.ts", "src/metadata/index.ts", "src/ui/index.ts"], format: ["esm"], dts: true, sourcemap: true, From f5e4294148a335c0995105853965b9ba97882694 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sun, 10 Nov 2024 13:19:56 +0100 Subject: [PATCH 22/25] feat(openapi-metadata): change module resolution to NodeNext --- packages/openapi-metadata/CHANGELOG.md | 25 --------- packages/openapi-metadata/LICENSE | 2 +- packages/openapi-metadata/package.json | 8 ++- packages/openapi-metadata/src/context.ts | 2 +- .../src/decorators/api-body.ts | 5 +- .../src/decorators/api-cookie.ts | 11 +++- .../src/decorators/api-exclude.ts | 2 +- .../src/decorators/api-extra-models.ts | 4 +- .../src/decorators/api-header.ts | 11 +++- .../src/decorators/api-operation.ts | 5 +- .../src/decorators/api-param.ts | 11 +++- .../src/decorators/api-property.ts | 25 ++++++--- .../src/decorators/api-query.ts | 11 +++- .../src/decorators/api-response.ts | 10 +++- .../src/decorators/api-security.ts | 2 +- .../openapi-metadata/src/decorators/index.ts | 24 ++++---- .../src/generators/document.ts | 12 ++-- .../src/generators/operation-body.ts | 6 +- .../src/generators/operation-parameters.ts | 6 +- .../src/generators/operation-response.ts | 6 +- .../src/generators/operation.ts | 47 ++++++++++------ .../openapi-metadata/src/generators/paths.ts | 21 +++++-- packages/openapi-metadata/src/index.ts | 4 +- packages/openapi-metadata/src/loaders/type.ts | 55 +++++++++++++------ .../openapi-metadata/src/metadata/exclude.ts | 7 ++- .../src/metadata/extra-models.ts | 11 ++-- .../openapi-metadata/src/metadata/index.ts | 18 +++--- .../src/metadata/operation-body.ts | 12 ++-- .../src/metadata/operation-header.ts | 9 +-- .../src/metadata/operation-parameter.ts | 16 +++--- .../src/metadata/operation-response.ts | 16 +++--- .../src/metadata/operation-security.ts | 7 ++- .../src/metadata/operation.ts | 7 ++- .../openapi-metadata/src/metadata/property.ts | 7 ++- packages/openapi-metadata/src/types.ts | 19 +++---- packages/openapi-metadata/src/ui/index.ts | 6 +- packages/openapi-metadata/src/utils/enum.ts | 2 +- packages/openapi-metadata/tsconfig.build.json | 4 ++ packages/openapi-metadata/tsconfig.json | 4 +- 39 files changed, 274 insertions(+), 186 deletions(-) delete mode 100644 packages/openapi-metadata/CHANGELOG.md create mode 100644 packages/openapi-metadata/tsconfig.build.json diff --git a/packages/openapi-metadata/CHANGELOG.md b/packages/openapi-metadata/CHANGELOG.md deleted file mode 100644 index 8dc5cc3ca..000000000 --- a/packages/openapi-metadata/CHANGELOG.md +++ /dev/null @@ -1,25 +0,0 @@ -# openapi-metadata - -## 0.0.0-20240826235548 - -### Patch Changes - -- Fix issue where apiProperty alter the class property - -## 0.0.0-20240826230314 - -### Patch Changes - -- Add ability to provide arrays as type - -## 0.0.0-20240826225846 - -### Major Changes - -- Add ability to provide arrays as type - -## 0.0.0-20240826224734 - -### Major Changes - -- Initial release diff --git a/packages/openapi-metadata/LICENSE b/packages/openapi-metadata/LICENSE index 5de76d308..03c72fbc2 100644 --- a/packages/openapi-metadata/LICENSE +++ b/packages/openapi-metadata/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Drew Powers +Copyright (c) 2024 Martin Paucot Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/openapi-metadata/package.json b/packages/openapi-metadata/package.json index a818e5a9e..e5e6db35d 100644 --- a/packages/openapi-metadata/package.json +++ b/packages/openapi-metadata/package.json @@ -1,7 +1,7 @@ { "name": "openapi-metadata", "description": "Auto-Generate OpenAPI specifications from Typescript decorators", - "version": "0.0.0-20240826235548", + "version": "0.0.0-rc-4", "author": { "name": "Martin PAUCOT", "email": "contact@martin-paucot.Fr" @@ -48,8 +48,10 @@ "typescript" ], "scripts": { - "build": "tsup", - "dev": "tsup --watch", + "build": "pnpm run build:clean && pnpm run build:esm", + "build:clean": "del-cli dist", + "build:esm": "tsc -p tsconfig.build.json", + "dev": "tsc -p tsconfig.build.json --watch", "format": "biome format . --write", "lint": "biome check .", "test": "vitest run", diff --git a/packages/openapi-metadata/src/context.ts b/packages/openapi-metadata/src/context.ts index 8c2983171..453b8fe74 100644 --- a/packages/openapi-metadata/src/context.ts +++ b/packages/openapi-metadata/src/context.ts @@ -1,5 +1,5 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Logger, TypeLoaderFn } from "./types"; +import type { Logger, TypeLoaderFn } from "./types.js"; export class Context { schemas: Record = {}; diff --git a/packages/openapi-metadata/src/decorators/api-body.ts b/packages/openapi-metadata/src/decorators/api-body.ts index 628cea0fd..8ff0258fc 100644 --- a/packages/openapi-metadata/src/decorators/api-body.ts +++ b/packages/openapi-metadata/src/decorators/api-body.ts @@ -1,5 +1,8 @@ import type { SetOptional } from "type-fest"; -import { type OperationBodyMetadata, OperationBodyMetadataStorage } from "../metadata/operation-body"; +import { + type OperationBodyMetadata, + OperationBodyMetadataStorage, +} from "../metadata/operation-body.js"; export type ApiBodyOptions = SetOptional; diff --git a/packages/openapi-metadata/src/decorators/api-cookie.ts b/packages/openapi-metadata/src/decorators/api-cookie.ts index 423d099d4..6f0729ec7 100644 --- a/packages/openapi-metadata/src/decorators/api-cookie.ts +++ b/packages/openapi-metadata/src/decorators/api-cookie.ts @@ -1,9 +1,16 @@ -import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata"; +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata/operation-parameter.js"; export type ApiCookieOptions = Omit; export function ApiCookie(options: ApiCookieOptions) { return (target: Object, propertyKey?: string | symbol) => { - OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "cookie", ...options }], propertyKey); + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "cookie", ...options }], + propertyKey, + ); }; } diff --git a/packages/openapi-metadata/src/decorators/api-exclude.ts b/packages/openapi-metadata/src/decorators/api-exclude.ts index 5e2103487..0837ede04 100644 --- a/packages/openapi-metadata/src/decorators/api-exclude.ts +++ b/packages/openapi-metadata/src/decorators/api-exclude.ts @@ -1,4 +1,4 @@ -import { ExcludeMetadataStorage } from "../metadata/exclude"; +import { ExcludeMetadataStorage } from "../metadata/exclude.js"; export function ApiExcludeController(): ClassDecorator { return (target) => { diff --git a/packages/openapi-metadata/src/decorators/api-extra-models.ts b/packages/openapi-metadata/src/decorators/api-extra-models.ts index 3b8815fc1..3e13fc61f 100644 --- a/packages/openapi-metadata/src/decorators/api-extra-models.ts +++ b/packages/openapi-metadata/src/decorators/api-extra-models.ts @@ -1,5 +1,5 @@ -import { ExtraModelsMetadataStorage } from "../metadata/extra-models"; -import type { Thunk, TypeValue } from "../types"; +import { ExtraModelsMetadataStorage } from "../metadata/extra-models.js"; +import type { Thunk, TypeValue } from "../types.js"; export function ApiExtraModels(...models: (TypeValue | Thunk)[]) { return (target: Object) => { diff --git a/packages/openapi-metadata/src/decorators/api-header.ts b/packages/openapi-metadata/src/decorators/api-header.ts index f431f8353..cdcb97836 100644 --- a/packages/openapi-metadata/src/decorators/api-header.ts +++ b/packages/openapi-metadata/src/decorators/api-header.ts @@ -1,9 +1,16 @@ -import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata"; +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata/operation-parameter.js"; export type ApiHeaderOptions = Omit; export function ApiHeader(options: ApiHeaderOptions) { return (target: Object, propertyKey?: string | symbol) => { - OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "header", ...options }], propertyKey); + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "header", ...options }], + propertyKey, + ); }; } diff --git a/packages/openapi-metadata/src/decorators/api-operation.ts b/packages/openapi-metadata/src/decorators/api-operation.ts index 4b450508b..c38dba9eb 100644 --- a/packages/openapi-metadata/src/decorators/api-operation.ts +++ b/packages/openapi-metadata/src/decorators/api-operation.ts @@ -1,4 +1,7 @@ -import { type OperationMetadata, OperationMetadataStorage } from "../metadata/operation"; +import { + type OperationMetadata, + OperationMetadataStorage, +} from "../metadata/operation.js"; export type ApiOperationOptions = OperationMetadata; diff --git a/packages/openapi-metadata/src/decorators/api-param.ts b/packages/openapi-metadata/src/decorators/api-param.ts index bd834cb9a..f1b24fca1 100644 --- a/packages/openapi-metadata/src/decorators/api-param.ts +++ b/packages/openapi-metadata/src/decorators/api-param.ts @@ -1,9 +1,16 @@ -import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter"; +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata/operation-parameter.js"; export type ApiParamOptions = Omit; export function ApiParam(options: ApiParamOptions) { return function (target: Object, propertyKey?: string | symbol) { - OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "path", ...options }], propertyKey); + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "path", ...options }], + propertyKey, + ); }; } diff --git a/packages/openapi-metadata/src/decorators/api-property.ts b/packages/openapi-metadata/src/decorators/api-property.ts index fcc59c41f..341011eba 100644 --- a/packages/openapi-metadata/src/decorators/api-property.ts +++ b/packages/openapi-metadata/src/decorators/api-property.ts @@ -1,13 +1,18 @@ -import type { Context } from "../context"; -import { SymbolKeysNotSupportedError } from "../errors/symbol-keys-not-supported"; -import { type PropertyMetadata, PropertyMetadataStorage } from "../metadata/property"; -import { findType } from "../utils/metadata"; +import type { Context } from "../context.js"; +import { SymbolKeysNotSupportedError } from "../errors/symbol-keys-not-supported.js"; +import { + type PropertyMetadata, + PropertyMetadataStorage, +} from "../metadata/property.js"; +import { findType } from "../utils/metadata.js"; export type ApiPropertyOptions = Partial; export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator; export function ApiProperty(options?: ApiPropertyOptions): MethodDecorator; -export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator | MethodDecorator { +export function ApiProperty( + options?: ApiPropertyOptions, +): PropertyDecorator | MethodDecorator { return (prototype, propertyKey, descriptor) => { const isMethod = Boolean(descriptor?.value); @@ -21,7 +26,7 @@ export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator | M ...options, } as PropertyMetadata; - if (!("type" in metadata) && !("schema" in metadata) && !("enum" in metadata)) { + if (!metadata.type && !metadata.schema && !metadata.enum) { (metadata as any).type = (context: Context) => findType({ context, @@ -37,8 +42,12 @@ export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator | M }; } -export function ApiPropertyOptional(options?: Omit): PropertyDecorator; -export function ApiPropertyOptional(options?: Omit): MethodDecorator; +export function ApiPropertyOptional( + options?: Omit, +): PropertyDecorator; +export function ApiPropertyOptional( + options?: Omit, +): MethodDecorator; export function ApiPropertyOptional( options?: Omit, ): PropertyDecorator | MethodDecorator { diff --git a/packages/openapi-metadata/src/decorators/api-query.ts b/packages/openapi-metadata/src/decorators/api-query.ts index 00539a5c1..cab95e1fd 100644 --- a/packages/openapi-metadata/src/decorators/api-query.ts +++ b/packages/openapi-metadata/src/decorators/api-query.ts @@ -1,9 +1,16 @@ -import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter"; +import { + type OperationParameterMetadata, + OperationParameterMetadataStorage, +} from "../metadata/operation-parameter.js"; export type ApiQueryOptions = Omit; export function ApiQuery(options: ApiQueryOptions) { return function (target: Object, propertyKey?: string | symbol) { - OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "query", ...options }], propertyKey); + OperationParameterMetadataStorage.mergeMetadata( + target, + [{ in: "query", ...options }], + propertyKey, + ); }; } diff --git a/packages/openapi-metadata/src/decorators/api-response.ts b/packages/openapi-metadata/src/decorators/api-response.ts index 829e3fa85..3b5327152 100644 --- a/packages/openapi-metadata/src/decorators/api-response.ts +++ b/packages/openapi-metadata/src/decorators/api-response.ts @@ -1,7 +1,13 @@ import type { SetOptional } from "type-fest"; -import { type OperationResponseMetadata, OperationResponseMetadataStorage } from "../metadata/operation-response"; +import { + type OperationResponseMetadata, + OperationResponseMetadataStorage, +} from "../metadata/operation-response.js"; -export type ApiResponseOptions = SetOptional; +export type ApiResponseOptions = SetOptional< + OperationResponseMetadata, + "status" | "mediaType" +>; export function ApiResponse(options: ApiResponseOptions) { return function (target: Object, propertyKey?: string | symbol) { diff --git a/packages/openapi-metadata/src/decorators/api-security.ts b/packages/openapi-metadata/src/decorators/api-security.ts index 6785c71ab..6067d2426 100644 --- a/packages/openapi-metadata/src/decorators/api-security.ts +++ b/packages/openapi-metadata/src/decorators/api-security.ts @@ -1,4 +1,4 @@ -import { OperationSecurityMetadataStorage } from "../metadata/operation-security"; +import { OperationSecurityMetadataStorage } from "../metadata/operation-security.js"; export function ApiSecurity(name: string, ...scopes: string[]) { return (target: Object, propertyKey?: string | symbol) => { diff --git a/packages/openapi-metadata/src/decorators/index.ts b/packages/openapi-metadata/src/decorators/index.ts index fcdc6bc0b..0594158dd 100644 --- a/packages/openapi-metadata/src/decorators/index.ts +++ b/packages/openapi-metadata/src/decorators/index.ts @@ -1,12 +1,12 @@ -export { ApiBody } from "./api-body"; -export { ApiCookie } from "./api-cookie"; -export { ApiHeader } from "./api-header"; -export { ApiOperation } from "./api-operation"; -export { ApiParam } from "./api-param"; -export { ApiProperty, ApiPropertyOptional } from "./api-property"; -export { ApiQuery } from "./api-query"; -export { ApiResponse } from "./api-response"; -export { ApiSecurity } from "./api-security"; -export { ApiTags } from "./api-tags"; -export { ApiExcludeController, ApiExcludeOperation } from "./api-exclude"; -export { ApiExtraModels } from "./api-extra-models"; +export { ApiBody } from "./api-body.js"; +export { ApiCookie } from "./api-cookie.js"; +export { ApiHeader } from "./api-header.js"; +export { ApiOperation } from "./api-operation.js"; +export { ApiParam } from "./api-param.js"; +export { ApiProperty, ApiPropertyOptional } from "./api-property.js"; +export { ApiQuery } from "./api-query.js"; +export { ApiResponse } from "./api-response.js"; +export { ApiSecurity } from "./api-security.js"; +export { ApiTags } from "./api-tags.js"; +export { ApiExcludeController, ApiExcludeOperation } from "./api-exclude.js"; +export { ApiExtraModels } from "./api-extra-models.js"; diff --git a/packages/openapi-metadata/src/generators/document.ts b/packages/openapi-metadata/src/generators/document.ts index 31c74b1d5..947077c1e 100644 --- a/packages/openapi-metadata/src/generators/document.ts +++ b/packages/openapi-metadata/src/generators/document.ts @@ -1,9 +1,9 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { OpenAPIDocument, TypeLoaderFn } from "../index"; -import type { Logger } from "../types"; +import type { OpenAPIDocument, TypeLoaderFn } from "../index.js"; +import type { Logger } from "../types.js"; import type { SetOptional } from "type-fest"; -import { Context } from "../context"; -import { generatePaths } from "./paths"; +import { Context } from "../context.js"; +import { generatePaths } from "./paths.js"; import deepmerge from "deepmerge"; export type GenerateDocumentOptions = { @@ -40,7 +40,9 @@ export type GenerateDocumentOptions = { /** * Generates a compliant OpenAPIV3 schema. */ -export async function generateDocument(options: GenerateDocumentOptions): Promise { +export async function generateDocument( + options: GenerateDocumentOptions, +): Promise { const context = new Context(options.customLogger, options.loaders); return deepmerge(options.document, { diff --git a/packages/openapi-metadata/src/generators/operation-body.ts b/packages/openapi-metadata/src/generators/operation-body.ts index c8fdd001a..6ca471a66 100644 --- a/packages/openapi-metadata/src/generators/operation-body.ts +++ b/packages/openapi-metadata/src/generators/operation-body.ts @@ -1,7 +1,7 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Context } from "../context"; -import type { OperationBodyMetadata } from "../metadata/operation-body"; -import { loadType } from "../loaders/type"; +import type { Context } from "../context.js"; +import type { OperationBodyMetadata } from "../metadata/operation-body.js"; +import { loadType } from "../loaders/type.js"; export async function generateOperationBody( context: Context, diff --git a/packages/openapi-metadata/src/generators/operation-parameters.ts b/packages/openapi-metadata/src/generators/operation-parameters.ts index f8c5dca10..b4097fe3c 100644 --- a/packages/openapi-metadata/src/generators/operation-parameters.ts +++ b/packages/openapi-metadata/src/generators/operation-parameters.ts @@ -1,7 +1,7 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Context } from "../context"; -import type { OperationParameterMetadata } from "../metadata/operation-parameter"; -import { loadType } from "../loaders/type"; +import type { Context } from "../context.js"; +import type { OperationParameterMetadata } from "../metadata/operation-parameter.js"; +import { loadType } from "../loaders/type.js"; export async function generateOperationParameters( context: Context, diff --git a/packages/openapi-metadata/src/generators/operation-response.ts b/packages/openapi-metadata/src/generators/operation-response.ts index 7f14b2814..37119c4c6 100644 --- a/packages/openapi-metadata/src/generators/operation-response.ts +++ b/packages/openapi-metadata/src/generators/operation-response.ts @@ -1,7 +1,7 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Context } from "../context"; -import type { OperationResponseMetadata } from "../metadata/operation-response"; -import { loadType } from "../loaders/type"; +import type { Context } from "../context.js"; +import type { OperationResponseMetadata } from "../metadata/operation-response.js"; +import { loadType } from "../loaders/type.js"; export async function generateOperationResponse( context: Context, diff --git a/packages/openapi-metadata/src/generators/operation.ts b/packages/openapi-metadata/src/generators/operation.ts index 484ba7c7c..2cac826a0 100644 --- a/packages/openapi-metadata/src/generators/operation.ts +++ b/packages/openapi-metadata/src/generators/operation.ts @@ -1,15 +1,15 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Context } from "../context"; -import type { OperationMetadata } from "../metadata/operation"; -import { OperationBodyMetadataStorage } from "../metadata/operation-body"; -import { generateOperationBody } from "./operation-body"; -import { OperationParameterMetadataStorage } from "../metadata/operation-parameter"; -import { generateOperationParameters } from "./operation-parameters"; -import { OperationResponseMetadataStorage } from "../metadata/operation-response"; -import { generateOperationResponse } from "./operation-response"; -import { OperationSecurityMetadataStorage } from "../metadata/operation-security"; -import { ExtraModelsMetadataStorage } from "../metadata/extra-models"; -import { loadType } from "../loaders/type"; +import type { Context } from "../context.js"; +import type { OperationMetadata } from "../metadata/operation.js"; +import { OperationBodyMetadataStorage } from "../metadata/operation-body.js"; +import { generateOperationBody } from "./operation-body.js"; +import { OperationParameterMetadataStorage } from "../metadata/operation-parameter.js"; +import { generateOperationParameters } from "./operation-parameters.js"; +import { OperationResponseMetadataStorage } from "../metadata/operation-response.js"; +import { generateOperationResponse } from "./operation-response.js"; +import { OperationSecurityMetadataStorage } from "../metadata/operation-security.js"; +import { ExtraModelsMetadataStorage } from "../metadata/extra-models.js"; +import { loadType } from "../loaders/type.js"; export async function generateOperation( context: Context, @@ -30,18 +30,33 @@ export async function generateOperation( operation.requestBody = await generateOperationBody(context, body); } - const parameters = OperationParameterMetadataStorage.getMetadata(target, propertyKey); + const parameters = OperationParameterMetadataStorage.getMetadata( + target, + propertyKey, + ); operation.parameters = []; for (const parameter of parameters) { - operation.parameters.push(await generateOperationParameters(context, parameter)); + operation.parameters.push( + await generateOperationParameters(context, parameter), + ); } - const responses = OperationResponseMetadataStorage.getMetadata(target, propertyKey); + const responses = OperationResponseMetadataStorage.getMetadata( + target, + propertyKey, + ); for (const [status, response] of Object.entries(responses)) { - operation.responses[status] = await generateOperationResponse(context, response); + operation.responses[status] = await generateOperationResponse( + context, + response, + ); } - const security = OperationSecurityMetadataStorage.getMetadata(target, propertyKey, true); + const security = OperationSecurityMetadataStorage.getMetadata( + target, + propertyKey, + true, + ); operation.security = [security]; diff --git a/packages/openapi-metadata/src/generators/paths.ts b/packages/openapi-metadata/src/generators/paths.ts index 45f97bb59..92691706e 100644 --- a/packages/openapi-metadata/src/generators/paths.ts +++ b/packages/openapi-metadata/src/generators/paths.ts @@ -1,9 +1,15 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Context } from "../context"; -import { generateOperation } from "./operation"; -import { ExcludeMetadataStorage, OperationMetadataStorage } from "../metadata"; - -export async function generatePaths(context: Context, controllers: Function[]): Promise { +import type { Context } from "../context.js"; +import { generateOperation } from "./operation.js"; +import { + ExcludeMetadataStorage, + OperationMetadataStorage, +} from "../metadata/index.js"; + +export async function generatePaths( + context: Context, + controllers: Function[], +): Promise { const paths: OpenAPIV3.PathsObject = {}; for (const controller of controllers) { @@ -25,7 +31,10 @@ export async function generatePaths(context: Context, controllers: Function[]): } for (const method of metadata.methods) { - const excludeOperation = ExcludeMetadataStorage.getMetadata(target, key); + const excludeOperation = ExcludeMetadataStorage.getMetadata( + target, + key, + ); if (excludeOperation === true) { continue; diff --git a/packages/openapi-metadata/src/index.ts b/packages/openapi-metadata/src/index.ts index 5c9ea542b..5ae9692f6 100644 --- a/packages/openapi-metadata/src/index.ts +++ b/packages/openapi-metadata/src/index.ts @@ -1,5 +1,5 @@ import type { OpenAPIV3 } from "openapi-types"; -export { generateDocument } from "./generators/document"; -export type { TypeLoaderFn } from "./types"; +export { generateDocument } from "./generators/document.js"; +export type { TypeLoaderFn } from "./types.js"; export type OpenAPIDocument = OpenAPIV3.Document; diff --git a/packages/openapi-metadata/src/loaders/type.ts b/packages/openapi-metadata/src/loaders/type.ts index 40df885eb..4ad47233f 100644 --- a/packages/openapi-metadata/src/loaders/type.ts +++ b/packages/openapi-metadata/src/loaders/type.ts @@ -1,11 +1,11 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Context } from "../context"; -import type { TypeLoaderFn, TypeOptions } from "../types"; +import type { Context } from "../context.js"; +import type { TypeLoaderFn, TypeOptions } from "../types.js"; import type { SetRequired } from "type-fest"; -import { getEnumType, getEnumValues } from "../utils/enum"; -import { PropertyMetadataStorage } from "../metadata/property"; -import { schemaPath } from "../utils/schema"; -import { isThunk } from "../utils/metadata"; +import { getEnumType, getEnumValues } from "../utils/enum.js"; +import { PropertyMetadataStorage } from "../metadata/property.js"; +import { schemaPath } from "../utils/schema.js"; +import { isThunk } from "../utils/metadata.js"; const PrimitiveTypeLoader: TypeLoaderFn = async (_context, value) => { if (typeof value === "string") { @@ -39,16 +39,19 @@ const ClassTypeLoader: TypeLoaderFn = async (context, value) => { return { $ref: schemaPath(model) }; } - const schema: SetRequired = { - type: "object", - properties: {}, - required: [], - }; + const schema: SetRequired = + { + type: "object", + properties: {}, + required: [], + }; const properties = PropertyMetadataStorage.getMetadata(value.prototype); if (!properties) { - context.logger.warn(`You tried to use '${model}' as a type but it does not contain any ApiProperty.`); + context.logger.warn( + `You tried to use '${model}' as a type but it does not contain any ApiProperty.`, + ); return; } @@ -56,7 +59,14 @@ const ClassTypeLoader: TypeLoaderFn = async (context, value) => { context.schemas[model] = schema; for (const [key, property] of Object.entries(properties)) { - const { required, type, name, enum: e, schema: s, ...metadata } = property as any; + const { + required, + type, + name, + enum: e, + schema: s, + ...metadata + } = property as any; schema.properties[key] = { ...(await loadType(context, property)), ...metadata, @@ -74,11 +84,11 @@ export async function loadType( context: Context, options: TypeOptions, ): Promise { - if ("schema" in options) { + if (options.schema) { return options.schema; } - if ("enum" in options) { + if (options.enum) { const enumValues = getEnumValues(options.enum); const enumType = getEnumType(enumValues); @@ -88,15 +98,26 @@ export async function loadType( }; } + if (!options.type) { + context.logger.warn("Failed to infer type from property"); + return; + } + const thunk = isThunk(options.type); const value = thunk ? (options.type as Function)(context) : options.type; - for (const loader of [PrimitiveTypeLoader, ...context.typeLoaders, ClassTypeLoader]) { + for (const loader of [ + PrimitiveTypeLoader, + ...context.typeLoaders, + ClassTypeLoader, + ]) { const result = await loader(context, value, options.type); if (result) { return result; } } - context.logger.warn(`You tried to use '${options.type.toString()}' as a type but no loader supports it ${thunk}`); + context.logger.warn( + `You tried to use '${options.type.toString()}' as a type but no loader supports it ${thunk}`, + ); } diff --git a/packages/openapi-metadata/src/metadata/exclude.ts b/packages/openapi-metadata/src/metadata/exclude.ts index e491abb82..fc22f9a71 100644 --- a/packages/openapi-metadata/src/metadata/exclude.ts +++ b/packages/openapi-metadata/src/metadata/exclude.ts @@ -1,5 +1,8 @@ -import { createMetadataStorage } from "./factory"; +import { createMetadataStorage } from "./factory.js"; export const ExcludeMetadataKey = Symbol("Exclude"); -export const ExcludeMetadataStorage = createMetadataStorage(ExcludeMetadataKey, false); +export const ExcludeMetadataStorage = createMetadataStorage( + ExcludeMetadataKey, + false, +); diff --git a/packages/openapi-metadata/src/metadata/extra-models.ts b/packages/openapi-metadata/src/metadata/extra-models.ts index 705325650..1e94784d8 100644 --- a/packages/openapi-metadata/src/metadata/extra-models.ts +++ b/packages/openapi-metadata/src/metadata/extra-models.ts @@ -1,9 +1,8 @@ -import type { Thunk, TypeValue } from "../types"; -import { createMetadataStorage } from "./factory"; +import type { Thunk, TypeValue } from "../types.js"; +import { createMetadataStorage } from "./factory.js"; export const ExtraModelsMetadataKey = Symbol("ExtraModels"); -export const ExtraModelsMetadataStorage = createMetadataStorage<(TypeValue | Thunk)[]>( - ExtraModelsMetadataKey, - [], -); +export const ExtraModelsMetadataStorage = createMetadataStorage< + (TypeValue | Thunk)[] +>(ExtraModelsMetadataKey, []); diff --git a/packages/openapi-metadata/src/metadata/index.ts b/packages/openapi-metadata/src/metadata/index.ts index f4089eb58..6c39b17c4 100644 --- a/packages/openapi-metadata/src/metadata/index.ts +++ b/packages/openapi-metadata/src/metadata/index.ts @@ -1,9 +1,9 @@ -export * from "./operation-body"; -export * from "./operation-header"; -export * from "./operation-parameter"; -export * from "./operation-response"; -export * from "./operation-security"; -export * from "./operation"; -export * from "./property"; -export * from "./exclude"; -export * from "./extra-models"; +export * from "./operation-body.js"; +export * from "./operation-header.js"; +export * from "./operation-parameter.js"; +export * from "./operation-response.js"; +export * from "./operation-security.js"; +export * from "./operation.js"; +export * from "./property.js"; +export * from "./exclude.js"; +export * from "./extra-models.js"; diff --git a/packages/openapi-metadata/src/metadata/operation-body.ts b/packages/openapi-metadata/src/metadata/operation-body.ts index 3dfc5da92..4a273820f 100644 --- a/packages/openapi-metadata/src/metadata/operation-body.ts +++ b/packages/openapi-metadata/src/metadata/operation-body.ts @@ -1,9 +1,13 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { TypeOptions } from "../types"; -import { createMetadataStorage } from "./factory"; +import type { TypeOptions } from "../types.js"; +import { createMetadataStorage } from "./factory.js"; -export type OperationBodyMetadata = Omit & { mediaType: string } & TypeOptions; +export type OperationBodyMetadata = Omit< + OpenAPIV3.RequestBodyObject, + "content" +> & { mediaType: string } & TypeOptions; export const OperationBodyMetadataKey = Symbol("OperationBody"); -export const OperationBodyMetadataStorage = createMetadataStorage(OperationBodyMetadataKey); +export const OperationBodyMetadataStorage = + createMetadataStorage(OperationBodyMetadataKey); diff --git a/packages/openapi-metadata/src/metadata/operation-header.ts b/packages/openapi-metadata/src/metadata/operation-header.ts index 235e6a0d1..27da03684 100644 --- a/packages/openapi-metadata/src/metadata/operation-header.ts +++ b/packages/openapi-metadata/src/metadata/operation-header.ts @@ -1,6 +1,6 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { TypeOptions } from "../types"; -import { createMetadataStorage } from "./factory"; +import type { TypeOptions } from "../types.js"; +import { createMetadataStorage } from "./factory.js"; export type OperationHeaderMetadata = Omit & { name: string; @@ -8,5 +8,6 @@ export type OperationHeaderMetadata = Omit & { export const OperationHeaderSymbol = Symbol("OperationHeader"); -export const OperationHeaderMetadataStorage = - createMetadataStorage>(OperationHeaderSymbol); +export const OperationHeaderMetadataStorage = createMetadataStorage< + Record +>(OperationHeaderSymbol); diff --git a/packages/openapi-metadata/src/metadata/operation-parameter.ts b/packages/openapi-metadata/src/metadata/operation-parameter.ts index 0d22f7450..3bd5d70be 100644 --- a/packages/openapi-metadata/src/metadata/operation-parameter.ts +++ b/packages/openapi-metadata/src/metadata/operation-parameter.ts @@ -1,15 +1,17 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { TypeOptions } from "../types"; -import { createMetadataStorage } from "./factory"; +import type { TypeOptions } from "../types.js"; +import { createMetadataStorage } from "./factory.js"; -export type OperationParameterMetadata = Omit & { +export type OperationParameterMetadata = Omit< + OpenAPIV3.ParameterObject, + "in" | "schema" +> & { name: string; in: "path" | "query" | "header" | "cookie"; } & Partial; export const OperationParameterMetadataKey = Symbol("OperationParameter"); -export const OperationParameterMetadataStorage = createMetadataStorage( - OperationParameterMetadataKey, - [], -); +export const OperationParameterMetadataStorage = createMetadataStorage< + OperationParameterMetadata[] +>(OperationParameterMetadataKey, []); diff --git a/packages/openapi-metadata/src/metadata/operation-response.ts b/packages/openapi-metadata/src/metadata/operation-response.ts index 383616179..69fc4c7f8 100644 --- a/packages/openapi-metadata/src/metadata/operation-response.ts +++ b/packages/openapi-metadata/src/metadata/operation-response.ts @@ -1,16 +1,18 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { TypeOptions } from "../types"; +import type { TypeOptions } from "../types.js"; import type { SetOptional } from "type-fest"; -import { createMetadataStorage } from "./factory"; +import { createMetadataStorage } from "./factory.js"; -export type OperationResponseMetadata = Omit, "content"> & { +export type OperationResponseMetadata = Omit< + SetOptional, + "content" +> & { status: number | "default"; mediaType: string; } & TypeOptions; export const OperationResponseMetadataKey = Symbol("OperationResponse"); -export const OperationResponseMetadataStorage = createMetadataStorage>( - OperationResponseMetadataKey, - {}, -); +export const OperationResponseMetadataStorage = createMetadataStorage< + Record +>(OperationResponseMetadataKey, {}); diff --git a/packages/openapi-metadata/src/metadata/operation-security.ts b/packages/openapi-metadata/src/metadata/operation-security.ts index 65723b3f2..731086278 100644 --- a/packages/openapi-metadata/src/metadata/operation-security.ts +++ b/packages/openapi-metadata/src/metadata/operation-security.ts @@ -1,9 +1,12 @@ import type { OpenAPIV3 } from "openapi-types"; -import { createMetadataStorage } from "./factory"; +import { createMetadataStorage } from "./factory.js"; export type OperationSecurityMetadata = OpenAPIV3.SecurityRequirementObject; export const OperationSecurityMetadataKey = Symbol("OperationSecurity"); export const OperationSecurityMetadataStorage = - createMetadataStorage(OperationSecurityMetadataKey); + createMetadataStorage( + OperationSecurityMetadataKey, + {}, + ); diff --git a/packages/openapi-metadata/src/metadata/operation.ts b/packages/openapi-metadata/src/metadata/operation.ts index 359f11c78..9c5d5c00d 100644 --- a/packages/openapi-metadata/src/metadata/operation.ts +++ b/packages/openapi-metadata/src/metadata/operation.ts @@ -1,6 +1,6 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { HttpMethods } from "../types"; -import { createMetadataStorage } from "./factory"; +import type { HttpMethods } from "../types.js"; +import { createMetadataStorage } from "./factory.js"; export type OperationMetadata = Omit & { path?: string; @@ -9,4 +9,5 @@ export type OperationMetadata = Omit & { export const OperationMetadataKey = Symbol("Operation"); -export const OperationMetadataStorage = createMetadataStorage(OperationMetadataKey, {}); +export const OperationMetadataStorage = + createMetadataStorage(OperationMetadataKey, {}); diff --git a/packages/openapi-metadata/src/metadata/property.ts b/packages/openapi-metadata/src/metadata/property.ts index 9698bac16..f2f70764e 100644 --- a/packages/openapi-metadata/src/metadata/property.ts +++ b/packages/openapi-metadata/src/metadata/property.ts @@ -1,5 +1,5 @@ -import type { TypeOptions } from "../types"; -import { createMetadataStorage } from "./factory"; +import type { TypeOptions } from "../types.js"; +import { createMetadataStorage } from "./factory.js"; export type PropertyMetadata = { name: string; @@ -8,4 +8,5 @@ export type PropertyMetadata = { export const PropertyMetadataKey = Symbol("Property"); -export const PropertyMetadataStorage = createMetadataStorage>(PropertyMetadataKey); +export const PropertyMetadataStorage = + createMetadataStorage>(PropertyMetadataKey); diff --git a/packages/openapi-metadata/src/types.ts b/packages/openapi-metadata/src/types.ts index 767650438..d5ddd0c02 100644 --- a/packages/openapi-metadata/src/types.ts +++ b/packages/openapi-metadata/src/types.ts @@ -1,5 +1,5 @@ import type { OpenAPIV3 } from "openapi-types"; -import type { Context } from "./context"; +import type { Context } from "./context.js"; export type HttpMethods = `${OpenAPIV3.HttpMethods}`; @@ -13,19 +13,14 @@ export type Logger = { warn: (typeof console)["warn"]; }; -export type TypeOptions = - | { - type: Thunk | TypeValue; - } - | { - schema: OpenAPIV3.SchemaObject; - } - | { - enum: EnumTypeValue; - }; +export type TypeOptions = { + type?: Thunk | TypeValue; + schema?: OpenAPIV3.SchemaObject; + enum?: EnumTypeValue; +}; export type TypeLoaderFn = ( context: Context, value: TypeValue, - original: Thunk | TypeValue, + original?: Thunk | TypeValue, ) => Promise; diff --git a/packages/openapi-metadata/src/ui/index.ts b/packages/openapi-metadata/src/ui/index.ts index 380e32cb6..d8c0f868d 100644 --- a/packages/openapi-metadata/src/ui/index.ts +++ b/packages/openapi-metadata/src/ui/index.ts @@ -1,3 +1,3 @@ -export { generateScalarUI } from "./scalar"; -export { generateSwaggerUI } from "./swagger"; -export { generateRapidocUI } from "./rapidoc"; +export { generateScalarUI } from "./scalar.js"; +export { generateSwaggerUI } from "./swagger.js"; +export { generateRapidocUI } from "./rapidoc.js"; diff --git a/packages/openapi-metadata/src/utils/enum.ts b/packages/openapi-metadata/src/utils/enum.ts index bd3495e7a..079ccb8cd 100644 --- a/packages/openapi-metadata/src/utils/enum.ts +++ b/packages/openapi-metadata/src/utils/enum.ts @@ -1,4 +1,4 @@ -import type { EnumTypeValue } from "../types"; +import type { EnumTypeValue } from "../types.js"; export function getEnumType(values: (string | number)[]): "string" | "number" { return values.some((v) => typeof v === "string") ? "string" : "number"; diff --git a/packages/openapi-metadata/tsconfig.build.json b/packages/openapi-metadata/tsconfig.build.json new file mode 100644 index 000000000..68db80dd8 --- /dev/null +++ b/packages/openapi-metadata/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], +} diff --git a/packages/openapi-metadata/tsconfig.json b/packages/openapi-metadata/tsconfig.json index 856c8f0d6..4a1b94fdc 100644 --- a/packages/openapi-metadata/tsconfig.json +++ b/packages/openapi-metadata/tsconfig.json @@ -5,8 +5,8 @@ "downlevelIteration": false, "esModuleInterop": true, "lib": ["ESNext", "DOM"], - "module": "ESNext", - "moduleResolution": "Bundler", + "module": "NodeNext", + "moduleResolution": "NodeNext", "noUncheckedIndexedAccess": true, "outDir": "dist", "skipLibCheck": false, From b6001f92027865082a661d0311f0148c441be20a Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sun, 10 Nov 2024 13:25:09 +0100 Subject: [PATCH 23/25] docs: update contributors --- docs/data/contributors.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/data/contributors.json b/docs/data/contributors.json index ae178c662..85ec43a36 100644 --- a/docs/data/contributors.json +++ b/docs/data/contributors.json @@ -1 +1 @@ -{"openapi-typescript":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775879},{"username":"psmyrdek","name":"Przemek Smyrdek","avatar":"https://avatars.githubusercontent.com/u/6187417?v=4","links":[{"icon":"github","link":"https://github.com/psmyrdek"}],"lastFetch":1730904776065},{"username":"enmand","name":"Dan Enman","avatar":"https://avatars.githubusercontent.com/u/432487?v=4","links":[{"icon":"github","link":"https://github.com/enmand"}],"lastFetch":1730904776255},{"username":"atlefren","name":"Atle Frenvik Sveen","avatar":"https://avatars.githubusercontent.com/u/1829927?v=4","links":[{"icon":"github","link":"https://github.com/atlefren"}],"lastFetch":1730904776450},{"username":"tpdewolf","name":"Tim de Wolf","avatar":"https://avatars.githubusercontent.com/u/4455209?v=4","links":[{"icon":"github","link":"https://github.com/tpdewolf"}],"lastFetch":1730904776638},{"username":"tombarton","name":"Tom Barton","avatar":"https://avatars.githubusercontent.com/u/6222711?v=4","links":[{"icon":"github","link":"https://github.com/tombarton"}],"lastFetch":1730904776827},{"username":"svnv","name":"Sven Nicolai Viig","avatar":"https://avatars.githubusercontent.com/u/1080888?v=4","links":[{"icon":"github","link":"https://github.com/svnv"}],"lastFetch":1730904777020},{"username":"sorin-davidoi","name":"Sorin Davidoi","avatar":"https://avatars.githubusercontent.com/u/2109702?v=4","links":[{"icon":"github","link":"https://github.com/sorin-davidoi"}],"lastFetch":1730904777214},{"username":"scvnathan","name":"Nathan Schneirov","avatar":"https://avatars.githubusercontent.com/u/73474?v=4","links":[{"icon":"github","link":"https://github.com/scvnathan"}],"lastFetch":1730904777408},{"username":"lbenie","name":"Lucien Bénié","avatar":"https://avatars.githubusercontent.com/u/7316046?v=4","links":[{"icon":"github","link":"https://github.com/lbenie"}],"lastFetch":1730904777600},{"username":"bokub","name":"Boris K","avatar":"https://avatars.githubusercontent.com/u/17952318?v=4","links":[{"icon":"github","link":"https://github.com/bokub"}],"lastFetch":1730904777782},{"username":"antonk52","name":"Anton Kastritskii","avatar":"https://avatars.githubusercontent.com/u/5817809?v=4","links":[{"icon":"github","link":"https://github.com/antonk52"}],"lastFetch":1730904777971},{"username":"tshelburne","name":"Tim Shelburne","avatar":"https://avatars.githubusercontent.com/u/1202267?v=4","links":[{"icon":"github","link":"https://github.com/tshelburne"}],"lastFetch":1730904778150},{"username":"typeofweb","name":"Michał Miszczyszyn","avatar":"https://avatars.githubusercontent.com/u/1338731?v=4","links":[{"icon":"github","link":"https://github.com/typeofweb"}],"lastFetch":1730904778356},{"username":"skh-","name":"Sam K Hall","avatar":"https://avatars.githubusercontent.com/u/1292598?v=4","links":[{"icon":"github","link":"https://github.com/skh-"}],"lastFetch":1730904778622},{"username":"BlooJeans","name":"Matt Jeanes","avatar":"https://avatars.githubusercontent.com/u/1751182?v=4","links":[{"icon":"github","link":"https://github.com/BlooJeans"}],"lastFetch":1730904778839},{"username":"selbekk","name":"Kristofer Giltvedt Selbekk","avatar":"https://avatars.githubusercontent.com/u/1307267?v=4","links":[{"icon":"github","link":"https://github.com/selbekk"}],"lastFetch":1730904779063},{"username":"Mause","name":"Elliana May","avatar":"https://avatars.githubusercontent.com/u/1405026?v=4","links":[{"icon":"github","link":"https://github.com/Mause"}],"lastFetch":1730904779274},{"username":"henhal","name":"Henrik Hall","avatar":"https://avatars.githubusercontent.com/u/9608258?v=4","links":[{"icon":"github","link":"https://github.com/henhal"}],"lastFetch":1730904779469},{"username":"gr2m","name":"Gregor Martynus","avatar":"https://avatars.githubusercontent.com/u/39992?v=4","links":[{"icon":"github","link":"https://github.com/gr2m"}],"lastFetch":1730904779659},{"username":"samdbmg","name":"Sam Mesterton-Gibbons","avatar":"https://avatars.githubusercontent.com/u/408983?v=4","links":[{"icon":"github","link":"https://github.com/samdbmg"}],"lastFetch":1730904779851},{"username":"rendall","name":"Rendall","avatar":"https://avatars.githubusercontent.com/u/293263?v=4","links":[{"icon":"github","link":"https://github.com/rendall"}],"lastFetch":1730904780092},{"username":"robertmassaioli","name":"Robert Massaioli","avatar":"https://avatars.githubusercontent.com/u/149178?v=4","links":[{"icon":"github","link":"https://github.com/robertmassaioli"}],"lastFetch":1730904780280},{"username":"jankuca","name":"Jan Kuča","avatar":"https://avatars.githubusercontent.com/u/367262?v=4","links":[{"icon":"github","link":"https://github.com/jankuca"}],"lastFetch":1730904780459},{"username":"th-m","name":"Thomas Valadez","avatar":"https://avatars.githubusercontent.com/u/13792029?v=4","links":[{"icon":"github","link":"https://github.com/th-m"}],"lastFetch":1730904780665},{"username":"asithade","name":"Asitha de Silva","avatar":"https://avatars.githubusercontent.com/u/3814354?v=4","links":[{"icon":"github","link":"https://github.com/asithade"}],"lastFetch":1730904780855},{"username":"misha-erm","name":"Misha","avatar":"https://avatars.githubusercontent.com/u/8783498?v=4","links":[{"icon":"github","link":"https://github.com/misha-erm"}],"lastFetch":1730904781054},{"username":"radist2s","name":"Alex Batalov","avatar":"https://avatars.githubusercontent.com/u/725645?v=4","links":[{"icon":"github","link":"https://github.com/radist2s"}],"lastFetch":1730904781234},{"username":"FedeBev","name":"Federico Bevione","avatar":"https://avatars.githubusercontent.com/u/22151395?v=4","links":[{"icon":"github","link":"https://github.com/FedeBev"}],"lastFetch":1730904781434},{"username":"yamacent","name":"Daisuke Yamamoto","avatar":"https://avatars.githubusercontent.com/u/8544439?v=4","links":[{"icon":"github","link":"https://github.com/yamacent"}],"lastFetch":1730904781617},{"username":"dnalborczyk","name":null,"avatar":"https://avatars.githubusercontent.com/u/2903325?v=4","links":[{"icon":"github","link":"https://github.com/dnalborczyk"}],"lastFetch":1730904781848},{"username":"FabioWanner","name":null,"avatar":"https://avatars.githubusercontent.com/u/46821078?v=4","links":[{"icon":"github","link":"https://github.com/FabioWanner"}],"lastFetch":1730904782036},{"username":"ashsmith","name":"Ash Smith","avatar":"https://avatars.githubusercontent.com/u/1086841?v=4","links":[{"icon":"github","link":"https://github.com/ashsmith"}],"lastFetch":1730904782216},{"username":"mehalter","name":"Micah Halter","avatar":"https://avatars.githubusercontent.com/u/1591837?v=4","links":[{"icon":"github","link":"https://github.com/mehalter"}],"lastFetch":1730904782405},{"username":"Chrg1001","name":"chrg1001","avatar":"https://avatars.githubusercontent.com/u/40189653?v=4","links":[{"icon":"github","link":"https://github.com/Chrg1001"}],"lastFetch":1730904782605},{"username":"sharmarajdaksh","name":"Dakshraj Sharma","avatar":"https://avatars.githubusercontent.com/u/33689528?v=4","links":[{"icon":"github","link":"https://github.com/sharmarajdaksh"}],"lastFetch":1730904782804},{"username":"shuluster","name":"Shaosu Liu","avatar":"https://avatars.githubusercontent.com/u/1707910?v=4","links":[{"icon":"github","link":"https://github.com/shuluster"}],"lastFetch":1730904782994},{"username":"FDiskas","name":"Vytenis","avatar":"https://avatars.githubusercontent.com/u/468006?v=4","links":[{"icon":"github","link":"https://github.com/FDiskas"}],"lastFetch":1730904783188},{"username":"ericzorn93","name":"Eric Zorn","avatar":"https://avatars.githubusercontent.com/u/22532542?v=4","links":[{"icon":"github","link":"https://github.com/ericzorn93"}],"lastFetch":1730904783381},{"username":"mbelsky","name":"Max Belsky","avatar":"https://avatars.githubusercontent.com/u/3923527?v=4","links":[{"icon":"github","link":"https://github.com/mbelsky"}],"lastFetch":1730904783564},{"username":"techbech","name":"Peter Bech","avatar":"https://avatars.githubusercontent.com/u/1520592?v=4","links":[{"icon":"github","link":"https://github.com/techbech"}],"lastFetch":1730904783756},{"username":"rustyconover","name":"Rusty Conover","avatar":"https://avatars.githubusercontent.com/u/731941?v=4","links":[{"icon":"github","link":"https://github.com/rustyconover"}],"lastFetch":1730904783935},{"username":"bunkscene","name":"Dave Carlson","avatar":"https://avatars.githubusercontent.com/u/2693678?v=4","links":[{"icon":"github","link":"https://github.com/bunkscene"}],"lastFetch":1730904784123},{"username":"ottomated","name":null,"avatar":"https://avatars.githubusercontent.com/u/31470743?v=4","links":[{"icon":"github","link":"https://github.com/ottomated"}],"lastFetch":1730904784313},{"username":"sadfsdfdsa","name":"Artem Shuvaev","avatar":"https://avatars.githubusercontent.com/u/28733669?v=4","links":[{"icon":"github","link":"https://github.com/sadfsdfdsa"}],"lastFetch":1730904784500},{"username":"ajaishankar","name":null,"avatar":"https://avatars.githubusercontent.com/u/328008?v=4","links":[{"icon":"github","link":"https://github.com/ajaishankar"}],"lastFetch":1730904784702},{"username":"dominikdosoudil","name":"Dominik Dosoudil","avatar":"https://avatars.githubusercontent.com/u/15929942?v=4","links":[{"icon":"github","link":"https://github.com/dominikdosoudil"}],"lastFetch":1730904784895},{"username":"kgtkr","name":"kgtkr","avatar":"https://avatars.githubusercontent.com/u/17868838?v=4","links":[{"icon":"github","link":"https://github.com/kgtkr"}],"lastFetch":1730904785091},{"username":"berzi","name":null,"avatar":"https://avatars.githubusercontent.com/u/32619123?v=4","links":[{"icon":"github","link":"https://github.com/berzi"}],"lastFetch":1730904785279},{"username":"PhilipTrauner","name":"Philip Trauner","avatar":"https://avatars.githubusercontent.com/u/9287847?v=4","links":[{"icon":"github","link":"https://github.com/PhilipTrauner"}],"lastFetch":1730904785465},{"username":"Powell-v2","name":"Pavel Yermolin","avatar":"https://avatars.githubusercontent.com/u/25308326?v=4","links":[{"icon":"github","link":"https://github.com/Powell-v2"}],"lastFetch":1730904785651},{"username":"duncanbeevers","name":"Duncan Beevers","avatar":"https://avatars.githubusercontent.com/u/7367?v=4","links":[{"icon":"github","link":"https://github.com/duncanbeevers"}],"lastFetch":1730904785833},{"username":"tkukushkin","name":"Timofei Kukushkin","avatar":"https://avatars.githubusercontent.com/u/1482516?v=4","links":[{"icon":"github","link":"https://github.com/tkukushkin"}],"lastFetch":1730904786028},{"username":"Semigradsky","name":"Dmitry Semigradsky","avatar":"https://avatars.githubusercontent.com/u/1198848?v=4","links":[{"icon":"github","link":"https://github.com/Semigradsky"}],"lastFetch":1730904786239},{"username":"MrLeebo","name":"Jeremy Liberman","avatar":"https://avatars.githubusercontent.com/u/2754163?v=4","links":[{"icon":"github","link":"https://github.com/MrLeebo"}],"lastFetch":1730904786427},{"username":"axelhzf","name":"Axel Hernández Ferrera","avatar":"https://avatars.githubusercontent.com/u/175627?v=4","links":[{"icon":"github","link":"https://github.com/axelhzf"}],"lastFetch":1730904786621},{"username":"imagoiq","name":"Loïc Fürhoff","avatar":"https://avatars.githubusercontent.com/u/12294151?v=4","links":[{"icon":"github","link":"https://github.com/imagoiq"}],"lastFetch":1730904786815},{"username":"BTMPL","name":"Bartosz Szczeciński","avatar":"https://avatars.githubusercontent.com/u/247153?v=4","links":[{"icon":"github","link":"https://github.com/BTMPL"}],"lastFetch":1730904787028},{"username":"HiiiiD","name":"Marco Salomone","avatar":"https://avatars.githubusercontent.com/u/61231210?v=4","links":[{"icon":"github","link":"https://github.com/HiiiiD"}],"lastFetch":1730904787218},{"username":"yacinehmito","name":"Yacine Hmito","avatar":"https://avatars.githubusercontent.com/u/6893840?v=4","links":[{"icon":"github","link":"https://github.com/yacinehmito"}],"lastFetch":1730904787414},{"username":"sajadtorkamani","name":"Sajad Torkamani","avatar":"https://avatars.githubusercontent.com/u/9380313?v=4","links":[{"icon":"github","link":"https://github.com/sajadtorkamani"}],"lastFetch":1730904787613},{"username":"mvdbeek","name":"Marius van den Beek","avatar":"https://avatars.githubusercontent.com/u/6804901?v=4","links":[{"icon":"github","link":"https://github.com/mvdbeek"}],"lastFetch":1730904787822},{"username":"sgrimm","name":"Steven Grimm","avatar":"https://avatars.githubusercontent.com/u/1248649?v=4","links":[{"icon":"github","link":"https://github.com/sgrimm"}],"lastFetch":1730904788040},{"username":"Swiftwork","name":"Erik Hughes","avatar":"https://avatars.githubusercontent.com/u/455178?v=4","links":[{"icon":"github","link":"https://github.com/Swiftwork"}],"lastFetch":1730904788237},{"username":"mtth","name":"Matthieu Monsch","avatar":"https://avatars.githubusercontent.com/u/1216372?v=4","links":[{"icon":"github","link":"https://github.com/mtth"}],"lastFetch":1730904788440},{"username":"mitchell-merry","name":"Mitchell Merry","avatar":"https://avatars.githubusercontent.com/u/8567231?v=4","links":[{"icon":"github","link":"https://github.com/mitchell-merry"}],"lastFetch":1730904788658},{"username":"qnp","name":"François Risoud","avatar":"https://avatars.githubusercontent.com/u/6012554?v=4","links":[{"icon":"github","link":"https://github.com/qnp"}],"lastFetch":1730904788873},{"username":"shoffmeister","name":null,"avatar":"https://avatars.githubusercontent.com/u/3868036?v=4","links":[{"icon":"github","link":"https://github.com/shoffmeister"}],"lastFetch":1730904789090},{"username":"liangskyli","name":"liangsky","avatar":"https://avatars.githubusercontent.com/u/31531283?v=4","links":[{"icon":"github","link":"https://github.com/liangskyli"}],"lastFetch":1730904789278},{"username":"happycollision","name":"Don Denton","avatar":"https://avatars.githubusercontent.com/u/3663628?v=4","links":[{"icon":"github","link":"https://github.com/happycollision"}],"lastFetch":1730904789514},{"username":"ysmood","name":"Yad Smood","avatar":"https://avatars.githubusercontent.com/u/1415488?v=4","links":[{"icon":"github","link":"https://github.com/ysmood"}],"lastFetch":1730904789695},{"username":"barakalon","name":"barak","avatar":"https://avatars.githubusercontent.com/u/12398927?v=4","links":[{"icon":"github","link":"https://github.com/barakalon"}],"lastFetch":1730904789894},{"username":"horaklukas","name":"Lukáš Horák","avatar":"https://avatars.githubusercontent.com/u/996088?v=4","links":[{"icon":"github","link":"https://github.com/horaklukas"}],"lastFetch":1730904790097},{"username":"pvanagtmaal","name":null,"avatar":"https://avatars.githubusercontent.com/u/5946464?v=4","links":[{"icon":"github","link":"https://github.com/pvanagtmaal"}],"lastFetch":1730904790307},{"username":"toomuchdesign","name":"Andrea Carraro","avatar":"https://avatars.githubusercontent.com/u/4573549?v=4","links":[{"icon":"github","link":"https://github.com/toomuchdesign"}],"lastFetch":1730904790491},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1730904790681},{"username":"tkrotoff","name":"Tanguy Krotoff","avatar":"https://avatars.githubusercontent.com/u/643434?v=4","links":[{"icon":"github","link":"https://github.com/tkrotoff"}],"lastFetch":1730904790877},{"username":"pimveldhuisen","name":"Pim Veldhuisen","avatar":"https://avatars.githubusercontent.com/u/3043834?v=4","links":[{"icon":"github","link":"https://github.com/pimveldhuisen"}],"lastFetch":1730904791082},{"username":"asvishnyakov","name":"Aleksandr Vishniakov","avatar":"https://avatars.githubusercontent.com/u/6369252?v=4","links":[{"icon":"github","link":"https://github.com/asvishnyakov"}],"lastFetch":1730904791273},{"username":"SchabaJo","name":null,"avatar":"https://avatars.githubusercontent.com/u/138689813?v=4","links":[{"icon":"github","link":"https://github.com/SchabaJo"}],"lastFetch":1730904791463},{"username":"AhsanFazal","name":"Ahsan Fazal","avatar":"https://avatars.githubusercontent.com/u/7458046?v=4","links":[{"icon":"github","link":"https://github.com/AhsanFazal"}],"lastFetch":1730904791703},{"username":"ElForastero","name":"Eugene Dzhumak","avatar":"https://avatars.githubusercontent.com/u/5102818?v=4","links":[{"icon":"github","link":"https://github.com/ElForastero"}],"lastFetch":1730904791901},{"username":"msgadi","name":"Mohammed Gadi","avatar":"https://avatars.githubusercontent.com/u/9037086?v=4","links":[{"icon":"github","link":"https://github.com/msgadi"}],"lastFetch":1730904792087},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1730904792299},{"username":"christoph-fricke","name":"Christoph Fricke","avatar":"https://avatars.githubusercontent.com/u/23103835?v=4","links":[{"icon":"github","link":"https://github.com/christoph-fricke"}],"lastFetch":1730904792483},{"username":"JorrinKievit","name":"Jorrin","avatar":"https://avatars.githubusercontent.com/u/43169049?v=4","links":[{"icon":"github","link":"https://github.com/JorrinKievit"}],"lastFetch":1730904792667},{"username":"WickyNilliams","name":"Nick Williams","avatar":"https://avatars.githubusercontent.com/u/1091390?v=4","links":[{"icon":"github","link":"https://github.com/WickyNilliams"}],"lastFetch":1730904792858},{"username":"hrsh7th","name":"hrsh7th","avatar":"https://avatars.githubusercontent.com/u/629908?v=4","links":[{"icon":"github","link":"https://github.com/hrsh7th"}],"lastFetch":1730904793044},{"username":"davidleger95","name":"David Leger","avatar":"https://avatars.githubusercontent.com/u/10498708?v=4","links":[{"icon":"github","link":"https://github.com/davidleger95"}],"lastFetch":1729913934448},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1730904869285},{"username":"mzronek","name":"Matthias Zronek","avatar":"https://avatars.githubusercontent.com/u/3847700?v=4","links":[{"icon":"github","link":"https://github.com/mzronek"}],"lastFetch":1730904869474},{"username":"raurfang","name":"Łukasz Wiśniewski","avatar":"https://avatars.githubusercontent.com/u/867241?v=4","links":[{"icon":"github","link":"https://github.com/raurfang"}],"lastFetch":1730904869679},{"username":"JeanRemiDelteil","name":"Jean-Rémi Delteil","avatar":"https://avatars.githubusercontent.com/u/9743907?v=4","links":[{"icon":"github","link":"https://github.com/JeanRemiDelteil"}],"lastFetch":1730904869872},{"username":"TzviPM","name":"Tzvi Melamed","avatar":"https://avatars.githubusercontent.com/u/1950680?v=4","links":[{"icon":"github","link":"https://github.com/TzviPM"}],"lastFetch":1730904870076},{"username":"LucaSchwan","name":"ehrenschwan","avatar":"https://avatars.githubusercontent.com/u/25820532?v=4","links":[{"icon":"github","link":"https://github.com/LucaSchwan"}],"lastFetch":1730904870278},{"username":"nzapponi","name":"Niccolo Zapponi","avatar":"https://avatars.githubusercontent.com/u/20582065?v=4","links":[{"icon":"github","link":"https://github.com/nzapponi"}],"lastFetch":1730904870468},{"username":"luchsamapparat","name":"Marvin Luchs","avatar":"https://avatars.githubusercontent.com/u/875017?v=4","links":[{"icon":"github","link":"https://github.com/luchsamapparat"}],"lastFetch":1730904870652},{"username":"nmacmunn","name":"Neil MacMunn","avatar":"https://avatars.githubusercontent.com/u/849964?v=4","links":[{"icon":"github","link":"https://github.com/nmacmunn"}],"lastFetch":1730904870844}],"openapi-fetch":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775872},{"username":"fergusean","name":null,"avatar":"https://avatars.githubusercontent.com/u/1029297?v=4","links":[{"icon":"github","link":"https://github.com/fergusean"}],"lastFetch":1730904776068},{"username":"shinzui","name":"Nadeem Bitar","avatar":"https://avatars.githubusercontent.com/u/519?v=4","links":[{"icon":"github","link":"https://github.com/shinzui"}],"lastFetch":1730904776251},{"username":"ezpuzz","name":"Emory Petermann","avatar":"https://avatars.githubusercontent.com/u/672182?v=4","links":[{"icon":"github","link":"https://github.com/ezpuzz"}],"lastFetch":1730904776445},{"username":"KotoriK","name":null,"avatar":"https://avatars.githubusercontent.com/u/52659125?v=4","links":[{"icon":"github","link":"https://github.com/KotoriK"}],"lastFetch":1730904776662},{"username":"fletchertyler914","name":"Tyler Fletcher","avatar":"https://avatars.githubusercontent.com/u/3344498?v=4","links":[{"icon":"github","link":"https://github.com/fletchertyler914"}],"lastFetch":1730904776885},{"username":"nholik","name":"Nicklos Holik","avatar":"https://avatars.githubusercontent.com/u/2022214?v=4","links":[{"icon":"github","link":"https://github.com/nholik"}],"lastFetch":1730904777069},{"username":"roj1512","name":null,"avatar":"https://avatars.githubusercontent.com/u/175297870?v=4","links":[{"icon":"github","link":"https://github.com/roj1512"}],"lastFetch":1730904777261},{"username":"nickcaballero","name":"Nick Caballero","avatar":"https://avatars.githubusercontent.com/u/355976?v=4","links":[{"icon":"github","link":"https://github.com/nickcaballero"}],"lastFetch":1730904777452},{"username":"hd-o","name":"Hadrian de Oliveira","avatar":"https://avatars.githubusercontent.com/u/58871222?v=4","links":[{"icon":"github","link":"https://github.com/hd-o"}],"lastFetch":1730904777662},{"username":"kecrily","name":"Percy Ma","avatar":"https://avatars.githubusercontent.com/u/45708948?v=4","links":[{"icon":"github","link":"https://github.com/kecrily"}],"lastFetch":1730904777856},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1730904778045},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1730904778226},{"username":"marcomuser","name":"Marco Muser","avatar":"https://avatars.githubusercontent.com/u/64737396?v=4","links":[{"icon":"github","link":"https://github.com/marcomuser"}],"lastFetch":1730904778456},{"username":"HugeLetters","name":"Evgenii Perminov","avatar":"https://avatars.githubusercontent.com/u/119697239?v=4","links":[{"icon":"github","link":"https://github.com/HugeLetters"}],"lastFetch":1730904778645},{"username":"Fumaz","name":"alex","avatar":"https://avatars.githubusercontent.com/u/45318608?v=4","links":[{"icon":"github","link":"https://github.com/Fumaz"}],"lastFetch":1730904778836},{"username":"darwish","name":"Mike Darwish","avatar":"https://avatars.githubusercontent.com/u/292570?v=4","links":[{"icon":"github","link":"https://github.com/darwish"}],"lastFetch":1730904779040},{"username":"kaechele","name":"Felix Kaechele","avatar":"https://avatars.githubusercontent.com/u/454490?v=4","links":[{"icon":"github","link":"https://github.com/kaechele"}],"lastFetch":1730904779235},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1730904779414},{"username":"mikestopcontinues","name":"Mike Stop Continues","avatar":"https://avatars.githubusercontent.com/u/150434?v=4","links":[{"icon":"github","link":"https://github.com/mikestopcontinues"}],"lastFetch":1730904779611},{"username":"JE-Lee","name":"maurice","avatar":"https://avatars.githubusercontent.com/u/19794813?v=4","links":[{"icon":"github","link":"https://github.com/JE-Lee"}],"lastFetch":1730904779792},{"username":"vipentti","name":"Ville Penttinen","avatar":"https://avatars.githubusercontent.com/u/4726680?v=4","links":[{"icon":"github","link":"https://github.com/vipentti"}],"lastFetch":1730904780019},{"username":"armandabric","name":"Armand Abric","avatar":"https://avatars.githubusercontent.com/u/95120?v=4","links":[{"icon":"github","link":"https://github.com/armandabric"}],"lastFetch":1730904780220},{"username":"illright","name":"Lev Chelyadinov","avatar":"https://avatars.githubusercontent.com/u/15035286?v=4","links":[{"icon":"github","link":"https://github.com/illright"}],"lastFetch":1730904780416}],"openapi-react-query":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1730904775876},{"username":"kerwanp","name":"Martin Paucot","avatar":"https://avatars.githubusercontent.com/u/36955373?v=4","links":[{"icon":"github","link":"https://github.com/kerwanp"}],"lastFetch":1730904776056},{"username":"yoshi2no","name":"yoshi2no","avatar":"https://avatars.githubusercontent.com/u/57059705?v=4","links":[{"icon":"github","link":"https://github.com/yoshi2no"}],"lastFetch":1730904776248},{"username":"elaygelbart","name":"Elay Gelbart","avatar":"https://avatars.githubusercontent.com/u/88675154?v=4","links":[{"icon":"github","link":"https://github.com/elaygelbart"}],"lastFetch":1730904973287}],"swr-openapi":[{"username":"htunnicliff","name":"Hunter Tunnicliff","avatar":"https://avatars.githubusercontent.com/u/7614039?v=4","links":[{"icon":"github","link":"https://github.com/htunnicliff"}],"lastFetch":1730904775878}]} +{"openapi-typescript":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1731241407703},{"username":"psmyrdek","name":"Przemek Smyrdek","avatar":"https://avatars.githubusercontent.com/u/6187417?v=4","links":[{"icon":"github","link":"https://github.com/psmyrdek"}],"lastFetch":1731241407860},{"username":"enmand","name":"Dan Enman","avatar":"https://avatars.githubusercontent.com/u/432487?v=4","links":[{"icon":"github","link":"https://github.com/enmand"}],"lastFetch":1731241408023},{"username":"atlefren","name":"Atle Frenvik Sveen","avatar":"https://avatars.githubusercontent.com/u/1829927?v=4","links":[{"icon":"github","link":"https://github.com/atlefren"}],"lastFetch":1731241408165},{"username":"tpdewolf","name":"Tim de Wolf","avatar":"https://avatars.githubusercontent.com/u/4455209?v=4","links":[{"icon":"github","link":"https://github.com/tpdewolf"}],"lastFetch":1731241408320},{"username":"tombarton","name":"Tom Barton","avatar":"https://avatars.githubusercontent.com/u/6222711?v=4","links":[{"icon":"github","link":"https://github.com/tombarton"}],"lastFetch":1731241408470},{"username":"svnv","name":"Sven Nicolai Viig","avatar":"https://avatars.githubusercontent.com/u/1080888?v=4","links":[{"icon":"github","link":"https://github.com/svnv"}],"lastFetch":1731241408622},{"username":"sorin-davidoi","name":"Sorin Davidoi","avatar":"https://avatars.githubusercontent.com/u/2109702?v=4","links":[{"icon":"github","link":"https://github.com/sorin-davidoi"}],"lastFetch":1731241408783},{"username":"scvnathan","name":"Nathan Schneirov","avatar":"https://avatars.githubusercontent.com/u/73474?v=4","links":[{"icon":"github","link":"https://github.com/scvnathan"}],"lastFetch":1731241408941},{"username":"lbenie","name":"Lucien Bénié","avatar":"https://avatars.githubusercontent.com/u/7316046?v=4","links":[{"icon":"github","link":"https://github.com/lbenie"}],"lastFetch":1731241409091},{"username":"bokub","name":"Boris K","avatar":"https://avatars.githubusercontent.com/u/17952318?v=4","links":[{"icon":"github","link":"https://github.com/bokub"}],"lastFetch":1731241409245},{"username":"antonk52","name":"Anton Kastritskii","avatar":"https://avatars.githubusercontent.com/u/5817809?v=4","links":[{"icon":"github","link":"https://github.com/antonk52"}],"lastFetch":1731241409395},{"username":"tshelburne","name":"Tim Shelburne","avatar":"https://avatars.githubusercontent.com/u/1202267?v=4","links":[{"icon":"github","link":"https://github.com/tshelburne"}],"lastFetch":1731241409552},{"username":"typeofweb","name":"Michał Miszczyszyn","avatar":"https://avatars.githubusercontent.com/u/1338731?v=4","links":[{"icon":"github","link":"https://github.com/typeofweb"}],"lastFetch":1731241409690},{"username":"skh-","name":"Sam K Hall","avatar":"https://avatars.githubusercontent.com/u/1292598?v=4","links":[{"icon":"github","link":"https://github.com/skh-"}],"lastFetch":1731241409830},{"username":"BlooJeans","name":"Matt Jeanes","avatar":"https://avatars.githubusercontent.com/u/1751182?v=4","links":[{"icon":"github","link":"https://github.com/BlooJeans"}],"lastFetch":1731241409987},{"username":"selbekk","name":"Kristofer Giltvedt Selbekk","avatar":"https://avatars.githubusercontent.com/u/1307267?v=4","links":[{"icon":"github","link":"https://github.com/selbekk"}],"lastFetch":1731241410149},{"username":"Mause","name":"Elliana May","avatar":"https://avatars.githubusercontent.com/u/1405026?v=4","links":[{"icon":"github","link":"https://github.com/Mause"}],"lastFetch":1731241410307},{"username":"henhal","name":"Henrik Hall","avatar":"https://avatars.githubusercontent.com/u/9608258?v=4","links":[{"icon":"github","link":"https://github.com/henhal"}],"lastFetch":1731241410448},{"username":"gr2m","name":"Gregor Martynus","avatar":"https://avatars.githubusercontent.com/u/39992?v=4","links":[{"icon":"github","link":"https://github.com/gr2m"}],"lastFetch":1731241410626},{"username":"samdbmg","name":"Sam Mesterton-Gibbons","avatar":"https://avatars.githubusercontent.com/u/408983?v=4","links":[{"icon":"github","link":"https://github.com/samdbmg"}],"lastFetch":1731241410770},{"username":"rendall","name":"Rendall","avatar":"https://avatars.githubusercontent.com/u/293263?v=4","links":[{"icon":"github","link":"https://github.com/rendall"}],"lastFetch":1731241410928},{"username":"robertmassaioli","name":"Robert Massaioli","avatar":"https://avatars.githubusercontent.com/u/149178?v=4","links":[{"icon":"github","link":"https://github.com/robertmassaioli"}],"lastFetch":1731241411079},{"username":"jankuca","name":"Jan Kuča","avatar":"https://avatars.githubusercontent.com/u/367262?v=4","links":[{"icon":"github","link":"https://github.com/jankuca"}],"lastFetch":1731241411236},{"username":"th-m","name":"Thomas Valadez","avatar":"https://avatars.githubusercontent.com/u/13792029?v=4","links":[{"icon":"github","link":"https://github.com/th-m"}],"lastFetch":1731241411392},{"username":"asithade","name":"Asitha de Silva","avatar":"https://avatars.githubusercontent.com/u/3814354?v=4","links":[{"icon":"github","link":"https://github.com/asithade"}],"lastFetch":1731241411536},{"username":"misha-erm","name":"Misha","avatar":"https://avatars.githubusercontent.com/u/8783498?v=4","links":[{"icon":"github","link":"https://github.com/misha-erm"}],"lastFetch":1731241411683},{"username":"radist2s","name":"Alex Batalov","avatar":"https://avatars.githubusercontent.com/u/725645?v=4","links":[{"icon":"github","link":"https://github.com/radist2s"}],"lastFetch":1731241411839},{"username":"FedeBev","name":"Federico Bevione","avatar":"https://avatars.githubusercontent.com/u/22151395?v=4","links":[{"icon":"github","link":"https://github.com/FedeBev"}],"lastFetch":1731241411995},{"username":"yamacent","name":"Daisuke Yamamoto","avatar":"https://avatars.githubusercontent.com/u/8544439?v=4","links":[{"icon":"github","link":"https://github.com/yamacent"}],"lastFetch":1731241412150},{"username":"dnalborczyk","name":null,"avatar":"https://avatars.githubusercontent.com/u/2903325?v=4","links":[{"icon":"github","link":"https://github.com/dnalborczyk"}],"lastFetch":1731241412294},{"username":"FabioWanner","name":null,"avatar":"https://avatars.githubusercontent.com/u/46821078?v=4","links":[{"icon":"github","link":"https://github.com/FabioWanner"}],"lastFetch":1731241412446},{"username":"ashsmith","name":"Ash Smith","avatar":"https://avatars.githubusercontent.com/u/1086841?v=4","links":[{"icon":"github","link":"https://github.com/ashsmith"}],"lastFetch":1731241412603},{"username":"mehalter","name":"Micah Halter","avatar":"https://avatars.githubusercontent.com/u/1591837?v=4","links":[{"icon":"github","link":"https://github.com/mehalter"}],"lastFetch":1731241412791},{"username":"Chrg1001","name":"chrg1001","avatar":"https://avatars.githubusercontent.com/u/40189653?v=4","links":[{"icon":"github","link":"https://github.com/Chrg1001"}],"lastFetch":1731241412971},{"username":"sharmarajdaksh","name":"Dakshraj Sharma","avatar":"https://avatars.githubusercontent.com/u/33689528?v=4","links":[{"icon":"github","link":"https://github.com/sharmarajdaksh"}],"lastFetch":1731241413109},{"username":"shuluster","name":"Shaosu Liu","avatar":"https://avatars.githubusercontent.com/u/1707910?v=4","links":[{"icon":"github","link":"https://github.com/shuluster"}],"lastFetch":1731241413312},{"username":"FDiskas","name":"Vytenis","avatar":"https://avatars.githubusercontent.com/u/468006?v=4","links":[{"icon":"github","link":"https://github.com/FDiskas"}],"lastFetch":1731241413466},{"username":"ericzorn93","name":"Eric Zorn","avatar":"https://avatars.githubusercontent.com/u/22532542?v=4","links":[{"icon":"github","link":"https://github.com/ericzorn93"}],"lastFetch":1731241413646},{"username":"mbelsky","name":"Max Belsky","avatar":"https://avatars.githubusercontent.com/u/3923527?v=4","links":[{"icon":"github","link":"https://github.com/mbelsky"}],"lastFetch":1731241413798},{"username":"techbech","name":"Peter Bech","avatar":"https://avatars.githubusercontent.com/u/1520592?v=4","links":[{"icon":"github","link":"https://github.com/techbech"}],"lastFetch":1731241413948},{"username":"rustyconover","name":"Rusty Conover","avatar":"https://avatars.githubusercontent.com/u/731941?v=4","links":[{"icon":"github","link":"https://github.com/rustyconover"}],"lastFetch":1731241414084},{"username":"bunkscene","name":"Dave Carlson","avatar":"https://avatars.githubusercontent.com/u/2693678?v=4","links":[{"icon":"github","link":"https://github.com/bunkscene"}],"lastFetch":1731241414238},{"username":"ottomated","name":null,"avatar":"https://avatars.githubusercontent.com/u/31470743?v=4","links":[{"icon":"github","link":"https://github.com/ottomated"}],"lastFetch":1731241414402},{"username":"sadfsdfdsa","name":"Artem Shuvaev","avatar":"https://avatars.githubusercontent.com/u/28733669?v=4","links":[{"icon":"github","link":"https://github.com/sadfsdfdsa"}],"lastFetch":1731241414560},{"username":"ajaishankar","name":null,"avatar":"https://avatars.githubusercontent.com/u/328008?v=4","links":[{"icon":"github","link":"https://github.com/ajaishankar"}],"lastFetch":1731241414728},{"username":"dominikdosoudil","name":"Dominik Dosoudil","avatar":"https://avatars.githubusercontent.com/u/15929942?v=4","links":[{"icon":"github","link":"https://github.com/dominikdosoudil"}],"lastFetch":1731241414885},{"username":"kgtkr","name":"kgtkr","avatar":"https://avatars.githubusercontent.com/u/17868838?v=4","links":[{"icon":"github","link":"https://github.com/kgtkr"}],"lastFetch":1731241415047},{"username":"berzi","name":null,"avatar":"https://avatars.githubusercontent.com/u/32619123?v=4","links":[{"icon":"github","link":"https://github.com/berzi"}],"lastFetch":1731241415206},{"username":"PhilipTrauner","name":"Philip Trauner","avatar":"https://avatars.githubusercontent.com/u/9287847?v=4","links":[{"icon":"github","link":"https://github.com/PhilipTrauner"}],"lastFetch":1731241415359},{"username":"Powell-v2","name":"Pavel Yermolin","avatar":"https://avatars.githubusercontent.com/u/25308326?v=4","links":[{"icon":"github","link":"https://github.com/Powell-v2"}],"lastFetch":1731241415514},{"username":"duncanbeevers","name":"Duncan Beevers","avatar":"https://avatars.githubusercontent.com/u/7367?v=4","links":[{"icon":"github","link":"https://github.com/duncanbeevers"}],"lastFetch":1731241415670},{"username":"tkukushkin","name":"Timofei Kukushkin","avatar":"https://avatars.githubusercontent.com/u/1482516?v=4","links":[{"icon":"github","link":"https://github.com/tkukushkin"}],"lastFetch":1731241415820},{"username":"Semigradsky","name":"Dmitry Semigradsky","avatar":"https://avatars.githubusercontent.com/u/1198848?v=4","links":[{"icon":"github","link":"https://github.com/Semigradsky"}],"lastFetch":1731241415970},{"username":"MrLeebo","name":"Jeremy Liberman","avatar":"https://avatars.githubusercontent.com/u/2754163?v=4","links":[{"icon":"github","link":"https://github.com/MrLeebo"}],"lastFetch":1731241416125},{"username":"axelhzf","name":"Axel Hernández Ferrera","avatar":"https://avatars.githubusercontent.com/u/175627?v=4","links":[{"icon":"github","link":"https://github.com/axelhzf"}],"lastFetch":1731241416271},{"username":"imagoiq","name":"Loïc Fürhoff","avatar":"https://avatars.githubusercontent.com/u/12294151?v=4","links":[{"icon":"github","link":"https://github.com/imagoiq"}],"lastFetch":1731241416420},{"username":"BTMPL","name":"Bartosz Szczeciński","avatar":"https://avatars.githubusercontent.com/u/247153?v=4","links":[{"icon":"github","link":"https://github.com/BTMPL"}],"lastFetch":1731241416558},{"username":"HiiiiD","name":"Marco Salomone","avatar":"https://avatars.githubusercontent.com/u/61231210?v=4","links":[{"icon":"github","link":"https://github.com/HiiiiD"}],"lastFetch":1731241416698},{"username":"yacinehmito","name":"Yacine Hmito","avatar":"https://avatars.githubusercontent.com/u/6893840?v=4","links":[{"icon":"github","link":"https://github.com/yacinehmito"}],"lastFetch":1731241416857},{"username":"sajadtorkamani","name":"Sajad Torkamani","avatar":"https://avatars.githubusercontent.com/u/9380313?v=4","links":[{"icon":"github","link":"https://github.com/sajadtorkamani"}],"lastFetch":1731241417002},{"username":"mvdbeek","name":"Marius van den Beek","avatar":"https://avatars.githubusercontent.com/u/6804901?v=4","links":[{"icon":"github","link":"https://github.com/mvdbeek"}],"lastFetch":1731241417165},{"username":"sgrimm","name":"Steven Grimm","avatar":"https://avatars.githubusercontent.com/u/1248649?v=4","links":[{"icon":"github","link":"https://github.com/sgrimm"}],"lastFetch":1731241417302},{"username":"Swiftwork","name":"Erik Hughes","avatar":"https://avatars.githubusercontent.com/u/455178?v=4","links":[{"icon":"github","link":"https://github.com/Swiftwork"}],"lastFetch":1731241417454},{"username":"mtth","name":"Matthieu Monsch","avatar":"https://avatars.githubusercontent.com/u/1216372?v=4","links":[{"icon":"github","link":"https://github.com/mtth"}],"lastFetch":1731241417603},{"username":"mitchell-merry","name":"Mitchell Merry","avatar":"https://avatars.githubusercontent.com/u/8567231?v=4","links":[{"icon":"github","link":"https://github.com/mitchell-merry"}],"lastFetch":1731241417764},{"username":"qnp","name":"François Risoud","avatar":"https://avatars.githubusercontent.com/u/6012554?v=4","links":[{"icon":"github","link":"https://github.com/qnp"}],"lastFetch":1731241417916},{"username":"shoffmeister","name":null,"avatar":"https://avatars.githubusercontent.com/u/3868036?v=4","links":[{"icon":"github","link":"https://github.com/shoffmeister"}],"lastFetch":1731241418088},{"username":"liangskyli","name":"liangsky","avatar":"https://avatars.githubusercontent.com/u/31531283?v=4","links":[{"icon":"github","link":"https://github.com/liangskyli"}],"lastFetch":1731241418251},{"username":"happycollision","name":"Don Denton","avatar":"https://avatars.githubusercontent.com/u/3663628?v=4","links":[{"icon":"github","link":"https://github.com/happycollision"}],"lastFetch":1731241418399},{"username":"ysmood","name":"Yad Smood","avatar":"https://avatars.githubusercontent.com/u/1415488?v=4","links":[{"icon":"github","link":"https://github.com/ysmood"}],"lastFetch":1731241418574},{"username":"barakalon","name":"barak","avatar":"https://avatars.githubusercontent.com/u/12398927?v=4","links":[{"icon":"github","link":"https://github.com/barakalon"}],"lastFetch":1731241418716},{"username":"horaklukas","name":"Lukáš Horák","avatar":"https://avatars.githubusercontent.com/u/996088?v=4","links":[{"icon":"github","link":"https://github.com/horaklukas"}],"lastFetch":1731241418866},{"username":"pvanagtmaal","name":null,"avatar":"https://avatars.githubusercontent.com/u/5946464?v=4","links":[{"icon":"github","link":"https://github.com/pvanagtmaal"}],"lastFetch":1731241419011},{"username":"toomuchdesign","name":"Andrea Carraro","avatar":"https://avatars.githubusercontent.com/u/4573549?v=4","links":[{"icon":"github","link":"https://github.com/toomuchdesign"}],"lastFetch":1731241419169},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1731241419314},{"username":"tkrotoff","name":"Tanguy Krotoff","avatar":"https://avatars.githubusercontent.com/u/643434?v=4","links":[{"icon":"github","link":"https://github.com/tkrotoff"}],"lastFetch":1731241419476},{"username":"pimveldhuisen","name":"Pim Veldhuisen","avatar":"https://avatars.githubusercontent.com/u/3043834?v=4","links":[{"icon":"github","link":"https://github.com/pimveldhuisen"}],"lastFetch":1731241419630},{"username":"asvishnyakov","name":"Aleksandr Vishniakov","avatar":"https://avatars.githubusercontent.com/u/6369252?v=4","links":[{"icon":"github","link":"https://github.com/asvishnyakov"}],"lastFetch":1731241419785},{"username":"SchabaJo","name":null,"avatar":"https://avatars.githubusercontent.com/u/138689813?v=4","links":[{"icon":"github","link":"https://github.com/SchabaJo"}],"lastFetch":1731241419928},{"username":"AhsanFazal","name":"Ahsan Fazal","avatar":"https://avatars.githubusercontent.com/u/7458046?v=4","links":[{"icon":"github","link":"https://github.com/AhsanFazal"}],"lastFetch":1731241420090},{"username":"ElForastero","name":"Eugene Dzhumak","avatar":"https://avatars.githubusercontent.com/u/5102818?v=4","links":[{"icon":"github","link":"https://github.com/ElForastero"}],"lastFetch":1731241420243},{"username":"msgadi","name":"Mohammed Gadi","avatar":"https://avatars.githubusercontent.com/u/9037086?v=4","links":[{"icon":"github","link":"https://github.com/msgadi"}],"lastFetch":1731241420398},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1731241420548},{"username":"christoph-fricke","name":"Christoph Fricke","avatar":"https://avatars.githubusercontent.com/u/23103835?v=4","links":[{"icon":"github","link":"https://github.com/christoph-fricke"}],"lastFetch":1731241420689},{"username":"JorrinKievit","name":"Jorrin","avatar":"https://avatars.githubusercontent.com/u/43169049?v=4","links":[{"icon":"github","link":"https://github.com/JorrinKievit"}],"lastFetch":1731241420844},{"username":"WickyNilliams","name":"Nick Williams","avatar":"https://avatars.githubusercontent.com/u/1091390?v=4","links":[{"icon":"github","link":"https://github.com/WickyNilliams"}],"lastFetch":1731241420998},{"username":"hrsh7th","name":"hrsh7th","avatar":"https://avatars.githubusercontent.com/u/629908?v=4","links":[{"icon":"github","link":"https://github.com/hrsh7th"}],"lastFetch":1731241421193},{"username":"davidleger95","name":"David Leger","avatar":"https://avatars.githubusercontent.com/u/10498708?v=4","links":[{"icon":"github","link":"https://github.com/davidleger95"}],"lastFetch":1729913934448},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1731241421343},{"username":"mzronek","name":"Matthias Zronek","avatar":"https://avatars.githubusercontent.com/u/3847700?v=4","links":[{"icon":"github","link":"https://github.com/mzronek"}],"lastFetch":1731241421491},{"username":"raurfang","name":"Łukasz Wiśniewski","avatar":"https://avatars.githubusercontent.com/u/867241?v=4","links":[{"icon":"github","link":"https://github.com/raurfang"}],"lastFetch":1731241421658},{"username":"JeanRemiDelteil","name":"Jean-Rémi Delteil","avatar":"https://avatars.githubusercontent.com/u/9743907?v=4","links":[{"icon":"github","link":"https://github.com/JeanRemiDelteil"}],"lastFetch":1731241421818},{"username":"TzviPM","name":"Tzvi Melamed","avatar":"https://avatars.githubusercontent.com/u/1950680?v=4","links":[{"icon":"github","link":"https://github.com/TzviPM"}],"lastFetch":1731241421959},{"username":"LucaSchwan","name":"ehrenschwan","avatar":"https://avatars.githubusercontent.com/u/25820532?v=4","links":[{"icon":"github","link":"https://github.com/LucaSchwan"}],"lastFetch":1731241422111},{"username":"nzapponi","name":"Niccolo Zapponi","avatar":"https://avatars.githubusercontent.com/u/20582065?v=4","links":[{"icon":"github","link":"https://github.com/nzapponi"}],"lastFetch":1731241422283},{"username":"luchsamapparat","name":"Marvin Luchs","avatar":"https://avatars.githubusercontent.com/u/875017?v=4","links":[{"icon":"github","link":"https://github.com/luchsamapparat"}],"lastFetch":1731241422433},{"username":"nmacmunn","name":"Neil MacMunn","avatar":"https://avatars.githubusercontent.com/u/849964?v=4","links":[{"icon":"github","link":"https://github.com/nmacmunn"}],"lastFetch":1731241422569}],"openapi-fetch":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1731241407720},{"username":"fergusean","name":null,"avatar":"https://avatars.githubusercontent.com/u/1029297?v=4","links":[{"icon":"github","link":"https://github.com/fergusean"}],"lastFetch":1731241407870},{"username":"shinzui","name":"Nadeem Bitar","avatar":"https://avatars.githubusercontent.com/u/519?v=4","links":[{"icon":"github","link":"https://github.com/shinzui"}],"lastFetch":1731241408021},{"username":"ezpuzz","name":"Emory Petermann","avatar":"https://avatars.githubusercontent.com/u/672182?v=4","links":[{"icon":"github","link":"https://github.com/ezpuzz"}],"lastFetch":1731241408171},{"username":"KotoriK","name":null,"avatar":"https://avatars.githubusercontent.com/u/52659125?v=4","links":[{"icon":"github","link":"https://github.com/KotoriK"}],"lastFetch":1731241408324},{"username":"fletchertyler914","name":"Tyler Fletcher","avatar":"https://avatars.githubusercontent.com/u/3344498?v=4","links":[{"icon":"github","link":"https://github.com/fletchertyler914"}],"lastFetch":1731241408481},{"username":"nholik","name":"Nicklos Holik","avatar":"https://avatars.githubusercontent.com/u/2022214?v=4","links":[{"icon":"github","link":"https://github.com/nholik"}],"lastFetch":1731241408620},{"username":"roj1512","name":null,"avatar":"https://avatars.githubusercontent.com/u/175297870?v=4","links":[{"icon":"github","link":"https://github.com/roj1512"}],"lastFetch":1731241408786},{"username":"nickcaballero","name":"Nick Caballero","avatar":"https://avatars.githubusercontent.com/u/355976?v=4","links":[{"icon":"github","link":"https://github.com/nickcaballero"}],"lastFetch":1731241408946},{"username":"hd-o","name":"Hadrian de Oliveira","avatar":"https://avatars.githubusercontent.com/u/58871222?v=4","links":[{"icon":"github","link":"https://github.com/hd-o"}],"lastFetch":1731241409096},{"username":"kecrily","name":"Percy Ma","avatar":"https://avatars.githubusercontent.com/u/45708948?v=4","links":[{"icon":"github","link":"https://github.com/kecrily"}],"lastFetch":1731241409244},{"username":"psychedelicious","name":"psychedelicious","avatar":"https://avatars.githubusercontent.com/u/4822129?v=4","links":[{"icon":"github","link":"https://github.com/psychedelicious"}],"lastFetch":1731241409403},{"username":"muttonchop","name":"Adam K","avatar":"https://avatars.githubusercontent.com/u/1037657?v=4","links":[{"icon":"github","link":"https://github.com/muttonchop"}],"lastFetch":1731241409577},{"username":"marcomuser","name":"Marco Muser","avatar":"https://avatars.githubusercontent.com/u/64737396?v=4","links":[{"icon":"github","link":"https://github.com/marcomuser"}],"lastFetch":1731241409724},{"username":"HugeLetters","name":"Evgenii Perminov","avatar":"https://avatars.githubusercontent.com/u/119697239?v=4","links":[{"icon":"github","link":"https://github.com/HugeLetters"}],"lastFetch":1731241409891},{"username":"Fumaz","name":"alex","avatar":"https://avatars.githubusercontent.com/u/45318608?v=4","links":[{"icon":"github","link":"https://github.com/Fumaz"}],"lastFetch":1731241410068},{"username":"darwish","name":"Mike Darwish","avatar":"https://avatars.githubusercontent.com/u/292570?v=4","links":[{"icon":"github","link":"https://github.com/darwish"}],"lastFetch":1731241410224},{"username":"kaechele","name":"Felix Kaechele","avatar":"https://avatars.githubusercontent.com/u/454490?v=4","links":[{"icon":"github","link":"https://github.com/kaechele"}],"lastFetch":1731241410405},{"username":"phk422","name":"Hongkun","avatar":"https://avatars.githubusercontent.com/u/59734322?v=4","links":[{"icon":"github","link":"https://github.com/phk422"}],"lastFetch":1731241410564},{"username":"mikestopcontinues","name":"Mike Stop Continues","avatar":"https://avatars.githubusercontent.com/u/150434?v=4","links":[{"icon":"github","link":"https://github.com/mikestopcontinues"}],"lastFetch":1731241410708},{"username":"JE-Lee","name":"maurice","avatar":"https://avatars.githubusercontent.com/u/19794813?v=4","links":[{"icon":"github","link":"https://github.com/JE-Lee"}],"lastFetch":1731241410856},{"username":"vipentti","name":"Ville Penttinen","avatar":"https://avatars.githubusercontent.com/u/4726680?v=4","links":[{"icon":"github","link":"https://github.com/vipentti"}],"lastFetch":1731241411028},{"username":"armandabric","name":"Armand Abric","avatar":"https://avatars.githubusercontent.com/u/95120?v=4","links":[{"icon":"github","link":"https://github.com/armandabric"}],"lastFetch":1731241411171},{"username":"illright","name":"Lev Chelyadinov","avatar":"https://avatars.githubusercontent.com/u/15035286?v=4","links":[{"icon":"github","link":"https://github.com/illright"}],"lastFetch":1731241411329}],"openapi-react-query":[{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1731241407714},{"username":"kerwanp","name":"Martin Paucot","avatar":"https://avatars.githubusercontent.com/u/36955373?v=4","links":[{"icon":"github","link":"https://github.com/kerwanp"}],"lastFetch":1731241407862},{"username":"yoshi2no","name":"yoshi2no","avatar":"https://avatars.githubusercontent.com/u/57059705?v=4","links":[{"icon":"github","link":"https://github.com/yoshi2no"}],"lastFetch":1731241408013},{"username":"elaygelbart","name":"Elay Gelbart","avatar":"https://avatars.githubusercontent.com/u/88675154?v=4","links":[{"icon":"github","link":"https://github.com/elaygelbart"}],"lastFetch":1730904973287}],"swr-openapi":[{"username":"htunnicliff","name":"Hunter Tunnicliff","avatar":"https://avatars.githubusercontent.com/u/7614039?v=4","links":[{"icon":"github","link":"https://github.com/htunnicliff"}],"lastFetch":1731241407730}],"openapi-metadata":[{"username":"kerwanp","name":"Martin Paucot","avatar":"https://avatars.githubusercontent.com/u/36955373?v=4","links":[{"icon":"github","link":"https://github.com/kerwanp"}],"lastFetch":1731241407754},{"username":"drwpow","name":"Drew Powers","avatar":"https://avatars.githubusercontent.com/u/1369770?v=4","links":[{"icon":"github","link":"https://github.com/drwpow"}],"lastFetch":1731241407895}]} \ No newline at end of file From 96fe664fb9284472e1f00ce17ee70596268503ca Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sun, 10 Nov 2024 13:26:03 +0100 Subject: [PATCH 24/25] changeset --- .changeset/strange-nails-jam.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/strange-nails-jam.md diff --git a/.changeset/strange-nails-jam.md b/.changeset/strange-nails-jam.md new file mode 100644 index 000000000..cb7fd582d --- /dev/null +++ b/.changeset/strange-nails-jam.md @@ -0,0 +1,5 @@ +--- +"openapi-metadata": patch +--- + +Inititial release From b9f3cae9aa0b237125312137c9b9e40ed99384b3 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Sun, 10 Nov 2024 13:28:42 +0100 Subject: [PATCH 25/25] lint --- .../src/decorators/api-body.ts | 5 +-- .../src/decorators/api-cookie.ts | 11 ++---- .../src/decorators/api-header.ts | 11 ++---- .../src/decorators/api-operation.ts | 5 +-- .../src/decorators/api-param.ts | 11 ++---- .../src/decorators/api-property.ts | 17 +++------- .../src/decorators/api-query.ts | 11 ++---- .../src/decorators/api-response.ts | 10 ++---- .../src/generators/document.ts | 4 +-- .../src/generators/operation.ts | 25 +++----------- .../openapi-metadata/src/generators/paths.ts | 17 +++------- packages/openapi-metadata/src/loaders/type.ts | 34 +++++-------------- .../openapi-metadata/src/metadata/exclude.ts | 5 +-- .../src/metadata/extra-models.ts | 7 ++-- .../src/metadata/operation-body.ts | 8 ++--- .../src/metadata/operation-header.ts | 5 ++- .../src/metadata/operation-parameter.ts | 12 +++---- .../src/metadata/operation-response.ts | 12 +++---- .../src/metadata/operation-security.ts | 9 +++-- .../src/metadata/operation.ts | 3 +- .../openapi-metadata/src/metadata/property.ts | 3 +- packages/openapi-metadata/tsconfig.build.json | 2 +- 22 files changed, 61 insertions(+), 166 deletions(-) diff --git a/packages/openapi-metadata/src/decorators/api-body.ts b/packages/openapi-metadata/src/decorators/api-body.ts index 8ff0258fc..b3f72d21d 100644 --- a/packages/openapi-metadata/src/decorators/api-body.ts +++ b/packages/openapi-metadata/src/decorators/api-body.ts @@ -1,8 +1,5 @@ import type { SetOptional } from "type-fest"; -import { - type OperationBodyMetadata, - OperationBodyMetadataStorage, -} from "../metadata/operation-body.js"; +import { type OperationBodyMetadata, OperationBodyMetadataStorage } from "../metadata/operation-body.js"; export type ApiBodyOptions = SetOptional; diff --git a/packages/openapi-metadata/src/decorators/api-cookie.ts b/packages/openapi-metadata/src/decorators/api-cookie.ts index 6f0729ec7..057dfc04e 100644 --- a/packages/openapi-metadata/src/decorators/api-cookie.ts +++ b/packages/openapi-metadata/src/decorators/api-cookie.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata/operation-parameter.js"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter.js"; export type ApiCookieOptions = Omit; export function ApiCookie(options: ApiCookieOptions) { return (target: Object, propertyKey?: string | symbol) => { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "cookie", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "cookie", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-header.ts b/packages/openapi-metadata/src/decorators/api-header.ts index cdcb97836..b3509503e 100644 --- a/packages/openapi-metadata/src/decorators/api-header.ts +++ b/packages/openapi-metadata/src/decorators/api-header.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata/operation-parameter.js"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter.js"; export type ApiHeaderOptions = Omit; export function ApiHeader(options: ApiHeaderOptions) { return (target: Object, propertyKey?: string | symbol) => { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "header", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "header", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-operation.ts b/packages/openapi-metadata/src/decorators/api-operation.ts index c38dba9eb..1f32590a2 100644 --- a/packages/openapi-metadata/src/decorators/api-operation.ts +++ b/packages/openapi-metadata/src/decorators/api-operation.ts @@ -1,7 +1,4 @@ -import { - type OperationMetadata, - OperationMetadataStorage, -} from "../metadata/operation.js"; +import { type OperationMetadata, OperationMetadataStorage } from "../metadata/operation.js"; export type ApiOperationOptions = OperationMetadata; diff --git a/packages/openapi-metadata/src/decorators/api-param.ts b/packages/openapi-metadata/src/decorators/api-param.ts index f1b24fca1..0ae4c4ea5 100644 --- a/packages/openapi-metadata/src/decorators/api-param.ts +++ b/packages/openapi-metadata/src/decorators/api-param.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata/operation-parameter.js"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter.js"; export type ApiParamOptions = Omit; export function ApiParam(options: ApiParamOptions) { return function (target: Object, propertyKey?: string | symbol) { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "path", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "path", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-property.ts b/packages/openapi-metadata/src/decorators/api-property.ts index 341011eba..ca10ee4b0 100644 --- a/packages/openapi-metadata/src/decorators/api-property.ts +++ b/packages/openapi-metadata/src/decorators/api-property.ts @@ -1,18 +1,13 @@ import type { Context } from "../context.js"; import { SymbolKeysNotSupportedError } from "../errors/symbol-keys-not-supported.js"; -import { - type PropertyMetadata, - PropertyMetadataStorage, -} from "../metadata/property.js"; +import { type PropertyMetadata, PropertyMetadataStorage } from "../metadata/property.js"; import { findType } from "../utils/metadata.js"; export type ApiPropertyOptions = Partial; export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator; export function ApiProperty(options?: ApiPropertyOptions): MethodDecorator; -export function ApiProperty( - options?: ApiPropertyOptions, -): PropertyDecorator | MethodDecorator { +export function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator | MethodDecorator { return (prototype, propertyKey, descriptor) => { const isMethod = Boolean(descriptor?.value); @@ -42,12 +37,8 @@ export function ApiProperty( }; } -export function ApiPropertyOptional( - options?: Omit, -): PropertyDecorator; -export function ApiPropertyOptional( - options?: Omit, -): MethodDecorator; +export function ApiPropertyOptional(options?: Omit): PropertyDecorator; +export function ApiPropertyOptional(options?: Omit): MethodDecorator; export function ApiPropertyOptional( options?: Omit, ): PropertyDecorator | MethodDecorator { diff --git a/packages/openapi-metadata/src/decorators/api-query.ts b/packages/openapi-metadata/src/decorators/api-query.ts index cab95e1fd..caba1bb44 100644 --- a/packages/openapi-metadata/src/decorators/api-query.ts +++ b/packages/openapi-metadata/src/decorators/api-query.ts @@ -1,16 +1,9 @@ -import { - type OperationParameterMetadata, - OperationParameterMetadataStorage, -} from "../metadata/operation-parameter.js"; +import { type OperationParameterMetadata, OperationParameterMetadataStorage } from "../metadata/operation-parameter.js"; export type ApiQueryOptions = Omit; export function ApiQuery(options: ApiQueryOptions) { return function (target: Object, propertyKey?: string | symbol) { - OperationParameterMetadataStorage.mergeMetadata( - target, - [{ in: "query", ...options }], - propertyKey, - ); + OperationParameterMetadataStorage.mergeMetadata(target, [{ in: "query", ...options }], propertyKey); }; } diff --git a/packages/openapi-metadata/src/decorators/api-response.ts b/packages/openapi-metadata/src/decorators/api-response.ts index 3b5327152..80135f203 100644 --- a/packages/openapi-metadata/src/decorators/api-response.ts +++ b/packages/openapi-metadata/src/decorators/api-response.ts @@ -1,13 +1,7 @@ import type { SetOptional } from "type-fest"; -import { - type OperationResponseMetadata, - OperationResponseMetadataStorage, -} from "../metadata/operation-response.js"; +import { type OperationResponseMetadata, OperationResponseMetadataStorage } from "../metadata/operation-response.js"; -export type ApiResponseOptions = SetOptional< - OperationResponseMetadata, - "status" | "mediaType" ->; +export type ApiResponseOptions = SetOptional; export function ApiResponse(options: ApiResponseOptions) { return function (target: Object, propertyKey?: string | symbol) { diff --git a/packages/openapi-metadata/src/generators/document.ts b/packages/openapi-metadata/src/generators/document.ts index 947077c1e..d54a601ee 100644 --- a/packages/openapi-metadata/src/generators/document.ts +++ b/packages/openapi-metadata/src/generators/document.ts @@ -40,9 +40,7 @@ export type GenerateDocumentOptions = { /** * Generates a compliant OpenAPIV3 schema. */ -export async function generateDocument( - options: GenerateDocumentOptions, -): Promise { +export async function generateDocument(options: GenerateDocumentOptions): Promise { const context = new Context(options.customLogger, options.loaders); return deepmerge(options.document, { diff --git a/packages/openapi-metadata/src/generators/operation.ts b/packages/openapi-metadata/src/generators/operation.ts index 2cac826a0..fe8341191 100644 --- a/packages/openapi-metadata/src/generators/operation.ts +++ b/packages/openapi-metadata/src/generators/operation.ts @@ -30,33 +30,18 @@ export async function generateOperation( operation.requestBody = await generateOperationBody(context, body); } - const parameters = OperationParameterMetadataStorage.getMetadata( - target, - propertyKey, - ); + const parameters = OperationParameterMetadataStorage.getMetadata(target, propertyKey); operation.parameters = []; for (const parameter of parameters) { - operation.parameters.push( - await generateOperationParameters(context, parameter), - ); + operation.parameters.push(await generateOperationParameters(context, parameter)); } - const responses = OperationResponseMetadataStorage.getMetadata( - target, - propertyKey, - ); + const responses = OperationResponseMetadataStorage.getMetadata(target, propertyKey); for (const [status, response] of Object.entries(responses)) { - operation.responses[status] = await generateOperationResponse( - context, - response, - ); + operation.responses[status] = await generateOperationResponse(context, response); } - const security = OperationSecurityMetadataStorage.getMetadata( - target, - propertyKey, - true, - ); + const security = OperationSecurityMetadataStorage.getMetadata(target, propertyKey, true); operation.security = [security]; diff --git a/packages/openapi-metadata/src/generators/paths.ts b/packages/openapi-metadata/src/generators/paths.ts index 92691706e..d91d2b67e 100644 --- a/packages/openapi-metadata/src/generators/paths.ts +++ b/packages/openapi-metadata/src/generators/paths.ts @@ -1,15 +1,9 @@ import type { OpenAPIV3 } from "openapi-types"; import type { Context } from "../context.js"; import { generateOperation } from "./operation.js"; -import { - ExcludeMetadataStorage, - OperationMetadataStorage, -} from "../metadata/index.js"; - -export async function generatePaths( - context: Context, - controllers: Function[], -): Promise { +import { ExcludeMetadataStorage, OperationMetadataStorage } from "../metadata/index.js"; + +export async function generatePaths(context: Context, controllers: Function[]): Promise { const paths: OpenAPIV3.PathsObject = {}; for (const controller of controllers) { @@ -31,10 +25,7 @@ export async function generatePaths( } for (const method of metadata.methods) { - const excludeOperation = ExcludeMetadataStorage.getMetadata( - target, - key, - ); + const excludeOperation = ExcludeMetadataStorage.getMetadata(target, key); if (excludeOperation === true) { continue; diff --git a/packages/openapi-metadata/src/loaders/type.ts b/packages/openapi-metadata/src/loaders/type.ts index 4ad47233f..db751d8d3 100644 --- a/packages/openapi-metadata/src/loaders/type.ts +++ b/packages/openapi-metadata/src/loaders/type.ts @@ -39,19 +39,16 @@ const ClassTypeLoader: TypeLoaderFn = async (context, value) => { return { $ref: schemaPath(model) }; } - const schema: SetRequired = - { - type: "object", - properties: {}, - required: [], - }; + const schema: SetRequired = { + type: "object", + properties: {}, + required: [], + }; const properties = PropertyMetadataStorage.getMetadata(value.prototype); if (!properties) { - context.logger.warn( - `You tried to use '${model}' as a type but it does not contain any ApiProperty.`, - ); + context.logger.warn(`You tried to use '${model}' as a type but it does not contain any ApiProperty.`); return; } @@ -59,14 +56,7 @@ const ClassTypeLoader: TypeLoaderFn = async (context, value) => { context.schemas[model] = schema; for (const [key, property] of Object.entries(properties)) { - const { - required, - type, - name, - enum: e, - schema: s, - ...metadata - } = property as any; + const { required, type, name, enum: e, schema: s, ...metadata } = property as any; schema.properties[key] = { ...(await loadType(context, property)), ...metadata, @@ -106,18 +96,12 @@ export async function loadType( const thunk = isThunk(options.type); const value = thunk ? (options.type as Function)(context) : options.type; - for (const loader of [ - PrimitiveTypeLoader, - ...context.typeLoaders, - ClassTypeLoader, - ]) { + for (const loader of [PrimitiveTypeLoader, ...context.typeLoaders, ClassTypeLoader]) { const result = await loader(context, value, options.type); if (result) { return result; } } - context.logger.warn( - `You tried to use '${options.type.toString()}' as a type but no loader supports it ${thunk}`, - ); + context.logger.warn(`You tried to use '${options.type.toString()}' as a type but no loader supports it ${thunk}`); } diff --git a/packages/openapi-metadata/src/metadata/exclude.ts b/packages/openapi-metadata/src/metadata/exclude.ts index fc22f9a71..0da9537c3 100644 --- a/packages/openapi-metadata/src/metadata/exclude.ts +++ b/packages/openapi-metadata/src/metadata/exclude.ts @@ -2,7 +2,4 @@ import { createMetadataStorage } from "./factory.js"; export const ExcludeMetadataKey = Symbol("Exclude"); -export const ExcludeMetadataStorage = createMetadataStorage( - ExcludeMetadataKey, - false, -); +export const ExcludeMetadataStorage = createMetadataStorage(ExcludeMetadataKey, false); diff --git a/packages/openapi-metadata/src/metadata/extra-models.ts b/packages/openapi-metadata/src/metadata/extra-models.ts index 1e94784d8..c32494ff8 100644 --- a/packages/openapi-metadata/src/metadata/extra-models.ts +++ b/packages/openapi-metadata/src/metadata/extra-models.ts @@ -3,6 +3,7 @@ import { createMetadataStorage } from "./factory.js"; export const ExtraModelsMetadataKey = Symbol("ExtraModels"); -export const ExtraModelsMetadataStorage = createMetadataStorage< - (TypeValue | Thunk)[] ->(ExtraModelsMetadataKey, []); +export const ExtraModelsMetadataStorage = createMetadataStorage<(TypeValue | Thunk)[]>( + ExtraModelsMetadataKey, + [], +); diff --git a/packages/openapi-metadata/src/metadata/operation-body.ts b/packages/openapi-metadata/src/metadata/operation-body.ts index 4a273820f..1c4bc8432 100644 --- a/packages/openapi-metadata/src/metadata/operation-body.ts +++ b/packages/openapi-metadata/src/metadata/operation-body.ts @@ -2,12 +2,8 @@ import type { OpenAPIV3 } from "openapi-types"; import type { TypeOptions } from "../types.js"; import { createMetadataStorage } from "./factory.js"; -export type OperationBodyMetadata = Omit< - OpenAPIV3.RequestBodyObject, - "content" -> & { mediaType: string } & TypeOptions; +export type OperationBodyMetadata = Omit & { mediaType: string } & TypeOptions; export const OperationBodyMetadataKey = Symbol("OperationBody"); -export const OperationBodyMetadataStorage = - createMetadataStorage(OperationBodyMetadataKey); +export const OperationBodyMetadataStorage = createMetadataStorage(OperationBodyMetadataKey); diff --git a/packages/openapi-metadata/src/metadata/operation-header.ts b/packages/openapi-metadata/src/metadata/operation-header.ts index 27da03684..0aef15a19 100644 --- a/packages/openapi-metadata/src/metadata/operation-header.ts +++ b/packages/openapi-metadata/src/metadata/operation-header.ts @@ -8,6 +8,5 @@ export type OperationHeaderMetadata = Omit & { export const OperationHeaderSymbol = Symbol("OperationHeader"); -export const OperationHeaderMetadataStorage = createMetadataStorage< - Record ->(OperationHeaderSymbol); +export const OperationHeaderMetadataStorage = + createMetadataStorage>(OperationHeaderSymbol); diff --git a/packages/openapi-metadata/src/metadata/operation-parameter.ts b/packages/openapi-metadata/src/metadata/operation-parameter.ts index 3bd5d70be..47daadd4f 100644 --- a/packages/openapi-metadata/src/metadata/operation-parameter.ts +++ b/packages/openapi-metadata/src/metadata/operation-parameter.ts @@ -2,16 +2,14 @@ import type { OpenAPIV3 } from "openapi-types"; import type { TypeOptions } from "../types.js"; import { createMetadataStorage } from "./factory.js"; -export type OperationParameterMetadata = Omit< - OpenAPIV3.ParameterObject, - "in" | "schema" -> & { +export type OperationParameterMetadata = Omit & { name: string; in: "path" | "query" | "header" | "cookie"; } & Partial; export const OperationParameterMetadataKey = Symbol("OperationParameter"); -export const OperationParameterMetadataStorage = createMetadataStorage< - OperationParameterMetadata[] ->(OperationParameterMetadataKey, []); +export const OperationParameterMetadataStorage = createMetadataStorage( + OperationParameterMetadataKey, + [], +); diff --git a/packages/openapi-metadata/src/metadata/operation-response.ts b/packages/openapi-metadata/src/metadata/operation-response.ts index 69fc4c7f8..71b86e3d7 100644 --- a/packages/openapi-metadata/src/metadata/operation-response.ts +++ b/packages/openapi-metadata/src/metadata/operation-response.ts @@ -3,16 +3,14 @@ import type { TypeOptions } from "../types.js"; import type { SetOptional } from "type-fest"; import { createMetadataStorage } from "./factory.js"; -export type OperationResponseMetadata = Omit< - SetOptional, - "content" -> & { +export type OperationResponseMetadata = Omit, "content"> & { status: number | "default"; mediaType: string; } & TypeOptions; export const OperationResponseMetadataKey = Symbol("OperationResponse"); -export const OperationResponseMetadataStorage = createMetadataStorage< - Record ->(OperationResponseMetadataKey, {}); +export const OperationResponseMetadataStorage = createMetadataStorage>( + OperationResponseMetadataKey, + {}, +); diff --git a/packages/openapi-metadata/src/metadata/operation-security.ts b/packages/openapi-metadata/src/metadata/operation-security.ts index 731086278..45b2b53ed 100644 --- a/packages/openapi-metadata/src/metadata/operation-security.ts +++ b/packages/openapi-metadata/src/metadata/operation-security.ts @@ -5,8 +5,7 @@ export type OperationSecurityMetadata = OpenAPIV3.SecurityRequirementObject; export const OperationSecurityMetadataKey = Symbol("OperationSecurity"); -export const OperationSecurityMetadataStorage = - createMetadataStorage( - OperationSecurityMetadataKey, - {}, - ); +export const OperationSecurityMetadataStorage = createMetadataStorage( + OperationSecurityMetadataKey, + {}, +); diff --git a/packages/openapi-metadata/src/metadata/operation.ts b/packages/openapi-metadata/src/metadata/operation.ts index 9c5d5c00d..3965524b4 100644 --- a/packages/openapi-metadata/src/metadata/operation.ts +++ b/packages/openapi-metadata/src/metadata/operation.ts @@ -9,5 +9,4 @@ export type OperationMetadata = Omit & { export const OperationMetadataKey = Symbol("Operation"); -export const OperationMetadataStorage = - createMetadataStorage(OperationMetadataKey, {}); +export const OperationMetadataStorage = createMetadataStorage(OperationMetadataKey, {}); diff --git a/packages/openapi-metadata/src/metadata/property.ts b/packages/openapi-metadata/src/metadata/property.ts index f2f70764e..83d6d7721 100644 --- a/packages/openapi-metadata/src/metadata/property.ts +++ b/packages/openapi-metadata/src/metadata/property.ts @@ -8,5 +8,4 @@ export type PropertyMetadata = { export const PropertyMetadataKey = Symbol("Property"); -export const PropertyMetadataStorage = - createMetadataStorage>(PropertyMetadataKey); +export const PropertyMetadataStorage = createMetadataStorage>(PropertyMetadataKey); diff --git a/packages/openapi-metadata/tsconfig.build.json b/packages/openapi-metadata/tsconfig.build.json index 68db80dd8..b90fc83e0 100644 --- a/packages/openapi-metadata/tsconfig.build.json +++ b/packages/openapi-metadata/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "include": ["src"], + "include": ["src"] }