From b30c0e89ecfa86d76ba2568d50de40d54b011e40 Mon Sep 17 00:00:00 2001 From: Tom Smeets Date: Fri, 24 Oct 2025 18:55:55 +0200 Subject: [PATCH 1/6] feat: added api-include-endpoint --- lib/constants.ts | 1 + .../api-include-endpoint.decorator.ts | 11 + lib/decorators/index.ts | 1 + .../api-include-endpoint.explorer.ts | 8 + lib/extra/swagger-shim.ts | 3 + .../swagger-document-options.interface.ts | 6 + lib/swagger-explorer.ts | 11 + lib/swagger-scanner.ts | 10 +- pnpm-lock.yaml | 7846 +++++++++++++++++ 9 files changed, 7894 insertions(+), 3 deletions(-) create mode 100644 lib/decorators/api-include-endpoint.decorator.ts create mode 100644 lib/explorers/api-include-endpoint.explorer.ts create mode 100644 pnpm-lock.yaml diff --git a/lib/constants.ts b/lib/constants.ts index 6c513dffc..ea7715477 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -12,6 +12,7 @@ export const DECORATORS = { API_MODEL_PROPERTIES_ARRAY: `${DECORATORS_PREFIX}/apiModelPropertiesArray`, API_SECURITY: `${DECORATORS_PREFIX}/apiSecurity`, API_EXCLUDE_ENDPOINT: `${DECORATORS_PREFIX}/apiExcludeEndpoint`, + API_INCLUDE_ENDPOINT: `${DECORATORS_PREFIX}/apiIncludeEndpoint`, API_EXCLUDE_CONTROLLER: `${DECORATORS_PREFIX}/apiExcludeController`, API_EXTRA_MODELS: `${DECORATORS_PREFIX}/apiExtraModels`, API_EXTENSION: `${DECORATORS_PREFIX}/apiExtension`, diff --git a/lib/decorators/api-include-endpoint.decorator.ts b/lib/decorators/api-include-endpoint.decorator.ts new file mode 100644 index 000000000..e82d3cde6 --- /dev/null +++ b/lib/decorators/api-include-endpoint.decorator.ts @@ -0,0 +1,11 @@ +import { DECORATORS } from '../constants'; +import { createMethodDecorator } from './helpers'; + +/** + * @publicApi + */ +export function ApiIncludeEndpoint(disable = true): MethodDecorator { + return createMethodDecorator(DECORATORS.API_INCLUDE_ENDPOINT, { + disable + }); +} diff --git a/lib/decorators/index.ts b/lib/decorators/index.ts index e62f1fe34..15c7630d7 100644 --- a/lib/decorators/index.ts +++ b/lib/decorators/index.ts @@ -5,6 +5,7 @@ export * from './api-consumes.decorator'; export * from './api-cookie.decorator'; export * from './api-default-getter.decorator'; export * from './api-exclude-endpoint.decorator'; +export * from './api-include-endpoint.decorator'; export * from './api-exclude-controller.decorator'; export * from './api-extra-models.decorator'; export * from './api-header.decorator'; diff --git a/lib/explorers/api-include-endpoint.explorer.ts b/lib/explorers/api-include-endpoint.explorer.ts new file mode 100644 index 000000000..3443983da --- /dev/null +++ b/lib/explorers/api-include-endpoint.explorer.ts @@ -0,0 +1,8 @@ +import { Type } from '@nestjs/common'; +import { DECORATORS } from '../constants'; + +export const exploreApiIncludeEndpointMetadata = ( + instance: object, + prototype: Type, + method: object +) => Reflect.getMetadata(DECORATORS.API_INCLUDE_ENDPOINT, method); diff --git a/lib/extra/swagger-shim.ts b/lib/extra/swagger-shim.ts index c32062826..f07150314 100644 --- a/lib/extra/swagger-shim.ts +++ b/lib/extra/swagger-shim.ts @@ -25,6 +25,9 @@ export function ApiCookieAuth() { export function ApiExcludeEndpoint() { return () => {}; } +export function ApiIncludeEndpoint() { + return () => {}; +} export function ApiExcludeController() { return () => {}; } diff --git a/lib/interfaces/swagger-document-options.interface.ts b/lib/interfaces/swagger-document-options.interface.ts index 3bd0db189..b782252fd 100644 --- a/lib/interfaces/swagger-document-options.interface.ts +++ b/lib/interfaces/swagger-document-options.interface.ts @@ -56,4 +56,10 @@ export interface SwaggerDocumentOptions { * @default true */ autoTagControllers?: boolean; + + /** + * If `true`, swagger will only include routes that are decorated with the `@ApiIncludeEndpoint()` decorator + * @default false + */ + onlyIncludeDecoratedEndpoints?: boolean; } diff --git a/lib/swagger-explorer.ts b/lib/swagger-explorer.ts index 81c261a24..8e0de6913 100644 --- a/lib/swagger-explorer.ts +++ b/lib/swagger-explorer.ts @@ -36,6 +36,7 @@ import { DECORATORS } from './constants'; import { exploreApiCallbacksMetadata } from './explorers/api-callbacks.explorer'; import { exploreApiExcludeControllerMetadata } from './explorers/api-exclude-controller.explorer'; import { exploreApiExcludeEndpointMetadata } from './explorers/api-exclude-endpoint.explorer'; +import { exploreApiIncludeEndpointMetadata } from './explorers/api-include-endpoint.explorer'; import { exploreApiExtraModelsMetadata, exploreGlobalApiExtraModelsMetadata @@ -113,6 +114,7 @@ export class SwaggerExplorer { fieldKey: string ) => string; autoTagControllers?: boolean; + onlyIncludeDecoratedEndpoints?: boolean; } ) { const { operationIdFactory, linkNameFactory } = options; @@ -167,6 +169,7 @@ export class SwaggerExplorer { modulePath?: string; globalPrefix?: string; autoTagControllers?: boolean; + onlyIncludeDecoratedEndpoints?: boolean; } ): DenormalizedDoc[] { // eslint-disable-next-line @typescript-eslint/no-this-alias @@ -187,6 +190,14 @@ export class SwaggerExplorer { DenormalizedDoc[] >(instance, prototype, (name) => { const targetCallback = prototype[name]; + const includeEndpoint = exploreApiIncludeEndpointMetadata( + instance, + prototype, + targetCallback + ); + if (options.onlyIncludeDecoratedEndpoints && !includeEndpoint) { + return; + } const excludeEndpoint = exploreApiExcludeEndpointMetadata( instance, prototype, diff --git a/lib/swagger-scanner.ts b/lib/swagger-scanner.ts index 168204c9d..c14241dd8 100644 --- a/lib/swagger-scanner.ts +++ b/lib/swagger-scanner.ts @@ -41,7 +41,8 @@ export class SwaggerScanner { ignoreGlobalPrefix = false, operationIdFactory, linkNameFactory, - autoTagControllers = true + autoTagControllers = true, + onlyIncludeDecoratedEndpoints = false } = options; const untypedApp = app as any; @@ -80,7 +81,8 @@ export class SwaggerScanner { globalPrefix, operationIdFactory, linkNameFactory, - autoTagControllers + autoTagControllers, + onlyIncludeDecoratedEndpoints }) ); }); @@ -92,7 +94,8 @@ export class SwaggerScanner { globalPrefix, operationIdFactory, linkNameFactory, - autoTagControllers + autoTagControllers, + onlyIncludeDecoratedEndpoints }) ); } @@ -122,6 +125,7 @@ export class SwaggerScanner { fieldKey: string ) => string; autoTagControllers?: boolean; + onlyIncludeDecoratedEndpoints?: boolean; } ): ModuleRoute[] { const denormalizedArray = [...controller.values()].map((ctrl) => diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..1656b1287 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,7846 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@microsoft/tsdoc': + specifier: 0.15.1 + version: 0.15.1 + '@nestjs/mapped-types': + specifier: 2.1.0 + version: 2.1.0(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2) + js-yaml: + specifier: 4.1.0 + version: 4.1.0 + lodash: + specifier: 4.17.21 + version: 4.17.21 + path-to-regexp: + specifier: 8.3.0 + version: 8.3.0 + swagger-ui-dist: + specifier: 5.29.4 + version: 5.29.4 + devDependencies: + '@commitlint/cli': + specifier: 20.1.0 + version: 20.1.0(@types/node@22.18.12)(typescript@5.9.3) + '@commitlint/config-angular': + specifier: 20.0.0 + version: 20.0.0 + '@eslint/eslintrc': + specifier: 3.3.1 + version: 3.3.1 + '@eslint/js': + specifier: 9.38.0 + version: 9.38.0 + '@fastify/static': + specifier: 8.3.0 + version: 8.3.0 + '@nestjs/common': + specifier: 11.1.7 + version: 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': + specifier: 11.1.7 + version: 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/platform-express': + specifier: 11.1.7 + version: 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7) + '@nestjs/platform-fastify': + specifier: 11.1.7 + version: 11.1.7(@fastify/static@8.3.0)(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7) + '@types/jest': + specifier: 30.0.0 + version: 30.0.0 + '@types/js-yaml': + specifier: 4.0.9 + version: 4.0.9 + '@types/lodash': + specifier: 4.17.20 + version: 4.17.20 + '@types/node': + specifier: 22.18.12 + version: 22.18.12 + class-transformer: + specifier: 0.5.1 + version: 0.5.1 + class-validator: + specifier: 0.14.2 + version: 0.14.2 + eslint: + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) + eslint-config-prettier: + specifier: 10.1.8 + version: 10.1.8(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-prettier: + specifier: 5.5.4 + version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2) + express: + specifier: 5.1.0 + version: 5.1.0 + fastify: + specifier: 5.6.1 + version: 5.6.1 + globals: + specifier: 16.4.0 + version: 16.4.0 + husky: + specifier: 9.1.7 + version: 9.1.7 + jest: + specifier: 30.2.0 + version: 30.2.0(@types/node@22.18.12) + lerna-changelog: + specifier: 2.2.0 + version: 2.2.0 + lint-staged: + specifier: 16.2.6 + version: 16.2.6 + openapi-types: + specifier: 12.1.3 + version: 12.1.3 + prettier: + specifier: 3.6.2 + version: 3.6.2 + prettier-v2: + specifier: npm:prettier@2.8.8 + version: prettier@2.8.8 + reflect-metadata: + specifier: 0.2.2 + version: 0.2.2 + release-it: + specifier: 19.0.5 + version: 19.0.5(@types/node@22.18.12) + supertest: + specifier: 7.1.4 + version: 7.1.4 + swagger-parser: + specifier: 10.0.3 + version: 10.0.3(openapi-types@12.1.3) + ts-jest: + specifier: 29.4.5 + version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.18.12))(typescript@5.9.3) + typescript: + specifier: 5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: 8.46.2 + version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + +packages: + + '@apidevtools/json-schema-ref-parser@9.1.2': + resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==} + + '@apidevtools/openapi-schemas@2.1.0': + resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} + engines: {node: '>=10'} + + '@apidevtools/swagger-methods@3.0.2': + resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} + + '@apidevtools/swagger-parser@10.0.3': + resolution: {integrity: sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==} + peerDependencies: + openapi-types: '>=7' + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@borewit/text-codec@0.1.1': + resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} + + '@commitlint/cli@20.1.0': + resolution: {integrity: sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-angular-type-enum@20.0.0': + resolution: {integrity: sha512-6HAMnXyUl3EUBgECjvfLzlghbkMfZx28YBPDry3pPWR0+xpzqSbUY19VIkmdetqYKeawFViudvkqD4VH93gKKg==} + engines: {node: '>=v18'} + + '@commitlint/config-angular@20.0.0': + resolution: {integrity: sha512-vH+mHsvZl94HQNduYv7ImTSX+D+nIyMV2VQZNQq9x0Kf5kRhl4iwdNS3nDxb3KEIdaSOXtXizzsyohRfi3Bvag==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@20.0.0': + resolution: {integrity: sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==} + engines: {node: '>=v18'} + + '@commitlint/ensure@20.0.0': + resolution: {integrity: sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@20.0.0': + resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} + engines: {node: '>=v18'} + + '@commitlint/format@20.0.0': + resolution: {integrity: sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@20.0.0': + resolution: {integrity: sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==} + engines: {node: '>=v18'} + + '@commitlint/lint@20.0.0': + resolution: {integrity: sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==} + engines: {node: '>=v18'} + + '@commitlint/load@20.1.0': + resolution: {integrity: sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==} + engines: {node: '>=v18'} + + '@commitlint/message@20.0.0': + resolution: {integrity: sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==} + engines: {node: '>=v18'} + + '@commitlint/parse@20.0.0': + resolution: {integrity: sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==} + engines: {node: '>=v18'} + + '@commitlint/read@20.0.0': + resolution: {integrity: sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@20.1.0': + resolution: {integrity: sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==} + engines: {node: '>=v18'} + + '@commitlint/rules@20.0.0': + resolution: {integrity: sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@20.0.0': + resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} + engines: {node: '>=v18'} + + '@commitlint/top-level@20.0.0': + resolution: {integrity: sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==} + engines: {node: '>=v18'} + + '@commitlint/types@20.0.0': + resolution: {integrity: sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==} + engines: {node: '>=v18'} + + '@emnapi/core@1.6.0': + resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} + + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + 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.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.1': + resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.38.0': + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@fastify/accept-negotiator@2.0.1': + resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} + + '@fastify/ajv-compiler@4.0.5': + resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==} + + '@fastify/cors@11.1.0': + resolution: {integrity: sha512-sUw8ed8wP2SouWZTIbA7V2OQtMNpLj2W6qJOYhNdcmINTu6gsxVYXjQiM9mdi8UUDlcoDDJ/W2syPo1WB2QjYA==} + + '@fastify/error@4.2.0': + resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==} + + '@fastify/fast-json-stringify-compiler@5.0.3': + resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==} + + '@fastify/formbody@8.0.2': + resolution: {integrity: sha512-84v5J2KrkXzjgBpYnaNRPqwgMsmY7ZDjuj0YVuMR3NXCJRCgKEZy/taSP1wUYGn0onfxJpLyRGDLa+NMaDJtnA==} + + '@fastify/forwarded@3.0.1': + resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==} + + '@fastify/merge-json-schemas@0.2.1': + resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} + + '@fastify/middie@9.0.3': + resolution: {integrity: sha512-7OYovKXp9UKYeVMcjcFLMcSpoMkmcZmfnG+eAvtdiatN35W7c+r9y1dRfpA+pfFVNuHGGqI3W+vDTmjvcfLcMA==} + + '@fastify/proxy-addr@5.1.0': + resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==} + + '@fastify/send@4.1.0': + resolution: {integrity: sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==} + + '@fastify/static@8.3.0': + resolution: {integrity: sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA==} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@inquirer/ansi@1.0.1': + resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.3.0': + resolution: {integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.19': + resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.0': + resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.21': + resolution: {integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.21': + resolution: {integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.14': + resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} + engines: {node: '>=18'} + + '@inquirer/input@4.2.5': + resolution: {integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.21': + resolution: {integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.21': + resolution: {integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.9.0': + resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.9': + resolution: {integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.2.0': + resolution: {integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.4.0': + resolution: {integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.9': + resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@30.2.0': + resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/core@30.2.0': + resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/diff-sequences@30.0.1': + resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/environment@30.2.0': + resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/expect-utils@30.2.0': + resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/expect@30.2.0': + resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/fake-timers@30.2.0': + resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/get-type@30.1.0': + resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/globals@30.2.0': + resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/pattern@30.0.1': + resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/reporters@30.2.0': + resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@30.0.5': + resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/snapshot-utils@30.2.0': + resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/source-map@30.0.1': + resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/test-result@30.2.0': + resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/test-sequencer@30.2.0': + resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/transform@30.2.0': + resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/types@30.2.0': + resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + engines: {node: '>=8'} + + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + + '@nestjs/common@11.1.7': + resolution: {integrity: sha512-lwlObwGgIlpXSXYOTpfzdCepUyWomz6bv9qzGzzvpgspUxkj0Uz0fUJcvD44V8Ps7QhKW3lZBoYbXrH25UZrbA==} + peerDependencies: + class-transformer: '>=0.4.1' + class-validator: '>=0.13.2' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/core@11.1.7': + resolution: {integrity: sha512-TyXFOwjhHv/goSgJ8i20K78jwTM0iSpk9GBcC2h3mf4MxNy+znI8m7nWjfoACjTkb89cTwDQetfTHtSfGLLaiA==} + engines: {node: '>= 20'} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/microservices': ^11.0.0 + '@nestjs/platform-express': ^11.0.0 + '@nestjs/websockets': ^11.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + + '@nestjs/mapped-types@2.1.0': + resolution: {integrity: sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/platform-express@11.1.7': + resolution: {integrity: sha512-5T+GLdvTiGPKB4/P4PM9ftKUKNHJy8ThEFhZA3vQnXVL7Vf0rDr07TfVTySVu+XTh85m1lpFVuyFM6u6wLNsRA==} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + + '@nestjs/platform-fastify@11.1.7': + resolution: {integrity: sha512-JXWPWf3sStV/N/AXkUg3+SKOEbcwPCm7S9aPbVkc3oOnXUeMvSowmIzFJ6+TZeuoGMc+4X42ZzpR74P5vPzDKQ==} + peerDependencies: + '@fastify/static': ^8.0.0 + '@fastify/view': ^10.0.0 || ^11.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + '@fastify/view': + optional: true + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nodeutils/defaults-deep@1.1.0': + resolution: {integrity: sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==} + + '@npmcli/fs@1.1.1': + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + + '@npmcli/move-file@1.1.2': + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + + '@nuxt/opencollective@0.4.1': + resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} + engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} + hasBin: true + + '@octokit/auth-token@6.0.0': + resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} + engines: {node: '>= 20'} + + '@octokit/core@7.0.5': + resolution: {integrity: sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==} + engines: {node: '>= 20'} + + '@octokit/endpoint@11.0.1': + resolution: {integrity: sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==} + engines: {node: '>= 20'} + + '@octokit/graphql@9.0.2': + resolution: {integrity: sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==} + engines: {node: '>= 20'} + + '@octokit/openapi-types@26.0.0': + resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} + + '@octokit/plugin-paginate-rest@13.2.1': + resolution: {integrity: sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@6.0.0': + resolution: {integrity: sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@16.1.1': + resolution: {integrity: sha512-VztDkhM0ketQYSh5Im3IcKWFZl7VIrrsCaHbDINkdYeiiAsJzjhS2xRFCSJgfN6VOcsoW4laMtsmf3HcNqIimg==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/request-error@7.0.1': + resolution: {integrity: sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==} + engines: {node: '>= 20'} + + '@octokit/request@10.0.5': + resolution: {integrity: sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==} + engines: {node: '>= 20'} + + '@octokit/rest@22.0.0': + resolution: {integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==} + engines: {node: '>= 20'} + + '@octokit/types@15.0.1': + resolution: {integrity: sha512-sdiirM93IYJ9ODDCBgmRPIboLbSkpLa5i+WLuXH8b8Atg+YMLAyLvDDhNWLV4OYd08tlvYfVm/dw88cqHWtw1Q==} + + '@paralleldrive/cuid2@2.2.2': + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + + '@phun-ky/typeof@2.0.3': + resolution: {integrity: sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==} + engines: {node: ^20.9.0 || >=22.0.0, npm: '>=10.8.2'} + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + + '@sinclair/typebox@0.34.41': + resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@13.0.5': + resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + + '@tokenizer/inflate@0.2.7': + resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/conventional-commits-parser@5.0.2': + resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@30.0.0': + resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} + + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + + '@types/node@22.18.12': + resolution: {integrity: sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==} + + '@types/parse-path@7.1.0': + resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} + deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/validator@13.15.3': + resolution: {integrity: sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.34': + resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} + + '@typescript-eslint/eslint-plugin@8.46.2': + resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.2 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.46.2': + resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.46.2': + resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.46.2': + resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.46.2': + resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.46.2': + resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.46.2': + resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.46.2': + resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.46.2': + resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.46.2': + resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.1.1: + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + 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'} + + avvio@9.1.0: + resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} + + babel-jest@30.2.0: + resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 || ^8.0.0-0 + + babel-plugin-istanbul@7.0.1: + resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} + engines: {node: '>=12'} + + babel-plugin-jest-hoist@30.2.0: + resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + babel-preset-current-node-syntax@1.2.0: + resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} + peerDependencies: + '@babel/core': ^7.0.0 || ^8.0.0-0 + + babel-preset-jest@30.2.0: + resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 || ^8.0.0-beta.1 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.8.20: + resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} + hasBin: true + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + before-after-hook@4.0.0: + resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} + + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.27.0: + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + c12@3.3.0: + resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + cacache@15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + 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@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + cjs-module-lexer@2.1.0: + resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} + + class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + + class-validator@0.14.2: + resolution: {integrity: sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + cli-spinners@3.3.0: + resolution: {integrity: sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==} + engines: {node: '>=18.20'} + + cli-truncate@5.1.1: + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} + engines: {node: '>=20'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.3: + resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + engines: {node: '>=20'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig-typescript-loader@6.2.0: + resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + 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'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + delayed-stream@1.0.0: + 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'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + 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.240: + resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.38.0: + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + 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'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eta@4.0.1: + resolution: {integrity: sha512-0h0oBEsF6qAJU7eu9ztvJoTo8D2PAq/4FvXVIQA1fek3WOTe6KPsVJycekG1+g1N6mfpblkheoGwaUhMtnlH4A==} + engines: {node: '>=20'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + 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'} + + exit-x@0.2.2: + resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} + engines: {node: '>= 0.8.0'} + + expect@30.2.0: + resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + + fast-content-type-parse@3.0.0: + resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + 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.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-json-stringify@6.1.1: + resolution: {integrity: sha512-DbgptncYEXZqDUOEl4krff4mUiVrTZZVI7BBrQR/T3BqMj/eM1flTC1Uk2uUoLcWCxjT95xKulV/Lc6hhOZsBQ==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastify-plugin@5.1.0: + resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} + + fastify@5.6.1: + resolution: {integrity: sha512-WjjlOciBF0K8pDUPZoGPhqhKrQJ02I8DKaDIfO51EL0kbSMwQFl85cRwhOvmSDWoukNOdTo27gLN549pLCcH7Q==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-type@21.0.0: + resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} + engines: {node: '>=20'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + + find-my-way@9.3.0: + resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==} + engines: {node: '>=20'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + formidable@3.5.4: + resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} + engines: {node: '>=14.0.0'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + 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-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} + engines: {node: '>= 14'} + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + + git-up@8.1.1: + resolution: {integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==} + + git-url-parse@16.1.0: + resolution: {integrity: sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==} + + 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@11.0.3: + resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + 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'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + 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'} + + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer@12.9.6: + resolution: {integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-ssh@1.4.1: + resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} + + 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-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + issue-parser@7.0.1: + resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} + engines: {node: ^18.17 || >=20.6.1} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + 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.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + + jest-changed-files@30.2.0: + resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-circus@30.2.0: + resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-cli@30.2.0: + resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@30.2.0: + resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@types/node': '*' + esbuild-register: '>=3.4.0' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + esbuild-register: + optional: true + ts-node: + optional: true + + jest-diff@30.2.0: + resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-docblock@30.2.0: + resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-each@30.2.0: + resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-environment-node@30.2.0: + resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-haste-map@30.2.0: + resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-leak-detector@30.2.0: + resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-matcher-utils@30.2.0: + resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-message-util@30.2.0: + resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-mock@30.2.0: + resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@30.0.1: + resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-resolve-dependencies@30.2.0: + resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-resolve@30.2.0: + resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-runner@30.2.0: + resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-runtime@30.2.0: + resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-snapshot@30.2.0: + resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-util@30.2.0: + resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-validate@30.2.0: + resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-watcher@30.2.0: + resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-worker@30.2.0: + resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest@30.2.0: + resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-ref-resolver@3.0.0: + resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==} + + 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 + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + lerna-changelog@2.2.0: + resolution: {integrity: sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ==} + engines: {node: 12.* || 14.* || >= 16} + hasBin: true + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + libphonenumber-js@1.12.24: + resolution: {integrity: sha512-l5IlyL9AONj4voSd7q9xkuQOL4u8Ty44puTic7J88CmdXkxfGsRfoVLXHCxppwehgpb/Chdb80FFehHqjN3ItQ==} + + light-my-request@6.6.0: + resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@16.2.6: + resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} + + load-esm@1.0.3: + resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==} + engines: {node: '>=13.2.0'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + 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.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.capitalize@4.2.1: + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} + + lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + macos-release@3.4.0: + resolution: {integrity: sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + 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==} + + make-fetch-happen@9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + 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'} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.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'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multer@2.0.2: + resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} + engines: {node: '>= 10.16.0'} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nano-spawn@2.0.0: + resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} + engines: {node: '>=20.17'} + + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + new-github-release-url@2.0.0: + resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.26: + resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + + normalize-path@3.0.0: + 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} + + nypm@0.6.2: + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + 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'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@9.0.0: + resolution: {integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==} + engines: {node: '>=20'} + + os-name@6.1.0: + resolution: {integrity: sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==} + engines: {node: '>=18'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-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'} + + p-locate@5.0.0: + 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@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-path@7.1.0: + resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} + + parse-url@9.2.0: + resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} + engines: {node: '>=14.13.0'} + + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + 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'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@2.0.0: + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.14.0: + resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} + hasBin: true + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + 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'} + hasBin: true + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@30.2.0: + resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + protocols@2.0.2: + resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@7.0.1: + resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.1: + resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + engines: {node: '>= 0.10'} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + release-it@19.0.5: + resolution: {integrity: sha512-bYlUKC0TQroBKi8jQUeoxLHql4d9Fx/2EQLHPKUobXTNSiTS2WY8vlgdHZRhRjVEMyAWwyadJVKfFZnRJuRn4Q==} + engines: {node: ^20.12.0 || >=22.0.0} + hasBin: true + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + 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'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + ret@0.5.0: + resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} + engines: {node: '>=10'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + run-async@4.0.6: + resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex2@5.0.0: + resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + 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-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + 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-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strtok3@10.3.4: + resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} + engines: {node: '>=18'} + + superagent@10.2.3: + resolution: {integrity: sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==} + engines: {node: '>=14.18.0'} + + supertest@7.1.4: + resolution: {integrity: sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==} + engines: {node: '>=14.18.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + swagger-parser@10.0.3: + resolution: {integrity: sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==} + engines: {node: '>=10'} + + swagger-ui-dist@5.29.4: + resolution: {integrity: sha512-gJFDz/gyLOCQtWwAgqs6Rk78z9ONnqTnlW11gimG9nLap8drKa3AJBKpzIQMIjl5PD2Ix+Tn+mc/tfoT2tgsng==} + + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@6.1.1: + resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} + engines: {node: '>=14.16'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-jest@29.4.5: + resolution: {integrity: sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 || ^30.0.0 + '@jest/types': ^29.0.0 || ^30.0.0 + babel-jest: ^29.0.0 || ^30.0.0 + esbuild: '*' + jest: ^29.0.0 || ^30.0.0 + jest-util: ^29.0.0 || ^30.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + jest-util: + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript-eslint@8.46.2: + resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + 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@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici@6.21.3: + resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + engines: {node: '>=18.17'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + + unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validator@13.15.15: + resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wildcard-match@5.1.4: + resolution: {integrity: sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==} + + windows-release@6.1.0: + resolution: {integrity: sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==} + engines: {node: '>=18'} + + 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==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + +snapshots: + + '@apidevtools/json-schema-ref-parser@9.1.2': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + call-me-maybe: 1.0.2 + js-yaml: 4.1.0 + + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@apidevtools/swagger-parser@10.0.3(openapi-types@12.1.3)': + dependencies: + '@apidevtools/json-schema-ref-parser': 9.1.2 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + z-schema: 5.0.5 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.27.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@bcoe/v8-coverage@0.2.3': {} + + '@borewit/text-codec@0.1.1': {} + + '@commitlint/cli@20.1.0(@types/node@22.18.12)(typescript@5.9.3)': + dependencies: + '@commitlint/format': 20.0.0 + '@commitlint/lint': 20.0.0 + '@commitlint/load': 20.1.0(@types/node@22.18.12)(typescript@5.9.3) + '@commitlint/read': 20.0.0 + '@commitlint/types': 20.0.0 + tinyexec: 1.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-angular-type-enum@20.0.0': {} + + '@commitlint/config-angular@20.0.0': + dependencies: + '@commitlint/config-angular-type-enum': 20.0.0 + + '@commitlint/config-validator@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + ajv: 8.17.1 + + '@commitlint/ensure@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@20.0.0': {} + + '@commitlint/format@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + chalk: 5.6.2 + + '@commitlint/is-ignored@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + semver: 7.7.3 + + '@commitlint/lint@20.0.0': + dependencies: + '@commitlint/is-ignored': 20.0.0 + '@commitlint/parse': 20.0.0 + '@commitlint/rules': 20.0.0 + '@commitlint/types': 20.0.0 + + '@commitlint/load@20.1.0(@types/node@22.18.12)(typescript@5.9.3)': + dependencies: + '@commitlint/config-validator': 20.0.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.1.0 + '@commitlint/types': 20.0.0 + chalk: 5.6.2 + cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.2.0(@types/node@22.18.12)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@20.0.0': {} + + '@commitlint/parse@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@20.0.0': + dependencies: + '@commitlint/top-level': 20.0.0 + '@commitlint/types': 20.0.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 1.0.1 + + '@commitlint/resolve-extends@20.1.0': + dependencies: + '@commitlint/config-validator': 20.0.0 + '@commitlint/types': 20.0.0 + global-directory: 4.0.1 + import-meta-resolve: 4.2.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@20.0.0': + dependencies: + '@commitlint/ensure': 20.0.0 + '@commitlint/message': 20.0.0 + '@commitlint/to-lines': 20.0.0 + '@commitlint/types': 20.0.0 + + '@commitlint/to-lines@20.0.0': {} + + '@commitlint/top-level@20.0.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@20.0.0': + dependencies: + '@types/conventional-commits-parser': 5.0.2 + chalk: 5.6.2 + + '@emnapi/core@1.6.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.6.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': + dependencies: + eslint: 9.38.0(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.1': + dependencies: + '@eslint/core': 0.16.0 + + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.38.0': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + + '@fastify/accept-negotiator@2.0.1': {} + + '@fastify/ajv-compiler@4.0.5': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + fast-uri: 3.1.0 + + '@fastify/cors@11.1.0': + dependencies: + fastify-plugin: 5.1.0 + toad-cache: 3.7.0 + + '@fastify/error@4.2.0': {} + + '@fastify/fast-json-stringify-compiler@5.0.3': + dependencies: + fast-json-stringify: 6.1.1 + + '@fastify/formbody@8.0.2': + dependencies: + fast-querystring: 1.1.2 + fastify-plugin: 5.1.0 + + '@fastify/forwarded@3.0.1': {} + + '@fastify/merge-json-schemas@0.2.1': + dependencies: + dequal: 2.0.3 + + '@fastify/middie@9.0.3': + dependencies: + '@fastify/error': 4.2.0 + fastify-plugin: 5.1.0 + path-to-regexp: 8.3.0 + reusify: 1.1.0 + + '@fastify/proxy-addr@5.1.0': + dependencies: + '@fastify/forwarded': 3.0.1 + ipaddr.js: 2.2.0 + + '@fastify/send@4.1.0': + dependencies: + '@lukeed/ms': 2.0.2 + escape-html: 1.0.3 + fast-decode-uri-component: 1.0.1 + http-errors: 2.0.0 + mime: 3.0.0 + + '@fastify/static@8.3.0': + dependencies: + '@fastify/accept-negotiator': 2.0.1 + '@fastify/send': 4.1.0 + content-disposition: 0.5.4 + fastify-plugin: 5.1.0 + fastq: 1.19.1 + glob: 11.0.3 + + '@gar/promisify@1.1.3': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@inquirer/ansi@1.0.1': {} + + '@inquirer/checkbox@4.3.0(@types/node@22.18.12)': + dependencies: + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.12) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/confirm@5.1.19(@types/node@22.18.12)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/core@10.3.0(@types/node@22.18.12)': + dependencies: + '@inquirer/ansi': 1.0.1 + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.12) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/editor@4.2.21(@types/node@22.18.12)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/external-editor': 1.0.2(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/expand@4.0.21(@types/node@22.18.12)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/external-editor@1.0.2(@types/node@22.18.12)': + dependencies: + chardet: 2.1.0 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/figures@1.0.14': {} + + '@inquirer/input@4.2.5(@types/node@22.18.12)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/number@3.0.21(@types/node@22.18.12)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/password@4.0.21(@types/node@22.18.12)': + dependencies: + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/prompts@7.9.0(@types/node@22.18.12)': + dependencies: + '@inquirer/checkbox': 4.3.0(@types/node@22.18.12) + '@inquirer/confirm': 5.1.19(@types/node@22.18.12) + '@inquirer/editor': 4.2.21(@types/node@22.18.12) + '@inquirer/expand': 4.0.21(@types/node@22.18.12) + '@inquirer/input': 4.2.5(@types/node@22.18.12) + '@inquirer/number': 3.0.21(@types/node@22.18.12) + '@inquirer/password': 4.0.21(@types/node@22.18.12) + '@inquirer/rawlist': 4.1.9(@types/node@22.18.12) + '@inquirer/search': 3.2.0(@types/node@22.18.12) + '@inquirer/select': 4.4.0(@types/node@22.18.12) + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/rawlist@4.1.9(@types/node@22.18.12)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/search@3.2.0(@types/node@22.18.12)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.12) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/select@4.4.0(@types/node@22.18.12)': + dependencies: + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.12) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.18.12 + + '@inquirer/type@3.0.9(@types/node@22.18.12)': + optionalDependencies: + '@types/node': 22.18.12 + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@30.2.0': + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + chalk: 4.1.2 + jest-message-util: 30.2.0 + jest-util: 30.2.0 + slash: 3.0.0 + + '@jest/core@30.2.0': + dependencies: + '@jest/console': 30.2.0 + '@jest/pattern': 30.0.1 + '@jest/reporters': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 4.3.1 + exit-x: 0.2.2 + graceful-fs: 4.2.11 + jest-changed-files: 30.2.0 + jest-config: 30.2.0(@types/node@22.18.12) + jest-haste-map: 30.2.0 + jest-message-util: 30.2.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.2.0 + jest-resolve-dependencies: 30.2.0 + jest-runner: 30.2.0 + jest-runtime: 30.2.0 + jest-snapshot: 30.2.0 + jest-util: 30.2.0 + jest-validate: 30.2.0 + jest-watcher: 30.2.0 + micromatch: 4.0.8 + pretty-format: 30.2.0 + slash: 3.0.0 + transitivePeerDependencies: + - babel-plugin-macros + - esbuild-register + - supports-color + - ts-node + + '@jest/diff-sequences@30.0.1': {} + + '@jest/environment@30.2.0': + dependencies: + '@jest/fake-timers': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + jest-mock: 30.2.0 + + '@jest/expect-utils@30.2.0': + dependencies: + '@jest/get-type': 30.1.0 + + '@jest/expect@30.2.0': + dependencies: + expect: 30.2.0 + jest-snapshot: 30.2.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@30.2.0': + dependencies: + '@jest/types': 30.2.0 + '@sinonjs/fake-timers': 13.0.5 + '@types/node': 22.18.12 + jest-message-util: 30.2.0 + jest-mock: 30.2.0 + jest-util: 30.2.0 + + '@jest/get-type@30.1.0': {} + + '@jest/globals@30.2.0': + dependencies: + '@jest/environment': 30.2.0 + '@jest/expect': 30.2.0 + '@jest/types': 30.2.0 + jest-mock: 30.2.0 + transitivePeerDependencies: + - supports-color + + '@jest/pattern@30.0.1': + dependencies: + '@types/node': 22.18.12 + jest-regex-util: 30.0.1 + + '@jest/reporters@30.2.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 22.18.12 + chalk: 4.1.2 + collect-v8-coverage: 1.0.3 + exit-x: 0.2.2 + glob: 10.4.5 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + jest-message-util: 30.2.0 + jest-util: 30.2.0 + jest-worker: 30.2.0 + slash: 3.0.0 + string-length: 4.0.2 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@30.0.5': + dependencies: + '@sinclair/typebox': 0.34.41 + + '@jest/snapshot-utils@30.2.0': + dependencies: + '@jest/types': 30.2.0 + chalk: 4.1.2 + graceful-fs: 4.2.11 + natural-compare: 1.4.0 + + '@jest/source-map@30.0.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@30.2.0': + dependencies: + '@jest/console': 30.2.0 + '@jest/types': 30.2.0 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.3 + + '@jest/test-sequencer@30.2.0': + dependencies: + '@jest/test-result': 30.2.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + slash: 3.0.0 + + '@jest/transform@30.2.0': + dependencies: + '@babel/core': 7.28.5 + '@jest/types': 30.2.0 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 7.0.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + jest-regex-util: 30.0.1 + jest-util: 30.2.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + + '@jest/types@30.2.0': + dependencies: + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.5 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.18.12 + '@types/yargs': 17.0.34 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jsdevtools/ono@7.1.3': {} + + '@lukeed/csprng@1.1.0': {} + + '@lukeed/ms@2.0.2': {} + + '@microsoft/tsdoc@0.15.1': {} + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.6.0 + '@emnapi/runtime': 1.6.0 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + file-type: 21.0.0 + iterare: 1.2.1 + load-esm: 1.0.3 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.2 + transitivePeerDependencies: + - supports-color + + '@nestjs/core@11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nuxt/opencollective': 0.4.1 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 8.3.0 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + optionalDependencies: + '@nestjs/platform-express': 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7) + + '@nestjs/mapped-types@2.1.0(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)': + dependencies: + '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) + reflect-metadata: 0.2.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.2 + + '@nestjs/platform-express@11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7)': + dependencies: + '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2) + cors: 2.8.5 + express: 5.1.0 + multer: 2.0.2 + path-to-regexp: 8.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@nestjs/platform-fastify@11.1.7(@fastify/static@8.3.0)(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7)': + dependencies: + '@fastify/cors': 11.1.0 + '@fastify/formbody': 8.0.2 + '@fastify/middie': 9.0.3 + '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2) + fast-querystring: 1.1.2 + fastify: 5.6.1 + light-my-request: 6.6.0 + path-to-regexp: 8.3.0 + tslib: 2.8.1 + optionalDependencies: + '@fastify/static': 8.3.0 + + '@noble/hashes@1.8.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nodeutils/defaults-deep@1.1.0': + dependencies: + lodash: 4.17.21 + + '@npmcli/fs@1.1.1': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.7.3 + + '@npmcli/move-file@1.1.2': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + + '@nuxt/opencollective@0.4.1': + dependencies: + consola: 3.4.2 + + '@octokit/auth-token@6.0.0': {} + + '@octokit/core@7.0.5': + dependencies: + '@octokit/auth-token': 6.0.0 + '@octokit/graphql': 9.0.2 + '@octokit/request': 10.0.5 + '@octokit/request-error': 7.0.1 + '@octokit/types': 15.0.1 + before-after-hook: 4.0.0 + universal-user-agent: 7.0.3 + + '@octokit/endpoint@11.0.1': + dependencies: + '@octokit/types': 15.0.1 + universal-user-agent: 7.0.3 + + '@octokit/graphql@9.0.2': + dependencies: + '@octokit/request': 10.0.5 + '@octokit/types': 15.0.1 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@26.0.0': {} + + '@octokit/plugin-paginate-rest@13.2.1(@octokit/core@7.0.5)': + dependencies: + '@octokit/core': 7.0.5 + '@octokit/types': 15.0.1 + + '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.5)': + dependencies: + '@octokit/core': 7.0.5 + + '@octokit/plugin-rest-endpoint-methods@16.1.1(@octokit/core@7.0.5)': + dependencies: + '@octokit/core': 7.0.5 + '@octokit/types': 15.0.1 + + '@octokit/request-error@7.0.1': + dependencies: + '@octokit/types': 15.0.1 + + '@octokit/request@10.0.5': + dependencies: + '@octokit/endpoint': 11.0.1 + '@octokit/request-error': 7.0.1 + '@octokit/types': 15.0.1 + fast-content-type-parse: 3.0.0 + universal-user-agent: 7.0.3 + + '@octokit/rest@22.0.0': + dependencies: + '@octokit/core': 7.0.5 + '@octokit/plugin-paginate-rest': 13.2.1(@octokit/core@7.0.5) + '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.5) + '@octokit/plugin-rest-endpoint-methods': 16.1.1(@octokit/core@7.0.5) + + '@octokit/types@15.0.1': + dependencies: + '@octokit/openapi-types': 26.0.0 + + '@paralleldrive/cuid2@2.2.2': + dependencies: + '@noble/hashes': 1.8.0 + + '@phun-ky/typeof@2.0.3': {} + + '@pinojs/redact@0.4.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.2.9': {} + + '@scarf/scarf@1.4.0': {} + + '@sinclair/typebox@0.34.41': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@13.0.5': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@tokenizer/inflate@0.2.7': + dependencies: + debug: 4.4.3 + fflate: 0.8.2 + token-types: 6.1.1 + transitivePeerDependencies: + - supports-color + + '@tokenizer/token@0.3.0': {} + + '@tootallnate/once@1.1.2': {} + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/conventional-commits-parser@5.0.2': + dependencies: + '@types/node': 22.18.12 + + '@types/estree@1.0.8': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@30.0.0': + dependencies: + expect: 30.2.0 + pretty-format: 30.2.0 + + '@types/js-yaml@4.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash@4.17.20': {} + + '@types/node@22.18.12': + dependencies: + undici-types: 6.21.0 + + '@types/parse-path@7.1.0': + dependencies: + parse-path: 7.1.0 + + '@types/stack-utils@2.0.3': {} + + '@types/validator@13.15.3': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.34': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 + eslint: 9.38.0(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + eslint: 9.38.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.38.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.46.2': {} + + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + eslint-visitor-keys: 4.2.1 + + '@ungap/structured-clone@1.3.0': {} + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + abstract-logging@2.0.1: {} + + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + agent-base@7.1.4: {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + 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 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.1.1: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.3: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + append-field@1.0.0: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-ify@1.0.0: {} + + asap@2.0.6: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + avvio@9.1.0: + dependencies: + '@fastify/error': 4.2.0 + fastq: 1.19.1 + + babel-jest@30.2.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@jest/transform': 30.2.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 7.0.1 + babel-preset-jest: 30.2.0(@babel/core@7.28.5) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@7.0.1: + dependencies: + '@babel/helper-plugin-utils': 7.27.1 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 6.0.3 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@30.2.0: + dependencies: + '@types/babel__core': 7.20.5 + + babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) + + babel-preset-jest@30.2.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + babel-plugin-jest-hoist: 30.2.0 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.8.20: {} + + basic-ftp@5.0.5: {} + + before-after-hook@4.0.0: {} + + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.1 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.27.0: + dependencies: + baseline-browser-mapping: 2.8.20 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.240 + node-releases: 2.0.26 + update-browserslist-db: 1.1.4(browserslist@4.27.0) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytes@3.1.2: {} + + c12@3.3.0: + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 17.2.3 + exsolve: 1.0.7 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + + cacache@15.3.0: + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.2.1 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + call-me-maybe@1.0.2: {} + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001751: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + char-regex@1.0.2: {} + + chardet@2.1.0: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@2.0.0: {} + + ci-info@4.3.1: {} + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + cjs-module-lexer@2.1.0: {} + + class-transformer@0.5.1: {} + + class-validator@0.14.2: + dependencies: + '@types/validator': 13.15.3 + libphonenumber-js: 1.12.24 + validator: 13.15.15 + + clean-stack@2.2.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + + cli-spinners@3.3.0: {} + + cli-truncate@5.1.1: + dependencies: + slice-ansi: 7.1.2 + string-width: 8.1.0 + + cli-width@4.1.0: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + collect-v8-coverage@1.0.3: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@14.0.1: {} + + commander@9.5.0: + optional: true + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + component-emitter@1.3.1: {} + + concat-map@0.0.1: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + confbox@0.2.2: {} + + consola@3.4.2: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + convert-source-map@2.0.0: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + + cookie@1.0.2: {} + + cookiejar@2.1.4: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig-typescript-loader@6.2.0(@types/node@22.18.12)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): + dependencies: + '@types/node': 22.18.12 + cosmiconfig: 9.0.0(typescript@5.9.3) + jiti: 2.6.1 + typescript: 5.9.3 + + cosmiconfig@9.0.0(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + dargs@8.1.0: {} + + data-uri-to-buffer@6.0.2: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + dedent@1.7.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + define-lazy-prop@3.0.0: {} + + defu@6.1.4: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-newline@3.1.0: {} + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv@17.2.3: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.240: {} + + emittery@0.13.1: {} + + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@2.0.0: {} + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + err-code@2.0.3: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)): + dependencies: + eslint: 9.38.0(jiti@2.6.1) + + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2): + dependencies: + eslint: 9.38.0(jiti@2.6.1) + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.38.0(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.1 + '@eslint/core': 0.16.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.38.0 + '@eslint/plugin-kit': 0.4.0 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + 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: {} + + esutils@2.0.3: {} + + eta@4.0.1: {} + + etag@1.8.1: {} + + eventemitter3@5.0.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + 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.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + exit-x@0.2.2: {} + + expect@30.2.0: + dependencies: + '@jest/expect-utils': 30.2.0 + '@jest/get-type': 30.1.0 + jest-matcher-utils: 30.2.0 + jest-message-util: 30.2.0 + jest-mock: 30.2.0 + jest-util: 30.2.0 + + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.7: {} + + fast-content-type-parse@3.0.0: {} + + fast-decode-uri-component@1.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + 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 + + fast-json-stable-stringify@2.1.0: {} + + fast-json-stringify@6.1.1: + dependencies: + '@fastify/merge-json-schemas': 0.2.1 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + fast-uri: 3.1.0 + json-schema-ref-resolver: 3.0.0 + rfdc: 1.4.1 + + fast-levenshtein@2.0.6: {} + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-safe-stringify@2.1.1: {} + + fast-uri@3.1.0: {} + + fastify-plugin@5.1.0: {} + + fastify@5.6.1: + dependencies: + '@fastify/ajv-compiler': 4.0.5 + '@fastify/error': 4.2.0 + '@fastify/fast-json-stringify-compiler': 5.0.3 + '@fastify/proxy-addr': 5.1.0 + abstract-logging: 2.0.1 + avvio: 9.1.0 + fast-json-stringify: 6.1.1 + find-my-way: 9.3.0 + light-my-request: 6.6.0 + pino: 9.14.0 + process-warning: 5.0.0 + rfdc: 1.4.1 + secure-json-parse: 4.1.0 + semver: 7.7.3 + toad-cache: 3.7.0 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fflate@0.8.2: {} + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + file-type@21.0.0: + dependencies: + '@tokenizer/inflate': 0.2.7 + strtok3: 10.3.4 + token-types: 6.1.1 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@2.1.0: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + find-my-way@9.3.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 5.0.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formidable@3.5.4: + dependencies: + '@paralleldrive/cuid2': 2.2.2 + dezalgo: 1.0.4 + once: 1.4.0 + + forwarded@0.2.0: {} + + fresh@2.0.0: {} + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-uri@6.0.5: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + + git-up@8.1.1: + dependencies: + is-ssh: 1.4.1 + parse-url: 9.2.0 + + git-url-parse@16.1.0: + dependencies: + git-up: 8.1.1 + + 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.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@11.0.3: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.3 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + globals@14.0.0: {} + + globals@16.4.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + highlight.js@10.7.3: {} + + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + html-escaper@2.0.2: {} + + http-cache-semantics@4.2.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@4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + husky@9.1.7: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + import-meta-resolve@4.2.0: {} + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + infer-owner@1.0.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@4.1.1: {} + + inquirer@12.9.6(@types/node@22.18.12): + dependencies: + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.12) + '@inquirer/prompts': 7.9.0(@types/node@22.18.12) + '@inquirer/type': 3.0.9(@types/node@22.18.12) + mute-stream: 2.0.0 + run-async: 4.0.6 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 22.18.12 + + ip-address@10.0.1: {} + + ipaddr.js@1.9.1: {} + + ipaddr.js@2.2.0: {} + + is-arrayish@0.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.4.0 + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@2.0.0: {} + + is-lambda@1.0.1: {} + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-promise@4.0.0: {} + + is-ssh@1.4.1: + dependencies: + protocols: 2.0.2 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + + is-unicode-supported@2.1.0: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + issue-parser@7.0.1: + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + 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.31 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterare@1.2.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + + jest-changed-files@30.2.0: + dependencies: + execa: 5.1.1 + jest-util: 30.2.0 + p-limit: 3.1.0 + + jest-circus@30.2.0: + dependencies: + '@jest/environment': 30.2.0 + '@jest/expect': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.7.0 + is-generator-fn: 2.1.0 + jest-each: 30.2.0 + jest-matcher-utils: 30.2.0 + jest-message-util: 30.2.0 + jest-runtime: 30.2.0 + jest-snapshot: 30.2.0 + jest-util: 30.2.0 + p-limit: 3.1.0 + pretty-format: 30.2.0 + pure-rand: 7.0.1 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@30.2.0(@types/node@22.18.12): + dependencies: + '@jest/core': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/types': 30.2.0 + chalk: 4.1.2 + exit-x: 0.2.2 + import-local: 3.2.0 + jest-config: 30.2.0(@types/node@22.18.12) + jest-util: 30.2.0 + jest-validate: 30.2.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - esbuild-register + - supports-color + - ts-node + + jest-config@30.2.0(@types/node@22.18.12): + dependencies: + '@babel/core': 7.28.5 + '@jest/get-type': 30.1.0 + '@jest/pattern': 30.0.1 + '@jest/test-sequencer': 30.2.0 + '@jest/types': 30.2.0 + babel-jest: 30.2.0(@babel/core@7.28.5) + chalk: 4.1.2 + ci-info: 4.3.1 + deepmerge: 4.3.1 + glob: 10.4.5 + graceful-fs: 4.2.11 + jest-circus: 30.2.0 + jest-docblock: 30.2.0 + jest-environment-node: 30.2.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.2.0 + jest-runner: 30.2.0 + jest-util: 30.2.0 + jest-validate: 30.2.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 30.2.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.18.12 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@30.2.0: + dependencies: + '@jest/diff-sequences': 30.0.1 + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + pretty-format: 30.2.0 + + jest-docblock@30.2.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + '@jest/types': 30.2.0 + chalk: 4.1.2 + jest-util: 30.2.0 + pretty-format: 30.2.0 + + jest-environment-node@30.2.0: + dependencies: + '@jest/environment': 30.2.0 + '@jest/fake-timers': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + jest-mock: 30.2.0 + jest-util: 30.2.0 + jest-validate: 30.2.0 + + jest-haste-map@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 30.0.1 + jest-util: 30.2.0 + jest-worker: 30.2.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + pretty-format: 30.2.0 + + jest-matcher-utils@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + jest-diff: 30.2.0 + pretty-format: 30.2.0 + + jest-message-util@30.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 30.2.0 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 30.2.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + jest-util: 30.2.0 + + jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): + optionalDependencies: + jest-resolve: 30.2.0 + + jest-regex-util@30.0.1: {} + + jest-resolve-dependencies@30.2.0: + dependencies: + jest-regex-util: 30.0.1 + jest-snapshot: 30.2.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@30.2.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0) + jest-util: 30.2.0 + jest-validate: 30.2.0 + slash: 3.0.0 + unrs-resolver: 1.11.1 + + jest-runner@30.2.0: + dependencies: + '@jest/console': 30.2.0 + '@jest/environment': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + chalk: 4.1.2 + emittery: 0.13.1 + exit-x: 0.2.2 + graceful-fs: 4.2.11 + jest-docblock: 30.2.0 + jest-environment-node: 30.2.0 + jest-haste-map: 30.2.0 + jest-leak-detector: 30.2.0 + jest-message-util: 30.2.0 + jest-resolve: 30.2.0 + jest-runtime: 30.2.0 + jest-util: 30.2.0 + jest-watcher: 30.2.0 + jest-worker: 30.2.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@30.2.0: + dependencies: + '@jest/environment': 30.2.0 + '@jest/fake-timers': 30.2.0 + '@jest/globals': 30.2.0 + '@jest/source-map': 30.0.1 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + chalk: 4.1.2 + cjs-module-lexer: 2.1.0 + collect-v8-coverage: 1.0.3 + glob: 10.4.5 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + jest-message-util: 30.2.0 + jest-mock: 30.2.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.2.0 + jest-snapshot: 30.2.0 + jest-util: 30.2.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@30.2.0: + dependencies: + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + '@babel/types': 7.28.5 + '@jest/expect-utils': 30.2.0 + '@jest/get-type': 30.1.0 + '@jest/snapshot-utils': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + chalk: 4.1.2 + expect: 30.2.0 + graceful-fs: 4.2.11 + jest-diff: 30.2.0 + jest-matcher-utils: 30.2.0 + jest-message-util: 30.2.0 + jest-util: 30.2.0 + pretty-format: 30.2.0 + semver: 7.7.3 + synckit: 0.11.11 + transitivePeerDependencies: + - supports-color + + jest-util@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + chalk: 4.1.2 + ci-info: 4.3.1 + graceful-fs: 4.2.11 + picomatch: 4.0.3 + + jest-validate@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + '@jest/types': 30.2.0 + camelcase: 6.3.0 + chalk: 4.1.2 + leven: 3.1.0 + pretty-format: 30.2.0 + + jest-watcher@30.2.0: + dependencies: + '@jest/test-result': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.18.12 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 30.2.0 + string-length: 4.0.2 + + jest-worker@30.2.0: + dependencies: + '@types/node': 22.18.12 + '@ungap/structured-clone': 1.3.0 + jest-util: 30.2.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@30.2.0(@types/node@22.18.12): + dependencies: + '@jest/core': 30.2.0 + '@jest/types': 30.2.0 + import-local: 3.2.0 + jest-cli: 30.2.0(@types/node@22.18.12) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - esbuild-register + - supports-color + - ts-node + + jiti@2.6.1: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-ref-resolver@3.0.0: + dependencies: + dequal: 2.0.3 + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonparse@1.3.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + lerna-changelog@2.2.0: + dependencies: + chalk: 4.1.2 + cli-highlight: 2.1.11 + execa: 5.1.1 + hosted-git-info: 4.1.0 + make-fetch-happen: 9.1.0 + p-map: 3.0.0 + progress: 2.0.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - supports-color + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + libphonenumber-js@1.12.24: {} + + light-my-request@6.6.0: + dependencies: + cookie: 1.0.2 + process-warning: 4.0.1 + set-cookie-parser: 2.7.1 + + lines-and-columns@1.2.4: {} + + lint-staged@16.2.6: + dependencies: + commander: 14.0.1 + listr2: 9.0.5 + micromatch: 4.0.8 + nano-spawn: 2.0.0 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.1 + + listr2@9.0.5: + dependencies: + cli-truncate: 5.1.1 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.2 + + load-esm@1.0.3: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.capitalize@4.2.1: {} + + lodash.escaperegexp@4.1.2: {} + + lodash.get@4.4.2: {} + + lodash.isequal@4.5.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.kebabcase@4.1.1: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.uniq@4.5.0: {} + + lodash.uniqby@4.7.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.21: {} + + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.1.1 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 + + lru-cache@10.4.3: {} + + lru-cache@11.2.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + + macos-release@3.4.0: {} + + make-dir@4.0.0: + dependencies: + semver: 7.7.3 + + make-error@1.3.6: {} + + make-fetch-happen@9.1.0: + dependencies: + agentkeepalive: 4.6.0 + cacache: 15.3.0 + http-cache-semantics: 4.2.0 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + media-typer@1.1.0: {} + + meow@12.1.1: {} + + merge-descriptors@2.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + mime@2.6.0: {} + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + minipass-collect@1.0.2: + dependencies: + minipass: 3.3.6 + + minipass-fetch@1.4.1: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + ms@2.1.3: {} + + multer@2.0.2: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 2.0.0 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + + mute-stream@2.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nano-spawn@2.0.0: {} + + napi-postinstall@0.3.4: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.4: {} + + negotiator@1.0.0: {} + + neo-async@2.6.2: {} + + netmask@2.0.2: {} + + new-github-release-url@2.0.0: + dependencies: + type-fest: 2.19.0 + + node-fetch-native@1.6.7: {} + + node-int64@0.4.0: {} + + node-releases@2.0.26: {} + + 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 + + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.1 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + ohash@2.0.11: {} + + 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 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.2.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + openapi-types@12.1.3: {} + + 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 + + ora@9.0.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.3.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.2.2 + string-width: 8.1.0 + strip-ansi: 7.1.2 + + os-name@6.1.0: + dependencies: + macos-release: 3.4.0 + windows-release: 6.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@3.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-try@2.2.0: {} + + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-path@7.1.0: + dependencies: + protocols: 2.0.2 + + parse-url@9.2.0: + dependencies: + '@types/parse-path': 7.1.0 + parse-path: 7.1.0 + + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.2.2 + minipass: 7.1.2 + + path-to-regexp@8.3.0: {} + + pathe@2.0.3: {} + + perfect-debounce@2.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pidtree@0.6.0: {} + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.14.0: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pirates@4.0.7: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@2.8.8: {} + + prettier@3.6.2: {} + + pretty-format@30.2.0: + dependencies: + '@jest/schemas': 30.0.5 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + process-warning@4.0.1: {} + + process-warning@5.0.0: {} + + progress@2.0.3: {} + + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + protocols@2.0.2: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + pure-rand@7.0.1: {} + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + quick-format-unescaped@4.0.4: {} + + range-parser@1.2.1: {} + + raw-body@3.0.1: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.7.0 + unpipe: 1.0.0 + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + + react-is@18.3.1: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@4.1.2: {} + + real-require@0.2.0: {} + + reflect-metadata@0.2.2: {} + + release-it@19.0.5(@types/node@22.18.12): + dependencies: + '@nodeutils/defaults-deep': 1.1.0 + '@octokit/rest': 22.0.0 + '@phun-ky/typeof': 2.0.3 + async-retry: 1.3.3 + c12: 3.3.0 + ci-info: 4.3.1 + eta: 4.0.1 + git-url-parse: 16.1.0 + inquirer: 12.9.6(@types/node@22.18.12) + issue-parser: 7.0.1 + lodash.merge: 4.6.2 + mime-types: 3.0.1 + new-github-release-url: 2.0.0 + open: 10.2.0 + ora: 9.0.0 + os-name: 6.1.0 + proxy-agent: 6.5.0 + semver: 7.7.2 + tinyglobby: 0.2.15 + undici: 6.21.3 + url-join: 5.0.0 + wildcard-match: 5.1.4 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@types/node' + - magicast + - supports-color + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + ret@0.5.0: {} + + retry@0.12.0: {} + + retry@0.13.1: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.3.0 + transitivePeerDependencies: + - supports-color + + run-applescript@7.1.0: {} + + run-async@4.0.6: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safe-regex2@5.0.0: + dependencies: + ret: 0.5.0 + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + secure-json-parse@4.1.0: {} + + semver@6.3.1: {} + + semver@7.7.2: {} + + semver@7.7.3: {} + + send@1.2.0: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + set-cookie-parser@2.7.1: {} + + setprototypeof@1.2.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + smart-buffer@4.2.0: {} + + socks-proxy-agent@6.2.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks@2.8.7: + dependencies: + ip-address: 10.0.1 + smart-buffer: 4.2.0 + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + split2@4.2.0: {} + + sprintf-js@1.0.3: {} + + ssri@8.0.1: + dependencies: + minipass: 3.3.6 + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + statuses@2.0.1: {} + + statuses@2.0.2: {} + + stdin-discarder@0.2.2: {} + + streamsearch@1.1.0: {} + + string-argv@0.3.2: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + 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.2 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strtok3@10.3.4: + dependencies: + '@tokenizer/token': 0.3.0 + + superagent@10.2.3: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.4.3 + fast-safe-stringify: 2.1.1 + form-data: 4.0.4 + formidable: 3.5.4 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.14.0 + transitivePeerDependencies: + - supports-color + + supertest@7.1.4: + dependencies: + methods: 1.1.2 + superagent: 10.2.3 + transitivePeerDependencies: + - supports-color + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + swagger-parser@10.0.3(openapi-types@12.1.3): + dependencies: + '@apidevtools/swagger-parser': 10.0.3(openapi-types@12.1.3) + transitivePeerDependencies: + - openapi-types + + swagger-ui-dist@5.29.4: + dependencies: + '@scarf/scarf': 1.4.0 + + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-extensions@2.4.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + through@2.3.8: {} + + tinyexec@1.0.1: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toad-cache@3.7.0: {} + + toidentifier@1.0.1: {} + + token-types@6.1.1: + dependencies: + '@borewit/text-codec': 0.1.1 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.18.12))(typescript@5.9.3): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + handlebars: 4.7.8 + jest: 30.2.0(@types/node@22.18.12) + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.3 + type-fest: 4.41.0 + typescript: 5.9.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.28.5 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + babel-jest: 30.2.0(@babel/core@7.28.5) + jest-util: 30.2.0 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type-fest@4.41.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + + typedarray@0.0.6: {} + + typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + uglify-js@3.19.3: + optional: true + + uid@2.0.2: + dependencies: + '@lukeed/csprng': 1.1.0 + + uint8array-extras@1.5.0: {} + + undici-types@6.21.0: {} + + undici@6.21.3: {} + + unicorn-magic@0.1.0: {} + + unique-filename@1.1.1: + dependencies: + unique-slug: 2.0.2 + + unique-slug@2.0.2: + dependencies: + imurmurhash: 0.1.4 + + universal-user-agent@7.0.3: {} + + unpipe@1.0.0: {} + + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + + update-browserslist-db@1.1.4(browserslist@4.27.0): + dependencies: + browserslist: 4.27.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-join@5.0.0: {} + + util-deprecate@1.0.2: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validator@13.15.15: {} + + vary@1.1.2: {} + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wildcard-match@5.1.4: {} + + windows-release@6.1.0: + dependencies: + execa: 8.0.1 + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@2.8.1: {} + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + 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 + + yocto-queue@0.1.0: {} + + yocto-queue@1.2.1: {} + + yoctocolors-cjs@2.1.3: {} + + yoctocolors@2.1.2: {} + + z-schema@5.0.5: + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.15.15 + optionalDependencies: + commander: 9.5.0 From 8a9f5e9367ac5b96dcd3385702e9c42e7fdb7e38 Mon Sep 17 00:00:00 2001 From: Tom Smeets Date: Fri, 24 Oct 2025 19:12:35 +0200 Subject: [PATCH 2/6] include dist for Github install --- .gitignore | 6 +- dist/constants.d.ts | 22 + dist/constants.js | 25 + dist/decorators/api-basic.decorator.d.ts | 1 + dist/decorators/api-basic.decorator.js | 7 + dist/decorators/api-bearer.decorator.d.ts | 1 + dist/decorators/api-bearer.decorator.js | 7 + dist/decorators/api-body.decorator.d.ts | 16 + dist/decorators/api-body.decorator.js | 22 + dist/decorators/api-callbacks.decorator.d.ts | 2 + dist/decorators/api-callbacks.decorator.js | 8 + dist/decorators/api-consumes.decorator.d.ts | 1 + dist/decorators/api-consumes.decorator.js | 8 + dist/decorators/api-cookie.decorator.d.ts | 1 + dist/decorators/api-cookie.decorator.js | 7 + .../api-default-getter.decorator.d.ts | 2 + .../api-default-getter.decorator.js | 12 + .../api-exclude-controller.decorator.d.ts | 1 + .../api-exclude-controller.decorator.js | 8 + .../api-exclude-endpoint.decorator.d.ts | 1 + .../api-exclude-endpoint.decorator.js | 10 + dist/decorators/api-extension.decorator.d.ts | 1 + dist/decorators/api-extension.decorator.js | 37 ++ .../api-extra-models.decorator.d.ts | 1 + dist/decorators/api-extra-models.decorator.js | 17 + dist/decorators/api-header.decorator.d.ts | 7 + dist/decorators/api-header.decorator.js | 37 ++ .../api-hide-property.decorator.d.ts | 1 + .../decorators/api-hide-property.decorator.js | 6 + .../api-include-endpoint.decorator.d.ts | 1 + .../api-include-endpoint.decorator.js | 10 + dist/decorators/api-link.decorator.d.ts | 7 + dist/decorators/api-link.decorator.js | 21 + dist/decorators/api-oauth2.decorator.d.ts | 1 + dist/decorators/api-oauth2.decorator.js | 7 + dist/decorators/api-operation.decorator.d.ts | 5 + dist/decorators/api-operation.decorator.js | 12 + dist/decorators/api-param.decorator.d.ts | 22 + dist/decorators/api-param.decorator.js | 17 + dist/decorators/api-produces.decorator.d.ts | 1 + dist/decorators/api-produces.decorator.js | 8 + dist/decorators/api-property.decorator.d.ts | 15 + dist/decorators/api-property.decorator.js | 48 ++ dist/decorators/api-query.decorator.d.ts | 24 + dist/decorators/api-query.decorator.js | 25 + dist/decorators/api-response.decorator.d.ts | 39 ++ dist/decorators/api-response.decorator.js | 55 ++ dist/decorators/api-schema.decorator.d.ts | 6 + dist/decorators/api-schema.decorator.js | 8 + dist/decorators/api-security.decorator.d.ts | 2 + dist/decorators/api-security.decorator.js | 25 + dist/decorators/api-use-tags.decorator.d.ts | 1 + dist/decorators/api-use-tags.decorator.js | 8 + dist/decorators/helpers.d.ts | 8 + dist/decorators/helpers.js | 123 +++++ dist/decorators/index.d.ts | 25 + dist/decorators/index.js | 45 ++ dist/document-builder.d.ts | 29 + dist/document-builder.js | 141 +++++ dist/explorers/api-callbacks.explorer.d.ts | 2 + dist/explorers/api-callbacks.explorer.js | 36 ++ dist/explorers/api-consumes.explorer.d.ts | 5 + dist/explorers/api-consumes.explorer.js | 11 + .../api-exclude-controller.explorer.d.ts | 2 + .../api-exclude-controller.explorer.js | 10 + .../api-exclude-endpoint.explorer.d.ts | 2 + .../api-exclude-endpoint.explorer.js | 6 + dist/explorers/api-extra-models.explorer.d.ts | 3 + dist/explorers/api-extra-models.explorer.js | 11 + dist/explorers/api-headers.explorer.d.ts | 7 + dist/explorers/api-headers.explorer.js | 9 + .../api-include-endpoint.explorer.d.ts | 2 + .../api-include-endpoint.explorer.js | 6 + dist/explorers/api-operation.explorer.d.ts | 2 + dist/explorers/api-operation.explorer.js | 43 ++ dist/explorers/api-parameters.explorer.d.ts | 71 +++ dist/explorers/api-parameters.explorer.js | 47 ++ dist/explorers/api-produces.explorer.d.ts | 5 + dist/explorers/api-produces.explorer.js | 11 + dist/explorers/api-response.explorer.d.ts | 13 + dist/explorers/api-response.explorer.js | 103 ++++ dist/explorers/api-security.explorer.d.ts | 5 + dist/explorers/api-security.explorer.js | 13 + dist/explorers/api-use-tags.explorer.d.ts | 5 + dist/explorers/api-use-tags.explorer.js | 18 + dist/extra/swagger-shim.d.ts | 97 ++++ dist/extra/swagger-shim.js | 355 ++++++++++++ dist/fixtures/document.base.d.ts | 2 + dist/fixtures/document.base.js | 16 + dist/index.d.ts | 7 + dist/index.js | 23 + .../interfaces/callback-object.interface.d.ts | 12 + dist/interfaces/callback-object.interface.js | 2 + .../denormalized-doc-resolvers.interface.d.ts | 7 + .../denormalized-doc-resolvers.interface.js | 2 + .../denormalized-doc.interface.d.ts | 8 + dist/interfaces/denormalized-doc.interface.js | 2 + .../enum-schema-attributes.interface.d.ts | 2 + .../enum-schema-attributes.interface.js | 2 + dist/interfaces/index.d.ts | 3 + dist/interfaces/index.js | 18 + dist/interfaces/module-route.interface.d.ts | 2 + dist/interfaces/module-route.interface.js | 2 + dist/interfaces/open-api-spec.interface.d.ts | 239 ++++++++ dist/interfaces/open-api-spec.interface.js | 2 + .../schema-object-metadata.interface.d.ts | 30 + .../schema-object-metadata.interface.js | 2 + .../swagger-custom-options.interface.d.ts | 24 + .../swagger-custom-options.interface.js | 2 + .../swagger-document-options.interface.d.ts | 11 + .../swagger-document-options.interface.js | 2 + .../swagger-ui-init-options.interface.d.ts | 7 + .../swagger-ui-init-options.interface.js | 2 + .../swagger-ui-options.interface.d.ts | 15 + .../swagger-ui-options.interface.js | 2 + dist/plugin/compiler-plugin.d.ts | 2 + dist/plugin/compiler-plugin.js | 30 + dist/plugin/index.d.ts | 2 + dist/plugin/index.js | 18 + dist/plugin/merge-options.d.ts | 17 + dist/plugin/merge-options.js | 37 ++ dist/plugin/metadata-loader.d.ts | 7 + dist/plugin/metadata-loader.js | 51 ++ dist/plugin/plugin-constants.d.ts | 3 + dist/plugin/plugin-constants.js | 6 + dist/plugin/plugin-debug-logger.d.ts | 5 + dist/plugin/plugin-debug-logger.js | 7 + dist/plugin/utils/ast-utils.d.ts | 30 + dist/plugin/utils/ast-utils.js | 273 ++++++++++ .../utils/is-filename-matched.util.d.ts | 1 + dist/plugin/utils/is-filename-matched.util.js | 5 + dist/plugin/utils/plugin-utils.d.ts | 30 + dist/plugin/utils/plugin-utils.js | 307 +++++++++++ .../type-reference-to-identifier.util.d.ts | 7 + .../type-reference-to-identifier.util.js | 52 ++ dist/plugin/visitors/abstract.visitor.d.ts | 4 + dist/plugin/visitors/abstract.visitor.js | 30 + .../visitors/controller-class.visitor.d.ts | 20 + .../visitors/controller-class.visitor.js | 265 +++++++++ dist/plugin/visitors/model-class.visitor.d.ts | 35 ++ dist/plugin/visitors/model-class.visitor.js | 514 ++++++++++++++++++ dist/plugin/visitors/readonly.visitor.d.ts | 21 + dist/plugin/visitors/readonly.visitor.js | 40 ++ dist/services/constants.d.ts | 1 + dist/services/constants.js | 4 + dist/services/decorators-properties.d.ts | 21 + dist/services/decorators-properties.js | 149 +++++ dist/services/mimetype-content-wrapper.d.ts | 4 + dist/services/mimetype-content-wrapper.js | 11 + dist/services/model-properties-accessor.d.ts | 6 + dist/services/model-properties-accessor.js | 37 ++ .../services/parameter-metadata-accessor.d.ts | 22 + dist/services/parameter-metadata-accessor.js | 41 ++ dist/services/parameters-metadata-mapper.d.ts | 9 + dist/services/parameters-metadata-mapper.js | 38 ++ dist/services/response-object-factory.d.ts | 22 + dist/services/response-object-factory.js | 94 ++++ dist/services/response-object-mapper.d.ts | 39 ++ dist/services/response-object-mapper.js | 38 ++ dist/services/schema-object-factory.d.ts | 156 ++++++ dist/services/schema-object-factory.js | 471 ++++++++++++++++ dist/services/swagger-types-mapper.d.ts | 260 +++++++++ dist/services/swagger-types-mapper.js | 107 ++++ dist/storages/global-parameters.storage.d.ts | 8 + dist/storages/global-parameters.storage.js | 22 + dist/storages/global-responses.storage.d.ts | 10 + dist/storages/global-responses.storage.js | 21 + dist/swagger-explorer.d.ts | 42 ++ dist/swagger-explorer.js | 319 +++++++++++ dist/swagger-module.d.ts | 26 + dist/swagger-module.js | 196 +++++++ dist/swagger-scanner.d.ts | 25 + dist/swagger-scanner.js | 92 ++++ dist/swagger-transformer.d.ts | 4 + dist/swagger-transformer.js | 22 + dist/swagger-ui/constants.d.ts | 3 + dist/swagger-ui/constants.js | 132 +++++ dist/swagger-ui/helpers.d.ts | 2 + dist/swagger-ui/helpers.js | 16 + dist/swagger-ui/index.d.ts | 1 + dist/swagger-ui/index.js | 17 + dist/swagger-ui/swagger-ui.d.ts | 4 + dist/swagger-ui/swagger-ui.js | 62 +++ dist/type-helpers/index.d.ts | 4 + dist/type-helpers/index.js | 20 + .../intersection-type.helper.d.ts | 8 + dist/type-helpers/intersection-type.helper.js | 42 ++ dist/type-helpers/mapped-types.utils.d.ts | 2 + dist/type-helpers/mapped-types.utils.js | 31 ++ dist/type-helpers/omit-type.helper.d.ts | 2 + dist/type-helpers/omit-type.helper.js | 40 ++ dist/type-helpers/partial-type.helper.d.ts | 4 + dist/type-helpers/partial-type.helper.js | 49 ++ dist/type-helpers/pick-type.helper.d.ts | 2 + dist/type-helpers/pick-type.helper.js | 40 ++ dist/types/swagger-enum.type.d.ts | 1 + dist/types/swagger-enum.type.js | 2 + dist/utils/assign-two-levels-deep.d.ts | 1 + dist/utils/assign-two-levels-deep.js | 12 + dist/utils/enum.utils.d.ts | 9 + dist/utils/enum.utils.js | 65 +++ dist/utils/extend-metadata.util.d.ts | 2 + dist/utils/extend-metadata.util.js | 11 + dist/utils/get-global-prefix.d.ts | 2 + dist/utils/get-global-prefix.js | 7 + dist/utils/get-schema-path.util.d.ts | 4 + dist/utils/get-schema-path.util.js | 26 + dist/utils/index.d.ts | 1 + dist/utils/index.js | 17 + dist/utils/is-body-parameter.util.d.ts | 2 + dist/utils/is-body-parameter.util.js | 6 + dist/utils/is-built-in-type.util.d.ts | 2 + dist/utils/is-built-in-type.util.js | 8 + dist/utils/is-date-ctor.util.d.ts | 2 + dist/utils/is-date-ctor.util.js | 6 + dist/utils/merge-and-uniq.util.d.ts | 1 + dist/utils/merge-and-uniq.util.js | 7 + dist/utils/normalize-rel-path.d.ts | 1 + dist/utils/normalize-rel-path.js | 7 + dist/utils/remove-undefined-keys.d.ts | 5 + dist/utils/remove-undefined-keys.js | 11 + dist/utils/resolve-path.util.d.ts | 1 + dist/utils/resolve-path.util.js | 7 + dist/utils/reverse-object-keys.util.d.ts | 1 + dist/utils/reverse-object-keys.util.js | 11 + dist/utils/sort-object-lexicographically.d.ts | 5 + dist/utils/sort-object-lexicographically.js | 11 + dist/utils/strip-last-slash.util.d.ts | 1 + dist/utils/strip-last-slash.util.js | 8 + dist/utils/validate-global-prefix.util.d.ts | 1 + dist/utils/validate-global-prefix.util.js | 5 + dist/utils/validate-path.util.d.ts | 1 + dist/utils/validate-path.util.js | 5 + 233 files changed, 7251 insertions(+), 3 deletions(-) create mode 100644 dist/constants.d.ts create mode 100644 dist/constants.js create mode 100644 dist/decorators/api-basic.decorator.d.ts create mode 100644 dist/decorators/api-basic.decorator.js create mode 100644 dist/decorators/api-bearer.decorator.d.ts create mode 100644 dist/decorators/api-bearer.decorator.js create mode 100644 dist/decorators/api-body.decorator.d.ts create mode 100644 dist/decorators/api-body.decorator.js create mode 100644 dist/decorators/api-callbacks.decorator.d.ts create mode 100644 dist/decorators/api-callbacks.decorator.js create mode 100644 dist/decorators/api-consumes.decorator.d.ts create mode 100644 dist/decorators/api-consumes.decorator.js create mode 100644 dist/decorators/api-cookie.decorator.d.ts create mode 100644 dist/decorators/api-cookie.decorator.js create mode 100644 dist/decorators/api-default-getter.decorator.d.ts create mode 100644 dist/decorators/api-default-getter.decorator.js create mode 100644 dist/decorators/api-exclude-controller.decorator.d.ts create mode 100644 dist/decorators/api-exclude-controller.decorator.js create mode 100644 dist/decorators/api-exclude-endpoint.decorator.d.ts create mode 100644 dist/decorators/api-exclude-endpoint.decorator.js create mode 100644 dist/decorators/api-extension.decorator.d.ts create mode 100644 dist/decorators/api-extension.decorator.js create mode 100644 dist/decorators/api-extra-models.decorator.d.ts create mode 100644 dist/decorators/api-extra-models.decorator.js create mode 100644 dist/decorators/api-header.decorator.d.ts create mode 100644 dist/decorators/api-header.decorator.js create mode 100644 dist/decorators/api-hide-property.decorator.d.ts create mode 100644 dist/decorators/api-hide-property.decorator.js create mode 100644 dist/decorators/api-include-endpoint.decorator.d.ts create mode 100644 dist/decorators/api-include-endpoint.decorator.js create mode 100644 dist/decorators/api-link.decorator.d.ts create mode 100644 dist/decorators/api-link.decorator.js create mode 100644 dist/decorators/api-oauth2.decorator.d.ts create mode 100644 dist/decorators/api-oauth2.decorator.js create mode 100644 dist/decorators/api-operation.decorator.d.ts create mode 100644 dist/decorators/api-operation.decorator.js create mode 100644 dist/decorators/api-param.decorator.d.ts create mode 100644 dist/decorators/api-param.decorator.js create mode 100644 dist/decorators/api-produces.decorator.d.ts create mode 100644 dist/decorators/api-produces.decorator.js create mode 100644 dist/decorators/api-property.decorator.d.ts create mode 100644 dist/decorators/api-property.decorator.js create mode 100644 dist/decorators/api-query.decorator.d.ts create mode 100644 dist/decorators/api-query.decorator.js create mode 100644 dist/decorators/api-response.decorator.d.ts create mode 100644 dist/decorators/api-response.decorator.js create mode 100644 dist/decorators/api-schema.decorator.d.ts create mode 100644 dist/decorators/api-schema.decorator.js create mode 100644 dist/decorators/api-security.decorator.d.ts create mode 100644 dist/decorators/api-security.decorator.js create mode 100644 dist/decorators/api-use-tags.decorator.d.ts create mode 100644 dist/decorators/api-use-tags.decorator.js create mode 100644 dist/decorators/helpers.d.ts create mode 100644 dist/decorators/helpers.js create mode 100644 dist/decorators/index.d.ts create mode 100644 dist/decorators/index.js create mode 100644 dist/document-builder.d.ts create mode 100644 dist/document-builder.js create mode 100644 dist/explorers/api-callbacks.explorer.d.ts create mode 100644 dist/explorers/api-callbacks.explorer.js create mode 100644 dist/explorers/api-consumes.explorer.d.ts create mode 100644 dist/explorers/api-consumes.explorer.js create mode 100644 dist/explorers/api-exclude-controller.explorer.d.ts create mode 100644 dist/explorers/api-exclude-controller.explorer.js create mode 100644 dist/explorers/api-exclude-endpoint.explorer.d.ts create mode 100644 dist/explorers/api-exclude-endpoint.explorer.js create mode 100644 dist/explorers/api-extra-models.explorer.d.ts create mode 100644 dist/explorers/api-extra-models.explorer.js create mode 100644 dist/explorers/api-headers.explorer.d.ts create mode 100644 dist/explorers/api-headers.explorer.js create mode 100644 dist/explorers/api-include-endpoint.explorer.d.ts create mode 100644 dist/explorers/api-include-endpoint.explorer.js create mode 100644 dist/explorers/api-operation.explorer.d.ts create mode 100644 dist/explorers/api-operation.explorer.js create mode 100644 dist/explorers/api-parameters.explorer.d.ts create mode 100644 dist/explorers/api-parameters.explorer.js create mode 100644 dist/explorers/api-produces.explorer.d.ts create mode 100644 dist/explorers/api-produces.explorer.js create mode 100644 dist/explorers/api-response.explorer.d.ts create mode 100644 dist/explorers/api-response.explorer.js create mode 100644 dist/explorers/api-security.explorer.d.ts create mode 100644 dist/explorers/api-security.explorer.js create mode 100644 dist/explorers/api-use-tags.explorer.d.ts create mode 100644 dist/explorers/api-use-tags.explorer.js create mode 100644 dist/extra/swagger-shim.d.ts create mode 100644 dist/extra/swagger-shim.js create mode 100644 dist/fixtures/document.base.d.ts create mode 100644 dist/fixtures/document.base.js create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 dist/interfaces/callback-object.interface.d.ts create mode 100644 dist/interfaces/callback-object.interface.js create mode 100644 dist/interfaces/denormalized-doc-resolvers.interface.d.ts create mode 100644 dist/interfaces/denormalized-doc-resolvers.interface.js create mode 100644 dist/interfaces/denormalized-doc.interface.d.ts create mode 100644 dist/interfaces/denormalized-doc.interface.js create mode 100644 dist/interfaces/enum-schema-attributes.interface.d.ts create mode 100644 dist/interfaces/enum-schema-attributes.interface.js create mode 100644 dist/interfaces/index.d.ts create mode 100644 dist/interfaces/index.js create mode 100644 dist/interfaces/module-route.interface.d.ts create mode 100644 dist/interfaces/module-route.interface.js create mode 100644 dist/interfaces/open-api-spec.interface.d.ts create mode 100644 dist/interfaces/open-api-spec.interface.js create mode 100644 dist/interfaces/schema-object-metadata.interface.d.ts create mode 100644 dist/interfaces/schema-object-metadata.interface.js create mode 100644 dist/interfaces/swagger-custom-options.interface.d.ts create mode 100644 dist/interfaces/swagger-custom-options.interface.js create mode 100644 dist/interfaces/swagger-document-options.interface.d.ts create mode 100644 dist/interfaces/swagger-document-options.interface.js create mode 100644 dist/interfaces/swagger-ui-init-options.interface.d.ts create mode 100644 dist/interfaces/swagger-ui-init-options.interface.js create mode 100644 dist/interfaces/swagger-ui-options.interface.d.ts create mode 100644 dist/interfaces/swagger-ui-options.interface.js create mode 100644 dist/plugin/compiler-plugin.d.ts create mode 100644 dist/plugin/compiler-plugin.js create mode 100644 dist/plugin/index.d.ts create mode 100644 dist/plugin/index.js create mode 100644 dist/plugin/merge-options.d.ts create mode 100644 dist/plugin/merge-options.js create mode 100644 dist/plugin/metadata-loader.d.ts create mode 100644 dist/plugin/metadata-loader.js create mode 100644 dist/plugin/plugin-constants.d.ts create mode 100644 dist/plugin/plugin-constants.js create mode 100644 dist/plugin/plugin-debug-logger.d.ts create mode 100644 dist/plugin/plugin-debug-logger.js create mode 100644 dist/plugin/utils/ast-utils.d.ts create mode 100644 dist/plugin/utils/ast-utils.js create mode 100644 dist/plugin/utils/is-filename-matched.util.d.ts create mode 100644 dist/plugin/utils/is-filename-matched.util.js create mode 100644 dist/plugin/utils/plugin-utils.d.ts create mode 100644 dist/plugin/utils/plugin-utils.js create mode 100644 dist/plugin/utils/type-reference-to-identifier.util.d.ts create mode 100644 dist/plugin/utils/type-reference-to-identifier.util.js create mode 100644 dist/plugin/visitors/abstract.visitor.d.ts create mode 100644 dist/plugin/visitors/abstract.visitor.js create mode 100644 dist/plugin/visitors/controller-class.visitor.d.ts create mode 100644 dist/plugin/visitors/controller-class.visitor.js create mode 100644 dist/plugin/visitors/model-class.visitor.d.ts create mode 100644 dist/plugin/visitors/model-class.visitor.js create mode 100644 dist/plugin/visitors/readonly.visitor.d.ts create mode 100644 dist/plugin/visitors/readonly.visitor.js create mode 100644 dist/services/constants.d.ts create mode 100644 dist/services/constants.js create mode 100644 dist/services/decorators-properties.d.ts create mode 100644 dist/services/decorators-properties.js create mode 100644 dist/services/mimetype-content-wrapper.d.ts create mode 100644 dist/services/mimetype-content-wrapper.js create mode 100644 dist/services/model-properties-accessor.d.ts create mode 100644 dist/services/model-properties-accessor.js create mode 100644 dist/services/parameter-metadata-accessor.d.ts create mode 100644 dist/services/parameter-metadata-accessor.js create mode 100644 dist/services/parameters-metadata-mapper.d.ts create mode 100644 dist/services/parameters-metadata-mapper.js create mode 100644 dist/services/response-object-factory.d.ts create mode 100644 dist/services/response-object-factory.js create mode 100644 dist/services/response-object-mapper.d.ts create mode 100644 dist/services/response-object-mapper.js create mode 100644 dist/services/schema-object-factory.d.ts create mode 100644 dist/services/schema-object-factory.js create mode 100644 dist/services/swagger-types-mapper.d.ts create mode 100644 dist/services/swagger-types-mapper.js create mode 100644 dist/storages/global-parameters.storage.d.ts create mode 100644 dist/storages/global-parameters.storage.js create mode 100644 dist/storages/global-responses.storage.d.ts create mode 100644 dist/storages/global-responses.storage.js create mode 100644 dist/swagger-explorer.d.ts create mode 100644 dist/swagger-explorer.js create mode 100644 dist/swagger-module.d.ts create mode 100644 dist/swagger-module.js create mode 100644 dist/swagger-scanner.d.ts create mode 100644 dist/swagger-scanner.js create mode 100644 dist/swagger-transformer.d.ts create mode 100644 dist/swagger-transformer.js create mode 100644 dist/swagger-ui/constants.d.ts create mode 100644 dist/swagger-ui/constants.js create mode 100644 dist/swagger-ui/helpers.d.ts create mode 100644 dist/swagger-ui/helpers.js create mode 100644 dist/swagger-ui/index.d.ts create mode 100644 dist/swagger-ui/index.js create mode 100644 dist/swagger-ui/swagger-ui.d.ts create mode 100644 dist/swagger-ui/swagger-ui.js create mode 100644 dist/type-helpers/index.d.ts create mode 100644 dist/type-helpers/index.js create mode 100644 dist/type-helpers/intersection-type.helper.d.ts create mode 100644 dist/type-helpers/intersection-type.helper.js create mode 100644 dist/type-helpers/mapped-types.utils.d.ts create mode 100644 dist/type-helpers/mapped-types.utils.js create mode 100644 dist/type-helpers/omit-type.helper.d.ts create mode 100644 dist/type-helpers/omit-type.helper.js create mode 100644 dist/type-helpers/partial-type.helper.d.ts create mode 100644 dist/type-helpers/partial-type.helper.js create mode 100644 dist/type-helpers/pick-type.helper.d.ts create mode 100644 dist/type-helpers/pick-type.helper.js create mode 100644 dist/types/swagger-enum.type.d.ts create mode 100644 dist/types/swagger-enum.type.js create mode 100644 dist/utils/assign-two-levels-deep.d.ts create mode 100644 dist/utils/assign-two-levels-deep.js create mode 100644 dist/utils/enum.utils.d.ts create mode 100644 dist/utils/enum.utils.js create mode 100644 dist/utils/extend-metadata.util.d.ts create mode 100644 dist/utils/extend-metadata.util.js create mode 100644 dist/utils/get-global-prefix.d.ts create mode 100644 dist/utils/get-global-prefix.js create mode 100644 dist/utils/get-schema-path.util.d.ts create mode 100644 dist/utils/get-schema-path.util.js create mode 100644 dist/utils/index.d.ts create mode 100644 dist/utils/index.js create mode 100644 dist/utils/is-body-parameter.util.d.ts create mode 100644 dist/utils/is-body-parameter.util.js create mode 100644 dist/utils/is-built-in-type.util.d.ts create mode 100644 dist/utils/is-built-in-type.util.js create mode 100644 dist/utils/is-date-ctor.util.d.ts create mode 100644 dist/utils/is-date-ctor.util.js create mode 100644 dist/utils/merge-and-uniq.util.d.ts create mode 100644 dist/utils/merge-and-uniq.util.js create mode 100644 dist/utils/normalize-rel-path.d.ts create mode 100644 dist/utils/normalize-rel-path.js create mode 100644 dist/utils/remove-undefined-keys.d.ts create mode 100644 dist/utils/remove-undefined-keys.js create mode 100644 dist/utils/resolve-path.util.d.ts create mode 100644 dist/utils/resolve-path.util.js create mode 100644 dist/utils/reverse-object-keys.util.d.ts create mode 100644 dist/utils/reverse-object-keys.util.js create mode 100644 dist/utils/sort-object-lexicographically.d.ts create mode 100644 dist/utils/sort-object-lexicographically.js create mode 100644 dist/utils/strip-last-slash.util.d.ts create mode 100644 dist/utils/strip-last-slash.util.js create mode 100644 dist/utils/validate-global-prefix.util.d.ts create mode 100644 dist/utils/validate-global-prefix.util.js create mode 100644 dist/utils/validate-path.util.d.ts create mode 100644 dist/utils/validate-path.util.js diff --git a/.gitignore b/.gitignore index cb72281e8..0579af373 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ npm-debug.log /.nyc_output # source -dist -index.js -index.d.ts +# dist +# index.js +# index.d.ts /sample \ No newline at end of file diff --git a/dist/constants.d.ts b/dist/constants.d.ts new file mode 100644 index 000000000..fa92f0eec --- /dev/null +++ b/dist/constants.d.ts @@ -0,0 +1,22 @@ +export declare const DECORATORS_PREFIX = "swagger"; +export declare const DECORATORS: { + API_OPERATION: string; + API_RESPONSE: string; + API_PRODUCES: string; + API_CONSUMES: string; + API_TAGS: string; + API_CALLBACKS: string; + API_PARAMETERS: string; + API_HEADERS: string; + API_MODEL_PROPERTIES: string; + API_MODEL_PROPERTIES_ARRAY: string; + API_SECURITY: string; + API_EXCLUDE_ENDPOINT: string; + API_INCLUDE_ENDPOINT: string; + API_EXCLUDE_CONTROLLER: string; + API_EXTRA_MODELS: string; + API_EXTENSION: string; + API_SCHEMA: string; + API_DEFAULT_GETTER: string; + API_LINK: string; +}; diff --git a/dist/constants.js b/dist/constants.js new file mode 100644 index 000000000..fb72375bf --- /dev/null +++ b/dist/constants.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DECORATORS = exports.DECORATORS_PREFIX = void 0; +exports.DECORATORS_PREFIX = 'swagger'; +exports.DECORATORS = { + API_OPERATION: `${exports.DECORATORS_PREFIX}/apiOperation`, + API_RESPONSE: `${exports.DECORATORS_PREFIX}/apiResponse`, + API_PRODUCES: `${exports.DECORATORS_PREFIX}/apiProduces`, + API_CONSUMES: `${exports.DECORATORS_PREFIX}/apiConsumes`, + API_TAGS: `${exports.DECORATORS_PREFIX}/apiUseTags`, + API_CALLBACKS: `${exports.DECORATORS_PREFIX}/apiCallbacks`, + API_PARAMETERS: `${exports.DECORATORS_PREFIX}/apiParameters`, + API_HEADERS: `${exports.DECORATORS_PREFIX}/apiHeaders`, + API_MODEL_PROPERTIES: `${exports.DECORATORS_PREFIX}/apiModelProperties`, + API_MODEL_PROPERTIES_ARRAY: `${exports.DECORATORS_PREFIX}/apiModelPropertiesArray`, + API_SECURITY: `${exports.DECORATORS_PREFIX}/apiSecurity`, + API_EXCLUDE_ENDPOINT: `${exports.DECORATORS_PREFIX}/apiExcludeEndpoint`, + API_INCLUDE_ENDPOINT: `${exports.DECORATORS_PREFIX}/apiIncludeEndpoint`, + API_EXCLUDE_CONTROLLER: `${exports.DECORATORS_PREFIX}/apiExcludeController`, + API_EXTRA_MODELS: `${exports.DECORATORS_PREFIX}/apiExtraModels`, + API_EXTENSION: `${exports.DECORATORS_PREFIX}/apiExtension`, + API_SCHEMA: `${exports.DECORATORS_PREFIX}/apiSchema`, + API_DEFAULT_GETTER: `${exports.DECORATORS_PREFIX}/apiDefaultGetter`, + API_LINK: `${exports.DECORATORS_PREFIX}/apiLink` +}; diff --git a/dist/decorators/api-basic.decorator.d.ts b/dist/decorators/api-basic.decorator.d.ts new file mode 100644 index 000000000..6c8af2c2f --- /dev/null +++ b/dist/decorators/api-basic.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiBasicAuth(name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-basic.decorator.js b/dist/decorators/api-basic.decorator.js new file mode 100644 index 000000000..1b00cea4f --- /dev/null +++ b/dist/decorators/api-basic.decorator.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiBasicAuth = ApiBasicAuth; +const api_security_decorator_1 = require("./api-security.decorator"); +function ApiBasicAuth(name = 'basic') { + return (0, api_security_decorator_1.ApiSecurity)(name); +} diff --git a/dist/decorators/api-bearer.decorator.d.ts b/dist/decorators/api-bearer.decorator.d.ts new file mode 100644 index 000000000..92f2edc4a --- /dev/null +++ b/dist/decorators/api-bearer.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiBearerAuth(name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-bearer.decorator.js b/dist/decorators/api-bearer.decorator.js new file mode 100644 index 000000000..3391a44c7 --- /dev/null +++ b/dist/decorators/api-bearer.decorator.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiBearerAuth = ApiBearerAuth; +const api_security_decorator_1 = require("./api-security.decorator"); +function ApiBearerAuth(name = 'bearer') { + return (0, api_security_decorator_1.ApiSecurity)(name); +} diff --git a/dist/decorators/api-body.decorator.d.ts b/dist/decorators/api-body.decorator.d.ts new file mode 100644 index 000000000..69c6d4853 --- /dev/null +++ b/dist/decorators/api-body.decorator.d.ts @@ -0,0 +1,16 @@ +import { Type } from '@nestjs/common'; +import { ExamplesObject, ReferenceObject, RequestBodyObject, SchemaObject } from '../interfaces/open-api-spec.interface'; +import { SwaggerEnumType } from '../types/swagger-enum.type'; +type RequestBodyOptions = Omit; +interface ApiBodyMetadata extends RequestBodyOptions { + type?: Type | Function | [Function] | string; + isArray?: boolean; + enum?: SwaggerEnumType; +} +interface ApiBodySchemaHost extends RequestBodyOptions { + schema: SchemaObject | ReferenceObject; + examples?: ExamplesObject; +} +export type ApiBodyOptions = ApiBodyMetadata | ApiBodySchemaHost; +export declare function ApiBody(options: ApiBodyOptions): MethodDecorator; +export {}; diff --git a/dist/decorators/api-body.decorator.js b/dist/decorators/api-body.decorator.js new file mode 100644 index 000000000..a92a42312 --- /dev/null +++ b/dist/decorators/api-body.decorator.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiBody = ApiBody; +const lodash_1 = require("lodash"); +const enum_utils_1 = require("../utils/enum.utils"); +const helpers_1 = require("./helpers"); +const defaultBodyMetadata = { + type: String, + required: true +}; +function ApiBody(options) { + const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(options.type, options.isArray); + const param = Object.assign(Object.assign({ in: 'body' }, (0, lodash_1.omit)(options, 'enum')), { type, + isArray }); + if ((0, enum_utils_1.isEnumArray)(options)) { + (0, enum_utils_1.addEnumArraySchema)(param, options); + } + else if ((0, enum_utils_1.isEnumDefined)(options)) { + (0, enum_utils_1.addEnumSchema)(param, options); + } + return (0, helpers_1.createParamDecorator)(param, defaultBodyMetadata); +} diff --git a/dist/decorators/api-callbacks.decorator.d.ts b/dist/decorators/api-callbacks.decorator.d.ts new file mode 100644 index 000000000..9be976374 --- /dev/null +++ b/dist/decorators/api-callbacks.decorator.d.ts @@ -0,0 +1,2 @@ +import { CallBackObject } from '../interfaces/callback-object.interface'; +export declare function ApiCallbacks(...callbackObject: Array>): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-callbacks.decorator.js b/dist/decorators/api-callbacks.decorator.js new file mode 100644 index 000000000..5cffa8d15 --- /dev/null +++ b/dist/decorators/api-callbacks.decorator.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiCallbacks = ApiCallbacks; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiCallbacks(...callbackObject) { + return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_CALLBACKS, callbackObject); +} diff --git a/dist/decorators/api-consumes.decorator.d.ts b/dist/decorators/api-consumes.decorator.d.ts new file mode 100644 index 000000000..91a5f0ee9 --- /dev/null +++ b/dist/decorators/api-consumes.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiConsumes(...mimeTypes: string[]): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-consumes.decorator.js b/dist/decorators/api-consumes.decorator.js new file mode 100644 index 000000000..4d1ce020a --- /dev/null +++ b/dist/decorators/api-consumes.decorator.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiConsumes = ApiConsumes; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiConsumes(...mimeTypes) { + return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_CONSUMES, mimeTypes); +} diff --git a/dist/decorators/api-cookie.decorator.d.ts b/dist/decorators/api-cookie.decorator.d.ts new file mode 100644 index 000000000..65d37a7ca --- /dev/null +++ b/dist/decorators/api-cookie.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiCookieAuth(name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-cookie.decorator.js b/dist/decorators/api-cookie.decorator.js new file mode 100644 index 000000000..0489444d5 --- /dev/null +++ b/dist/decorators/api-cookie.decorator.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiCookieAuth = ApiCookieAuth; +const api_security_decorator_1 = require("./api-security.decorator"); +function ApiCookieAuth(name = 'cookie') { + return (0, api_security_decorator_1.ApiSecurity)(name); +} diff --git a/dist/decorators/api-default-getter.decorator.d.ts b/dist/decorators/api-default-getter.decorator.d.ts new file mode 100644 index 000000000..a1844503b --- /dev/null +++ b/dist/decorators/api-default-getter.decorator.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare function ApiDefaultGetter(type: Type | Function, parameter: string): MethodDecorator; diff --git a/dist/decorators/api-default-getter.decorator.js b/dist/decorators/api-default-getter.decorator.js new file mode 100644 index 000000000..a27c42e87 --- /dev/null +++ b/dist/decorators/api-default-getter.decorator.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiDefaultGetter = ApiDefaultGetter; +const constants_1 = require("../constants"); +function ApiDefaultGetter(type, parameter) { + return (prototype, key, descriptor) => { + if (type.prototype) { + Reflect.defineMetadata(constants_1.DECORATORS.API_DEFAULT_GETTER, { getter: descriptor.value, parameter, prototype }, type.prototype); + } + return descriptor; + }; +} diff --git a/dist/decorators/api-exclude-controller.decorator.d.ts b/dist/decorators/api-exclude-controller.decorator.d.ts new file mode 100644 index 000000000..6de204ea3 --- /dev/null +++ b/dist/decorators/api-exclude-controller.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiExcludeController(disable?: boolean): ClassDecorator; diff --git a/dist/decorators/api-exclude-controller.decorator.js b/dist/decorators/api-exclude-controller.decorator.js new file mode 100644 index 000000000..4ab55fc84 --- /dev/null +++ b/dist/decorators/api-exclude-controller.decorator.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiExcludeController = ApiExcludeController; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiExcludeController(disable = true) { + return (0, helpers_1.createClassDecorator)(constants_1.DECORATORS.API_EXCLUDE_CONTROLLER, [disable]); +} diff --git a/dist/decorators/api-exclude-endpoint.decorator.d.ts b/dist/decorators/api-exclude-endpoint.decorator.d.ts new file mode 100644 index 000000000..0f9ca3f82 --- /dev/null +++ b/dist/decorators/api-exclude-endpoint.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiExcludeEndpoint(disable?: boolean): MethodDecorator; diff --git a/dist/decorators/api-exclude-endpoint.decorator.js b/dist/decorators/api-exclude-endpoint.decorator.js new file mode 100644 index 000000000..7afa44ac0 --- /dev/null +++ b/dist/decorators/api-exclude-endpoint.decorator.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiExcludeEndpoint = ApiExcludeEndpoint; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiExcludeEndpoint(disable = true) { + return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_EXCLUDE_ENDPOINT, { + disable + }); +} diff --git a/dist/decorators/api-extension.decorator.d.ts b/dist/decorators/api-extension.decorator.d.ts new file mode 100644 index 000000000..bfe9dac36 --- /dev/null +++ b/dist/decorators/api-extension.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiExtension(extensionKey: string, extensionProperties: any): (target: object | Function, key?: string | symbol, descriptor?: TypedPropertyDescriptor) => any; diff --git a/dist/decorators/api-extension.decorator.js b/dist/decorators/api-extension.decorator.js new file mode 100644 index 000000000..223498c69 --- /dev/null +++ b/dist/decorators/api-extension.decorator.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiExtension = ApiExtension; +const constants_1 = require("@nestjs/common/constants"); +const constants_2 = require("../constants"); +const lodash_1 = require("lodash"); +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +function applyExtension(target, key, value) { + const extensions = Reflect.getMetadata(constants_2.DECORATORS.API_EXTENSION, target) || {}; + Reflect.defineMetadata(constants_2.DECORATORS.API_EXTENSION, Object.assign({ [key]: value }, extensions), target); +} +function ApiExtension(extensionKey, extensionProperties) { + if (!extensionKey.startsWith('x-')) { + throw new Error('Extension key is not prefixed. Please ensure you prefix it with `x-`.'); + } + return (target, key, descriptor) => { + const extensionValue = (0, lodash_1.clone)(extensionProperties); + if (descriptor) { + applyExtension(descriptor.value, extensionKey, extensionValue); + return descriptor; + } + if (typeof target === 'object') { + return target; + } + const apiMethods = Object.getOwnPropertyNames(target.prototype) + .filter((propertyKey) => !(0, shared_utils_1.isConstructor)(propertyKey)) + .map((propertyKey) => { var _a; return (_a = Object.getOwnPropertyDescriptor(target.prototype, propertyKey)) === null || _a === void 0 ? void 0 : _a.value; }) + .filter((methodDescriptor) => methodDescriptor !== undefined && Reflect.hasMetadata(constants_1.METHOD_METADATA, methodDescriptor)); + if (apiMethods.length > 0) { + apiMethods.forEach((method) => applyExtension(method, extensionKey, extensionValue)); + } + else { + applyExtension(target, extensionKey, extensionValue); + } + return target; + }; +} diff --git a/dist/decorators/api-extra-models.decorator.d.ts b/dist/decorators/api-extra-models.decorator.d.ts new file mode 100644 index 000000000..31af477af --- /dev/null +++ b/dist/decorators/api-extra-models.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiExtraModels(...models: Function[]): (target: object, key?: string | symbol, descriptor?: TypedPropertyDescriptor) => any; diff --git a/dist/decorators/api-extra-models.decorator.js b/dist/decorators/api-extra-models.decorator.js new file mode 100644 index 000000000..19e996c38 --- /dev/null +++ b/dist/decorators/api-extra-models.decorator.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiExtraModels = ApiExtraModels; +const constants_1 = require("../constants"); +function ApiExtraModels(...models) { + return (target, key, descriptor) => { + if (descriptor) { + const extraModels = Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, descriptor.value) || + []; + Reflect.defineMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, [...extraModels, ...models], descriptor.value); + return descriptor; + } + const extraModels = Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, target) || []; + Reflect.defineMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, [...extraModels, ...models], target); + return target; + }; +} diff --git a/dist/decorators/api-header.decorator.d.ts b/dist/decorators/api-header.decorator.d.ts new file mode 100644 index 000000000..522c425da --- /dev/null +++ b/dist/decorators/api-header.decorator.d.ts @@ -0,0 +1,7 @@ +import { ParameterObject } from '../interfaces/open-api-spec.interface'; +import { SwaggerEnumType } from '../types/swagger-enum.type'; +export interface ApiHeaderOptions extends Omit { + enum?: SwaggerEnumType; +} +export declare function ApiHeader(options: ApiHeaderOptions): MethodDecorator & ClassDecorator; +export declare const ApiHeaders: (headers: ApiHeaderOptions[]) => MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-header.decorator.js b/dist/decorators/api-header.decorator.js new file mode 100644 index 000000000..1bab6b0c0 --- /dev/null +++ b/dist/decorators/api-header.decorator.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiHeaders = void 0; +exports.ApiHeader = ApiHeader; +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const enum_utils_1 = require("../utils/enum.utils"); +const helpers_1 = require("./helpers"); +const defaultHeaderOptions = { + name: '' +}; +function ApiHeader(options) { + const param = (0, lodash_1.pickBy)({ + name: (0, lodash_1.isNil)(options.name) ? defaultHeaderOptions.name : options.name, + in: 'header', + description: options.description, + required: options.required, + examples: options.examples, + schema: Object.assign({ type: 'string' }, (options.schema || {})) + }, (0, lodash_1.negate)(lodash_1.isUndefined)); + if (options.enum) { + const enumValues = (0, enum_utils_1.getEnumValues)(options.enum); + param.schema = Object.assign(Object.assign({}, param.schema), { enum: enumValues, type: (0, enum_utils_1.getEnumType)(enumValues) }); + } + return (target, key, descriptor) => { + if (descriptor) { + return (0, helpers_1.createParamDecorator)(param, defaultHeaderOptions)(target, key, descriptor); + } + return (0, helpers_1.createClassDecorator)(constants_1.DECORATORS.API_HEADERS, [param])(target); + }; +} +const ApiHeaders = (headers) => { + return (target, key, descriptor) => { + headers.forEach((options) => ApiHeader(options)(target, key, descriptor)); + }; +}; +exports.ApiHeaders = ApiHeaders; diff --git a/dist/decorators/api-hide-property.decorator.d.ts b/dist/decorators/api-hide-property.decorator.d.ts new file mode 100644 index 000000000..dbeb840e7 --- /dev/null +++ b/dist/decorators/api-hide-property.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiHideProperty(): PropertyDecorator; diff --git a/dist/decorators/api-hide-property.decorator.js b/dist/decorators/api-hide-property.decorator.js new file mode 100644 index 000000000..689823f0a --- /dev/null +++ b/dist/decorators/api-hide-property.decorator.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiHideProperty = ApiHideProperty; +function ApiHideProperty() { + return (target, propertyKey) => { }; +} diff --git a/dist/decorators/api-include-endpoint.decorator.d.ts b/dist/decorators/api-include-endpoint.decorator.d.ts new file mode 100644 index 000000000..2fe671015 --- /dev/null +++ b/dist/decorators/api-include-endpoint.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiIncludeEndpoint(disable?: boolean): MethodDecorator; diff --git a/dist/decorators/api-include-endpoint.decorator.js b/dist/decorators/api-include-endpoint.decorator.js new file mode 100644 index 000000000..ae70e1e48 --- /dev/null +++ b/dist/decorators/api-include-endpoint.decorator.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiIncludeEndpoint = ApiIncludeEndpoint; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiIncludeEndpoint(disable = true) { + return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_INCLUDE_ENDPOINT, { + disable + }); +} diff --git a/dist/decorators/api-link.decorator.d.ts b/dist/decorators/api-link.decorator.d.ts new file mode 100644 index 000000000..376d5a635 --- /dev/null +++ b/dist/decorators/api-link.decorator.d.ts @@ -0,0 +1,7 @@ +import { Type } from '@nestjs/common'; +export interface ApiLinkOptions { + from: Type | Function; + fromField?: string; + routeParam: string; +} +export declare function ApiLink({ from, fromField, routeParam }: ApiLinkOptions): MethodDecorator; diff --git a/dist/decorators/api-link.decorator.js b/dist/decorators/api-link.decorator.js new file mode 100644 index 000000000..443f70678 --- /dev/null +++ b/dist/decorators/api-link.decorator.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiLink = ApiLink; +const constants_1 = require("../constants"); +function ApiLink({ from, fromField = 'id', routeParam }) { + return (controllerPrototype, key, descriptor) => { + var _a; + const { prototype } = from; + if (prototype) { + const links = (_a = Reflect.getMetadata(constants_1.DECORATORS.API_LINK, prototype)) !== null && _a !== void 0 ? _a : []; + links.push({ + method: descriptor.value, + prototype: controllerPrototype, + field: fromField, + parameter: routeParam + }); + Reflect.defineMetadata(constants_1.DECORATORS.API_LINK, links, prototype); + } + return descriptor; + }; +} diff --git a/dist/decorators/api-oauth2.decorator.d.ts b/dist/decorators/api-oauth2.decorator.d.ts new file mode 100644 index 000000000..507bff199 --- /dev/null +++ b/dist/decorators/api-oauth2.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiOAuth2(scopes: string[], name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-oauth2.decorator.js b/dist/decorators/api-oauth2.decorator.js new file mode 100644 index 000000000..a24be45fb --- /dev/null +++ b/dist/decorators/api-oauth2.decorator.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiOAuth2 = ApiOAuth2; +const api_security_decorator_1 = require("./api-security.decorator"); +function ApiOAuth2(scopes, name = 'oauth2') { + return (0, api_security_decorator_1.ApiSecurity)(name, scopes); +} diff --git a/dist/decorators/api-operation.decorator.d.ts b/dist/decorators/api-operation.decorator.d.ts new file mode 100644 index 000000000..c44be54dd --- /dev/null +++ b/dist/decorators/api-operation.decorator.d.ts @@ -0,0 +1,5 @@ +import { OperationObject } from '../interfaces/open-api-spec.interface'; +export type ApiOperationOptions = Partial; +export declare function ApiOperation(options: ApiOperationOptions, { overrideExisting }?: { + overrideExisting: boolean; +}): MethodDecorator; diff --git a/dist/decorators/api-operation.decorator.js b/dist/decorators/api-operation.decorator.js new file mode 100644 index 000000000..09f28ed69 --- /dev/null +++ b/dist/decorators/api-operation.decorator.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiOperation = ApiOperation; +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +const defaultOperationOptions = { + summary: '' +}; +function ApiOperation(options, { overrideExisting } = { overrideExisting: true }) { + return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_OPERATION, (0, lodash_1.pickBy)(Object.assign(Object.assign({}, defaultOperationOptions), options), (0, lodash_1.negate)(lodash_1.isUndefined)), { overrideExisting }); +} diff --git a/dist/decorators/api-param.decorator.d.ts b/dist/decorators/api-param.decorator.d.ts new file mode 100644 index 000000000..15ec7632e --- /dev/null +++ b/dist/decorators/api-param.decorator.d.ts @@ -0,0 +1,22 @@ +import { Type } from '@nestjs/common'; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +import { ParameterObject, SchemaObject } from '../interfaces/open-api-spec.interface'; +import { SwaggerEnumType } from '../types/swagger-enum.type'; +type ParameterOptions = Omit; +interface ApiParamCommonMetadata extends ParameterOptions { + type?: Type | Function | [Function] | string; + format?: string; + enum?: SwaggerEnumType; + enumName?: string; + enumSchema?: EnumSchemaAttributes; +} +type ApiParamMetadata = ApiParamCommonMetadata | (ApiParamCommonMetadata & { + enumName: string; + enumSchema?: EnumSchemaAttributes; +}); +interface ApiParamSchemaHost extends ParameterOptions { + schema: SchemaObject; +} +export type ApiParamOptions = ApiParamMetadata | ApiParamSchemaHost; +export declare function ApiParam(options: ApiParamOptions): MethodDecorator & ClassDecorator; +export {}; diff --git a/dist/decorators/api-param.decorator.js b/dist/decorators/api-param.decorator.js new file mode 100644 index 000000000..5c63f10ab --- /dev/null +++ b/dist/decorators/api-param.decorator.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiParam = ApiParam; +const lodash_1 = require("lodash"); +const enum_utils_1 = require("../utils/enum.utils"); +const helpers_1 = require("./helpers"); +const defaultParamOptions = { + name: '', + required: true +}; +function ApiParam(options) { + const param = Object.assign({ name: (0, lodash_1.isNil)(options.name) ? defaultParamOptions.name : options.name, in: 'path' }, (0, lodash_1.omit)(options, 'enum')); + if ((0, enum_utils_1.isEnumDefined)(options)) { + (0, enum_utils_1.addEnumSchema)(param, options); + } + return (0, helpers_1.createParamDecorator)(param, defaultParamOptions); +} diff --git a/dist/decorators/api-produces.decorator.d.ts b/dist/decorators/api-produces.decorator.d.ts new file mode 100644 index 000000000..3bddc01e1 --- /dev/null +++ b/dist/decorators/api-produces.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiProduces(...mimeTypes: string[]): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-produces.decorator.js b/dist/decorators/api-produces.decorator.js new file mode 100644 index 000000000..3ef2d8290 --- /dev/null +++ b/dist/decorators/api-produces.decorator.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiProduces = ApiProduces; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiProduces(...mimeTypes) { + return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_PRODUCES, mimeTypes); +} diff --git a/dist/decorators/api-property.decorator.d.ts b/dist/decorators/api-property.decorator.d.ts new file mode 100644 index 000000000..b2f562550 --- /dev/null +++ b/dist/decorators/api-property.decorator.d.ts @@ -0,0 +1,15 @@ +import { Type } from '@nestjs/common'; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; +export type ApiPropertyCommonOptions = SchemaObjectMetadata & { + 'x-enumNames'?: string[]; + link?: () => Type | Function; +}; +export type ApiPropertyOptions = ApiPropertyCommonOptions | (ApiPropertyCommonOptions & { + enumName: string; + enumSchema?: EnumSchemaAttributes; +}); +export declare function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator; +export declare function createApiPropertyDecorator(options?: ApiPropertyOptions, overrideExisting?: boolean): PropertyDecorator; +export declare function ApiPropertyOptional(options?: ApiPropertyOptions): PropertyDecorator; +export declare function ApiResponseProperty(options?: Pick): PropertyDecorator; diff --git a/dist/decorators/api-property.decorator.js b/dist/decorators/api-property.decorator.js new file mode 100644 index 000000000..83bec1a25 --- /dev/null +++ b/dist/decorators/api-property.decorator.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiProperty = ApiProperty; +exports.createApiPropertyDecorator = createApiPropertyDecorator; +exports.ApiPropertyOptional = ApiPropertyOptional; +exports.ApiResponseProperty = ApiResponseProperty; +const constants_1 = require("../constants"); +const enum_utils_1 = require("../utils/enum.utils"); +const helpers_1 = require("./helpers"); +const isEnumArray = (opts) => opts.isArray && 'enum' in opts && opts.enum !== undefined; +function ApiProperty(options = {}) { + return createApiPropertyDecorator(options); +} +function createApiPropertyDecorator(options = {}, overrideExisting = true) { + const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(options.type, options.isArray); + options = Object.assign(Object.assign({}, options), { type, + isArray }); + if (isEnumArray(options)) { + options.type = 'array'; + const enumValues = (0, enum_utils_1.getEnumValues)(options.enum); + options.items = { + type: (0, enum_utils_1.getEnumType)(enumValues), + enum: enumValues + }; + delete options.enum; + } + else if ('enum' in options && options.enum !== undefined) { + const enumValues = (0, enum_utils_1.getEnumValues)(options.enum); + options.enum = enumValues; + options.type = (0, enum_utils_1.getEnumType)(enumValues); + } + if (Array.isArray(options.type)) { + options.type = 'array'; + options.items = { + type: 'array', + items: { + type: options.type[0] + } + }; + } + return (0, helpers_1.createPropertyDecorator)(constants_1.DECORATORS.API_MODEL_PROPERTIES, options, overrideExisting); +} +function ApiPropertyOptional(options = {}) { + return ApiProperty(Object.assign(Object.assign({}, options), { required: false })); +} +function ApiResponseProperty(options = {}) { + return ApiProperty(Object.assign({ readOnly: true }, options)); +} diff --git a/dist/decorators/api-query.decorator.d.ts b/dist/decorators/api-query.decorator.d.ts new file mode 100644 index 000000000..474727802 --- /dev/null +++ b/dist/decorators/api-query.decorator.d.ts @@ -0,0 +1,24 @@ +import { Type } from '@nestjs/common'; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +import { ParameterObject, ReferenceObject, SchemaObject } from '../interfaces/open-api-spec.interface'; +import { SwaggerEnumType } from '../types/swagger-enum.type'; +type ParameterOptions = Omit; +interface ApiQueryCommonMetadata extends ParameterOptions { + type?: Type | Function | [Function] | string; + isArray?: boolean; + enum?: SwaggerEnumType; +} +export type ApiQueryMetadata = ApiQueryCommonMetadata | ({ + name: string; +} & ApiQueryCommonMetadata & Omit) | ({ + name?: string; + enumName: string; + enumSchema?: EnumSchemaAttributes; +} & ApiQueryCommonMetadata); +interface ApiQuerySchemaHost extends ParameterOptions { + name?: string; + schema: SchemaObject | ReferenceObject; +} +export type ApiQueryOptions = ApiQueryMetadata | ApiQuerySchemaHost; +export declare function ApiQuery(options: ApiQueryOptions): MethodDecorator & ClassDecorator; +export {}; diff --git a/dist/decorators/api-query.decorator.js b/dist/decorators/api-query.decorator.js new file mode 100644 index 000000000..6080bdaf6 --- /dev/null +++ b/dist/decorators/api-query.decorator.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiQuery = ApiQuery; +const lodash_1 = require("lodash"); +const enum_utils_1 = require("../utils/enum.utils"); +const helpers_1 = require("./helpers"); +const defaultQueryOptions = { + name: '', + required: true +}; +function ApiQuery(options) { + const apiQueryMetadata = options; + const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(apiQueryMetadata.type, apiQueryMetadata.isArray); + const param = Object.assign(Object.assign({ name: 'name' in options ? options.name : defaultQueryOptions.name, in: 'query' }, (0, lodash_1.omit)(options, 'enum')), { type }); + if ((0, enum_utils_1.isEnumArray)(options)) { + (0, enum_utils_1.addEnumArraySchema)(param, options); + } + else if ((0, enum_utils_1.isEnumDefined)(options)) { + (0, enum_utils_1.addEnumSchema)(param, options); + } + if (isArray) { + param.isArray = isArray; + } + return (0, helpers_1.createParamDecorator)(param, defaultQueryOptions); +} diff --git a/dist/decorators/api-response.decorator.d.ts b/dist/decorators/api-response.decorator.d.ts new file mode 100644 index 000000000..5a6ad4460 --- /dev/null +++ b/dist/decorators/api-response.decorator.d.ts @@ -0,0 +1,39 @@ +import { Type } from '@nestjs/common'; +import { ReferenceObject, ResponseObject, SchemaObject } from '../interfaces/open-api-spec.interface'; +type ApiResponseExampleValue = any; +export interface ApiResponseExamples { + summary: string; + value: ApiResponseExampleValue; +} +export interface ApiResponseCommonMetadata extends Omit { + status?: number | 'default' | '1XX' | '2XX' | '3XX' | '4XX' | '5XX'; + type?: Type | Function | [Function] | string; + isArray?: boolean; + description?: string; +} +export type ApiResponseMetadata = (ApiResponseCommonMetadata & { + example?: ApiResponseExampleValue; +}) | (ApiResponseCommonMetadata & { + examples?: { + [key: string]: ApiResponseExamples; + }; +}); +export interface ApiResponseSchemaHost extends Omit { + schema: SchemaObject & Partial; + status?: number | 'default' | '1XX' | '2XX' | '3XX' | '4XX' | '5XX'; + description?: string; +} +export type ApiResponseOptions = ApiResponseMetadata | ApiResponseSchemaHost; +export type ApiResponseNoStatusOptions = (Omit & { + example?: ApiResponseExampleValue; +}) | (Omit & { + examples?: { + [key: string]: ApiResponseExamples; + }; +}) | Omit; +export declare function ApiResponse(options: ApiResponseOptions, { overrideExisting }?: { + overrideExisting: boolean; +}): MethodDecorator & ClassDecorator; +export declare const ApiContinueResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiSwitchingProtocolsResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiProcessingResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiEarlyhintsResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiOkResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiCreatedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiAcceptedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNonAuthoritativeInformationResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNoContentResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiResetContentResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPartialContentResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiAmbiguousResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiMovedPermanentlyResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiFoundResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiSeeOtherResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotModifiedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiTemporaryRedirectResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPermanentRedirectResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiBadRequestResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUnauthorizedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPaymentRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiForbiddenResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotFoundResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiMethodNotAllowedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotAcceptableResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiProxyAuthenticationRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiRequestTimeoutResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiConflictResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiGoneResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiLengthRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPreconditionFailedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPayloadTooLargeResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUriTooLongResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUnsupportedMediaTypeResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiRequestedRangeNotSatisfiableResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiExpectationFailedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiIAmATeapotResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiMisdirectedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUnprocessableEntityResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiFailedDependencyResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPreconditionRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiTooManyRequestsResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiInternalServerErrorResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotImplementedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiBadGatewayResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiServiceUnavailableResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiGatewayTimeoutResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiHttpVersionNotSupportedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator; +export declare const ApiDefaultResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator; +export {}; diff --git a/dist/decorators/api-response.decorator.js b/dist/decorators/api-response.decorator.js new file mode 100644 index 000000000..3e873a5d9 --- /dev/null +++ b/dist/decorators/api-response.decorator.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiDefaultResponse = exports.ApiHttpVersionNotSupportedResponse = exports.ApiGatewayTimeoutResponse = exports.ApiServiceUnavailableResponse = exports.ApiBadGatewayResponse = exports.ApiNotImplementedResponse = exports.ApiInternalServerErrorResponse = exports.ApiTooManyRequestsResponse = exports.ApiPreconditionRequiredResponse = exports.ApiFailedDependencyResponse = exports.ApiUnprocessableEntityResponse = exports.ApiMisdirectedResponse = exports.ApiIAmATeapotResponse = exports.ApiExpectationFailedResponse = exports.ApiRequestedRangeNotSatisfiableResponse = exports.ApiUnsupportedMediaTypeResponse = exports.ApiUriTooLongResponse = exports.ApiPayloadTooLargeResponse = exports.ApiPreconditionFailedResponse = exports.ApiLengthRequiredResponse = exports.ApiGoneResponse = exports.ApiConflictResponse = exports.ApiRequestTimeoutResponse = exports.ApiProxyAuthenticationRequiredResponse = exports.ApiNotAcceptableResponse = exports.ApiMethodNotAllowedResponse = exports.ApiNotFoundResponse = exports.ApiForbiddenResponse = exports.ApiPaymentRequiredResponse = exports.ApiUnauthorizedResponse = exports.ApiBadRequestResponse = exports.ApiPermanentRedirectResponse = exports.ApiTemporaryRedirectResponse = exports.ApiNotModifiedResponse = exports.ApiSeeOtherResponse = exports.ApiFoundResponse = exports.ApiMovedPermanentlyResponse = exports.ApiAmbiguousResponse = exports.ApiPartialContentResponse = exports.ApiResetContentResponse = exports.ApiNoContentResponse = exports.ApiNonAuthoritativeInformationResponse = exports.ApiAcceptedResponse = exports.ApiCreatedResponse = exports.ApiOkResponse = exports.ApiEarlyhintsResponse = exports.ApiProcessingResponse = exports.ApiSwitchingProtocolsResponse = exports.ApiContinueResponse = void 0; +exports.ApiResponse = ApiResponse; +const common_1 = require("@nestjs/common"); +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiResponse(options, { overrideExisting } = { overrideExisting: true }) { + const apiResponseMetadata = options; + const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(apiResponseMetadata.type, apiResponseMetadata.isArray); + apiResponseMetadata.type = type; + apiResponseMetadata.isArray = isArray; + options.description = options.description ? options.description : ''; + const groupedMetadata = { + [options.status || 'default']: (0, lodash_1.omit)(options, 'status') + }; + return (target, key, descriptor) => { + if (descriptor) { + const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, descriptor.value); + if (responses && !overrideExisting) { + return descriptor; + } + Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), descriptor.value); + return descriptor; + } + const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, target); + if (responses && !overrideExisting) { + return descriptor; + } + Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), target); + return target; + }; +} +const decorators = {}; +const statusList = Object.keys(common_1.HttpStatus) + .filter((key) => !isNaN(Number(common_1.HttpStatus[key]))) + .map((key) => { + const functionName = key + .split('_') + .map((strToken) => `${strToken[0].toUpperCase()}${strToken.slice(1).toLowerCase()}`) + .join(''); + return { + code: Number(common_1.HttpStatus[key]), + functionName: `Api${functionName}Response` + }; +}); +statusList.forEach(({ code, functionName }) => { + decorators[functionName] = function (options = {}) { + return ApiResponse(Object.assign(Object.assign({}, options), { status: code })); + }; +}); +exports.ApiContinueResponse = decorators.ApiContinueResponse, exports.ApiSwitchingProtocolsResponse = decorators.ApiSwitchingProtocolsResponse, exports.ApiProcessingResponse = decorators.ApiProcessingResponse, exports.ApiEarlyhintsResponse = decorators.ApiEarlyhintsResponse, exports.ApiOkResponse = decorators.ApiOkResponse, exports.ApiCreatedResponse = decorators.ApiCreatedResponse, exports.ApiAcceptedResponse = decorators.ApiAcceptedResponse, exports.ApiNonAuthoritativeInformationResponse = decorators.ApiNonAuthoritativeInformationResponse, exports.ApiNoContentResponse = decorators.ApiNoContentResponse, exports.ApiResetContentResponse = decorators.ApiResetContentResponse, exports.ApiPartialContentResponse = decorators.ApiPartialContentResponse, exports.ApiAmbiguousResponse = decorators.ApiAmbiguousResponse, exports.ApiMovedPermanentlyResponse = decorators.ApiMovedPermanentlyResponse, exports.ApiFoundResponse = decorators.ApiFoundResponse, exports.ApiSeeOtherResponse = decorators.ApiSeeOtherResponse, exports.ApiNotModifiedResponse = decorators.ApiNotModifiedResponse, exports.ApiTemporaryRedirectResponse = decorators.ApiTemporaryRedirectResponse, exports.ApiPermanentRedirectResponse = decorators.ApiPermanentRedirectResponse, exports.ApiBadRequestResponse = decorators.ApiBadRequestResponse, exports.ApiUnauthorizedResponse = decorators.ApiUnauthorizedResponse, exports.ApiPaymentRequiredResponse = decorators.ApiPaymentRequiredResponse, exports.ApiForbiddenResponse = decorators.ApiForbiddenResponse, exports.ApiNotFoundResponse = decorators.ApiNotFoundResponse, exports.ApiMethodNotAllowedResponse = decorators.ApiMethodNotAllowedResponse, exports.ApiNotAcceptableResponse = decorators.ApiNotAcceptableResponse, exports.ApiProxyAuthenticationRequiredResponse = decorators.ApiProxyAuthenticationRequiredResponse, exports.ApiRequestTimeoutResponse = decorators.ApiRequestTimeoutResponse, exports.ApiConflictResponse = decorators.ApiConflictResponse, exports.ApiGoneResponse = decorators.ApiGoneResponse, exports.ApiLengthRequiredResponse = decorators.ApiLengthRequiredResponse, exports.ApiPreconditionFailedResponse = decorators.ApiPreconditionFailedResponse, exports.ApiPayloadTooLargeResponse = decorators.ApiPayloadTooLargeResponse, exports.ApiUriTooLongResponse = decorators.ApiUriTooLongResponse, exports.ApiUnsupportedMediaTypeResponse = decorators.ApiUnsupportedMediaTypeResponse, exports.ApiRequestedRangeNotSatisfiableResponse = decorators.ApiRequestedRangeNotSatisfiableResponse, exports.ApiExpectationFailedResponse = decorators.ApiExpectationFailedResponse, exports.ApiIAmATeapotResponse = decorators.ApiIAmATeapotResponse, exports.ApiMisdirectedResponse = decorators.ApiMisdirectedResponse, exports.ApiUnprocessableEntityResponse = decorators.ApiUnprocessableEntityResponse, exports.ApiFailedDependencyResponse = decorators.ApiFailedDependencyResponse, exports.ApiPreconditionRequiredResponse = decorators.ApiPreconditionRequiredResponse, exports.ApiTooManyRequestsResponse = decorators.ApiTooManyRequestsResponse, exports.ApiInternalServerErrorResponse = decorators.ApiInternalServerErrorResponse, exports.ApiNotImplementedResponse = decorators.ApiNotImplementedResponse, exports.ApiBadGatewayResponse = decorators.ApiBadGatewayResponse, exports.ApiServiceUnavailableResponse = decorators.ApiServiceUnavailableResponse, exports.ApiGatewayTimeoutResponse = decorators.ApiGatewayTimeoutResponse, exports.ApiHttpVersionNotSupportedResponse = decorators.ApiHttpVersionNotSupportedResponse; +const ApiDefaultResponse = (options = {}) => ApiResponse(Object.assign(Object.assign({}, options), { status: 'default' })); +exports.ApiDefaultResponse = ApiDefaultResponse; diff --git a/dist/decorators/api-schema.decorator.d.ts b/dist/decorators/api-schema.decorator.d.ts new file mode 100644 index 000000000..c3f6f7453 --- /dev/null +++ b/dist/decorators/api-schema.decorator.d.ts @@ -0,0 +1,6 @@ +import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; +export interface ApiSchemaOptions extends Pick { + name?: string; + description?: string; +} +export declare function ApiSchema(options?: ApiSchemaOptions): ClassDecorator; diff --git a/dist/decorators/api-schema.decorator.js b/dist/decorators/api-schema.decorator.js new file mode 100644 index 000000000..ddcd4498c --- /dev/null +++ b/dist/decorators/api-schema.decorator.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiSchema = ApiSchema; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiSchema(options) { + return (0, helpers_1.createClassDecorator)(constants_1.DECORATORS.API_SCHEMA, [options]); +} diff --git a/dist/decorators/api-security.decorator.d.ts b/dist/decorators/api-security.decorator.d.ts new file mode 100644 index 000000000..ddba129c9 --- /dev/null +++ b/dist/decorators/api-security.decorator.d.ts @@ -0,0 +1,2 @@ +import { SecurityRequirementObject } from '../interfaces/open-api-spec.interface'; +export declare function ApiSecurity(name: string | SecurityRequirementObject, requirements?: string[]): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-security.decorator.js b/dist/decorators/api-security.decorator.js new file mode 100644 index 000000000..8110f2d36 --- /dev/null +++ b/dist/decorators/api-security.decorator.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiSecurity = ApiSecurity; +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const extend_metadata_util_1 = require("../utils/extend-metadata.util"); +function ApiSecurity(name, requirements = []) { + let metadata; + if ((0, lodash_1.isString)(name)) { + metadata = [{ [name]: requirements }]; + } + else { + metadata = [name]; + } + return (target, key, descriptor) => { + if (descriptor) { + metadata = (0, extend_metadata_util_1.extendMetadata)(metadata, constants_1.DECORATORS.API_SECURITY, descriptor.value); + Reflect.defineMetadata(constants_1.DECORATORS.API_SECURITY, metadata, descriptor.value); + return descriptor; + } + metadata = (0, extend_metadata_util_1.extendMetadata)(metadata, constants_1.DECORATORS.API_SECURITY, target); + Reflect.defineMetadata(constants_1.DECORATORS.API_SECURITY, metadata, target); + return target; + }; +} diff --git a/dist/decorators/api-use-tags.decorator.d.ts b/dist/decorators/api-use-tags.decorator.d.ts new file mode 100644 index 000000000..53074190f --- /dev/null +++ b/dist/decorators/api-use-tags.decorator.d.ts @@ -0,0 +1 @@ +export declare function ApiTags(...tags: string[]): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-use-tags.decorator.js b/dist/decorators/api-use-tags.decorator.js new file mode 100644 index 000000000..717da892a --- /dev/null +++ b/dist/decorators/api-use-tags.decorator.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiTags = ApiTags; +const constants_1 = require("../constants"); +const helpers_1 = require("./helpers"); +function ApiTags(...tags) { + return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_TAGS, tags); +} diff --git a/dist/decorators/helpers.d.ts b/dist/decorators/helpers.d.ts new file mode 100644 index 000000000..5dda2c47c --- /dev/null +++ b/dist/decorators/helpers.d.ts @@ -0,0 +1,8 @@ +export declare function createMethodDecorator(metakey: string, metadata: T, { overrideExisting }?: { + overrideExisting: boolean; +}): MethodDecorator; +export declare function createClassDecorator = any>(metakey: string, metadata?: T): ClassDecorator; +export declare function createPropertyDecorator = any>(metakey: string, metadata: T, overrideExisting?: boolean): PropertyDecorator; +export declare function createMixedDecorator(metakey: string, metadata: T): MethodDecorator & ClassDecorator; +export declare function createParamDecorator = any>(metadata: T, initial: Partial): MethodDecorator & ClassDecorator; +export declare function getTypeIsArrayTuple(input: Function | [Function] | undefined | string | Record, isArrayFlag: boolean): [Function | undefined, boolean]; diff --git a/dist/decorators/helpers.js b/dist/decorators/helpers.js new file mode 100644 index 000000000..b4cf0bc01 --- /dev/null +++ b/dist/decorators/helpers.js @@ -0,0 +1,123 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createMethodDecorator = createMethodDecorator; +exports.createClassDecorator = createClassDecorator; +exports.createPropertyDecorator = createPropertyDecorator; +exports.createMixedDecorator = createMixedDecorator; +exports.createParamDecorator = createParamDecorator; +exports.getTypeIsArrayTuple = getTypeIsArrayTuple; +const constants_1 = require("@nestjs/common/constants"); +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +const lodash_1 = require("lodash"); +const constants_2 = require("../constants"); +const plugin_constants_1 = require("../plugin/plugin-constants"); +function createMethodDecorator(metakey, metadata, { overrideExisting } = { overrideExisting: true }) { + return (target, key, descriptor) => { + if (typeof metadata === 'object') { + const prevValue = Reflect.getMetadata(metakey, descriptor.value); + if (prevValue && !overrideExisting) { + return descriptor; + } + Reflect.defineMetadata(metakey, Object.assign(Object.assign({}, prevValue), metadata), descriptor.value); + return descriptor; + } + Reflect.defineMetadata(metakey, metadata, descriptor.value); + return descriptor; + }; +} +function createClassDecorator(metakey, metadata = []) { + return (target) => { + const prevValue = Reflect.getMetadata(metakey, target) || []; + Reflect.defineMetadata(metakey, [...prevValue, ...metadata], target); + return target; + }; +} +function createPropertyDecorator(metakey, metadata, overrideExisting = true) { + return (target, propertyKey) => { + var _a, _b, _c, _d; + const properties = Reflect.getMetadata(constants_2.DECORATORS.API_MODEL_PROPERTIES_ARRAY, target) || []; + const key = `:${propertyKey}`; + if (!properties.includes(key)) { + Reflect.defineMetadata(constants_2.DECORATORS.API_MODEL_PROPERTIES_ARRAY, [...properties, `:${propertyKey}`], target); + } + const existingMetadata = Reflect.getMetadata(metakey, target, propertyKey); + if (existingMetadata) { + const newMetadata = (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined)); + const metadataToSave = overrideExisting + ? Object.assign(Object.assign({}, existingMetadata), newMetadata) : Object.assign(Object.assign({}, newMetadata), existingMetadata); + Reflect.defineMetadata(metakey, metadataToSave, target, propertyKey); + } + else { + const type = (_d = (_c = (_b = (_a = target === null || target === void 0 ? void 0 : target.constructor) === null || _a === void 0 ? void 0 : _a[plugin_constants_1.METADATA_FACTORY_NAME]) === null || _b === void 0 ? void 0 : _b.call(_a)[propertyKey]) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : Reflect.getMetadata('design:type', target, propertyKey); + Reflect.defineMetadata(metakey, Object.assign({ type }, (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined))), target, propertyKey); + } + }; +} +function createMixedDecorator(metakey, metadata) { + return (target, key, descriptor) => { + if (descriptor) { + let metadatas; + if (Array.isArray(metadata)) { + const previousMetadata = Reflect.getMetadata(metakey, descriptor.value) || []; + metadatas = [...previousMetadata, ...metadata]; + } + else { + const previousMetadata = Reflect.getMetadata(metakey, descriptor.value) || {}; + metadatas = Object.assign(Object.assign({}, previousMetadata), metadata); + } + Reflect.defineMetadata(metakey, metadatas, descriptor.value); + return descriptor; + } + let metadatas; + if (Array.isArray(metadata)) { + const previousMetadata = Reflect.getMetadata(metakey, target) || []; + metadatas = [...previousMetadata, ...metadata]; + } + else { + const previousMetadata = Reflect.getMetadata(metakey, target) || {}; + metadatas = Object.assign(Object.assign({}, previousMetadata), metadata); + } + Reflect.defineMetadata(metakey, metadatas, target); + return target; + }; +} +function createParamDecorator(metadata, initial) { + return (target, key, descriptor) => { + const paramOptions = Object.assign(Object.assign({}, initial), (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined))); + if (descriptor) { + const parameters = Reflect.getMetadata(constants_2.DECORATORS.API_PARAMETERS, descriptor.value) || []; + Reflect.defineMetadata(constants_2.DECORATORS.API_PARAMETERS, [...parameters, paramOptions], descriptor.value); + return descriptor; + } + if (typeof target === 'object') { + return target; + } + const propertyKeys = Object.getOwnPropertyNames(target.prototype); + for (const propertyKey of propertyKeys) { + if ((0, shared_utils_1.isConstructor)(propertyKey)) { + continue; + } + const methodDescriptor = Object.getOwnPropertyDescriptor(target.prototype, propertyKey); + if (!methodDescriptor) { + continue; + } + const isApiMethod = Reflect.hasMetadata(constants_1.METHOD_METADATA, methodDescriptor.value); + if (!isApiMethod) { + continue; + } + const parameters = Reflect.getMetadata(constants_2.DECORATORS.API_PARAMETERS, methodDescriptor.value) || []; + Reflect.defineMetadata(constants_2.DECORATORS.API_PARAMETERS, [...parameters, paramOptions], methodDescriptor.value); + } + }; +} +function getTypeIsArrayTuple(input, isArrayFlag) { + if (!input) { + return [input, isArrayFlag]; + } + if (isArrayFlag) { + return [input, isArrayFlag]; + } + const isInputArray = (0, lodash_1.isArray)(input); + const type = isInputArray ? input[0] : input; + return [type, isInputArray]; +} diff --git a/dist/decorators/index.d.ts b/dist/decorators/index.d.ts new file mode 100644 index 000000000..29c147d7d --- /dev/null +++ b/dist/decorators/index.d.ts @@ -0,0 +1,25 @@ +export * from './api-basic.decorator'; +export * from './api-bearer.decorator'; +export * from './api-body.decorator'; +export * from './api-consumes.decorator'; +export * from './api-cookie.decorator'; +export * from './api-default-getter.decorator'; +export * from './api-exclude-endpoint.decorator'; +export * from './api-include-endpoint.decorator'; +export * from './api-exclude-controller.decorator'; +export * from './api-extra-models.decorator'; +export * from './api-header.decorator'; +export * from './api-hide-property.decorator'; +export * from './api-link.decorator'; +export * from './api-oauth2.decorator'; +export * from './api-operation.decorator'; +export * from './api-param.decorator'; +export * from './api-produces.decorator'; +export { ApiProperty, ApiPropertyOptional, ApiPropertyOptions, ApiResponseProperty } from './api-property.decorator'; +export * from './api-query.decorator'; +export * from './api-response.decorator'; +export * from './api-security.decorator'; +export * from './api-use-tags.decorator'; +export * from './api-callbacks.decorator'; +export * from './api-extension.decorator'; +export * from './api-schema.decorator'; diff --git a/dist/decorators/index.js b/dist/decorators/index.js new file mode 100644 index 000000000..825bdbcee --- /dev/null +++ b/dist/decorators/index.js @@ -0,0 +1,45 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiResponseProperty = exports.ApiPropertyOptional = exports.ApiProperty = void 0; +__exportStar(require("./api-basic.decorator"), exports); +__exportStar(require("./api-bearer.decorator"), exports); +__exportStar(require("./api-body.decorator"), exports); +__exportStar(require("./api-consumes.decorator"), exports); +__exportStar(require("./api-cookie.decorator"), exports); +__exportStar(require("./api-default-getter.decorator"), exports); +__exportStar(require("./api-exclude-endpoint.decorator"), exports); +__exportStar(require("./api-include-endpoint.decorator"), exports); +__exportStar(require("./api-exclude-controller.decorator"), exports); +__exportStar(require("./api-extra-models.decorator"), exports); +__exportStar(require("./api-header.decorator"), exports); +__exportStar(require("./api-hide-property.decorator"), exports); +__exportStar(require("./api-link.decorator"), exports); +__exportStar(require("./api-oauth2.decorator"), exports); +__exportStar(require("./api-operation.decorator"), exports); +__exportStar(require("./api-param.decorator"), exports); +__exportStar(require("./api-produces.decorator"), exports); +var api_property_decorator_1 = require("./api-property.decorator"); +Object.defineProperty(exports, "ApiProperty", { enumerable: true, get: function () { return api_property_decorator_1.ApiProperty; } }); +Object.defineProperty(exports, "ApiPropertyOptional", { enumerable: true, get: function () { return api_property_decorator_1.ApiPropertyOptional; } }); +Object.defineProperty(exports, "ApiResponseProperty", { enumerable: true, get: function () { return api_property_decorator_1.ApiResponseProperty; } }); +__exportStar(require("./api-query.decorator"), exports); +__exportStar(require("./api-response.decorator"), exports); +__exportStar(require("./api-security.decorator"), exports); +__exportStar(require("./api-use-tags.decorator"), exports); +__exportStar(require("./api-callbacks.decorator"), exports); +__exportStar(require("./api-extension.decorator"), exports); +__exportStar(require("./api-schema.decorator"), exports); diff --git a/dist/document-builder.d.ts b/dist/document-builder.d.ts new file mode 100644 index 000000000..073f6afc8 --- /dev/null +++ b/dist/document-builder.d.ts @@ -0,0 +1,29 @@ +import { ApiResponseOptions } from './decorators/api-response.decorator'; +import { OpenAPIObject } from './interfaces'; +import { ExtensionLocation, ExternalDocumentationObject, ParameterObject, SecurityRequirementObject, SecuritySchemeObject, ServerVariableObject } from './interfaces/open-api-spec.interface'; +export declare class DocumentBuilder { + private readonly logger; + private readonly document; + setTitle(title: string): this; + setDescription(description: string): this; + setVersion(version: string): this; + setTermsOfService(termsOfService: string): this; + setContact(name: string, url: string, email: string): this; + setLicense(name: string, url: string): this; + setOpenAPIVersion(version: string): this; + addServer(url: string, description?: string, variables?: Record): this; + setExternalDoc(description: string, url: string): this; + setBasePath(path: string): this; + addTag(name: string, description?: string, externalDocs?: ExternalDocumentationObject): this; + addExtension(extensionKey: string, extensionProperties: any, location?: ExtensionLocation): this; + addSecurity(name: string, options: SecuritySchemeObject): this; + addGlobalResponse(...respones: ApiResponseOptions[]): this; + addGlobalParameters(...parameters: Omit[]): this; + addSecurityRequirements(name: string | SecurityRequirementObject, requirements?: string[]): this; + addBearerAuth(options?: SecuritySchemeObject, name?: string): this; + addOAuth2(options?: SecuritySchemeObject, name?: string): this; + addApiKey(options?: SecuritySchemeObject, name?: string): this; + addBasicAuth(options?: SecuritySchemeObject, name?: string): this; + addCookieAuth(cookieName?: string, options?: SecuritySchemeObject, securityName?: string): this; + build(): Omit; +} diff --git a/dist/document-builder.js b/dist/document-builder.js new file mode 100644 index 000000000..20c1b2cb9 --- /dev/null +++ b/dist/document-builder.js @@ -0,0 +1,141 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DocumentBuilder = void 0; +const common_1 = require("@nestjs/common"); +const lodash_1 = require("lodash"); +const document_base_1 = require("./fixtures/document.base"); +const global_parameters_storage_1 = require("./storages/global-parameters.storage"); +const global_responses_storage_1 = require("./storages/global-responses.storage"); +class DocumentBuilder { + constructor() { + this.logger = new common_1.Logger(DocumentBuilder.name); + this.document = (0, document_base_1.buildDocumentBase)(); + } + setTitle(title) { + this.document.info.title = title; + return this; + } + setDescription(description) { + this.document.info.description = description; + return this; + } + setVersion(version) { + this.document.info.version = version; + return this; + } + setTermsOfService(termsOfService) { + this.document.info.termsOfService = termsOfService; + return this; + } + setContact(name, url, email) { + this.document.info.contact = { name, url, email }; + return this; + } + setLicense(name, url) { + this.document.info.license = { name, url }; + return this; + } + setOpenAPIVersion(version) { + if (version.match(/^\d\.\d\.\d$/)) { + this.document.openapi = version; + } + else { + this.logger.warn('The OpenApi version is invalid. Expecting format "x.x.x"'); + } + return this; + } + addServer(url, description, variables) { + this.document.servers.push({ url, description, variables }); + return this; + } + setExternalDoc(description, url) { + this.document.externalDocs = { description, url }; + return this; + } + setBasePath(path) { + this.logger.warn('The "setBasePath" method has been deprecated. Now, a global prefix is populated automatically. If you want to ignore it, take a look here: https://docs.nestjs.com/recipes/swagger#global-prefix. Alternatively, you can use "addServer" method to set up multiple different paths.'); + return this; + } + addTag(name, description = '', externalDocs) { + this.document.tags = this.document.tags.concat((0, lodash_1.pickBy)({ + name, + description, + externalDocs + }, (0, lodash_1.negate)(lodash_1.isUndefined))); + return this; + } + addExtension(extensionKey, extensionProperties, location = 'root') { + if (!extensionKey.startsWith('x-')) { + throw new Error('Extension key is not prefixed. Please ensure you prefix it with `x-`.'); + } + if (location === 'root') { + this.document[extensionKey] = (0, lodash_1.clone)(extensionProperties); + } + else { + this.document[location][extensionKey] = (0, lodash_1.clone)(extensionProperties); + } + return this; + } + addSecurity(name, options) { + this.document.components.securitySchemes = Object.assign(Object.assign({}, (this.document.components.securitySchemes || {})), { [name]: options }); + return this; + } + addGlobalResponse(...respones) { + const groupedByStatus = respones.reduce((acc, response) => { + const { status = 'default' } = response; + acc[status] = (0, lodash_1.omit)(response, 'status'); + return acc; + }, {}); + global_responses_storage_1.GlobalResponsesStorage.add(groupedByStatus); + return this; + } + addGlobalParameters(...parameters) { + global_parameters_storage_1.GlobalParametersStorage.add(...parameters); + return this; + } + addSecurityRequirements(name, requirements = []) { + let securityRequirement; + if ((0, lodash_1.isString)(name)) { + securityRequirement = { [name]: requirements }; + } + else { + securityRequirement = name; + } + this.document.security = (this.document.security || []).concat(Object.assign({}, securityRequirement)); + return this; + } + addBearerAuth(options = { + type: 'http' + }, name = 'bearer') { + this.addSecurity(name, Object.assign({ scheme: 'bearer', bearerFormat: 'JWT' }, options)); + return this; + } + addOAuth2(options = { + type: 'oauth2' + }, name = 'oauth2') { + this.addSecurity(name, Object.assign({ type: 'oauth2', flows: {} }, options)); + return this; + } + addApiKey(options = { + type: 'apiKey' + }, name = 'api_key') { + this.addSecurity(name, Object.assign({ type: 'apiKey', in: 'header', name }, options)); + return this; + } + addBasicAuth(options = { + type: 'http' + }, name = 'basic') { + this.addSecurity(name, Object.assign({ type: 'http', scheme: 'basic' }, options)); + return this; + } + addCookieAuth(cookieName = 'connect.sid', options = { + type: 'apiKey' + }, securityName = 'cookie') { + this.addSecurity(securityName, Object.assign({ type: 'apiKey', in: 'cookie', name: cookieName }, options)); + return this; + } + build() { + return this.document; + } +} +exports.DocumentBuilder = DocumentBuilder; diff --git a/dist/explorers/api-callbacks.explorer.d.ts b/dist/explorers/api-callbacks.explorer.d.ts new file mode 100644 index 000000000..a29febb0b --- /dev/null +++ b/dist/explorers/api-callbacks.explorer.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare const exploreApiCallbacksMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-callbacks.explorer.js b/dist/explorers/api-callbacks.explorer.js new file mode 100644 index 000000000..72958c19a --- /dev/null +++ b/dist/explorers/api-callbacks.explorer.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiCallbacksMetadata = void 0; +const constants_1 = require("../constants"); +const utils_1 = require("../utils"); +const exploreApiCallbacksMetadata = (instance, prototype, method) => { + const callbacksData = Reflect.getMetadata(constants_1.DECORATORS.API_CALLBACKS, method); + if (!callbacksData) + return callbacksData; + return callbacksData.reduce((acc, callbackData) => { + const { name: eventName, callbackUrl, method: callbackMethod, requestBody, expectedResponse } = callbackData; + return Object.assign(Object.assign({}, acc), { [eventName]: { + [callbackUrl]: { + [callbackMethod]: { + requestBody: { + required: true, + content: { + 'application/json': { + schema: { + $ref: (0, utils_1.getSchemaPath)(requestBody.type) + } + } + } + }, + responses: { + [expectedResponse.status]: { + description: expectedResponse.description || + 'Your server returns this code if it accepts the callback' + } + } + } + } + } }); + }, {}); +}; +exports.exploreApiCallbacksMetadata = exploreApiCallbacksMetadata; diff --git a/dist/explorers/api-consumes.explorer.d.ts b/dist/explorers/api-consumes.explorer.d.ts new file mode 100644 index 000000000..1f1bf2c98 --- /dev/null +++ b/dist/explorers/api-consumes.explorer.d.ts @@ -0,0 +1,5 @@ +import { Type } from '@nestjs/common'; +export declare const exploreGlobalApiConsumesMetadata: (metatype: Type) => { + consumes: any; +}; +export declare const exploreApiConsumesMetadata: (instance: object, prototype: Type, method: object) => string[] | undefined; diff --git a/dist/explorers/api-consumes.explorer.js b/dist/explorers/api-consumes.explorer.js new file mode 100644 index 000000000..cfb037f3e --- /dev/null +++ b/dist/explorers/api-consumes.explorer.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiConsumesMetadata = exports.exploreGlobalApiConsumesMetadata = void 0; +const constants_1 = require("../constants"); +const exploreGlobalApiConsumesMetadata = (metatype) => { + const consumes = Reflect.getMetadata(constants_1.DECORATORS.API_CONSUMES, metatype); + return consumes ? { consumes } : undefined; +}; +exports.exploreGlobalApiConsumesMetadata = exploreGlobalApiConsumesMetadata; +const exploreApiConsumesMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_CONSUMES, method); +exports.exploreApiConsumesMetadata = exploreApiConsumesMetadata; diff --git a/dist/explorers/api-exclude-controller.explorer.d.ts b/dist/explorers/api-exclude-controller.explorer.d.ts new file mode 100644 index 000000000..546eaff79 --- /dev/null +++ b/dist/explorers/api-exclude-controller.explorer.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare const exploreApiExcludeControllerMetadata: (metatype: Type) => boolean; diff --git a/dist/explorers/api-exclude-controller.explorer.js b/dist/explorers/api-exclude-controller.explorer.js new file mode 100644 index 000000000..7ca847e4e --- /dev/null +++ b/dist/explorers/api-exclude-controller.explorer.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiExcludeControllerMetadata = void 0; +const constants_1 = require("../constants"); +const exploreApiExcludeControllerMetadata = (metatype) => { + var _a; + return ((_a = Reflect.getMetadata(constants_1.DECORATORS.API_EXCLUDE_CONTROLLER, metatype)) === null || _a === void 0 ? void 0 : _a[0]) === + true; +}; +exports.exploreApiExcludeControllerMetadata = exploreApiExcludeControllerMetadata; diff --git a/dist/explorers/api-exclude-endpoint.explorer.d.ts b/dist/explorers/api-exclude-endpoint.explorer.d.ts new file mode 100644 index 000000000..44dac2597 --- /dev/null +++ b/dist/explorers/api-exclude-endpoint.explorer.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare const exploreApiExcludeEndpointMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-exclude-endpoint.explorer.js b/dist/explorers/api-exclude-endpoint.explorer.js new file mode 100644 index 000000000..fb42f74da --- /dev/null +++ b/dist/explorers/api-exclude-endpoint.explorer.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiExcludeEndpointMetadata = void 0; +const constants_1 = require("../constants"); +const exploreApiExcludeEndpointMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_EXCLUDE_ENDPOINT, method); +exports.exploreApiExcludeEndpointMetadata = exploreApiExcludeEndpointMetadata; diff --git a/dist/explorers/api-extra-models.explorer.d.ts b/dist/explorers/api-extra-models.explorer.d.ts new file mode 100644 index 000000000..e67b7605d --- /dev/null +++ b/dist/explorers/api-extra-models.explorer.d.ts @@ -0,0 +1,3 @@ +import { Type } from '@nestjs/common'; +export declare const exploreGlobalApiExtraModelsMetadata: (metatype: Type) => Function[]; +export declare const exploreApiExtraModelsMetadata: (instance: object, prototype: Type, method: object) => Function[]; diff --git a/dist/explorers/api-extra-models.explorer.js b/dist/explorers/api-extra-models.explorer.js new file mode 100644 index 000000000..dfa5c9214 --- /dev/null +++ b/dist/explorers/api-extra-models.explorer.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiExtraModelsMetadata = exports.exploreGlobalApiExtraModelsMetadata = void 0; +const constants_1 = require("../constants"); +const exploreGlobalApiExtraModelsMetadata = (metatype) => { + const extraModels = Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, metatype); + return extraModels || []; +}; +exports.exploreGlobalApiExtraModelsMetadata = exploreGlobalApiExtraModelsMetadata; +const exploreApiExtraModelsMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, method) || []; +exports.exploreApiExtraModelsMetadata = exploreApiExtraModelsMetadata; diff --git a/dist/explorers/api-headers.explorer.d.ts b/dist/explorers/api-headers.explorer.d.ts new file mode 100644 index 000000000..171bf2f9a --- /dev/null +++ b/dist/explorers/api-headers.explorer.d.ts @@ -0,0 +1,7 @@ +import { Type } from '@nestjs/common'; +export declare const exploreGlobalApiHeaderMetadata: (metatype: Type) => { + root: { + parameters: any; + }; + depth: number; +}; diff --git a/dist/explorers/api-headers.explorer.js b/dist/explorers/api-headers.explorer.js new file mode 100644 index 000000000..79430ed83 --- /dev/null +++ b/dist/explorers/api-headers.explorer.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreGlobalApiHeaderMetadata = void 0; +const constants_1 = require("../constants"); +const exploreGlobalApiHeaderMetadata = (metatype) => { + const headers = Reflect.getMetadata(constants_1.DECORATORS.API_HEADERS, metatype); + return headers ? { root: { parameters: headers }, depth: 1 } : undefined; +}; +exports.exploreGlobalApiHeaderMetadata = exploreGlobalApiHeaderMetadata; diff --git a/dist/explorers/api-include-endpoint.explorer.d.ts b/dist/explorers/api-include-endpoint.explorer.d.ts new file mode 100644 index 000000000..2f68cac33 --- /dev/null +++ b/dist/explorers/api-include-endpoint.explorer.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare const exploreApiIncludeEndpointMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-include-endpoint.explorer.js b/dist/explorers/api-include-endpoint.explorer.js new file mode 100644 index 000000000..853bb1eaa --- /dev/null +++ b/dist/explorers/api-include-endpoint.explorer.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiIncludeEndpointMetadata = void 0; +const constants_1 = require("../constants"); +const exploreApiIncludeEndpointMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_INCLUDE_ENDPOINT, method); +exports.exploreApiIncludeEndpointMetadata = exploreApiIncludeEndpointMetadata; diff --git a/dist/explorers/api-operation.explorer.d.ts b/dist/explorers/api-operation.explorer.d.ts new file mode 100644 index 000000000..2ae0ce2ef --- /dev/null +++ b/dist/explorers/api-operation.explorer.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare const exploreApiOperationMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-operation.explorer.js b/dist/explorers/api-operation.explorer.js new file mode 100644 index 000000000..67cd4ddef --- /dev/null +++ b/dist/explorers/api-operation.explorer.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiOperationMetadata = void 0; +const constants_1 = require("../constants"); +const api_operation_decorator_1 = require("../decorators/api-operation.decorator"); +const plugin_constants_1 = require("../plugin/plugin-constants"); +const exploreApiOperationMetadata = (instance, prototype, method) => { + applyMetadataFactory(prototype, instance); + return Reflect.getMetadata(constants_1.DECORATORS.API_OPERATION, method); +}; +exports.exploreApiOperationMetadata = exploreApiOperationMetadata; +function applyMetadataFactory(prototype, instance) { + const classPrototype = prototype; + do { + if (!prototype.constructor) { + return; + } + if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { + continue; + } + const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); + const methodKeys = Object.keys(metadata).filter((key) => typeof instance[key] === 'function'); + methodKeys.forEach((key) => { + const operationMeta = {}; + const { summary, deprecated, tags, description } = metadata[key]; + applyIfNotNil(operationMeta, 'summary', summary); + applyIfNotNil(operationMeta, 'deprecated', deprecated); + applyIfNotNil(operationMeta, 'tags', tags); + applyIfNotNil(operationMeta, 'description', description); + if (Object.keys(operationMeta).length === 0) { + return; + } + (0, api_operation_decorator_1.ApiOperation)(operationMeta, { overrideExisting: false })(classPrototype, key, Object.getOwnPropertyDescriptor(classPrototype, key)); + }); + } while ((prototype = Reflect.getPrototypeOf(prototype)) && + prototype !== Object.prototype && + prototype); +} +function applyIfNotNil(target, key, value) { + if (value !== undefined && value !== null) { + target[key] = value; + } +} diff --git a/dist/explorers/api-parameters.explorer.d.ts b/dist/explorers/api-parameters.explorer.d.ts new file mode 100644 index 000000000..062fa30ac --- /dev/null +++ b/dist/explorers/api-parameters.explorer.d.ts @@ -0,0 +1,71 @@ +import { Type } from '@nestjs/common'; +import { SchemaObject } from '../interfaces/open-api-spec.interface'; +import { ParamWithTypeMetadata } from '../services/parameter-metadata-accessor'; +export declare const exploreApiParametersMetadata: (schemas: Record, instance: object, prototype: Type, method: Function) => { + parameters: (Partial | Partial | { + schema: { + type: string; + items: any; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + allOf?: (SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject)[]; + oneOf?: (SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject)[]; + anyOf?: (SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject)[]; + not?: SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject | boolean; + patternProperties?: SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; + }; + } | { + schema: import("lodash").Dictionary; + description?: string; + required?: boolean; + deprecated?: boolean; + allowEmptyValue?: boolean; + style?: import("../interfaces/open-api-spec.interface").ParameterStyle; + explode?: boolean; + allowReserved?: boolean; + examples?: Record; + example?: any; + content?: import("../interfaces/open-api-spec.interface").ContentObject; + } | { + schema: import("lodash").Dictionary; + name?: string | number | object; + type?: Type; + in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; + isArray?: boolean; + items?: SchemaObject; + required?: boolean; + enum?: unknown[]; + enumName?: string; + enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; + selfRequired?: boolean; + })[]; +}; diff --git a/dist/explorers/api-parameters.explorer.js b/dist/explorers/api-parameters.explorer.js new file mode 100644 index 000000000..e7c91de6d --- /dev/null +++ b/dist/explorers/api-parameters.explorer.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiParametersMetadata = void 0; +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const model_properties_accessor_1 = require("../services/model-properties-accessor"); +const parameter_metadata_accessor_1 = require("../services/parameter-metadata-accessor"); +const parameters_metadata_mapper_1 = require("../services/parameters-metadata-mapper"); +const schema_object_factory_1 = require("../services/schema-object-factory"); +const swagger_types_mapper_1 = require("../services/swagger-types-mapper"); +const global_parameters_storage_1 = require("../storages/global-parameters.storage"); +const parameterMetadataAccessor = new parameter_metadata_accessor_1.ParameterMetadataAccessor(); +const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); +const parametersMetadataMapper = new parameters_metadata_mapper_1.ParametersMetadataMapper(modelPropertiesAccessor); +const swaggerTypesMapper = new swagger_types_mapper_1.SwaggerTypesMapper(); +const schemaObjectFactory = new schema_object_factory_1.SchemaObjectFactory(modelPropertiesAccessor, swaggerTypesMapper); +const exploreApiParametersMetadata = (schemas, instance, prototype, method) => { + const explicitParameters = Reflect.getMetadata(constants_1.DECORATORS.API_PARAMETERS, method); + const globalParameters = global_parameters_storage_1.GlobalParametersStorage.getAll(); + const parametersMetadata = parameterMetadataAccessor.explore(instance, prototype, method); + const noExplicitAndGlobalMetadata = (0, lodash_1.isNil)(explicitParameters) && (0, lodash_1.isNil)(globalParameters); + if (noExplicitAndGlobalMetadata && (0, lodash_1.isNil)(parametersMetadata)) { + return undefined; + } + const reflectedParametersAsProperties = parametersMetadataMapper.transformModelToProperties(parametersMetadata || {}); + let properties = reflectedParametersAsProperties; + if (!noExplicitAndGlobalMetadata) { + const mergeImplicitAndExplicit = (item) => (0, lodash_1.assign)(item, (0, lodash_1.find)(explicitParameters, ['name', item.name])); + properties = removeBodyMetadataIfExplicitExists(properties, explicitParameters); + properties = (0, lodash_1.map)(properties, mergeImplicitAndExplicit); + properties = (0, lodash_1.unionWith)(properties, explicitParameters, globalParameters, (arrVal, othVal) => { + return arrVal.name === othVal.name && arrVal.in === othVal.in; + }); + } + const paramsWithDefinitions = schemaObjectFactory.createFromModel(properties, schemas); + const parameters = swaggerTypesMapper.mapParamTypes(paramsWithDefinitions); + return parameters ? { parameters } : undefined; +}; +exports.exploreApiParametersMetadata = exploreApiParametersMetadata; +function removeBodyMetadataIfExplicitExists(properties, explicitParams) { + const isBodyReflected = (0, lodash_1.some)(properties, (p) => p.in === 'body'); + const isBodyDefinedExplicitly = (0, lodash_1.some)(explicitParams, (p) => p.in === 'body'); + if (isBodyReflected && isBodyDefinedExplicitly) { + return (0, lodash_1.omitBy)(properties, (p) => p.in === 'body'); + } + return properties; +} diff --git a/dist/explorers/api-produces.explorer.d.ts b/dist/explorers/api-produces.explorer.d.ts new file mode 100644 index 000000000..ec0ef6418 --- /dev/null +++ b/dist/explorers/api-produces.explorer.d.ts @@ -0,0 +1,5 @@ +import { Type } from '@nestjs/common'; +export declare const exploreGlobalApiProducesMetadata: (metatype: Type) => { + produces: any; +}; +export declare const exploreApiProducesMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-produces.explorer.js b/dist/explorers/api-produces.explorer.js new file mode 100644 index 000000000..ac4980c90 --- /dev/null +++ b/dist/explorers/api-produces.explorer.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiProducesMetadata = exports.exploreGlobalApiProducesMetadata = void 0; +const constants_1 = require("../constants"); +const exploreGlobalApiProducesMetadata = (metatype) => { + const produces = Reflect.getMetadata(constants_1.DECORATORS.API_PRODUCES, metatype); + return produces ? { produces } : undefined; +}; +exports.exploreGlobalApiProducesMetadata = exploreGlobalApiProducesMetadata; +const exploreApiProducesMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_PRODUCES, method); +exports.exploreApiProducesMetadata = exploreApiProducesMetadata; diff --git a/dist/explorers/api-response.explorer.d.ts b/dist/explorers/api-response.explorer.d.ts new file mode 100644 index 000000000..89ea4001b --- /dev/null +++ b/dist/explorers/api-response.explorer.d.ts @@ -0,0 +1,13 @@ +import { Type } from '@nestjs/common'; +import { SchemaObject } from '../interfaces/open-api-spec.interface'; +import { FactoriesNeededByResponseFactory } from '../services/response-object-factory'; +export declare const exploreGlobalApiResponseMetadata: (schemas: Record, metatype: Type, factories: FactoriesNeededByResponseFactory) => { + responses: { + [x: string]: boolean; + }; +}; +export declare const exploreApiResponseMetadata: (schemas: Record, factories: FactoriesNeededByResponseFactory, instance: object, prototype: Type, method: Function) => import("lodash").Dictionary | { + [status]: { + description: string; + }; +}; diff --git a/dist/explorers/api-response.explorer.js b/dist/explorers/api-response.explorer.js new file mode 100644 index 000000000..2ba5ad2f3 --- /dev/null +++ b/dist/explorers/api-response.explorer.js @@ -0,0 +1,103 @@ +"use strict"; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiResponseMetadata = exports.exploreGlobalApiResponseMetadata = void 0; +const common_1 = require("@nestjs/common"); +const constants_1 = require("@nestjs/common/constants"); +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +const lodash_1 = require("lodash"); +const constants_2 = require("../constants"); +const decorators_1 = require("../decorators"); +const plugin_constants_1 = require("../plugin/plugin-constants"); +const response_object_factory_1 = require("../services/response-object-factory"); +const global_responses_storage_1 = require("../storages/global-responses.storage"); +const merge_and_uniq_util_1 = require("../utils/merge-and-uniq.util"); +const responseObjectFactory = new response_object_factory_1.ResponseObjectFactory(); +const exploreGlobalApiResponseMetadata = (schemas, metatype, factories) => { + const responses = Reflect.getMetadata(constants_2.DECORATORS.API_RESPONSE, metatype); + const globalResponses = global_responses_storage_1.GlobalResponsesStorage.getAll(); + const mappedGlobalResponsesOrUndefined = globalResponses + ? mapResponsesToSwaggerResponses(globalResponses, schemas, undefined, factories) + : undefined; + const produces = Reflect.getMetadata(constants_2.DECORATORS.API_PRODUCES, metatype); + return responses + ? { + responses: Object.assign(Object.assign({}, mappedGlobalResponsesOrUndefined), mapResponsesToSwaggerResponses(responses, schemas, produces, factories)) + } + : mappedGlobalResponsesOrUndefined + ? { + responses: mappedGlobalResponsesOrUndefined + } + : undefined; +}; +exports.exploreGlobalApiResponseMetadata = exploreGlobalApiResponseMetadata; +const exploreApiResponseMetadata = (schemas, factories, instance, prototype, method) => { + applyMetadataFactory(prototype, instance); + const responses = Reflect.getMetadata(constants_2.DECORATORS.API_RESPONSE, method); + if (responses) { + const classProduces = Reflect.getMetadata(constants_2.DECORATORS.API_PRODUCES, prototype); + const methodProduces = Reflect.getMetadata(constants_2.DECORATORS.API_PRODUCES, method); + const produces = (0, merge_and_uniq_util_1.mergeAndUniq)((0, lodash_1.get)(classProduces, 'produces'), methodProduces); + return mapResponsesToSwaggerResponses(responses, schemas, produces, factories); + } + const status = getStatusCode(method); + if (status) { + return { [status]: { description: '' } }; + } + return undefined; +}; +exports.exploreApiResponseMetadata = exploreApiResponseMetadata; +const getStatusCode = (method) => { + const status = Reflect.getMetadata(constants_1.HTTP_CODE_METADATA, method); + if (status) { + return status; + } + const requestMethod = Reflect.getMetadata(constants_1.METHOD_METADATA, method); + switch (requestMethod) { + case common_1.RequestMethod.POST: + return common_1.HttpStatus.CREATED; + default: + return common_1.HttpStatus.OK; + } +}; +const omitParamType = (param) => (0, lodash_1.omit)(param, 'type'); +const mapResponsesToSwaggerResponses = (responses, schemas, produces = ['application/json'], factories) => { + produces = (0, shared_utils_1.isEmpty)(produces) ? ['application/json'] : produces; + const openApiResponses = (0, lodash_1.mapValues)(responses, (response) => responseObjectFactory.create(response, produces, schemas, factories)); + return (0, lodash_1.mapValues)(openApiResponses, omitParamType); +}; +function applyMetadataFactory(prototype, instance) { + const classPrototype = prototype; + do { + if (!prototype.constructor) { + return; + } + if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { + continue; + } + const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); + const methodKeys = Object.keys(metadata).filter((key) => typeof instance[key] === 'function'); + methodKeys.forEach((key) => { + const _a = metadata[key], { summary, deprecated, tags } = _a, meta = __rest(_a, ["summary", "deprecated", "tags"]); + if (Object.keys(meta).length === 0) { + return; + } + if (meta.status === undefined) { + meta.status = getStatusCode(instance[key]); + } + (0, decorators_1.ApiResponse)(meta, { overrideExisting: false })(classPrototype, key, Object.getOwnPropertyDescriptor(classPrototype, key)); + }); + } while ((prototype = Reflect.getPrototypeOf(prototype)) && + prototype !== Object.prototype && + prototype); +} diff --git a/dist/explorers/api-security.explorer.d.ts b/dist/explorers/api-security.explorer.d.ts new file mode 100644 index 000000000..b99f2b624 --- /dev/null +++ b/dist/explorers/api-security.explorer.d.ts @@ -0,0 +1,5 @@ +import { Type } from '@nestjs/common'; +export declare const exploreGlobalApiSecurityMetadata: (metatype: Type) => { + security: any; +}; +export declare const exploreApiSecurityMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-security.explorer.js b/dist/explorers/api-security.explorer.js new file mode 100644 index 000000000..26b30ae8a --- /dev/null +++ b/dist/explorers/api-security.explorer.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiSecurityMetadata = exports.exploreGlobalApiSecurityMetadata = void 0; +const constants_1 = require("../constants"); +const exploreGlobalApiSecurityMetadata = (metatype) => { + const security = Reflect.getMetadata(constants_1.DECORATORS.API_SECURITY, metatype); + return security ? { security } : undefined; +}; +exports.exploreGlobalApiSecurityMetadata = exploreGlobalApiSecurityMetadata; +const exploreApiSecurityMetadata = (instance, prototype, method) => { + return Reflect.getMetadata(constants_1.DECORATORS.API_SECURITY, method); +}; +exports.exploreApiSecurityMetadata = exploreApiSecurityMetadata; diff --git a/dist/explorers/api-use-tags.explorer.d.ts b/dist/explorers/api-use-tags.explorer.d.ts new file mode 100644 index 000000000..8916f1e85 --- /dev/null +++ b/dist/explorers/api-use-tags.explorer.d.ts @@ -0,0 +1,5 @@ +import { Type } from '@nestjs/common'; +export declare const exploreGlobalApiTagsMetadata: (autoTagControllers?: boolean) => (metatype: Type) => { + tags: any; +}; +export declare const exploreApiTagsMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-use-tags.explorer.js b/dist/explorers/api-use-tags.explorer.js new file mode 100644 index 000000000..cfa44d838 --- /dev/null +++ b/dist/explorers/api-use-tags.explorer.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exploreApiTagsMetadata = exports.exploreGlobalApiTagsMetadata = void 0; +const constants_1 = require("../constants"); +const exploreGlobalApiTagsMetadata = (autoTagControllers) => (metatype) => { + const decoratorTags = Reflect.getMetadata(constants_1.DECORATORS.API_TAGS, metatype); + const isEmpty = !decoratorTags || decoratorTags.length === 0; + if (isEmpty && autoTagControllers) { + const defaultTag = metatype.name.replace(/Controller$/, ''); + return { + tags: [defaultTag] + }; + } + return isEmpty ? undefined : { tags: decoratorTags }; +}; +exports.exploreGlobalApiTagsMetadata = exploreGlobalApiTagsMetadata; +const exploreApiTagsMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_TAGS, method); +exports.exploreApiTagsMetadata = exploreApiTagsMetadata; diff --git a/dist/extra/swagger-shim.d.ts b/dist/extra/swagger-shim.d.ts new file mode 100644 index 000000000..e50885857 --- /dev/null +++ b/dist/extra/swagger-shim.d.ts @@ -0,0 +1,97 @@ +export declare function ApiProperty(): () => void; +export declare function ApiPropertyOptional(): () => void; +export declare function ApiResponseProperty(): () => void; +export declare function ApiBasicAuth(): () => void; +export declare function ApiBearerAuth(): () => void; +export declare function ApiBody(): () => void; +export declare function ApiConsumes(): () => void; +export declare function ApiCookieAuth(): () => void; +export declare function ApiExcludeEndpoint(): () => void; +export declare function ApiIncludeEndpoint(): () => void; +export declare function ApiExcludeController(): () => void; +export declare function ApiExtraModels(): () => void; +export declare function ApiHeader(): () => void; +export declare function ApiHeaders(): () => void; +export declare function ApiHideProperty(): () => void; +export declare function ApiOAuth2(): () => void; +export declare function ApiOperation(): () => void; +export declare function ApiParam(): () => void; +export declare function ApiProduces(): () => void; +export declare function ApiQuery(): () => void; +export declare function ApiResponse(): () => void; +export declare function ApiContinueResponse(): () => void; +export declare function ApiSwitchingProtocolsResponse(): () => void; +export declare function ApiProcessingResponse(): () => void; +export declare function ApiEarlyhintsResponse(): () => void; +export declare function ApiOkResponse(): () => void; +export declare function ApiCreatedResponse(): () => void; +export declare function ApiAcceptedResponse(): () => void; +export declare function ApiNonAuthoritativeInformationResponse(): () => void; +export declare function ApiNoContentResponse(): () => void; +export declare function ApiResetContentResponse(): () => void; +export declare function ApiPartialContentResponse(): () => void; +export declare function ApiAmbiguousResponse(): () => void; +export declare function ApiMovedPermanentlyResponse(): () => void; +export declare function ApiFoundResponse(): () => void; +export declare function ApiSeeOtherResponse(): () => void; +export declare function ApiNotModifiedResponse(): () => void; +export declare function ApiTemporaryRedirectResponse(): () => void; +export declare function ApiPermanentRedirectResponse(): () => void; +export declare function ApiBadRequestResponse(): () => void; +export declare function ApiUnauthorizedResponse(): () => void; +export declare function ApiPaymentRequiredResponse(): () => void; +export declare function ApiForbiddenResponse(): () => void; +export declare function ApiNotFoundResponse(): () => void; +export declare function ApiMethodNotAllowedResponse(): () => void; +export declare function ApiNotAcceptableResponse(): () => void; +export declare function ApiProxyAuthenticationRequiredResponse(): () => void; +export declare function ApiRequestTimeoutResponse(): () => void; +export declare function ApiConflictResponse(): () => void; +export declare function ApiGoneResponse(): () => void; +export declare function ApiLengthRequiredResponse(): () => void; +export declare function ApiPreconditionFailedResponse(): () => void; +export declare function ApiPayloadTooLargeResponse(): () => void; +export declare function ApiUriTooLongResponse(): () => void; +export declare function ApiUnsupportedMediaTypeResponse(): () => void; +export declare function ApiRequestedRangeNotSatisfiableResponse(): () => void; +export declare function ApiExpectationFailedResponse(): () => void; +export declare function ApiIAmATeapotResponse(): () => void; +export declare function ApiMisdirectedResponse(): () => void; +export declare function ApiUnprocessableEntityResponse(): () => void; +export declare function ApiFailedDependencyResponse(): () => void; +export declare function ApiPreconditionRequiredResponse(): () => void; +export declare function ApiTooManyRequestsResponse(): () => void; +export declare function ApiInternalServerErrorResponse(): () => void; +export declare function ApiNotImplementedResponse(): () => void; +export declare function ApiBadGatewayResponse(): () => void; +export declare function ApiServiceUnavailableResponse(): () => void; +export declare function ApiGatewayTimeoutResponse(): () => void; +export declare function ApiHttpVersionNotSupportedResponse(): () => void; +export declare function ApiDefaultResponse(): () => void; +export declare function ApiSchema(): () => void; +export declare function ApiSecurity(): () => void; +export declare function ApiTags(): () => void; +export declare function ApiCallbacks(): () => void; +export declare function ApiLink(): () => void; +export declare function ApiDefaultGetter(): () => void; +export declare function ApiExtension(): () => void; +export declare function DocumentBuilder(): () => void; +export declare function SwaggerModule(): () => void; +export declare function IntersectionType(): { + new (): {}; +}; +export declare function OmitType(): { + new (): {}; +}; +export declare function PartialType(): { + new (): {}; +}; +export declare function PickType(): { + new (): {}; +}; +export declare function getSchemaPath(): () => string; +export declare function refs(): any[]; +export declare function before(): () => string; +export declare function ReadonlyVisitor(): { + new (): {}; +}; diff --git a/dist/extra/swagger-shim.js b/dist/extra/swagger-shim.js new file mode 100644 index 000000000..1503a200e --- /dev/null +++ b/dist/extra/swagger-shim.js @@ -0,0 +1,355 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiProperty = ApiProperty; +exports.ApiPropertyOptional = ApiPropertyOptional; +exports.ApiResponseProperty = ApiResponseProperty; +exports.ApiBasicAuth = ApiBasicAuth; +exports.ApiBearerAuth = ApiBearerAuth; +exports.ApiBody = ApiBody; +exports.ApiConsumes = ApiConsumes; +exports.ApiCookieAuth = ApiCookieAuth; +exports.ApiExcludeEndpoint = ApiExcludeEndpoint; +exports.ApiIncludeEndpoint = ApiIncludeEndpoint; +exports.ApiExcludeController = ApiExcludeController; +exports.ApiExtraModels = ApiExtraModels; +exports.ApiHeader = ApiHeader; +exports.ApiHeaders = ApiHeaders; +exports.ApiHideProperty = ApiHideProperty; +exports.ApiOAuth2 = ApiOAuth2; +exports.ApiOperation = ApiOperation; +exports.ApiParam = ApiParam; +exports.ApiProduces = ApiProduces; +exports.ApiQuery = ApiQuery; +exports.ApiResponse = ApiResponse; +exports.ApiContinueResponse = ApiContinueResponse; +exports.ApiSwitchingProtocolsResponse = ApiSwitchingProtocolsResponse; +exports.ApiProcessingResponse = ApiProcessingResponse; +exports.ApiEarlyhintsResponse = ApiEarlyhintsResponse; +exports.ApiOkResponse = ApiOkResponse; +exports.ApiCreatedResponse = ApiCreatedResponse; +exports.ApiAcceptedResponse = ApiAcceptedResponse; +exports.ApiNonAuthoritativeInformationResponse = ApiNonAuthoritativeInformationResponse; +exports.ApiNoContentResponse = ApiNoContentResponse; +exports.ApiResetContentResponse = ApiResetContentResponse; +exports.ApiPartialContentResponse = ApiPartialContentResponse; +exports.ApiAmbiguousResponse = ApiAmbiguousResponse; +exports.ApiMovedPermanentlyResponse = ApiMovedPermanentlyResponse; +exports.ApiFoundResponse = ApiFoundResponse; +exports.ApiSeeOtherResponse = ApiSeeOtherResponse; +exports.ApiNotModifiedResponse = ApiNotModifiedResponse; +exports.ApiTemporaryRedirectResponse = ApiTemporaryRedirectResponse; +exports.ApiPermanentRedirectResponse = ApiPermanentRedirectResponse; +exports.ApiBadRequestResponse = ApiBadRequestResponse; +exports.ApiUnauthorizedResponse = ApiUnauthorizedResponse; +exports.ApiPaymentRequiredResponse = ApiPaymentRequiredResponse; +exports.ApiForbiddenResponse = ApiForbiddenResponse; +exports.ApiNotFoundResponse = ApiNotFoundResponse; +exports.ApiMethodNotAllowedResponse = ApiMethodNotAllowedResponse; +exports.ApiNotAcceptableResponse = ApiNotAcceptableResponse; +exports.ApiProxyAuthenticationRequiredResponse = ApiProxyAuthenticationRequiredResponse; +exports.ApiRequestTimeoutResponse = ApiRequestTimeoutResponse; +exports.ApiConflictResponse = ApiConflictResponse; +exports.ApiGoneResponse = ApiGoneResponse; +exports.ApiLengthRequiredResponse = ApiLengthRequiredResponse; +exports.ApiPreconditionFailedResponse = ApiPreconditionFailedResponse; +exports.ApiPayloadTooLargeResponse = ApiPayloadTooLargeResponse; +exports.ApiUriTooLongResponse = ApiUriTooLongResponse; +exports.ApiUnsupportedMediaTypeResponse = ApiUnsupportedMediaTypeResponse; +exports.ApiRequestedRangeNotSatisfiableResponse = ApiRequestedRangeNotSatisfiableResponse; +exports.ApiExpectationFailedResponse = ApiExpectationFailedResponse; +exports.ApiIAmATeapotResponse = ApiIAmATeapotResponse; +exports.ApiMisdirectedResponse = ApiMisdirectedResponse; +exports.ApiUnprocessableEntityResponse = ApiUnprocessableEntityResponse; +exports.ApiFailedDependencyResponse = ApiFailedDependencyResponse; +exports.ApiPreconditionRequiredResponse = ApiPreconditionRequiredResponse; +exports.ApiTooManyRequestsResponse = ApiTooManyRequestsResponse; +exports.ApiInternalServerErrorResponse = ApiInternalServerErrorResponse; +exports.ApiNotImplementedResponse = ApiNotImplementedResponse; +exports.ApiBadGatewayResponse = ApiBadGatewayResponse; +exports.ApiServiceUnavailableResponse = ApiServiceUnavailableResponse; +exports.ApiGatewayTimeoutResponse = ApiGatewayTimeoutResponse; +exports.ApiHttpVersionNotSupportedResponse = ApiHttpVersionNotSupportedResponse; +exports.ApiDefaultResponse = ApiDefaultResponse; +exports.ApiSchema = ApiSchema; +exports.ApiSecurity = ApiSecurity; +exports.ApiTags = ApiTags; +exports.ApiCallbacks = ApiCallbacks; +exports.ApiLink = ApiLink; +exports.ApiDefaultGetter = ApiDefaultGetter; +exports.ApiExtension = ApiExtension; +exports.DocumentBuilder = DocumentBuilder; +exports.SwaggerModule = SwaggerModule; +exports.IntersectionType = IntersectionType; +exports.OmitType = OmitType; +exports.PartialType = PartialType; +exports.PickType = PickType; +exports.getSchemaPath = getSchemaPath; +exports.refs = refs; +exports.before = before; +exports.ReadonlyVisitor = ReadonlyVisitor; +function ApiProperty() { + return () => { }; +} +function ApiPropertyOptional() { + return () => { }; +} +function ApiResponseProperty() { + return () => { }; +} +function ApiBasicAuth() { + return () => { }; +} +function ApiBearerAuth() { + return () => { }; +} +function ApiBody() { + return () => { }; +} +function ApiConsumes() { + return () => { }; +} +function ApiCookieAuth() { + return () => { }; +} +function ApiExcludeEndpoint() { + return () => { }; +} +function ApiIncludeEndpoint() { + return () => { }; +} +function ApiExcludeController() { + return () => { }; +} +function ApiExtraModels() { + return () => { }; +} +function ApiHeader() { + return () => { }; +} +function ApiHeaders() { + return () => { }; +} +function ApiHideProperty() { + return () => { }; +} +function ApiOAuth2() { + return () => { }; +} +function ApiOperation() { + return () => { }; +} +function ApiParam() { + return () => { }; +} +function ApiProduces() { + return () => { }; +} +function ApiQuery() { + return () => { }; +} +function ApiResponse() { + return () => { }; +} +function ApiContinueResponse() { + return () => { }; +} +function ApiSwitchingProtocolsResponse() { + return () => { }; +} +function ApiProcessingResponse() { + return () => { }; +} +function ApiEarlyhintsResponse() { + return () => { }; +} +function ApiOkResponse() { + return () => { }; +} +function ApiCreatedResponse() { + return () => { }; +} +function ApiAcceptedResponse() { + return () => { }; +} +function ApiNonAuthoritativeInformationResponse() { + return () => { }; +} +function ApiNoContentResponse() { + return () => { }; +} +function ApiResetContentResponse() { + return () => { }; +} +function ApiPartialContentResponse() { + return () => { }; +} +function ApiAmbiguousResponse() { + return () => { }; +} +function ApiMovedPermanentlyResponse() { + return () => { }; +} +function ApiFoundResponse() { + return () => { }; +} +function ApiSeeOtherResponse() { + return () => { }; +} +function ApiNotModifiedResponse() { + return () => { }; +} +function ApiTemporaryRedirectResponse() { + return () => { }; +} +function ApiPermanentRedirectResponse() { + return () => { }; +} +function ApiBadRequestResponse() { + return () => { }; +} +function ApiUnauthorizedResponse() { + return () => { }; +} +function ApiPaymentRequiredResponse() { + return () => { }; +} +function ApiForbiddenResponse() { + return () => { }; +} +function ApiNotFoundResponse() { + return () => { }; +} +function ApiMethodNotAllowedResponse() { + return () => { }; +} +function ApiNotAcceptableResponse() { + return () => { }; +} +function ApiProxyAuthenticationRequiredResponse() { + return () => { }; +} +function ApiRequestTimeoutResponse() { + return () => { }; +} +function ApiConflictResponse() { + return () => { }; +} +function ApiGoneResponse() { + return () => { }; +} +function ApiLengthRequiredResponse() { + return () => { }; +} +function ApiPreconditionFailedResponse() { + return () => { }; +} +function ApiPayloadTooLargeResponse() { + return () => { }; +} +function ApiUriTooLongResponse() { + return () => { }; +} +function ApiUnsupportedMediaTypeResponse() { + return () => { }; +} +function ApiRequestedRangeNotSatisfiableResponse() { + return () => { }; +} +function ApiExpectationFailedResponse() { + return () => { }; +} +function ApiIAmATeapotResponse() { + return () => { }; +} +function ApiMisdirectedResponse() { + return () => { }; +} +function ApiUnprocessableEntityResponse() { + return () => { }; +} +function ApiFailedDependencyResponse() { + return () => { }; +} +function ApiPreconditionRequiredResponse() { + return () => { }; +} +function ApiTooManyRequestsResponse() { + return () => { }; +} +function ApiInternalServerErrorResponse() { + return () => { }; +} +function ApiNotImplementedResponse() { + return () => { }; +} +function ApiBadGatewayResponse() { + return () => { }; +} +function ApiServiceUnavailableResponse() { + return () => { }; +} +function ApiGatewayTimeoutResponse() { + return () => { }; +} +function ApiHttpVersionNotSupportedResponse() { + return () => { }; +} +function ApiDefaultResponse() { + return () => { }; +} +function ApiSchema() { + return () => { }; +} +function ApiSecurity() { + return () => { }; +} +function ApiTags() { + return () => { }; +} +function ApiCallbacks() { + return () => { }; +} +function ApiLink() { + return () => { }; +} +function ApiDefaultGetter() { + return () => { }; +} +function ApiExtension() { + return () => { }; +} +function DocumentBuilder() { + return () => { }; +} +function SwaggerModule() { + return () => { }; +} +function IntersectionType() { + return class { + }; +} +function OmitType() { + return class { + }; +} +function PartialType() { + return class { + }; +} +function PickType() { + return class { + }; +} +function getSchemaPath() { + return () => ''; +} +function refs() { + return []; +} +function before() { + return () => ''; +} +function ReadonlyVisitor() { + return class { + }; +} diff --git a/dist/fixtures/document.base.d.ts b/dist/fixtures/document.base.d.ts new file mode 100644 index 000000000..163223666 --- /dev/null +++ b/dist/fixtures/document.base.d.ts @@ -0,0 +1,2 @@ +import { OpenAPIObject } from '../interfaces'; +export declare const buildDocumentBase: () => Omit; diff --git a/dist/fixtures/document.base.js b/dist/fixtures/document.base.js new file mode 100644 index 000000000..1bd15a2e1 --- /dev/null +++ b/dist/fixtures/document.base.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.buildDocumentBase = void 0; +const buildDocumentBase = () => ({ + openapi: '3.0.0', + info: { + title: '', + description: '', + version: '1.0.0', + contact: {} + }, + tags: [], + servers: [], + components: {} +}); +exports.buildDocumentBase = buildDocumentBase; diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 000000000..98e2c2653 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,7 @@ +import 'reflect-metadata'; +export * from './decorators'; +export * from './document-builder'; +export * from './interfaces'; +export * from './swagger-module'; +export * from './type-helpers'; +export * from './utils'; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 000000000..b2f581adb --- /dev/null +++ b/dist/index.js @@ -0,0 +1,23 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("reflect-metadata"); +__exportStar(require("./decorators"), exports); +__exportStar(require("./document-builder"), exports); +__exportStar(require("./interfaces"), exports); +__exportStar(require("./swagger-module"), exports); +__exportStar(require("./type-helpers"), exports); +__exportStar(require("./utils"), exports); diff --git a/dist/interfaces/callback-object.interface.d.ts b/dist/interfaces/callback-object.interface.d.ts new file mode 100644 index 000000000..58985d9b4 --- /dev/null +++ b/dist/interfaces/callback-object.interface.d.ts @@ -0,0 +1,12 @@ +export interface CallBackObject { + name: string; + callbackUrl: string; + method: string; + requestBody: { + type: T; + }; + expectedResponse: { + status: number; + description?: string; + }; +} diff --git a/dist/interfaces/callback-object.interface.js b/dist/interfaces/callback-object.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/callback-object.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/denormalized-doc-resolvers.interface.d.ts b/dist/interfaces/denormalized-doc-resolvers.interface.d.ts new file mode 100644 index 000000000..09dac0ee5 --- /dev/null +++ b/dist/interfaces/denormalized-doc-resolvers.interface.d.ts @@ -0,0 +1,7 @@ +export interface DenormalizedDocResolvers { + root: Function[]; + security: Function[]; + tags: Function[]; + callbacks: Function[]; + responses: Function[]; +} diff --git a/dist/interfaces/denormalized-doc-resolvers.interface.js b/dist/interfaces/denormalized-doc-resolvers.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/denormalized-doc-resolvers.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/denormalized-doc.interface.d.ts b/dist/interfaces/denormalized-doc.interface.d.ts new file mode 100644 index 000000000..89ee8bc99 --- /dev/null +++ b/dist/interfaces/denormalized-doc.interface.d.ts @@ -0,0 +1,8 @@ +import { OpenAPIObject, OperationObject, ResponsesObject } from './open-api-spec.interface'; +export interface DenormalizedDoc extends Partial { + root?: { + method: string; + path: string; + } & OperationObject; + responses?: ResponsesObject; +} diff --git a/dist/interfaces/denormalized-doc.interface.js b/dist/interfaces/denormalized-doc.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/denormalized-doc.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/enum-schema-attributes.interface.d.ts b/dist/interfaces/enum-schema-attributes.interface.d.ts new file mode 100644 index 000000000..2241a3611 --- /dev/null +++ b/dist/interfaces/enum-schema-attributes.interface.d.ts @@ -0,0 +1,2 @@ +import { SchemaObject } from './open-api-spec.interface'; +export type EnumSchemaAttributes = Pick; diff --git a/dist/interfaces/enum-schema-attributes.interface.js b/dist/interfaces/enum-schema-attributes.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/enum-schema-attributes.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/index.d.ts b/dist/interfaces/index.d.ts new file mode 100644 index 000000000..068c50a86 --- /dev/null +++ b/dist/interfaces/index.d.ts @@ -0,0 +1,3 @@ +export { OpenAPIObject } from './open-api-spec.interface'; +export * from './swagger-custom-options.interface'; +export * from './swagger-document-options.interface'; diff --git a/dist/interfaces/index.js b/dist/interfaces/index.js new file mode 100644 index 000000000..b64b78292 --- /dev/null +++ b/dist/interfaces/index.js @@ -0,0 +1,18 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./swagger-custom-options.interface"), exports); +__exportStar(require("./swagger-document-options.interface"), exports); diff --git a/dist/interfaces/module-route.interface.d.ts b/dist/interfaces/module-route.interface.d.ts new file mode 100644 index 000000000..e44c1c79f --- /dev/null +++ b/dist/interfaces/module-route.interface.d.ts @@ -0,0 +1,2 @@ +import { OpenAPIObject } from '.'; +export type ModuleRoute = Omit & Record<'root', any>; diff --git a/dist/interfaces/module-route.interface.js b/dist/interfaces/module-route.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/module-route.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/open-api-spec.interface.d.ts b/dist/interfaces/open-api-spec.interface.d.ts new file mode 100644 index 000000000..ba914bd2a --- /dev/null +++ b/dist/interfaces/open-api-spec.interface.d.ts @@ -0,0 +1,239 @@ +export interface OpenAPIObject { + openapi: string; + info: InfoObject; + servers?: ServerObject[]; + paths: PathsObject; + components?: ComponentsObject; + security?: SecurityRequirementObject[]; + tags?: TagObject[]; + externalDocs?: ExternalDocumentationObject; +} +export interface InfoObject { + title: string; + description?: string; + termsOfService?: string; + contact?: ContactObject; + license?: LicenseObject; + version: string; +} +export interface ContactObject { + name?: string; + url?: string; + email?: string; +} +export interface LicenseObject { + name: string; + url?: string; +} +export interface ServerObject { + url: string; + description?: string; + variables?: Record; +} +export interface ServerVariableObject { + enum?: string[] | boolean[] | number[]; + default: string | boolean | number; + description?: string; +} +export interface ComponentsObject { + schemas?: Record; + responses?: Record; + parameters?: Record; + examples?: Record; + requestBodies?: Record; + headers?: Record; + securitySchemes?: Record; + links?: Record; + callbacks?: Record; +} +export type PathsObject = Record; +export interface PathItemObject { + $ref?: string; + summary?: string; + description?: string; + get?: OperationObject; + put?: OperationObject; + post?: OperationObject; + delete?: OperationObject; + options?: OperationObject; + head?: OperationObject; + patch?: OperationObject; + trace?: OperationObject; + servers?: ServerObject[]; + parameters?: (ParameterObject | ReferenceObject)[]; +} +export interface OperationObject { + tags?: string[]; + summary?: string; + description?: string; + externalDocs?: ExternalDocumentationObject; + operationId?: string; + parameters?: (ParameterObject | ReferenceObject)[]; + requestBody?: RequestBodyObject | ReferenceObject; + responses: ResponsesObject; + callbacks?: CallbacksObject; + deprecated?: boolean; + security?: SecurityRequirementObject[]; + servers?: ServerObject[]; +} +export interface ExternalDocumentationObject { + description?: string; + url: string; +} +export type ParameterLocation = 'query' | 'header' | 'path' | 'cookie'; +export type ParameterStyle = 'matrix' | 'label' | 'form' | 'simple' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject'; +export interface BaseParameterObject { + description?: string; + required?: boolean; + deprecated?: boolean; + allowEmptyValue?: boolean; + style?: ParameterStyle; + explode?: boolean; + allowReserved?: boolean; + schema?: SchemaObject | ReferenceObject; + examples?: Record; + example?: any; + content?: ContentObject; +} +export interface ParameterObject extends BaseParameterObject { + name: string; + in: ParameterLocation; +} +export interface RequestBodyObject { + description?: string; + content: ContentObject; + required?: boolean; +} +export type ContentObject = Record; +export interface MediaTypeObject { + schema?: SchemaObject | ReferenceObject; + examples?: ExamplesObject; + example?: any; + encoding?: EncodingObject; +} +export type EncodingObject = Record; +export interface EncodingPropertyObject { + contentType?: string; + headers?: Record; + style?: string; + explode?: boolean; + allowReserved?: boolean; +} +export interface ResponsesObject extends Record { + default?: ResponseObject | ReferenceObject; +} +export interface ResponseObject { + description: string; + headers?: HeadersObject; + content?: ContentObject; + links?: LinksObject; +} +export type CallbacksObject = Record; +export type CallbackObject = Record; +export type HeadersObject = Record; +export interface ExampleObject { + summary?: string; + description?: string; + value?: any; + externalValue?: string; +} +export type LinksObject = Record; +export interface LinkObject { + operationRef?: string; + operationId?: string; + parameters?: LinkParametersObject; + requestBody?: any | string; + description?: string; + server?: ServerObject; +} +export type LinkParametersObject = Record; +export type HeaderObject = BaseParameterObject; +export interface TagObject { + name: string; + description?: string; + externalDocs?: ExternalDocumentationObject; +} +export type ExamplesObject = Record; +export interface ReferenceObject { + $ref: string; +} +export interface SchemaObject { + nullable?: boolean; + discriminator?: DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: XmlObject; + externalDocs?: ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + type?: string; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + items?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; +} +export type SchemasObject = Record; +export interface DiscriminatorObject { + propertyName: string; + mapping?: Record; +} +export interface XmlObject { + name?: string; + namespace?: string; + prefix?: string; + attribute?: boolean; + wrapped?: boolean; +} +export type SecuritySchemeType = 'apiKey' | 'http' | 'oauth2' | 'openIdConnect'; +export interface SecuritySchemeObject { + type: SecuritySchemeType; + description?: string; + name?: string; + in?: string; + scheme?: string; + bearerFormat?: string; + flows?: OAuthFlowsObject; + openIdConnectUrl?: string; + 'x-tokenName'?: string; + [extension: `x-${string}`]: any; +} +export interface OAuthFlowsObject { + implicit?: OAuthFlowObject; + password?: OAuthFlowObject; + clientCredentials?: OAuthFlowObject; + authorizationCode?: OAuthFlowObject; +} +export interface OAuthFlowObject { + authorizationUrl?: string; + tokenUrl?: string; + refreshUrl?: string; + scopes: ScopesObject; +} +export type ScopesObject = Record; +export type SecurityRequirementObject = Record; +export type ExtensionLocation = 'root' | 'info'; diff --git a/dist/interfaces/open-api-spec.interface.js b/dist/interfaces/open-api-spec.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/open-api-spec.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/schema-object-metadata.interface.d.ts b/dist/interfaces/schema-object-metadata.interface.d.ts new file mode 100644 index 000000000..f7cfce5f4 --- /dev/null +++ b/dist/interfaces/schema-object-metadata.interface.d.ts @@ -0,0 +1,30 @@ +import { Type } from '@nestjs/common'; +import { EnumSchemaAttributes } from './enum-schema-attributes.interface'; +import { ReferenceObject, SchemaObject } from './open-api-spec.interface'; +export type EnumAllowedTypes = any[] | Record | (() => any[] | Record); +interface SchemaObjectCommonMetadata extends Omit { + isArray?: boolean; + name?: string; + enum?: EnumAllowedTypes; +} +export type SchemaObjectMetadata = (SchemaObjectCommonMetadata & { + type?: Type | Function | [Function] | 'array' | 'string' | 'number' | 'boolean' | 'integer' | 'null'; + required?: boolean; +}) | ({ + type?: Type | Function | [Function] | Record; + required?: boolean; + enumName: string; + enumSchema?: EnumSchemaAttributes; +} & SchemaObjectCommonMetadata) | ({ + type: 'object'; + properties: Record; + required?: string[]; + selfRequired?: boolean; +} & SchemaObjectCommonMetadata) | ({ + type: 'object'; + properties?: Record; + additionalProperties: SchemaObject | ReferenceObject | boolean; + required?: string[]; + selfRequired?: boolean; +} & SchemaObjectCommonMetadata); +export {}; diff --git a/dist/interfaces/schema-object-metadata.interface.js b/dist/interfaces/schema-object-metadata.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/schema-object-metadata.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-custom-options.interface.d.ts b/dist/interfaces/swagger-custom-options.interface.d.ts new file mode 100644 index 000000000..605622d43 --- /dev/null +++ b/dist/interfaces/swagger-custom-options.interface.d.ts @@ -0,0 +1,24 @@ +import { OpenAPIObject } from './open-api-spec.interface'; +import { SwaggerUiOptions } from './swagger-ui-options.interface'; +export interface SwaggerCustomOptions { + useGlobalPrefix?: boolean; + swaggerUiEnabled?: boolean; + ui?: boolean; + raw?: boolean | Array<'json' | 'yaml'>; + swaggerUrl?: string; + jsonDocumentUrl?: string; + yamlDocumentUrl?: string; + patchDocumentOnRequest?: (req: TRequest, res: TResponse, document: OpenAPIObject) => OpenAPIObject; + explorer?: boolean; + swaggerOptions?: SwaggerUiOptions; + customCss?: string; + customCssUrl?: string | string[]; + customJs?: string | string[]; + customJsStr?: string | string[]; + customfavIcon?: string; + customSiteTitle?: string; + customSwaggerUiPath?: string; + validatorUrl?: string; + url?: string; + urls?: Record<'url' | 'name', string>[]; +} diff --git a/dist/interfaces/swagger-custom-options.interface.js b/dist/interfaces/swagger-custom-options.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/swagger-custom-options.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-document-options.interface.d.ts b/dist/interfaces/swagger-document-options.interface.d.ts new file mode 100644 index 000000000..68747a827 --- /dev/null +++ b/dist/interfaces/swagger-document-options.interface.d.ts @@ -0,0 +1,11 @@ +export type OperationIdFactory = (controllerKey: string, methodKey: string, version?: string) => string; +export interface SwaggerDocumentOptions { + include?: Function[]; + extraModels?: Function[]; + ignoreGlobalPrefix?: boolean; + deepScanRoutes?: boolean; + operationIdFactory?: OperationIdFactory; + linkNameFactory?: (controllerKey: string, methodKey: string, fieldKey: string) => string; + autoTagControllers?: boolean; + onlyIncludeDecoratedEndpoints?: boolean; +} diff --git a/dist/interfaces/swagger-document-options.interface.js b/dist/interfaces/swagger-document-options.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/swagger-document-options.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-ui-init-options.interface.d.ts b/dist/interfaces/swagger-ui-init-options.interface.d.ts new file mode 100644 index 000000000..9ece09ccd --- /dev/null +++ b/dist/interfaces/swagger-ui-init-options.interface.d.ts @@ -0,0 +1,7 @@ +import { OpenAPIObject } from './open-api-spec.interface'; +import { SwaggerUiOptions } from './swagger-ui-options.interface'; +export interface SwaggerUIInitOptions { + swaggerDoc: OpenAPIObject; + customOptions: SwaggerUiOptions; + swaggerUrl: string; +} diff --git a/dist/interfaces/swagger-ui-init-options.interface.js b/dist/interfaces/swagger-ui-init-options.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/swagger-ui-init-options.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-ui-options.interface.d.ts b/dist/interfaces/swagger-ui-options.interface.d.ts new file mode 100644 index 000000000..5d5624925 --- /dev/null +++ b/dist/interfaces/swagger-ui-options.interface.d.ts @@ -0,0 +1,15 @@ +export interface SwaggerUiOptions { + initOAuth?: { + clientId?: string; + clientSecret?: string; + realm?: string; + appName?: string; + scopeSeparator?: string; + scopes?: string[]; + additionalQueryStringParams?: Record; + useBasicAuthenticationWithAccessCodeGrant?: boolean; + usePkceWithAuthorizationCodeGrant?: boolean; + }; + persistAuthorization?: boolean; + [key: string]: any; +} diff --git a/dist/interfaces/swagger-ui-options.interface.js b/dist/interfaces/swagger-ui-options.interface.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/swagger-ui-options.interface.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/plugin/compiler-plugin.d.ts b/dist/plugin/compiler-plugin.d.ts new file mode 100644 index 000000000..be0604abe --- /dev/null +++ b/dist/plugin/compiler-plugin.d.ts @@ -0,0 +1,2 @@ +import * as ts from 'typescript'; +export declare const before: (options?: Record, program?: ts.Program) => (ctx: ts.TransformationContext) => ts.Transformer; diff --git a/dist/plugin/compiler-plugin.js b/dist/plugin/compiler-plugin.js new file mode 100644 index 000000000..56f4069d4 --- /dev/null +++ b/dist/plugin/compiler-plugin.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.before = void 0; +const merge_options_1 = require("./merge-options"); +const plugin_debug_logger_1 = require("./plugin-debug-logger"); +const is_filename_matched_util_1 = require("./utils/is-filename-matched.util"); +const controller_class_visitor_1 = require("./visitors/controller-class.visitor"); +const model_class_visitor_1 = require("./visitors/model-class.visitor"); +const modelClassVisitor = new model_class_visitor_1.ModelClassVisitor(); +const controllerClassVisitor = new controller_class_visitor_1.ControllerClassVisitor(); +const before = (options, program) => { + options = (0, merge_options_1.mergePluginOptions)(options); + if (!program) { + const error = `The "program" reference must be provided when using the CLI Plugin. This error is likely caused by the "isolatedModules" compiler option being set to "true".`; + plugin_debug_logger_1.pluginDebugLogger.debug(error); + throw new Error(error); + } + return (ctx) => { + return (sf) => { + if ((0, is_filename_matched_util_1.isFilenameMatched)(options.dtoFileNameSuffix, sf.fileName)) { + return modelClassVisitor.visit(sf, ctx, program, options); + } + if ((0, is_filename_matched_util_1.isFilenameMatched)(options.controllerFileNameSuffix, sf.fileName)) { + return controllerClassVisitor.visit(sf, ctx, program, options); + } + return sf; + }; + }; +}; +exports.before = before; diff --git a/dist/plugin/index.d.ts b/dist/plugin/index.d.ts new file mode 100644 index 000000000..f980bda5b --- /dev/null +++ b/dist/plugin/index.d.ts @@ -0,0 +1,2 @@ +export * from './compiler-plugin'; +export * from './visitors/readonly.visitor'; diff --git a/dist/plugin/index.js b/dist/plugin/index.js new file mode 100644 index 000000000..f5a43755b --- /dev/null +++ b/dist/plugin/index.js @@ -0,0 +1,18 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./compiler-plugin"), exports); +__exportStar(require("./visitors/readonly.visitor"), exports); diff --git a/dist/plugin/merge-options.d.ts b/dist/plugin/merge-options.d.ts new file mode 100644 index 000000000..0ddae3274 --- /dev/null +++ b/dist/plugin/merge-options.d.ts @@ -0,0 +1,17 @@ +export interface PluginOptions { + dtoFileNameSuffix?: string | string[]; + controllerFileNameSuffix?: string | string[]; + classValidatorShim?: boolean; + classTransformerShim?: boolean | 'exclusive'; + dtoKeyOfComment?: string; + controllerKeyOfComment?: string; + introspectComments?: boolean; + esmCompatible?: boolean; + readonly?: boolean; + pathToSource?: string; + debug?: boolean; + parameterProperties?: boolean; + skipAutoHttpCode?: boolean; + skipDefaultValues?: boolean; +} +export declare const mergePluginOptions: (options?: Record) => PluginOptions; diff --git a/dist/plugin/merge-options.js b/dist/plugin/merge-options.js new file mode 100644 index 000000000..a4269d0d9 --- /dev/null +++ b/dist/plugin/merge-options.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mergePluginOptions = void 0; +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +const plugin_debug_logger_1 = require("./plugin-debug-logger"); +const defaultOptions = { + dtoFileNameSuffix: ['.dto.ts', '.entity.ts'], + controllerFileNameSuffix: ['.controller.ts'], + classValidatorShim: true, + classTransformerShim: false, + dtoKeyOfComment: 'description', + controllerKeyOfComment: 'summary', + introspectComments: false, + esmCompatible: false, + readonly: false, + debug: false, + skipDefaultValues: false +}; +const mergePluginOptions = (options = {}) => { + if ((0, shared_utils_1.isString)(options.dtoFileNameSuffix)) { + options.dtoFileNameSuffix = [options.dtoFileNameSuffix]; + } + if ((0, shared_utils_1.isString)(options.controllerFileNameSuffix)) { + options.controllerFileNameSuffix = [options.controllerFileNameSuffix]; + } + for (const key of ['dtoFileNameSuffix', 'controllerFileNameSuffix']) { + if (options[key] && options[key].includes('.ts')) { + plugin_debug_logger_1.pluginDebugLogger.warn(`Skipping ${key} option ".ts" because it can cause unwanted behaviour.`); + options[key] = options[key].filter((pattern) => pattern !== '.ts'); + if (options[key].length == 0) { + delete options[key]; + } + } + } + return Object.assign(Object.assign({}, defaultOptions), options); +}; +exports.mergePluginOptions = mergePluginOptions; diff --git a/dist/plugin/metadata-loader.d.ts b/dist/plugin/metadata-loader.d.ts new file mode 100644 index 000000000..e2b3eaa7d --- /dev/null +++ b/dist/plugin/metadata-loader.d.ts @@ -0,0 +1,7 @@ +export declare class MetadataLoader { + private static readonly refreshHooks; + static addRefreshHook(hook: () => void): number; + load(metadata: Record): Promise; + private applyMetadata; + private runHooks; +} diff --git a/dist/plugin/metadata-loader.js b/dist/plugin/metadata-loader.js new file mode 100644 index 000000000..e8a73d859 --- /dev/null +++ b/dist/plugin/metadata-loader.js @@ -0,0 +1,51 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MetadataLoader = void 0; +const plugin_constants_1 = require("./plugin-constants"); +class MetadataLoader { + static addRefreshHook(hook) { + return MetadataLoader.refreshHooks.push(hook); + } + load(metadata) { + return __awaiter(this, void 0, void 0, function* () { + const pkgMetadata = metadata['@nestjs/swagger']; + if (!pkgMetadata) { + return; + } + const { models, controllers } = pkgMetadata; + if (models) { + yield this.applyMetadata(models); + } + if (controllers) { + yield this.applyMetadata(controllers); + } + this.runHooks(); + }); + } + applyMetadata(meta) { + return __awaiter(this, void 0, void 0, function* () { + const loadPromises = meta.map((_a) => __awaiter(this, [_a], void 0, function* ([fileImport, fileMeta]) { + const fileRef = yield fileImport; + Object.keys(fileMeta).map((key) => { + const clsRef = fileRef[key]; + clsRef[plugin_constants_1.METADATA_FACTORY_NAME] = () => fileMeta[key]; + }); + })); + yield Promise.all(loadPromises); + }); + } + runHooks() { + MetadataLoader.refreshHooks.forEach((hook) => hook()); + } +} +exports.MetadataLoader = MetadataLoader; +MetadataLoader.refreshHooks = new Array(); diff --git a/dist/plugin/plugin-constants.d.ts b/dist/plugin/plugin-constants.d.ts new file mode 100644 index 000000000..fef0dd138 --- /dev/null +++ b/dist/plugin/plugin-constants.d.ts @@ -0,0 +1,3 @@ +export declare const OPENAPI_NAMESPACE = "openapi"; +export declare const OPENAPI_PACKAGE_NAME = "@nestjs/swagger"; +export declare const METADATA_FACTORY_NAME = "_OPENAPI_METADATA_FACTORY"; diff --git a/dist/plugin/plugin-constants.js b/dist/plugin/plugin-constants.js new file mode 100644 index 000000000..e31c07b2e --- /dev/null +++ b/dist/plugin/plugin-constants.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.METADATA_FACTORY_NAME = exports.OPENAPI_PACKAGE_NAME = exports.OPENAPI_NAMESPACE = void 0; +exports.OPENAPI_NAMESPACE = 'openapi'; +exports.OPENAPI_PACKAGE_NAME = '@nestjs/swagger'; +exports.METADATA_FACTORY_NAME = '_OPENAPI_METADATA_FACTORY'; diff --git a/dist/plugin/plugin-debug-logger.d.ts b/dist/plugin/plugin-debug-logger.d.ts new file mode 100644 index 000000000..dd9544ee9 --- /dev/null +++ b/dist/plugin/plugin-debug-logger.d.ts @@ -0,0 +1,5 @@ +import { ConsoleLogger } from '@nestjs/common'; +declare class PluginDebugLogger extends ConsoleLogger { +} +export declare const pluginDebugLogger: PluginDebugLogger; +export {}; diff --git a/dist/plugin/plugin-debug-logger.js b/dist/plugin/plugin-debug-logger.js new file mode 100644 index 000000000..0f9365e0c --- /dev/null +++ b/dist/plugin/plugin-debug-logger.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pluginDebugLogger = void 0; +const common_1 = require("@nestjs/common"); +class PluginDebugLogger extends common_1.ConsoleLogger { +} +exports.pluginDebugLogger = new PluginDebugLogger('CLI Plugin'); diff --git a/dist/plugin/utils/ast-utils.d.ts b/dist/plugin/utils/ast-utils.d.ts new file mode 100644 index 000000000..d7639c70c --- /dev/null +++ b/dist/plugin/utils/ast-utils.d.ts @@ -0,0 +1,30 @@ +import { DocComment, DocNode } from '@microsoft/tsdoc'; +import * as ts from 'typescript'; +import { Decorator, Node, ObjectFlags, Type, TypeChecker, TypeFlags, TypeFormatFlags, UnionTypeNode } from 'typescript'; +export declare function renderDocNode(docNode: DocNode): string; +export declare function isArray(type: Type): boolean; +export declare function getTypeArguments(type: Type): any; +export declare function isBoolean(type: Type): boolean; +export declare function isString(type: Type): boolean; +export declare function isStringLiteral(type: Type): boolean; +export declare function isStringMapping(type: Type): boolean; +export declare function isNumber(type: Type): boolean; +export declare function isBigInt(type: Type): boolean; +export declare function isInterface(type: Type): boolean; +export declare function isEnum(type: Type): boolean; +export declare function isEnumLiteral(type: Type): boolean; +export declare function hasFlag(type: Type, flag: TypeFlags): boolean; +export declare function hasObjectFlag(type: Type, flag: ObjectFlags): boolean; +export declare function getText(type: Type, typeChecker: TypeChecker, enclosingNode?: Node, typeFormatFlags?: TypeFormatFlags): string; +export declare function getDefaultTypeFormatFlags(enclosingNode: Node): number; +export declare function getDocComment(node: Node): DocComment; +export declare function getMainCommentOfNode(node: Node): string; +export declare function parseCommentDocValue(docValue: string, type: ts.Type): string; +export declare function getTsDocTagsOfNode(node: Node, typeChecker: TypeChecker): any; +export declare function getTsDocErrorsOfNode(node: Node): any[]; +export declare function getDecoratorArguments(decorator: Decorator): any[] | ts.NodeArray; +export declare function getDecoratorName(decorator: Decorator): string; +export declare function findNullableTypeFromUnion(typeNode: UnionTypeNode, typeChecker: TypeChecker): ts.TypeNode; +export declare function createBooleanLiteral(factory: ts.NodeFactory, flag: boolean): ts.BooleanLiteral; +export declare function createPrimitiveLiteral(factory: ts.NodeFactory, item: unknown, typeOfItem?: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"): ts.StringLiteral | ts.NumericLiteral | ts.PrefixUnaryExpression | ts.BooleanLiteral; +export declare function createLiteralFromAnyValue(factory: ts.NodeFactory, item: unknown): any; diff --git a/dist/plugin/utils/ast-utils.js b/dist/plugin/utils/ast-utils.js new file mode 100644 index 000000000..d6876d8a0 --- /dev/null +++ b/dist/plugin/utils/ast-utils.js @@ -0,0 +1,273 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.renderDocNode = renderDocNode; +exports.isArray = isArray; +exports.getTypeArguments = getTypeArguments; +exports.isBoolean = isBoolean; +exports.isString = isString; +exports.isStringLiteral = isStringLiteral; +exports.isStringMapping = isStringMapping; +exports.isNumber = isNumber; +exports.isBigInt = isBigInt; +exports.isInterface = isInterface; +exports.isEnum = isEnum; +exports.isEnumLiteral = isEnumLiteral; +exports.hasFlag = hasFlag; +exports.hasObjectFlag = hasObjectFlag; +exports.getText = getText; +exports.getDefaultTypeFormatFlags = getDefaultTypeFormatFlags; +exports.getDocComment = getDocComment; +exports.getMainCommentOfNode = getMainCommentOfNode; +exports.parseCommentDocValue = parseCommentDocValue; +exports.getTsDocTagsOfNode = getTsDocTagsOfNode; +exports.getTsDocErrorsOfNode = getTsDocErrorsOfNode; +exports.getDecoratorArguments = getDecoratorArguments; +exports.getDecoratorName = getDecoratorName; +exports.findNullableTypeFromUnion = findNullableTypeFromUnion; +exports.createBooleanLiteral = createBooleanLiteral; +exports.createPrimitiveLiteral = createPrimitiveLiteral; +exports.createLiteralFromAnyValue = createLiteralFromAnyValue; +const tsdoc_1 = require("@microsoft/tsdoc"); +const typescript_1 = require("typescript"); +const plugin_utils_1 = require("./plugin-utils"); +function renderDocNode(docNode) { + let result = ''; + if (docNode) { + if (docNode instanceof tsdoc_1.DocExcerpt) { + result += docNode.content.toString(); + } + for (const childNode of docNode.getChildNodes()) { + result += renderDocNode(childNode); + } + } + return result; +} +function isArray(type) { + const symbol = type.getSymbol(); + if (!symbol) { + return false; + } + return symbol.getName() === 'Array' && getTypeArguments(type).length === 1; +} +function getTypeArguments(type) { + return type.typeArguments || []; +} +function isBoolean(type) { + return hasFlag(type, typescript_1.TypeFlags.Boolean); +} +function isString(type) { + return hasFlag(type, typescript_1.TypeFlags.String); +} +function isStringLiteral(type) { + return hasFlag(type, typescript_1.TypeFlags.StringLiteral) && !type.isUnion(); +} +function isStringMapping(type) { + return hasFlag(type, typescript_1.TypeFlags.StringMapping); +} +function isNumber(type) { + return hasFlag(type, typescript_1.TypeFlags.Number); +} +function isBigInt(type) { + return hasFlag(type, typescript_1.TypeFlags.BigInt); +} +function isInterface(type) { + return hasObjectFlag(type, typescript_1.ObjectFlags.Interface); +} +function isEnum(type) { + const hasEnumFlag = hasFlag(type, typescript_1.TypeFlags.Enum); + if (hasEnumFlag) { + return true; + } + if (isEnumLiteral(type)) { + return false; + } + const symbol = type.getSymbol(); + if (!symbol) { + return false; + } + const valueDeclaration = symbol.valueDeclaration; + if (!valueDeclaration) { + return false; + } + return valueDeclaration.kind === typescript_1.SyntaxKind.EnumDeclaration; +} +function isEnumLiteral(type) { + return hasFlag(type, typescript_1.TypeFlags.EnumLiteral) && !type.isUnion(); +} +function hasFlag(type, flag) { + return (type.flags & flag) === flag; +} +function hasObjectFlag(type, flag) { + return (type.objectFlags & flag) === flag; +} +function getText(type, typeChecker, enclosingNode, typeFormatFlags) { + if (!typeFormatFlags) { + typeFormatFlags = getDefaultTypeFormatFlags(enclosingNode); + } + const compilerNode = !enclosingNode ? undefined : enclosingNode; + return typeChecker.typeToString(type, compilerNode, typeFormatFlags); +} +function getDefaultTypeFormatFlags(enclosingNode) { + let formatFlags = typescript_1.TypeFormatFlags.UseTypeOfFunction | + typescript_1.TypeFormatFlags.NoTruncation | + typescript_1.TypeFormatFlags.UseFullyQualifiedType | + typescript_1.TypeFormatFlags.WriteTypeArgumentsOfSignature; + if (enclosingNode && enclosingNode.kind === typescript_1.SyntaxKind.TypeAliasDeclaration) + formatFlags |= typescript_1.TypeFormatFlags.InTypeAlias; + return formatFlags; +} +function getDocComment(node) { + const tsdocParser = new tsdoc_1.TSDocParser(); + const parserContext = tsdocParser.parseString(node.getFullText()); + return parserContext.docComment; +} +function getMainCommentOfNode(node) { + const docComment = getDocComment(node); + return renderDocNode(docComment.summarySection).trim(); +} +function parseCommentDocValue(docValue, type) { + let value = docValue.replace(/'/g, '"').trim(); + if (!type || !isString(type)) { + try { + value = JSON.parse(value); + } + catch (_a) { + } + } + else if (isString(type)) { + if (value.split(' ').length !== 1 && !value.startsWith('"')) { + value = null; + } + else { + value = value.replace(/"/g, ''); + } + } + return value; +} +function getTsDocTagsOfNode(node, typeChecker) { + const docComment = getDocComment(node); + const tagDefinitions = { + example: { + hasProperties: true, + repeatable: true + } + }; + const tagResults = {}; + const introspectTsDocTags = (docComment) => { + for (const tag in tagDefinitions) { + const { hasProperties, repeatable } = tagDefinitions[tag]; + const blocks = docComment.customBlocks.filter((block) => block.blockTag.tagName === `@${tag}`); + if (blocks.length === 0) { + continue; + } + if (repeatable && !tagResults[tag]) { + tagResults[tag] = []; + } + const type = typeChecker.getTypeAtLocation(node); + if (hasProperties) { + blocks.forEach((block) => { + const docValue = renderDocNode(block.content).split('\n')[0]; + const value = parseCommentDocValue(docValue, type); + if (value !== null) { + if (repeatable) { + tagResults[tag].push(value); + } + else { + tagResults[tag] = value; + } + } + }); + } + else { + tagResults[tag] = true; + } + } + if (docComment.remarksBlock) { + tagResults['remarks'] = renderDocNode(docComment.remarksBlock.content).trim(); + } + if (docComment.deprecatedBlock) { + tagResults['deprecated'] = true; + } + }; + introspectTsDocTags(docComment); + return tagResults; +} +function getTsDocErrorsOfNode(node) { + const tsdocParser = new tsdoc_1.TSDocParser(); + const parserContext = tsdocParser.parseString(node.getFullText()); + const docComment = parserContext.docComment; + const tagResults = []; + const errorParsingRegex = /{(\d+)} (.*)/; + const introspectTsDocTags = (docComment) => { + const blocks = docComment.customBlocks.filter((block) => block.blockTag.tagName === '@throws'); + blocks.forEach((block) => { + try { + const docValue = renderDocNode(block.content).split('\n')[0].trim(); + const match = docValue.match(errorParsingRegex); + tagResults.push({ + status: match[1], + description: `"${match[2]}"` + }); + } + catch (_a) { + } + }); + }; + introspectTsDocTags(docComment); + return tagResults; +} +function getDecoratorArguments(decorator) { + const callExpression = decorator.expression; + return (callExpression && callExpression.arguments) || []; +} +function getDecoratorName(decorator) { + const isDecoratorFactory = decorator.expression.kind === typescript_1.SyntaxKind.CallExpression; + if (isDecoratorFactory) { + const callExpression = decorator.expression; + const identifier = callExpression + .expression; + if ((0, plugin_utils_1.isDynamicallyAdded)(identifier)) { + return undefined; + } + return getIdentifierFromName(callExpression.expression).getText(); + } + return getIdentifierFromName(decorator.expression).getText(); +} +function getIdentifierFromName(expression) { + const identifier = getNameFromExpression(expression); + if (expression && expression.kind !== typescript_1.SyntaxKind.Identifier) { + throw new Error(); + } + return identifier; +} +function getNameFromExpression(expression) { + if (expression && expression.kind === typescript_1.SyntaxKind.PropertyAccessExpression) { + return expression.name; + } + return expression; +} +function findNullableTypeFromUnion(typeNode, typeChecker) { + return typeNode.types.find((tNode) => hasFlag(typeChecker.getTypeAtLocation(tNode), typescript_1.TypeFlags.Null)); +} +function createBooleanLiteral(factory, flag) { + return flag ? factory.createTrue() : factory.createFalse(); +} +function createPrimitiveLiteral(factory, item, typeOfItem = typeof item) { + switch (typeOfItem) { + case 'boolean': + return createBooleanLiteral(factory, item); + case 'number': { + if (item < 0) { + return factory.createPrefixUnaryExpression(typescript_1.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(item))); + } + return factory.createNumericLiteral(item); + } + case 'string': + return factory.createStringLiteral(item); + } +} +function createLiteralFromAnyValue(factory, item) { + return Array.isArray(item) + ? factory.createArrayLiteralExpression(item.map((item) => createLiteralFromAnyValue(factory, item))) + : createPrimitiveLiteral(factory, item); +} diff --git a/dist/plugin/utils/is-filename-matched.util.d.ts b/dist/plugin/utils/is-filename-matched.util.d.ts new file mode 100644 index 000000000..bddf2006f --- /dev/null +++ b/dist/plugin/utils/is-filename-matched.util.d.ts @@ -0,0 +1 @@ +export declare const isFilenameMatched: (patterns: string[], filename: string) => boolean; diff --git a/dist/plugin/utils/is-filename-matched.util.js b/dist/plugin/utils/is-filename-matched.util.js new file mode 100644 index 000000000..e28ede211 --- /dev/null +++ b/dist/plugin/utils/is-filename-matched.util.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isFilenameMatched = void 0; +const isFilenameMatched = (patterns, filename) => patterns.some((path) => filename.includes(path)); +exports.isFilenameMatched = isFilenameMatched; diff --git a/dist/plugin/utils/plugin-utils.d.ts b/dist/plugin/utils/plugin-utils.d.ts new file mode 100644 index 000000000..4c4f41bb8 --- /dev/null +++ b/dist/plugin/utils/plugin-utils.d.ts @@ -0,0 +1,30 @@ +import * as ts from 'typescript'; +import { PluginOptions } from '../merge-options'; +export declare function getDecoratorOrUndefinedByNames(names: string[], decorators: readonly ts.Decorator[], factory: ts.NodeFactory): ts.Decorator | undefined; +export declare function getTypeReferenceAsString(type: ts.Type, typeChecker: ts.TypeChecker, arrayDepth?: number): { + typeName: string; + isArray?: boolean; + arrayDepth?: number; +}; +export declare function isPromiseOrObservable(type: string): boolean; +export declare function hasPropertyKey(key: string, properties: ts.NodeArray): boolean; +export declare function getOutputExtension(fileName: string): string; +export declare function replaceImportPath(typeReference: string, fileName: string, options: PluginOptions): { + typeReference: string; + typeName: string; + importPath: string; +} | { + typeReference: string; + importPath: string; + typeName?: undefined; +}; +export declare function insertAt(string: string, index: number, substring: string): string; +export declare function isDynamicallyAdded(identifier: ts.Node): boolean; +export declare function isAutoGeneratedEnumUnion(type: ts.Type, typeChecker: ts.TypeChecker): ts.Type; +export declare function isAutoGeneratedTypeUnion(type: ts.Type): boolean; +export declare function extractTypeArgumentIfArray(type: ts.Type): { + type: ts.Type; + isArray: boolean; +}; +export declare function convertPath(windowsPath: string): string; +export declare function canReferenceNode(node: ts.Node, options: PluginOptions): boolean; diff --git a/dist/plugin/utils/plugin-utils.js b/dist/plugin/utils/plugin-utils.js new file mode 100644 index 000000000..97d3cdf35 --- /dev/null +++ b/dist/plugin/utils/plugin-utils.js @@ -0,0 +1,307 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getDecoratorOrUndefinedByNames = getDecoratorOrUndefinedByNames; +exports.getTypeReferenceAsString = getTypeReferenceAsString; +exports.isPromiseOrObservable = isPromiseOrObservable; +exports.hasPropertyKey = hasPropertyKey; +exports.getOutputExtension = getOutputExtension; +exports.replaceImportPath = replaceImportPath; +exports.insertAt = insertAt; +exports.isDynamicallyAdded = isDynamicallyAdded; +exports.isAutoGeneratedEnumUnion = isAutoGeneratedEnumUnion; +exports.isAutoGeneratedTypeUnion = isAutoGeneratedTypeUnion; +exports.extractTypeArgumentIfArray = extractTypeArgumentIfArray; +exports.convertPath = convertPath; +exports.canReferenceNode = canReferenceNode; +const lodash_1 = require("lodash"); +const path_1 = require("path"); +const ts = require("typescript"); +const ast_utils_1 = require("./ast-utils"); +function getDecoratorOrUndefinedByNames(names, decorators, factory) { + return (decorators || factory.createNodeArray()).find((item) => { + try { + const decoratorName = (0, ast_utils_1.getDecoratorName)(item); + return names.includes(decoratorName); + } + catch (_a) { + return false; + } + }); +} +function getTypeReferenceAsString(type, typeChecker, arrayDepth = 0) { + if ((0, ast_utils_1.isArray)(type)) { + const arrayType = (0, ast_utils_1.getTypeArguments)(type)[0]; + const { typeName, arrayDepth: depth } = getTypeReferenceAsString(arrayType, typeChecker, arrayDepth + 1); + if (!typeName) { + return { typeName: undefined }; + } + return { + typeName: `${typeName}`, + isArray: true, + arrayDepth: depth + }; + } + if ((0, ast_utils_1.isBoolean)(type)) { + return { typeName: Boolean.name, arrayDepth }; + } + if ((0, ast_utils_1.isNumber)(type)) { + return { typeName: Number.name, arrayDepth }; + } + if ((0, ast_utils_1.isBigInt)(type)) { + return { typeName: BigInt.name, arrayDepth }; + } + if ((0, ast_utils_1.isString)(type) || (0, ast_utils_1.isStringLiteral)(type) || (0, ast_utils_1.isStringMapping)(type)) { + return { typeName: String.name, arrayDepth }; + } + if (isPromiseOrObservable((0, ast_utils_1.getText)(type, typeChecker))) { + const typeArguments = (0, ast_utils_1.getTypeArguments)(type); + const elementType = getTypeReferenceAsString((0, lodash_1.head)(typeArguments), typeChecker, arrayDepth); + return elementType; + } + if (type.isClass()) { + return { typeName: (0, ast_utils_1.getText)(type, typeChecker), arrayDepth }; + } + try { + const text = (0, ast_utils_1.getText)(type, typeChecker); + if (text === Date.name) { + return { typeName: text, arrayDepth }; + } + if (isOptionalBoolean(text)) { + return { typeName: Boolean.name, arrayDepth }; + } + if (isAutoGeneratedTypeUnion(type) || + isAutoGeneratedEnumUnion(type, typeChecker)) { + const types = type.types; + return getTypeReferenceAsString(types[types.length - 1], typeChecker, arrayDepth); + } + if (text === 'any' || + text === 'unknown' || + text === 'object' || + (0, ast_utils_1.isInterface)(type) || + (type.isUnionOrIntersection() && !(0, ast_utils_1.isEnum)(type))) { + return { typeName: 'Object', arrayDepth }; + } + if ((0, ast_utils_1.isEnum)(type)) { + return { typeName: undefined, arrayDepth }; + } + if (type.aliasSymbol) { + return { typeName: 'Object', arrayDepth }; + } + if (typeChecker.getApparentType(type).getSymbol().getEscapedName() === + 'String') { + return { typeName: String.name, arrayDepth }; + } + return { typeName: undefined }; + } + catch (_a) { + return { typeName: undefined }; + } +} +function isPromiseOrObservable(type) { + return type.includes('Promise<') || type.includes('Observable<'); +} +function hasPropertyKey(key, properties) { + return properties + .filter((item) => !isDynamicallyAdded(item)) + .some((item) => item.name.getText() === key); +} +function getOutputExtension(fileName) { + if (fileName.endsWith('.mts')) { + return '.mjs'; + } + else if (fileName.endsWith('.cts')) { + return '.cjs'; + } + else { + return '.js'; + } +} +function replaceImportPath(typeReference, fileName, options) { + if (!typeReference.includes('import')) { + return { typeReference, importPath: null }; + } + if (options.esmCompatible) { + typeReference = typeReference.replace(', { with: { "resolution-mode": "import" } }', ''); + } + let importPath = /\(\"([^)]).+(\")/.exec(typeReference)[0]; + if (!importPath) { + return { typeReference: undefined, importPath: null }; + } + importPath = convertPath(importPath); + importPath = importPath.slice(2, importPath.length - 1); + try { + if ((0, path_1.isAbsolute)(importPath)) { + throw {}; + } + require.resolve(importPath); + if (!options.esmCompatible) { + typeReference = typeReference.replace('import', 'require'); + } + return { + typeReference, + importPath: null + }; + } + catch (_a) { + const from = (options === null || options === void 0 ? void 0 : options.readonly) + ? convertPath(options.pathToSource) + : path_1.posix.dirname(convertPath(fileName)); + let relativePath = path_1.posix.relative(from, importPath); + relativePath = relativePath[0] !== '.' ? './' + relativePath : relativePath; + const nodeModulesText = 'node_modules'; + const nodeModulePos = relativePath.indexOf(nodeModulesText); + if (nodeModulePos >= 0) { + relativePath = relativePath.slice(nodeModulePos + nodeModulesText.length + 1); + const typesText = '@types'; + const typesPos = relativePath.indexOf(typesText); + if (typesPos >= 0) { + relativePath = relativePath.slice(typesPos + typesText.length + 1); + } + const indexText = '/index'; + const indexPos = relativePath.indexOf(indexText); + if (indexPos >= 0) { + relativePath = relativePath.slice(0, indexPos); + } + } + else if (options.esmCompatible) { + const extension = getOutputExtension(fileName); + relativePath += extension; + } + typeReference = typeReference.replace(importPath, relativePath); + if (options.readonly) { + const { typeName, typeImportStatement } = convertToAsyncImport(typeReference); + return { + typeReference: typeImportStatement, + typeName, + importPath: relativePath + }; + } + if (options.esmCompatible) { + const { typeName, typeImportStatement } = convertToAsyncImport(typeReference); + return { + typeReference: `(${typeImportStatement}).${typeName}`, + importPath: relativePath + }; + } + return { + typeReference: typeReference.replace('import', 'require'), + importPath: relativePath + }; + } +} +function convertToAsyncImport(typeReference) { + const regexp = /import\(.+\).([^\]]+)(\])?/; + const match = regexp.exec(typeReference); + if ((match === null || match === void 0 ? void 0 : match.length) >= 2) { + const importPos = typeReference.indexOf(match[0]); + typeReference = typeReference.replace(`.${match[1]}`, ''); + return { + typeImportStatement: insertAt(typeReference, importPos, 'await '), + typeName: match[1] + }; + } + return { typeImportStatement: typeReference }; +} +function insertAt(string, index, substring) { + return string.slice(0, index) + substring + string.slice(index); +} +function isDynamicallyAdded(identifier) { + return identifier && !identifier.parent && identifier.pos === -1; +} +function isAutoGeneratedEnumUnion(type, typeChecker) { + if (type.isUnionOrIntersection() && !(0, ast_utils_1.isEnum)(type)) { + if (!type.types) { + return undefined; + } + const undefinedTypeIndex = type.types.findIndex((type) => type.intrinsicName === 'undefined' || type.intrinsicName === 'null'); + if (undefinedTypeIndex < 0) { + return undefined; + } + let parentType = undefined; + const isParentSymbolEqual = type.types.every((item, index) => { + if (index === undefinedTypeIndex) { + return true; + } + if (!item.symbol) { + return false; + } + if (!item.symbol.parent || + item.symbol.flags !== ts.SymbolFlags.EnumMember) { + return false; + } + const symbolType = typeChecker.getDeclaredTypeOfSymbol(item.symbol.parent); + if (symbolType === parentType || !parentType) { + parentType = symbolType; + return true; + } + return false; + }); + if (isParentSymbolEqual) { + return parentType; + } + } + return undefined; +} +function isAutoGeneratedTypeUnion(type) { + if (type.isUnionOrIntersection() && !(0, ast_utils_1.isEnum)(type)) { + if (!type.types) { + return false; + } + const undefinedTypeIndex = type.types.findIndex((type) => type.intrinsicName === 'undefined'); + if (type.types.length === 2 && undefinedTypeIndex >= 0) { + return true; + } + } + return false; +} +function extractTypeArgumentIfArray(type) { + if ((0, ast_utils_1.isArray)(type)) { + type = (0, ast_utils_1.getTypeArguments)(type)[0]; + if (!type) { + return undefined; + } + return { + type, + isArray: true + }; + } + return { + type, + isArray: false + }; +} +function isOptionalBoolean(text) { + return typeof text === 'string' && text === 'boolean | undefined'; +} +function convertPath(windowsPath) { + return windowsPath + .replace(/^\\\\\?\\/, '') + .replace(/\\/g, '/') + .replace(/\/\/+/g, '/'); +} +function canReferenceNode(node, options) { + var _a; + if (!options.readonly) { + return true; + } + if (ts.isCallExpression(node) || ts.isIdentifier(node)) { + return false; + } + if (ts.isNewExpression(node)) { + if (((_a = node.expression) === null || _a === void 0 ? void 0 : _a.escapedText) === 'Date') { + return true; + } + return false; + } + if (node.kind === ts.SyntaxKind.FalseKeyword || + node.kind === ts.SyntaxKind.TrueKeyword || + node.kind === ts.SyntaxKind.NullKeyword) { + return true; + } + if (ts.isNumericLiteral(node) || + ts.isPrefixUnaryExpression(node) || + ts.isStringLiteral(node)) { + return true; + } + return false; +} diff --git a/dist/plugin/utils/type-reference-to-identifier.util.d.ts b/dist/plugin/utils/type-reference-to-identifier.util.d.ts new file mode 100644 index 000000000..ae9be329f --- /dev/null +++ b/dist/plugin/utils/type-reference-to-identifier.util.d.ts @@ -0,0 +1,7 @@ +import * as ts from 'typescript'; +import { PluginOptions } from '../merge-options'; +export declare function typeReferenceToIdentifier(typeReferenceDescriptor: { + typeName: string; + isArray?: boolean; + arrayDepth?: number; +}, hostFilename: string, options: PluginOptions, factory: ts.NodeFactory, type: ts.Type, typeImports: Record): ts.Identifier; diff --git a/dist/plugin/utils/type-reference-to-identifier.util.js b/dist/plugin/utils/type-reference-to-identifier.util.js new file mode 100644 index 000000000..b3a5eabde --- /dev/null +++ b/dist/plugin/utils/type-reference-to-identifier.util.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.typeReferenceToIdentifier = typeReferenceToIdentifier; +const plugin_debug_logger_1 = require("../plugin-debug-logger"); +const plugin_utils_1 = require("./plugin-utils"); +function typeReferenceToIdentifier(typeReferenceDescriptor, hostFilename, options, factory, type, typeImports) { + if (options.readonly) { + assertReferenceableType(type, typeReferenceDescriptor.typeName, hostFilename, options); + } + const { typeReference, importPath, typeName } = (0, plugin_utils_1.replaceImportPath)(typeReferenceDescriptor.typeName, hostFilename, options); + let identifier; + if (options.readonly && (typeReference === null || typeReference === void 0 ? void 0 : typeReference.includes('import'))) { + if (!typeImports[importPath]) { + typeImports[importPath] = typeReference; + } + let ref = `t["${importPath}"].${typeName}`; + if (typeReferenceDescriptor.isArray) { + ref = wrapTypeInArray(ref, typeReferenceDescriptor.arrayDepth); + } + identifier = factory.createIdentifier(ref); + } + else { + let ref = typeReference; + if (typeReferenceDescriptor.isArray) { + ref = wrapTypeInArray(ref, typeReferenceDescriptor.arrayDepth); + } + identifier = factory.createIdentifier(ref); + } + return identifier; +} +function wrapTypeInArray(typeRef, arrayDepth) { + for (let i = 0; i < arrayDepth; i++) { + typeRef = `[${typeRef}]`; + } + return typeRef; +} +function assertReferenceableType(type, parsedTypeName, hostFilename, options) { + if (!type.symbol) { + return true; + } + if (!type.symbol.isReferenced) { + return true; + } + if (parsedTypeName.includes('import')) { + return true; + } + const errorMessage = `Type "${parsedTypeName}" is not referenceable ("${hostFilename}"). To fix this, make sure to export this type.`; + if (options.debug) { + plugin_debug_logger_1.pluginDebugLogger.debug(errorMessage); + } + throw new Error(errorMessage); +} diff --git a/dist/plugin/visitors/abstract.visitor.d.ts b/dist/plugin/visitors/abstract.visitor.d.ts new file mode 100644 index 000000000..a985324fc --- /dev/null +++ b/dist/plugin/visitors/abstract.visitor.d.ts @@ -0,0 +1,4 @@ +import * as ts from 'typescript'; +export declare class AbstractFileVisitor { + updateImports(sourceFile: ts.SourceFile, factory: ts.NodeFactory | undefined, program: ts.Program): ts.SourceFile; +} diff --git a/dist/plugin/visitors/abstract.visitor.js b/dist/plugin/visitors/abstract.visitor.js new file mode 100644 index 000000000..c8dcb5a96 --- /dev/null +++ b/dist/plugin/visitors/abstract.visitor.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AbstractFileVisitor = void 0; +const ts = require("typescript"); +const plugin_constants_1 = require("../plugin-constants"); +const [major, minor] = ts.versionMajorMinor.split('.').map((x) => +x); +class AbstractFileVisitor { + updateImports(sourceFile, factory, program) { + if (major <= 4 && minor < 8) { + throw new Error('Nest CLI plugin does not support TypeScript < v4.8'); + } + const importEqualsDeclaration = factory.createImportEqualsDeclaration(undefined, false, factory.createIdentifier(plugin_constants_1.OPENAPI_NAMESPACE), factory.createExternalModuleReference(factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME))); + const compilerOptions = program.getCompilerOptions(); + if (compilerOptions.module >= ts.ModuleKind.ES2015 && + compilerOptions.module <= ts.ModuleKind.ESNext) { + const importAsDeclaration = factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier(plugin_constants_1.OPENAPI_NAMESPACE))), factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME), undefined); + return factory.updateSourceFile(sourceFile, [ + importAsDeclaration, + ...sourceFile.statements + ]); + } + else { + return factory.updateSourceFile(sourceFile, [ + importEqualsDeclaration, + ...sourceFile.statements + ]); + } + } +} +exports.AbstractFileVisitor = AbstractFileVisitor; diff --git a/dist/plugin/visitors/controller-class.visitor.d.ts b/dist/plugin/visitors/controller-class.visitor.d.ts new file mode 100644 index 000000000..a6597fb49 --- /dev/null +++ b/dist/plugin/visitors/controller-class.visitor.d.ts @@ -0,0 +1,20 @@ +import * as ts from 'typescript'; +import { PluginOptions } from '../merge-options'; +import { AbstractFileVisitor } from './abstract.visitor'; +type ClassMetadata = Record; +export declare class ControllerClassVisitor extends AbstractFileVisitor { + private readonly _collectedMetadata; + private readonly _typeImports; + get typeImports(): Record; + collectedMetadata(options: PluginOptions): Array<[ts.CallExpression, Record]>; + visit(sourceFile: ts.SourceFile, ctx: ts.TransformationContext, program: ts.Program, options: PluginOptions): ts.Node; + addDecoratorToNode(factory: ts.NodeFactory, compilerNode: ts.MethodDeclaration, typeChecker: ts.TypeChecker, options: PluginOptions, sourceFile: ts.SourceFile, metadata: ClassMetadata): ts.MethodDeclaration; + createApiOperationDecorator(factory: ts.NodeFactory, node: ts.MethodDeclaration, decorators: readonly ts.Decorator[], options: PluginOptions, sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker, metadata: ClassMetadata): ts.Decorator[]; + createApiResponseDecorator(factory: ts.NodeFactory, node: ts.MethodDeclaration, options: PluginOptions, metadata: ClassMetadata): ts.Decorator[]; + createDecoratorObjectLiteralExpr(factory: ts.NodeFactory, node: ts.MethodDeclaration, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, metadata: ClassMetadata, options: PluginOptions): ts.ObjectLiteralExpression; + createTypePropertyAssignment(factory: ts.NodeFactory, node: ts.MethodDeclaration, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.PropertyAssignment; + createStatusPropertyAssignment(factory: ts.NodeFactory, node: ts.MethodDeclaration, existingProperties: ts.NodeArray): ts.PropertyAssignment; + getStatusCodeIdentifier(factory: ts.NodeFactory, node: ts.MethodDeclaration): any; + private normalizeImportPath; +} +export {}; diff --git a/dist/plugin/visitors/controller-class.visitor.js b/dist/plugin/visitors/controller-class.visitor.js new file mode 100644 index 000000000..716d3c68a --- /dev/null +++ b/dist/plugin/visitors/controller-class.visitor.js @@ -0,0 +1,265 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ControllerClassVisitor = void 0; +const lodash_1 = require("lodash"); +const path_1 = require("path"); +const ts = require("typescript"); +const decorators_1 = require("../../decorators"); +const plugin_constants_1 = require("../plugin-constants"); +const ast_utils_1 = require("../utils/ast-utils"); +const plugin_utils_1 = require("../utils/plugin-utils"); +const type_reference_to_identifier_util_1 = require("../utils/type-reference-to-identifier.util"); +const abstract_visitor_1 = require("./abstract.visitor"); +class ControllerClassVisitor extends abstract_visitor_1.AbstractFileVisitor { + constructor() { + super(...arguments); + this._collectedMetadata = {}; + this._typeImports = {}; + } + get typeImports() { + return this._typeImports; + } + collectedMetadata(options) { + const metadataWithImports = []; + Object.keys(this._collectedMetadata).forEach((filePath) => { + const metadata = this._collectedMetadata[filePath]; + const fileExt = options.esmCompatible ? (0, plugin_utils_1.getOutputExtension)(filePath) : ''; + const path = filePath.replace(/\.[jt]s$/, fileExt); + const importExpr = ts.factory.createCallExpression(ts.factory.createToken(ts.SyntaxKind.ImportKeyword), undefined, [ts.factory.createStringLiteral(path)]); + metadataWithImports.push([importExpr, metadata]); + }); + return metadataWithImports; + } + visit(sourceFile, ctx, program, options) { + const typeChecker = program.getTypeChecker(); + if (!options.readonly) { + sourceFile = this.updateImports(sourceFile, ctx.factory, program); + } + const visitNode = (node) => { + var _a; + if (ts.isMethodDeclaration(node)) { + try { + const metadata = {}; + const updatedNode = this.addDecoratorToNode(ctx.factory, node, typeChecker, options, sourceFile, metadata); + if (!options.readonly) { + return updatedNode; + } + else { + const filePath = this.normalizeImportPath(options.pathToSource, sourceFile.fileName); + if (!this._collectedMetadata[filePath]) { + this._collectedMetadata[filePath] = {}; + } + const parent = node.parent; + const clsName = (_a = parent.name) === null || _a === void 0 ? void 0 : _a.getText(); + if (clsName) { + if (!this._collectedMetadata[filePath][clsName]) { + this._collectedMetadata[filePath][clsName] = {}; + } + Object.assign(this._collectedMetadata[filePath][clsName], metadata); + } + } + } + catch (_b) { + if (!options.readonly) { + return node; + } + } + } + if (options.readonly) { + ts.forEachChild(node, visitNode); + } + else { + return ts.visitEachChild(node, visitNode, ctx); + } + }; + return ts.visitNode(sourceFile, visitNode); + } + addDecoratorToNode(factory, compilerNode, typeChecker, options, sourceFile, metadata) { + var _a; + const hostFilename = sourceFile.fileName; + const decorators = ts.canHaveDecorators(compilerNode) && ts.getDecorators(compilerNode); + if (!decorators) { + return compilerNode; + } + const apiOperationDecoratorsArray = this.createApiOperationDecorator(factory, compilerNode, decorators, options, sourceFile, typeChecker, metadata); + const apiResponseDecoratorsArray = this.createApiResponseDecorator(factory, compilerNode, options, metadata); + const removeExistingApiOperationDecorator = apiOperationDecoratorsArray.length > 0; + const existingDecorators = removeExistingApiOperationDecorator + ? decorators.filter((item) => (0, ast_utils_1.getDecoratorName)(item) !== decorators_1.ApiOperation.name) + : decorators; + const modifiers = (_a = ts.getModifiers(compilerNode)) !== null && _a !== void 0 ? _a : []; + const objectLiteralExpr = this.createDecoratorObjectLiteralExpr(factory, compilerNode, typeChecker, factory.createNodeArray(), hostFilename, metadata, options); + const updatedDecorators = [ + ...apiOperationDecoratorsArray, + ...apiResponseDecoratorsArray, + ...existingDecorators, + factory.createDecorator(factory.createCallExpression(factory.createIdentifier(`${plugin_constants_1.OPENAPI_NAMESPACE}.${decorators_1.ApiResponse.name}`), undefined, [factory.createObjectLiteralExpression(objectLiteralExpr.properties)])) + ]; + if (!options.readonly) { + return factory.updateMethodDeclaration(compilerNode, [...updatedDecorators, ...modifiers], compilerNode.asteriskToken, compilerNode.name, compilerNode.questionToken, compilerNode.typeParameters, compilerNode.parameters, compilerNode.type, compilerNode.body); + } + else { + return compilerNode; + } + } + createApiOperationDecorator(factory, node, decorators, options, sourceFile, typeChecker, metadata) { + if (!options.introspectComments) { + return []; + } + const apiOperationDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decorators_1.ApiOperation.name], decorators, factory); + let apiOperationExistingProps = undefined; + if (apiOperationDecorator && !options.readonly) { + const apiOperationExpr = (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(apiOperationDecorator)); + if (apiOperationExpr) { + apiOperationExistingProps = + apiOperationExpr.properties; + } + } + const extractedComments = (0, ast_utils_1.getMainCommentOfNode)(node); + if (!extractedComments) { + return []; + } + const properties = [ + ...(apiOperationExistingProps !== null && apiOperationExistingProps !== void 0 ? apiOperationExistingProps : factory.createNodeArray()) + ]; + const tags = (0, ast_utils_1.getTsDocTagsOfNode)(node, typeChecker); + const hasRemarksKey = (0, plugin_utils_1.hasPropertyKey)('description', factory.createNodeArray(apiOperationExistingProps)); + if (!hasRemarksKey && tags.remarks) { + const remarksPropertyAssignment = factory.createPropertyAssignment('description', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.remarks)); + properties.push(remarksPropertyAssignment); + if (options.controllerKeyOfComment === 'description') { + properties.unshift(factory.createPropertyAssignment('summary', factory.createStringLiteral(extractedComments))); + } + else { + const keyToGenerate = options.controllerKeyOfComment; + properties.unshift(factory.createPropertyAssignment(keyToGenerate, factory.createStringLiteral(extractedComments))); + } + } + else { + const keyToGenerate = options.controllerKeyOfComment; + properties.unshift(factory.createPropertyAssignment(keyToGenerate, factory.createStringLiteral(extractedComments))); + } + const hasDeprecatedKey = (0, plugin_utils_1.hasPropertyKey)('deprecated', factory.createNodeArray(apiOperationExistingProps)); + if (!hasDeprecatedKey && tags.deprecated) { + const deprecatedPropertyAssignment = factory.createPropertyAssignment('deprecated', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.deprecated)); + properties.push(deprecatedPropertyAssignment); + } + const objectLiteralExpr = factory.createObjectLiteralExpression((0, lodash_1.compact)(properties)); + const apiOperationDecoratorArguments = factory.createNodeArray([objectLiteralExpr]); + const methodKey = node.name.getText(); + if (metadata[methodKey]) { + const existingObjectLiteralExpr = metadata[methodKey]; + const existingProperties = existingObjectLiteralExpr.properties; + const updatedProperties = factory.createNodeArray([ + ...existingProperties, + ...(0, lodash_1.compact)(properties) + ]); + const updatedObjectLiteralExpr = factory.createObjectLiteralExpression(updatedProperties); + metadata[methodKey] = updatedObjectLiteralExpr; + } + else { + metadata[methodKey] = objectLiteralExpr; + } + if (apiOperationDecorator) { + const expr = apiOperationDecorator.expression; + const updatedCallExpr = factory.updateCallExpression(expr, expr.expression, undefined, apiOperationDecoratorArguments); + return [factory.updateDecorator(apiOperationDecorator, updatedCallExpr)]; + } + else { + return [ + factory.createDecorator(factory.createCallExpression(factory.createIdentifier(`${plugin_constants_1.OPENAPI_NAMESPACE}.${decorators_1.ApiOperation.name}`), undefined, apiOperationDecoratorArguments)) + ]; + } + } + createApiResponseDecorator(factory, node, options, metadata) { + if (!options.introspectComments) { + return []; + } + const tags = (0, ast_utils_1.getTsDocErrorsOfNode)(node); + if (!tags.length) { + return []; + } + return tags.map((tag) => { + const properties = []; + properties.push(factory.createPropertyAssignment('status', factory.createNumericLiteral(tag.status))); + properties.push(factory.createPropertyAssignment('description', factory.createNumericLiteral(tag.description))); + const objectLiteralExpr = factory.createObjectLiteralExpression((0, lodash_1.compact)(properties)); + const methodKey = node.name.getText(); + metadata[methodKey] = objectLiteralExpr; + const apiResponseDecoratorArguments = factory.createNodeArray([objectLiteralExpr]); + return factory.createDecorator(factory.createCallExpression(factory.createIdentifier(`${plugin_constants_1.OPENAPI_NAMESPACE}.${decorators_1.ApiResponse.name}`), undefined, apiResponseDecoratorArguments)); + }); + } + createDecoratorObjectLiteralExpr(factory, node, typeChecker, existingProperties = factory.createNodeArray(), hostFilename, metadata, options) { + let properties = []; + if (!options.readonly && !options.skipAutoHttpCode) { + properties = properties.concat(existingProperties, this.createStatusPropertyAssignment(factory, node, existingProperties)); + } + properties = properties.concat([ + this.createTypePropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) + ]); + const objectLiteralExpr = factory.createObjectLiteralExpression((0, lodash_1.compact)(properties)); + const methodKey = node.name.getText(); + const existingExprOrUndefined = metadata[methodKey]; + if (existingExprOrUndefined) { + const existingProperties = existingExprOrUndefined.properties; + const updatedProperties = factory.createNodeArray([ + ...existingProperties, + ...(0, lodash_1.compact)(properties) + ]); + const updatedObjectLiteralExpr = factory.createObjectLiteralExpression(updatedProperties); + metadata[methodKey] = updatedObjectLiteralExpr; + } + else { + metadata[methodKey] = objectLiteralExpr; + } + return objectLiteralExpr; + } + createTypePropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) { + if ((0, plugin_utils_1.hasPropertyKey)('type', existingProperties)) { + return undefined; + } + const signature = typeChecker.getSignatureFromDeclaration(node); + const type = typeChecker.getReturnTypeOfSignature(signature); + if (!type) { + return undefined; + } + const typeReferenceDescriptor = (0, plugin_utils_1.getTypeReferenceAsString)(type, typeChecker); + if (!typeReferenceDescriptor.typeName) { + return undefined; + } + if (typeReferenceDescriptor.typeName.includes('node_modules')) { + return undefined; + } + const identifier = (0, type_reference_to_identifier_util_1.typeReferenceToIdentifier)(typeReferenceDescriptor, hostFilename, options, factory, type, this._typeImports); + return factory.createPropertyAssignment('type', identifier); + } + createStatusPropertyAssignment(factory, node, existingProperties) { + if ((0, plugin_utils_1.hasPropertyKey)('status', existingProperties)) { + return undefined; + } + const statusNode = this.getStatusCodeIdentifier(factory, node); + return factory.createPropertyAssignment('status', statusNode); + } + getStatusCodeIdentifier(factory, node) { + const decorators = ts.canHaveDecorators(node) && ts.getDecorators(node); + const httpCodeDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['HttpCode'], decorators, factory); + if (httpCodeDecorator) { + const argument = (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(httpCodeDecorator)); + if (argument) { + return argument; + } + } + const postDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['Post'], decorators, factory); + if (postDecorator) { + return factory.createIdentifier('201'); + } + return factory.createIdentifier('200'); + } + normalizeImportPath(pathToSource, path) { + let relativePath = path_1.posix.relative((0, plugin_utils_1.convertPath)(pathToSource), (0, plugin_utils_1.convertPath)(path)); + relativePath = relativePath[0] !== '.' ? './' + relativePath : relativePath; + return relativePath; + } +} +exports.ControllerClassVisitor = ControllerClassVisitor; diff --git a/dist/plugin/visitors/model-class.visitor.d.ts b/dist/plugin/visitors/model-class.visitor.d.ts new file mode 100644 index 000000000..2c49fc300 --- /dev/null +++ b/dist/plugin/visitors/model-class.visitor.d.ts @@ -0,0 +1,35 @@ +import * as ts from 'typescript'; +import { PropertyAssignment } from 'typescript'; +import { PluginOptions } from '../merge-options'; +import { AbstractFileVisitor } from './abstract.visitor'; +type ClassMetadata = Record; +export declare class ModelClassVisitor extends AbstractFileVisitor { + private readonly _typeImports; + private readonly _collectedMetadata; + get typeImports(): Record; + collectedMetadata(options: PluginOptions): Array<[ts.CallExpression, Record]>; + visit(sourceFile: ts.SourceFile, ctx: ts.TransformationContext, program: ts.Program, options: PluginOptions): ts.Node; + visitPropertyNodeDeclaration(node: ts.PropertyDeclaration, ctx: ts.TransformationContext, typeChecker: ts.TypeChecker, options: PluginOptions, sourceFile: ts.SourceFile, metadata: ClassMetadata): ts.PropertyDeclaration; + visitConstructorDeclarationNode(constructorNode: ts.ConstructorDeclaration, typeChecker: ts.TypeChecker, options: PluginOptions, sourceFile: ts.SourceFile, metadata: ClassMetadata): void; + addMetadataFactory(factory: ts.NodeFactory, node: ts.ClassDeclaration, classMetadata: ClassMetadata, sourceFile: ts.SourceFile, options: PluginOptions): ts.ClassDeclaration; + inspectPropertyDeclaration(factory: ts.NodeFactory, compilerNode: ts.PropertyDeclaration, typeChecker: ts.TypeChecker, options: PluginOptions, hostFilename: string, sourceFile: ts.SourceFile, metadata: ClassMetadata): void; + createDecoratorObjectLiteralExpr(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, typeChecker: ts.TypeChecker, existingProperties?: ts.NodeArray, options?: PluginOptions, hostFilename?: string, sourceFile?: ts.SourceFile): ts.ObjectLiteralExpression; + private createTypePropertyAssignments; + createInitializerForArrayLiteralTypeNode(node: ts.ArrayTypeNode, factory: ts.NodeFactory, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.ArrowFunction; + createInitializerForTypeLiteralNode(node: ts.TypeLiteralNode, factory: ts.NodeFactory, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.ArrowFunction; + isNullableUnion(node: ts.UnionTypeNode): { + nullableType: ts.TypeNode; + isNullable: boolean; + }; + createEnumPropertyAssignment(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.PropertyAssignment | ts.PropertyAssignment[]; + createDefaultPropertyAssignment(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, existingProperties: ts.NodeArray, options: PluginOptions): ts.PropertyAssignment; + createValidationPropertyAssignments(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature, options: PluginOptions): ts.PropertyAssignment[]; + addPropertyByValidationDecorator(factory: ts.NodeFactory, decoratorName: string, propertyKey: string, decorators: readonly ts.Decorator[], assignments: ts.PropertyAssignment[], options: PluginOptions): void; + addPropertiesByValidationDecorator(factory: ts.NodeFactory, decoratorName: string, decorators: readonly ts.Decorator[], assignments: ts.PropertyAssignment[], addPropertyAssignments: (decoratorRef: ts.Decorator) => PropertyAssignment[]): void; + addClassMetadata(node: ts.PropertyDeclaration, objectLiteral: ts.ObjectLiteralExpression, sourceFile: ts.SourceFile, metadata: ClassMetadata): void; + createDescriptionAndTsDocTagPropertyAssignments(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, typeChecker: ts.TypeChecker, existingProperties?: ts.NodeArray, options?: PluginOptions, sourceFile?: ts.SourceFile): ts.PropertyAssignment[]; + private normalizeImportPath; + private clonePrimitiveLiteral; + private getInitializerPrimitiveTypeName; +} +export {}; diff --git a/dist/plugin/visitors/model-class.visitor.js b/dist/plugin/visitors/model-class.visitor.js new file mode 100644 index 000000000..1ea2388e4 --- /dev/null +++ b/dist/plugin/visitors/model-class.visitor.js @@ -0,0 +1,514 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ModelClassVisitor = void 0; +const lodash_1 = require("lodash"); +const path_1 = require("path"); +const ts = require("typescript"); +const typescript_1 = require("typescript"); +const decorators_1 = require("../../decorators"); +const decorators_properties_1 = require("../../services/decorators-properties"); +const plugin_constants_1 = require("../plugin-constants"); +const plugin_debug_logger_1 = require("../plugin-debug-logger"); +const ast_utils_1 = require("../utils/ast-utils"); +const plugin_utils_1 = require("../utils/plugin-utils"); +const type_reference_to_identifier_util_1 = require("../utils/type-reference-to-identifier.util"); +const abstract_visitor_1 = require("./abstract.visitor"); +class ModelClassVisitor extends abstract_visitor_1.AbstractFileVisitor { + constructor() { + super(...arguments); + this._typeImports = {}; + this._collectedMetadata = {}; + } + get typeImports() { + return this._typeImports; + } + collectedMetadata(options) { + const metadataWithImports = []; + Object.keys(this._collectedMetadata).forEach((filePath) => { + const metadata = this._collectedMetadata[filePath]; + const fileExt = options.esmCompatible ? (0, plugin_utils_1.getOutputExtension)(filePath) : ''; + const path = filePath.replace(/\.[jt]s$/, fileExt); + const importExpr = ts.factory.createCallExpression(ts.factory.createToken(ts.SyntaxKind.ImportKeyword), undefined, [ts.factory.createStringLiteral(path)]); + metadataWithImports.push([importExpr, metadata]); + }); + return metadataWithImports; + } + visit(sourceFile, ctx, program, options) { + const typeChecker = program.getTypeChecker(); + sourceFile = this.updateImports(sourceFile, ctx.factory, program); + const propertyNodeVisitorFactory = (metadata) => (node) => { + const visit = () => { + if (ts.isPropertyDeclaration(node)) { + this.visitPropertyNodeDeclaration(node, ctx, typeChecker, options, sourceFile, metadata); + } + else if (options.parameterProperties && + ts.isConstructorDeclaration(node)) { + this.visitConstructorDeclarationNode(node, typeChecker, options, sourceFile, metadata); + } + return node; + }; + const visitedNode = visit(); + if (!options.readonly) { + return visitedNode; + } + }; + const visitClassNode = (node) => { + var _a; + if (ts.isClassDeclaration(node)) { + const metadata = {}; + const isExported = (_a = node.modifiers) === null || _a === void 0 ? void 0 : _a.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword); + if (options.readonly) { + if (isExported) { + ts.forEachChild(node, propertyNodeVisitorFactory(metadata)); + } + else { + if (options.debug) { + plugin_debug_logger_1.pluginDebugLogger.debug(`Skipping class "${node.name.getText()}" because it's not exported.`); + } + } + } + else { + node = ts.visitEachChild(node, propertyNodeVisitorFactory(metadata), ctx); + } + if ((isExported && options.readonly) || !options.readonly) { + const declaration = this.addMetadataFactory(ctx.factory, node, metadata, sourceFile, options); + if (!options.readonly) { + return declaration; + } + } + } + if (options.readonly) { + ts.forEachChild(node, visitClassNode); + } + else { + return ts.visitEachChild(node, visitClassNode, ctx); + } + }; + return ts.visitNode(sourceFile, visitClassNode); + } + visitPropertyNodeDeclaration(node, ctx, typeChecker, options, sourceFile, metadata) { + const isPropertyStatic = (node.modifiers || []).some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword); + if (isPropertyStatic) { + return node; + } + const isPrivateProperty = ts.isPrivateIdentifier(node.name); + if (isPrivateProperty) { + return node; + } + const decorators = ts.canHaveDecorators(node) && ts.getDecorators(node); + const classTransformerShim = options.classTransformerShim; + const hidePropertyDecoratorExists = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(classTransformerShim + ? [decorators_1.ApiHideProperty.name, 'Exclude'] + : [decorators_1.ApiHideProperty.name], decorators, typescript_1.factory); + const annotatePropertyDecoratorExists = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(classTransformerShim ? [decorators_1.ApiProperty.name, 'Expose'] : [decorators_1.ApiProperty.name], decorators, typescript_1.factory); + if (!annotatePropertyDecoratorExists && + (hidePropertyDecoratorExists || classTransformerShim === 'exclusive')) { + return node; + } + else if (annotatePropertyDecoratorExists && hidePropertyDecoratorExists) { + plugin_debug_logger_1.pluginDebugLogger.debug(`"${node.parent.name.getText()}->${node.name.getText()}" has conflicting decorators, excluding as @ApiHideProperty() takes priority.`); + return node; + } + try { + this.inspectPropertyDeclaration(ctx.factory, node, typeChecker, options, sourceFile.fileName, sourceFile, metadata); + } + catch (err) { + return node; + } + } + visitConstructorDeclarationNode(constructorNode, typeChecker, options, sourceFile, metadata) { + constructorNode.forEachChild((node) => { + if (ts.isParameter(node) && + node.modifiers != null && + node.modifiers.some((modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword || + modifier.kind === ts.SyntaxKind.PrivateKeyword || + modifier.kind === ts.SyntaxKind.PublicKeyword || + modifier.kind === ts.SyntaxKind.ProtectedKeyword)) { + const objectLiteralExpr = this.createDecoratorObjectLiteralExpr(typescript_1.factory, node, typeChecker, typescript_1.factory.createNodeArray(), options, sourceFile.fileName, sourceFile); + const propertyName = node.name.getText(); + metadata[propertyName] = objectLiteralExpr; + } + }); + } + addMetadataFactory(factory, node, classMetadata, sourceFile, options) { + const returnValue = factory.createObjectLiteralExpression(Object.keys(classMetadata).map((key) => factory.createPropertyAssignment(factory.createIdentifier(key), classMetadata[key]))); + if (options.readonly) { + const filePath = this.normalizeImportPath(options.pathToSource, sourceFile.fileName); + if (!this._collectedMetadata[filePath]) { + this._collectedMetadata[filePath] = {}; + } + const attributeKey = node.name.getText(); + this._collectedMetadata[filePath][attributeKey] = returnValue; + return; + } + const method = factory.createMethodDeclaration([factory.createModifier(ts.SyntaxKind.StaticKeyword)], undefined, factory.createIdentifier(plugin_constants_1.METADATA_FACTORY_NAME), undefined, undefined, [], undefined, factory.createBlock([factory.createReturnStatement(returnValue)], true)); + return factory.updateClassDeclaration(node, node.modifiers, node.name, node.typeParameters, node.heritageClauses, [...node.members, method]); + } + inspectPropertyDeclaration(factory, compilerNode, typeChecker, options, hostFilename, sourceFile, metadata) { + const objectLiteralExpr = this.createDecoratorObjectLiteralExpr(factory, compilerNode, typeChecker, factory.createNodeArray(), options, hostFilename, sourceFile); + this.addClassMetadata(compilerNode, objectLiteralExpr, sourceFile, metadata); + } + createDecoratorObjectLiteralExpr(factory, node, typeChecker, existingProperties = factory.createNodeArray(), options = {}, hostFilename = '', sourceFile) { + const isRequired = !node.questionToken; + const properties = [ + ...existingProperties, + !(0, plugin_utils_1.hasPropertyKey)('required', existingProperties) && + factory.createPropertyAssignment('required', (0, ast_utils_1.createBooleanLiteral)(factory, isRequired)), + ...this.createTypePropertyAssignments(factory, node.type, typeChecker, existingProperties, hostFilename, options), + ...this.createDescriptionAndTsDocTagPropertyAssignments(factory, node, typeChecker, existingProperties, options, sourceFile), + this.createDefaultPropertyAssignment(factory, node, existingProperties, options), + this.createEnumPropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) + ]; + if ((ts.isPropertyDeclaration(node) || ts.isPropertySignature(node)) && + options.classValidatorShim) { + properties.push(this.createValidationPropertyAssignments(factory, node, options)); + } + return factory.createObjectLiteralExpression((0, lodash_1.compact)((0, lodash_1.flatten)(properties))); + } + createTypePropertyAssignments(factory, node, typeChecker, existingProperties, hostFilename, options) { + const key = 'type'; + if ((0, plugin_utils_1.hasPropertyKey)(key, existingProperties)) { + return []; + } + if (node) { + if (ts.isArrayTypeNode(node) && ts.isTypeLiteralNode(node.elementType)) { + const initializer = this.createInitializerForArrayLiteralTypeNode(node, factory, typeChecker, existingProperties, hostFilename, options); + return [factory.createPropertyAssignment(key, initializer)]; + } + if (ts.isTypeLiteralNode(node)) { + const initializer = this.createInitializerForTypeLiteralNode(node, factory, typeChecker, existingProperties, hostFilename, options); + return [factory.createPropertyAssignment(key, initializer)]; + } + if (ts.isUnionTypeNode(node)) { + const { nullableType, isNullable } = this.isNullableUnion(node); + const remainingTypes = node.types.filter((t) => t !== nullableType); + if (remainingTypes.length === 1) { + const nonNullishNode = remainingTypes[0]; + const resolved = typeChecker.getTypeAtLocation(nonNullishNode); + let candidateType = resolved; + const arrayTuple = (0, plugin_utils_1.extractTypeArgumentIfArray)(candidateType); + if (arrayTuple) { + candidateType = arrayTuple.type; + } + let isEnumType = false; + if (candidateType) { + if ((0, ast_utils_1.isEnum)(candidateType)) { + isEnumType = true; + } + else { + const maybeEnum = (0, plugin_utils_1.isAutoGeneratedEnumUnion)(candidateType, typeChecker); + if (maybeEnum) { + isEnumType = true; + } + } + } + if (isEnumType) { + return isNullable + ? [ + factory.createPropertyAssignment('nullable', (0, ast_utils_1.createBooleanLiteral)(factory, true)) + ] + : []; + } + const propertyAssignments = this.createTypePropertyAssignments(factory, nonNullishNode, typeChecker, existingProperties, hostFilename, options); + if (!isNullable) { + return propertyAssignments; + } + return [ + ...propertyAssignments, + factory.createPropertyAssignment('nullable', (0, ast_utils_1.createBooleanLiteral)(factory, true)) + ]; + } + } + } + const type = typeChecker.getTypeAtLocation(node); + if (!type) { + return []; + } + const typeReferenceDescriptor = (0, plugin_utils_1.getTypeReferenceAsString)(type, typeChecker); + if (!typeReferenceDescriptor.typeName) { + return []; + } + const identifier = (0, type_reference_to_identifier_util_1.typeReferenceToIdentifier)(typeReferenceDescriptor, hostFilename, options, factory, type, this._typeImports); + const initializer = factory.createArrowFunction(undefined, undefined, [], undefined, undefined, identifier); + return [factory.createPropertyAssignment(key, initializer)]; + } + createInitializerForArrayLiteralTypeNode(node, factory, typeChecker, existingProperties, hostFilename, options) { + const elementType = node.elementType; + const propertyAssignments = Array.from(elementType.members || []).map((member) => { + const literalExpr = this.createDecoratorObjectLiteralExpr(factory, member, typeChecker, existingProperties, options, hostFilename); + return factory.createPropertyAssignment(factory.createIdentifier(member.name.getText()), literalExpr); + }); + const initializer = factory.createArrowFunction(undefined, undefined, [], undefined, undefined, factory.createArrayLiteralExpression([ + factory.createParenthesizedExpression(factory.createObjectLiteralExpression(propertyAssignments)) + ])); + return initializer; + } + createInitializerForTypeLiteralNode(node, factory, typeChecker, existingProperties, hostFilename, options) { + const propertyAssignments = Array.from(node.members || []).map((member) => { + const literalExpr = this.createDecoratorObjectLiteralExpr(factory, member, typeChecker, existingProperties, options, hostFilename); + return factory.createPropertyAssignment(factory.createIdentifier(member.name.getText()), literalExpr); + }); + const initializer = factory.createArrowFunction(undefined, undefined, [], undefined, undefined, factory.createParenthesizedExpression(factory.createObjectLiteralExpression(propertyAssignments))); + return initializer; + } + isNullableUnion(node) { + const nullableType = node.types.find((type) => type.kind === ts.SyntaxKind.NullKeyword || + (ts.SyntaxKind.LiteralType && type.getText() === 'null')); + const isNullable = !!nullableType; + return { nullableType, isNullable }; + } + createEnumPropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) { + const key = 'enum'; + if ((0, plugin_utils_1.hasPropertyKey)(key, existingProperties)) { + return undefined; + } + let type; + try { + if (node.type) { + type = typeChecker.getTypeFromTypeNode(node.type); + } + } + catch (e) { + } + if (!type) { + type = typeChecker.getTypeAtLocation(node); + } + if (!type) { + return undefined; + } + if ((type.flags & ts.TypeFlags.Union) !== 0) { + const union = type; + const nonNullish = union.types.filter((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)) === 0); + if (nonNullish.length === 1) { + type = nonNullish[0]; + } + } + if ((0, plugin_utils_1.isAutoGeneratedTypeUnion)(type)) { + const types = type.types; + const nonUndefined = types.find((t) => t.intrinsicName !== 'undefined'); + if (nonUndefined) { + type = nonUndefined; + } + } + if ((0, plugin_utils_1.isAutoGeneratedTypeUnion)(type)) { + const types = type.types; + type = types[types.length - 1]; + } + const typeIsArrayTuple = (0, plugin_utils_1.extractTypeArgumentIfArray)(type); + if (!typeIsArrayTuple) { + return undefined; + } + const isArrayType = typeIsArrayTuple.isArray; + type = typeIsArrayTuple.type; + const isEnumMember = type.symbol && type.symbol.flags === ts.SymbolFlags.EnumMember; + if (!(0, ast_utils_1.isEnum)(type) || isEnumMember) { + if (!isEnumMember) { + type = (0, plugin_utils_1.isAutoGeneratedEnumUnion)(type, typeChecker); + } + if (!type) { + return undefined; + } + const typeIsArrayTuple = (0, plugin_utils_1.extractTypeArgumentIfArray)(type); + if (!typeIsArrayTuple) { + return undefined; + } + type = typeIsArrayTuple.type; + } + const typeReferenceDescriptor = { typeName: (0, ast_utils_1.getText)(type, typeChecker) }; + const enumIdentifier = (0, type_reference_to_identifier_util_1.typeReferenceToIdentifier)(typeReferenceDescriptor, hostFilename, options, factory, type, this._typeImports); + const enumProperty = factory.createPropertyAssignment(key, enumIdentifier); + if (isArrayType) { + const isArrayKey = 'isArray'; + const isArrayProperty = factory.createPropertyAssignment(isArrayKey, factory.createIdentifier('true')); + return [enumProperty, isArrayProperty]; + } + return enumProperty; + } + createDefaultPropertyAssignment(factory, node, existingProperties, options) { + var _a; + const key = 'default'; + if (options.skipDefaultValues) { + return undefined; + } + if ((0, plugin_utils_1.hasPropertyKey)(key, existingProperties)) { + return undefined; + } + if (ts.isPropertySignature(node)) { + return undefined; + } + if (node.initializer == null) { + return undefined; + } + let initializer = node.initializer; + if (ts.isAsExpression(initializer)) { + initializer = initializer.expression; + } + initializer = + (_a = this.clonePrimitiveLiteral(factory, initializer)) !== null && _a !== void 0 ? _a : initializer; + if (!(0, plugin_utils_1.canReferenceNode)(initializer, options)) { + const parentFilePath = node.getSourceFile().fileName; + const propertyName = node.name.getText(); + plugin_debug_logger_1.pluginDebugLogger.debug(`Skipping registering default value for "${propertyName}" property in "${parentFilePath}" file because it is not a referenceable value ("${initializer.getText()}").`); + return undefined; + } + return factory.createPropertyAssignment(key, initializer); + } + createValidationPropertyAssignments(factory, node, options) { + const assignments = []; + const decorators = ts.canHaveDecorators(node) && ts.getDecorators(node); + if (!options.readonly) { + this.addPropertyByValidationDecorator(factory, 'IsIn', 'enum', decorators, assignments, options); + } + decorators_properties_1.decoratorsProperties.forEach((decoratorProperty) => { + if (decoratorProperty.mappingType === decorators_properties_1.decoratorsPropertiesMappingType.DIRECT) { + this.addPropertyByValidationDecorator(factory, decoratorProperty.decorator, decoratorProperty.property, decorators, assignments, options); + } + else if (decoratorProperty.mappingType === + decorators_properties_1.decoratorsPropertiesMappingType.INDIRECT_VALUE) { + this.addPropertiesByValidationDecorator(factory, decoratorProperty.decorator, decorators, assignments, () => { + return [ + factory.createPropertyAssignment(decoratorProperty.property, (0, ast_utils_1.createPrimitiveLiteral)(factory, decoratorProperty.value)) + ]; + }); + } + else if (decoratorProperty.mappingType === + decorators_properties_1.decoratorsPropertiesMappingType.INDIRECT_ARGUMENT) { + this.addPropertiesByValidationDecorator(factory, decoratorProperty.decorator, decorators, assignments, (decoratorRef) => { + const decoratorArguments = (0, ast_utils_1.getDecoratorArguments)(decoratorRef); + const result = []; + const argumentValue = (0, lodash_1.head)(decoratorArguments); + if (!(0, plugin_utils_1.canReferenceNode)(argumentValue, options)) { + return result; + } + const clonedArgumentValue = this.clonePrimitiveLiteral(factory, argumentValue); + if (clonedArgumentValue) { + result.push(factory.createPropertyAssignment(decoratorProperty.property, clonedArgumentValue)); + } + return result; + }); + } + }); + this.addPropertiesByValidationDecorator(factory, 'Length', decorators, assignments, (decoratorRef) => { + var _a, _b; + const decoratorArguments = (0, ast_utils_1.getDecoratorArguments)(decoratorRef); + const result = []; + const minLength = (0, lodash_1.head)(decoratorArguments); + if (!(0, plugin_utils_1.canReferenceNode)(minLength, options)) { + return result; + } + const clonedMinLength = (_a = this.clonePrimitiveLiteral(factory, minLength)) !== null && _a !== void 0 ? _a : minLength; + if (clonedMinLength) { + result.push(factory.createPropertyAssignment('minLength', clonedMinLength)); + } + if (decoratorArguments.length > 1) { + const maxLength = decoratorArguments[1]; + if (!(0, plugin_utils_1.canReferenceNode)(maxLength, options)) { + return result; + } + const clonedMaxLength = (_b = this.clonePrimitiveLiteral(factory, maxLength)) !== null && _b !== void 0 ? _b : maxLength; + if (clonedMaxLength) { + result.push(factory.createPropertyAssignment('maxLength', clonedMaxLength)); + } + } + return result; + }); + this.addPropertiesByValidationDecorator(factory, 'Matches', decorators, assignments, (decoratorRef) => { + const decoratorArguments = (0, ast_utils_1.getDecoratorArguments)(decoratorRef); + return [ + factory.createPropertyAssignment('pattern', (0, ast_utils_1.createPrimitiveLiteral)(factory, (0, lodash_1.head)(decoratorArguments).text)) + ]; + }); + return assignments; + } + addPropertyByValidationDecorator(factory, decoratorName, propertyKey, decorators, assignments, options) { + this.addPropertiesByValidationDecorator(factory, decoratorName, decorators, assignments, (decoratorRef) => { + var _a; + const argument = (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(decoratorRef)); + const assignment = (_a = this.clonePrimitiveLiteral(factory, argument)) !== null && _a !== void 0 ? _a : argument; + if (!(0, plugin_utils_1.canReferenceNode)(assignment, options)) { + return []; + } + return [factory.createPropertyAssignment(propertyKey, assignment)]; + }); + } + addPropertiesByValidationDecorator(factory, decoratorName, decorators, assignments, addPropertyAssignments) { + const decoratorRef = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decoratorName], decorators, factory); + if (!decoratorRef) { + return; + } + assignments.push(...addPropertyAssignments(decoratorRef)); + } + addClassMetadata(node, objectLiteral, sourceFile, metadata) { + const hostClass = node.parent; + const className = hostClass.name && hostClass.name.getText(); + if (!className) { + return; + } + const propertyName = node.name && node.name.getText(sourceFile); + if (!propertyName || + (node.name && node.name.kind === ts.SyntaxKind.ComputedPropertyName)) { + return; + } + metadata[propertyName] = objectLiteral; + } + createDescriptionAndTsDocTagPropertyAssignments(factory, node, typeChecker, existingProperties = factory.createNodeArray(), options = {}, sourceFile) { + var _a; + if (!options.introspectComments || !sourceFile) { + return []; + } + const propertyAssignments = []; + const comments = (0, ast_utils_1.getMainCommentOfNode)(node); + const tags = (0, ast_utils_1.getTsDocTagsOfNode)(node, typeChecker); + const keyOfComment = options.dtoKeyOfComment; + if (!(0, plugin_utils_1.hasPropertyKey)(keyOfComment, existingProperties) && comments) { + const descriptionPropertyAssignment = factory.createPropertyAssignment(keyOfComment, factory.createStringLiteral(comments)); + propertyAssignments.push(descriptionPropertyAssignment); + } + const hasExampleOrExamplesKey = (0, plugin_utils_1.hasPropertyKey)('example', existingProperties) || + (0, plugin_utils_1.hasPropertyKey)('examples', existingProperties); + if (!hasExampleOrExamplesKey && ((_a = tags.example) === null || _a === void 0 ? void 0 : _a.length)) { + if (tags.example.length === 1) { + const examplePropertyAssignment = factory.createPropertyAssignment('example', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.example[0])); + propertyAssignments.push(examplePropertyAssignment); + } + else { + const examplesPropertyAssignment = factory.createPropertyAssignment('examples', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.example)); + propertyAssignments.push(examplesPropertyAssignment); + } + } + const hasDeprecatedKey = (0, plugin_utils_1.hasPropertyKey)('deprecated', existingProperties); + if (!hasDeprecatedKey && tags.deprecated) { + const deprecatedPropertyAssignment = factory.createPropertyAssignment('deprecated', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.deprecated)); + propertyAssignments.push(deprecatedPropertyAssignment); + } + return propertyAssignments; + } + normalizeImportPath(pathToSource, path) { + let relativePath = path_1.posix.relative((0, plugin_utils_1.convertPath)(pathToSource), (0, plugin_utils_1.convertPath)(path)); + relativePath = relativePath[0] !== '.' ? './' + relativePath : relativePath; + return relativePath; + } + clonePrimitiveLiteral(factory, node) { + var _a; + const primitiveTypeName = this.getInitializerPrimitiveTypeName(node); + if (!primitiveTypeName) { + return undefined; + } + const text = (_a = node.text) !== null && _a !== void 0 ? _a : node.getText(); + return (0, ast_utils_1.createPrimitiveLiteral)(factory, text, primitiveTypeName); + } + getInitializerPrimitiveTypeName(node) { + if (ts.isIdentifier(node) && + (node.text === 'true' || node.text === 'false')) { + return 'boolean'; + } + if (ts.isNumericLiteral(node) || ts.isPrefixUnaryExpression(node)) { + return 'number'; + } + if (ts.isStringLiteral(node)) { + return 'string'; + } + return undefined; + } +} +exports.ModelClassVisitor = ModelClassVisitor; diff --git a/dist/plugin/visitors/readonly.visitor.d.ts b/dist/plugin/visitors/readonly.visitor.d.ts new file mode 100644 index 000000000..9acdbe886 --- /dev/null +++ b/dist/plugin/visitors/readonly.visitor.d.ts @@ -0,0 +1,21 @@ +import * as ts from 'typescript'; +import { PluginOptions } from '../merge-options'; +export declare class ReadonlyVisitor { + private readonly options; + readonly key = "@nestjs/swagger"; + private readonly modelClassVisitor; + private readonly controllerClassVisitor; + get typeImports(): { + [x: string]: string; + }; + constructor(options: PluginOptions); + visit(program: ts.Program, sf: ts.SourceFile): ts.Node; + collect(): { + models: [ts.CallExpression, Record][]; + controllers: [ts.CallExpression, Record][]; + }; +} diff --git a/dist/plugin/visitors/readonly.visitor.js b/dist/plugin/visitors/readonly.visitor.js new file mode 100644 index 000000000..9cf1894df --- /dev/null +++ b/dist/plugin/visitors/readonly.visitor.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ReadonlyVisitor = void 0; +const ts = require("typescript"); +const merge_options_1 = require("../merge-options"); +const is_filename_matched_util_1 = require("../utils/is-filename-matched.util"); +const controller_class_visitor_1 = require("./controller-class.visitor"); +const model_class_visitor_1 = require("./model-class.visitor"); +class ReadonlyVisitor { + get typeImports() { + return Object.assign(Object.assign({}, this.modelClassVisitor.typeImports), this.controllerClassVisitor.typeImports); + } + constructor(options) { + this.options = options; + this.key = '@nestjs/swagger'; + this.modelClassVisitor = new model_class_visitor_1.ModelClassVisitor(); + this.controllerClassVisitor = new controller_class_visitor_1.ControllerClassVisitor(); + options.readonly = true; + if (!options.pathToSource) { + throw new Error(`"pathToSource" must be defined in plugin options`); + } + } + visit(program, sf) { + const factoryHost = { factory: ts.factory }; + const parsedOptions = (0, merge_options_1.mergePluginOptions)(this.options); + if ((0, is_filename_matched_util_1.isFilenameMatched)(parsedOptions.dtoFileNameSuffix, sf.fileName)) { + return this.modelClassVisitor.visit(sf, factoryHost, program, parsedOptions); + } + if ((0, is_filename_matched_util_1.isFilenameMatched)(parsedOptions.controllerFileNameSuffix, sf.fileName)) { + return this.controllerClassVisitor.visit(sf, factoryHost, program, parsedOptions); + } + } + collect() { + return { + models: this.modelClassVisitor.collectedMetadata(this.options), + controllers: this.controllerClassVisitor.collectedMetadata(this.options) + }; + } +} +exports.ReadonlyVisitor = ReadonlyVisitor; diff --git a/dist/services/constants.d.ts b/dist/services/constants.d.ts new file mode 100644 index 000000000..40899e0ec --- /dev/null +++ b/dist/services/constants.d.ts @@ -0,0 +1 @@ +export declare const BUILT_IN_TYPES: (ArrayConstructor | ObjectConstructor | NumberConstructor | StringConstructor | BooleanConstructor)[]; diff --git a/dist/services/constants.js b/dist/services/constants.js new file mode 100644 index 000000000..d04046b7c --- /dev/null +++ b/dist/services/constants.js @@ -0,0 +1,4 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BUILT_IN_TYPES = void 0; +exports.BUILT_IN_TYPES = [String, Boolean, Number, Object, Array]; diff --git a/dist/services/decorators-properties.d.ts b/dist/services/decorators-properties.d.ts new file mode 100644 index 000000000..dccde65a3 --- /dev/null +++ b/dist/services/decorators-properties.d.ts @@ -0,0 +1,21 @@ +export declare enum decoratorsPropertiesMappingType { + DIRECT = 0, + INDIRECT_VALUE = 1, + INDIRECT_ARGUMENT = 2 +} +export declare const decoratorsProperties: ({ + mappingType: decoratorsPropertiesMappingType; + decorator: string; + property: string; + value: number; +} | { + mappingType: decoratorsPropertiesMappingType; + decorator: string; + property: string; + value: boolean; +} | { + mappingType: decoratorsPropertiesMappingType; + decorator: string; + property: string; + value: string; +})[]; diff --git a/dist/services/decorators-properties.js b/dist/services/decorators-properties.js new file mode 100644 index 000000000..6c8f4455d --- /dev/null +++ b/dist/services/decorators-properties.js @@ -0,0 +1,149 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.decoratorsProperties = exports.decoratorsPropertiesMappingType = void 0; +var decoratorsPropertiesMappingType; +(function (decoratorsPropertiesMappingType) { + decoratorsPropertiesMappingType[decoratorsPropertiesMappingType["DIRECT"] = 0] = "DIRECT"; + decoratorsPropertiesMappingType[decoratorsPropertiesMappingType["INDIRECT_VALUE"] = 1] = "INDIRECT_VALUE"; + decoratorsPropertiesMappingType[decoratorsPropertiesMappingType["INDIRECT_ARGUMENT"] = 2] = "INDIRECT_ARGUMENT"; +})(decoratorsPropertiesMappingType || (exports.decoratorsPropertiesMappingType = decoratorsPropertiesMappingType = {})); +exports.decoratorsProperties = [ + { + mappingType: decoratorsPropertiesMappingType.DIRECT, + decorator: 'Min', + property: 'minimum', + value: undefined + }, + { + mappingType: decoratorsPropertiesMappingType.DIRECT, + decorator: 'Max', + property: 'maximum', + value: undefined + }, + { + mappingType: decoratorsPropertiesMappingType.DIRECT, + decorator: 'MinLength', + property: 'minLength', + value: undefined + }, + { + mappingType: decoratorsPropertiesMappingType.DIRECT, + decorator: 'MaxLength', + property: 'maxLength', + value: undefined + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'ArrayNotEmpty', + property: 'minItems', + value: 1 + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsPositive', + property: 'minimum', + value: 1 + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsNegative', + property: 'maximum', + value: -1 + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'ArrayUnique', + property: 'uniqueItems', + value: true + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsBase64', + property: 'format', + value: 'base64' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsCreditCard', + property: 'format', + value: 'credit-card' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsCurrency', + property: 'format', + value: 'currency' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsEmail', + property: 'format', + value: 'email' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsJSON', + property: 'format', + value: 'json' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsUrl', + property: 'format', + value: 'uri' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsUUID', + property: 'format', + value: 'uuid' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsMobilePhone', + property: 'format', + value: 'mobile-phone' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsAscii', + property: 'pattern', + value: '^[\\x00-\\x7F]+$' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsHexColor', + property: 'pattern', + value: '^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, + decorator: 'IsHexadecimal', + property: 'pattern', + value: '^(0x|0h)?[0-9A-F]+$' + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, + decorator: 'ArrayMinSize', + property: 'minItems', + value: undefined + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, + decorator: 'ArrayMaxSize', + property: 'maxItems', + value: undefined + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, + decorator: 'IsDivisibleBy', + property: 'multipleOf', + value: undefined + }, + { + mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, + decorator: 'Contains', + property: 'pattern', + value: undefined + } +]; diff --git a/dist/services/mimetype-content-wrapper.d.ts b/dist/services/mimetype-content-wrapper.d.ts new file mode 100644 index 000000000..b622fe8d7 --- /dev/null +++ b/dist/services/mimetype-content-wrapper.d.ts @@ -0,0 +1,4 @@ +import { ContentObject } from '../interfaces/open-api-spec.interface'; +export declare class MimetypeContentWrapper { + wrap(mimetype: string[], obj: Record): Record<'content', ContentObject>; +} diff --git a/dist/services/mimetype-content-wrapper.js b/dist/services/mimetype-content-wrapper.js new file mode 100644 index 000000000..371ce202f --- /dev/null +++ b/dist/services/mimetype-content-wrapper.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MimetypeContentWrapper = void 0; +const remove_undefined_keys_1 = require("../utils/remove-undefined-keys"); +class MimetypeContentWrapper { + wrap(mimetype, obj) { + const content = mimetype.reduce((acc, item) => (Object.assign(Object.assign({}, acc), { [item]: (0, remove_undefined_keys_1.removeUndefinedKeys)(obj) })), {}); + return { content }; + } +} +exports.MimetypeContentWrapper = MimetypeContentWrapper; diff --git a/dist/services/model-properties-accessor.d.ts b/dist/services/model-properties-accessor.d.ts new file mode 100644 index 000000000..2df5cb1fe --- /dev/null +++ b/dist/services/model-properties-accessor.d.ts @@ -0,0 +1,6 @@ +import { Type } from '@nestjs/common'; +import 'reflect-metadata'; +export declare class ModelPropertiesAccessor { + getModelProperties(prototype: Type): string[]; + applyMetadataFactory(prototype: Type): void; +} diff --git a/dist/services/model-properties-accessor.js b/dist/services/model-properties-accessor.js new file mode 100644 index 000000000..2b2465e08 --- /dev/null +++ b/dist/services/model-properties-accessor.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ModelPropertiesAccessor = void 0; +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +require("reflect-metadata"); +const constants_1 = require("../constants"); +const api_property_decorator_1 = require("../decorators/api-property.decorator"); +const plugin_constants_1 = require("../plugin/plugin-constants"); +class ModelPropertiesAccessor { + getModelProperties(prototype) { + const properties = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES_ARRAY, prototype) || + []; + return properties + .filter(shared_utils_1.isString) + .filter((key) => key.charAt(0) === ':' && !(0, shared_utils_1.isFunction)(prototype[key])) + .map((key) => key.slice(1)); + } + applyMetadataFactory(prototype) { + const classPrototype = prototype; + do { + if (!prototype.constructor) { + return; + } + if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { + continue; + } + const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); + const properties = Object.keys(metadata); + properties.forEach((key) => { + (0, api_property_decorator_1.createApiPropertyDecorator)(metadata[key], false)(classPrototype, key); + }); + } while ((prototype = Reflect.getPrototypeOf(prototype)) && + prototype !== Object.prototype && + prototype); + } +} +exports.ModelPropertiesAccessor = ModelPropertiesAccessor; diff --git a/dist/services/parameter-metadata-accessor.d.ts b/dist/services/parameter-metadata-accessor.d.ts new file mode 100644 index 000000000..f97095a69 --- /dev/null +++ b/dist/services/parameter-metadata-accessor.d.ts @@ -0,0 +1,22 @@ +import { Type } from '@nestjs/common'; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +import { ParameterLocation, SchemaObject } from '../interfaces/open-api-spec.interface'; +export interface ParamWithTypeMetadata { + name?: string | number | object; + type?: Type; + in?: ParameterLocation | 'body' | typeof PARAM_TOKEN_PLACEHOLDER; + isArray?: boolean; + items?: SchemaObject; + required?: boolean; + enum?: unknown[]; + enumName?: string; + enumSchema?: EnumSchemaAttributes; + selfRequired?: boolean; +} +export type ParamsWithType = Record; +declare const PARAM_TOKEN_PLACEHOLDER = "placeholder"; +export declare class ParameterMetadataAccessor { + explore(instance: object, prototype: Type, method: Function): ParamsWithType; + private mapParamType; +} +export {}; diff --git a/dist/services/parameter-metadata-accessor.js b/dist/services/parameter-metadata-accessor.js new file mode 100644 index 000000000..f0f5c77bf --- /dev/null +++ b/dist/services/parameter-metadata-accessor.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ParameterMetadataAccessor = void 0; +const constants_1 = require("@nestjs/common/constants"); +const route_paramtypes_enum_1 = require("@nestjs/common/enums/route-paramtypes.enum"); +const lodash_1 = require("lodash"); +const reverse_object_keys_util_1 = require("../utils/reverse-object-keys.util"); +const PARAM_TOKEN_PLACEHOLDER = 'placeholder'; +class ParameterMetadataAccessor { + explore(instance, prototype, method) { + const types = Reflect.getMetadata(constants_1.PARAMTYPES_METADATA, instance, method.name); + if (!(types === null || types === void 0 ? void 0 : types.length)) { + return undefined; + } + const routeArgsMetadata = Reflect.getMetadata(constants_1.ROUTE_ARGS_METADATA, instance.constructor, method.name) || {}; + const parametersWithType = (0, lodash_1.mapValues)((0, reverse_object_keys_util_1.reverseObjectKeys)(routeArgsMetadata), (param) => ({ + type: types[param.index], + name: param.data, + required: true + })); + const excludePredicate = (val) => val.in === PARAM_TOKEN_PLACEHOLDER || (val.name && val.in === 'body'); + const parameters = (0, lodash_1.omitBy)((0, lodash_1.mapValues)(parametersWithType, (val, key) => (Object.assign(Object.assign({}, val), { in: this.mapParamType(key) }))), excludePredicate); + return !(0, lodash_1.isEmpty)(parameters) ? parameters : undefined; + } + mapParamType(key) { + const keyPair = key.split(':'); + switch (Number(keyPair[0])) { + case route_paramtypes_enum_1.RouteParamtypes.BODY: + return 'body'; + case route_paramtypes_enum_1.RouteParamtypes.PARAM: + return 'path'; + case route_paramtypes_enum_1.RouteParamtypes.QUERY: + return 'query'; + case route_paramtypes_enum_1.RouteParamtypes.HEADERS: + return 'header'; + default: + return PARAM_TOKEN_PLACEHOLDER; + } + } +} +exports.ParameterMetadataAccessor = ParameterMetadataAccessor; diff --git a/dist/services/parameters-metadata-mapper.d.ts b/dist/services/parameters-metadata-mapper.d.ts new file mode 100644 index 000000000..53aa77311 --- /dev/null +++ b/dist/services/parameters-metadata-mapper.d.ts @@ -0,0 +1,9 @@ +import { Type } from '@nestjs/common'; +import { ModelPropertiesAccessor } from './model-properties-accessor'; +import { ParamWithTypeMetadata, ParamsWithType } from './parameter-metadata-accessor'; +export declare class ParametersMetadataMapper { + private readonly modelPropertiesAccessor; + constructor(modelPropertiesAccessor: ModelPropertiesAccessor); + transformModelToProperties(parameters: ParamsWithType): ParamWithTypeMetadata[]; + mergeImplicitWithExplicit(key: string, prototype: Type, param: ParamWithTypeMetadata): ParamWithTypeMetadata; +} diff --git a/dist/services/parameters-metadata-mapper.js b/dist/services/parameters-metadata-mapper.js new file mode 100644 index 000000000..bf661f224 --- /dev/null +++ b/dist/services/parameters-metadata-mapper.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ParametersMetadataMapper = void 0; +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const is_body_parameter_util_1 = require("../utils/is-body-parameter.util"); +class ParametersMetadataMapper { + constructor(modelPropertiesAccessor) { + this.modelPropertiesAccessor = modelPropertiesAccessor; + } + transformModelToProperties(parameters) { + const properties = (0, lodash_1.flatMap)(parameters, (param) => { + if (!param || param.type === Object || !param.type) { + return undefined; + } + if (param.name) { + return param; + } + if ((0, is_body_parameter_util_1.isBodyParameter)(param)) { + const isCtor = param.type && (0, shared_utils_1.isFunction)(param.type); + const name = isCtor ? param.type.name : param.type; + return Object.assign(Object.assign({}, param), { name }); + } + const { prototype } = param.type; + this.modelPropertiesAccessor.applyMetadataFactory(prototype); + const modelProperties = this.modelPropertiesAccessor.getModelProperties(prototype); + return modelProperties.map((key) => this.mergeImplicitWithExplicit(key, prototype, param)); + }); + return properties.filter(lodash_1.identity); + } + mergeImplicitWithExplicit(key, prototype, param) { + const reflectedParam = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key) || + {}; + return Object.assign(Object.assign(Object.assign({}, param), reflectedParam), { name: reflectedParam.name || key }); + } +} +exports.ParametersMetadataMapper = ParametersMetadataMapper; diff --git a/dist/services/response-object-factory.d.ts b/dist/services/response-object-factory.d.ts new file mode 100644 index 000000000..a669aa7d9 --- /dev/null +++ b/dist/services/response-object-factory.d.ts @@ -0,0 +1,22 @@ +import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators'; +import { SchemaObject } from '../interfaces/open-api-spec.interface'; +export type FactoriesNeededByResponseFactory = { + linkName: (controllerKey: string, methodKey: string, fieldKey: string) => string; + operationId: (controllerKey: string, methodKey: string) => string; +}; +export declare class ResponseObjectFactory { + private readonly mimetypeContentWrapper; + private readonly modelPropertiesAccessor; + private readonly swaggerTypesMapper; + private readonly schemaObjectFactory; + private readonly responseObjectMapper; + create(response: ApiResponseMetadata, produces: string[], schemas: Record, factories: FactoriesNeededByResponseFactory): (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { + example?: any; + }) | (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { + examples?: { + [key: string]: import("../decorators").ApiResponseExamples; + }; + }) | { + content: import("../interfaces/open-api-spec.interface").ContentObject; + }; +} diff --git a/dist/services/response-object-factory.js b/dist/services/response-object-factory.js new file mode 100644 index 000000000..8e80fa453 --- /dev/null +++ b/dist/services/response-object-factory.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ResponseObjectFactory = void 0; +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const is_built_in_type_util_1 = require("../utils/is-built-in-type.util"); +const mimetype_content_wrapper_1 = require("./mimetype-content-wrapper"); +const model_properties_accessor_1 = require("./model-properties-accessor"); +const response_object_mapper_1 = require("./response-object-mapper"); +const schema_object_factory_1 = require("./schema-object-factory"); +const swagger_types_mapper_1 = require("./swagger-types-mapper"); +class ResponseObjectFactory { + constructor() { + this.mimetypeContentWrapper = new mimetype_content_wrapper_1.MimetypeContentWrapper(); + this.modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); + this.swaggerTypesMapper = new swagger_types_mapper_1.SwaggerTypesMapper(); + this.schemaObjectFactory = new schema_object_factory_1.SchemaObjectFactory(this.modelPropertiesAccessor, this.swaggerTypesMapper); + this.responseObjectMapper = new response_object_mapper_1.ResponseObjectMapper(); + } + create(response, produces, schemas, factories) { + var _a; + const { type, isArray } = response; + response = (0, lodash_1.omit)(response, ['isArray']); + if (!type) { + return this.responseObjectMapper.wrapSchemaWithContent(response, produces); + } + if ((0, is_built_in_type_util_1.isBuiltInType)(type)) { + const typeName = type && (0, lodash_1.isFunction)(type) ? type.name : type; + const swaggerType = this.swaggerTypesMapper.mapTypeToOpenAPIType(typeName); + const exampleKeys = ['example', 'examples']; + if (isArray) { + const content = this.mimetypeContentWrapper.wrap(produces, { + schema: { + type: 'array', + items: { + type: swaggerType + } + } + }); + return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), content); + } + const content = this.mimetypeContentWrapper.wrap(produces, { + schema: { + type: swaggerType + } + }); + return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), content); + } + const name = this.schemaObjectFactory.exploreModelSchema(type, schemas); + if ((0, lodash_1.isFunction)(type) && type.prototype) { + const { prototype } = type; + const links = {}; + const properties = this.modelPropertiesAccessor.getModelProperties(prototype); + const generateLink = (controllerPrototype, method, parameter, field) => { + if (!factories) { + return; + } + const linkName = factories.linkName(controllerPrototype.constructor.name, method.name, field); + links[linkName] = { + operationId: factories.operationId(controllerPrototype.constructor.name, method.name), + parameters: { + [parameter]: `$response.body#/${field}` + } + }; + }; + for (const key of properties) { + const metadata = (_a = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key)) !== null && _a !== void 0 ? _a : {}; + if (!metadata.link) { + continue; + } + const linkedType = metadata.link(); + const linkedGetterInfo = Reflect.getMetadata(constants_1.DECORATORS.API_DEFAULT_GETTER, linkedType.prototype); + if (!linkedGetterInfo) { + continue; + } + const { getter, parameter, prototype: controllerPrototype } = linkedGetterInfo; + generateLink(controllerPrototype, getter, parameter, key); + } + const customLinks = Reflect.getMetadata(constants_1.DECORATORS.API_LINK, prototype); + for (const customLink of customLinks !== null && customLinks !== void 0 ? customLinks : []) { + const { method, parameter, field, prototype: controllerPrototype } = customLink; + generateLink(controllerPrototype, method, parameter, field); + } + if (!(0, lodash_1.isEmpty)(links)) { + response.links = Object.assign(links, response.links); + } + } + if (isArray) { + return this.responseObjectMapper.toArrayRefObject(response, name, produces); + } + return this.responseObjectMapper.toRefObject(response, name, produces); + } +} +exports.ResponseObjectFactory = ResponseObjectFactory; diff --git a/dist/services/response-object-mapper.d.ts b/dist/services/response-object-mapper.d.ts new file mode 100644 index 000000000..da84df1d5 --- /dev/null +++ b/dist/services/response-object-mapper.d.ts @@ -0,0 +1,39 @@ +import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators'; +export declare class ResponseObjectMapper { + private readonly mimetypeContentWrapper; + toArrayRefObject(response: Record, name: string, produces: string[]): { + content: import("../interfaces/open-api-spec.interface").ContentObject; + }; + toRefObject(response: Record, name: string, produces: string[]): { + content: import("../interfaces/open-api-spec.interface").ContentObject; + }; + wrapSchemaWithContent(response: ApiResponseSchemaHost & ApiResponseMetadata, produces: string[]): (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { + example?: any; + }) | (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { + examples?: { + [key: string]: import("../decorators").ApiResponseExamples; + }; + }) | { + content: import("../interfaces/open-api-spec.interface").ContentObject; + schema?: import("../interfaces/open-api-spec.interface").SchemaObject & Partial; + status?: number | "default" | "1XX" | "2XX" | "3XX" | "4XX" | "5XX"; + description?: string; + headers?: import("../interfaces/open-api-spec.interface").HeadersObject; + links?: import("../interfaces/open-api-spec.interface").LinksObject; + type?: import("@nestjs/common").Type | Function | [Function] | string; + isArray?: boolean; + example?: any; + } | { + content: import("../interfaces/open-api-spec.interface").ContentObject; + schema?: import("../interfaces/open-api-spec.interface").SchemaObject & Partial; + status?: number | "default" | "1XX" | "2XX" | "3XX" | "4XX" | "5XX"; + description?: string; + headers?: import("../interfaces/open-api-spec.interface").HeadersObject; + links?: import("../interfaces/open-api-spec.interface").LinksObject; + type?: import("@nestjs/common").Type | Function | [Function] | string; + isArray?: boolean; + examples?: { + [key: string]: import("../decorators").ApiResponseExamples; + }; + }; +} diff --git a/dist/services/response-object-mapper.js b/dist/services/response-object-mapper.js new file mode 100644 index 000000000..da1b67a9d --- /dev/null +++ b/dist/services/response-object-mapper.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ResponseObjectMapper = void 0; +const lodash_1 = require("lodash"); +const utils_1 = require("../utils"); +const mimetype_content_wrapper_1 = require("./mimetype-content-wrapper"); +class ResponseObjectMapper { + constructor() { + this.mimetypeContentWrapper = new mimetype_content_wrapper_1.MimetypeContentWrapper(); + } + toArrayRefObject(response, name, produces) { + const exampleKeys = ['example', 'examples']; + return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), this.mimetypeContentWrapper.wrap(produces, Object.assign({ schema: { + type: 'array', + items: { + $ref: (0, utils_1.getSchemaPath)(name) + } + } }, (0, lodash_1.pick)(response, exampleKeys)))); + } + toRefObject(response, name, produces) { + const exampleKeys = ['example', 'examples']; + return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), this.mimetypeContentWrapper.wrap(produces, Object.assign({ schema: { + $ref: (0, utils_1.getSchemaPath)(name) + } }, (0, lodash_1.pick)(response, exampleKeys)))); + } + wrapSchemaWithContent(response, produces) { + if (!response.schema && + !('example' in response) && + !('examples' in response)) { + return response; + } + const exampleKeys = ['example', 'examples']; + const content = this.mimetypeContentWrapper.wrap(produces, Object.assign({ schema: response.schema }, (0, lodash_1.pick)(response, exampleKeys))); + const keysToOmit = [...exampleKeys, 'schema']; + return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, keysToOmit)), content); + } +} +exports.ResponseObjectMapper = ResponseObjectMapper; diff --git a/dist/services/schema-object-factory.d.ts b/dist/services/schema-object-factory.d.ts new file mode 100644 index 000000000..403e07b77 --- /dev/null +++ b/dist/services/schema-object-factory.d.ts @@ -0,0 +1,156 @@ +import { Type } from '@nestjs/common'; +import { BaseParameterObject, ParameterObject, ReferenceObject, SchemaObject } from '../interfaces/open-api-spec.interface'; +import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; +import { ModelPropertiesAccessor } from './model-properties-accessor'; +import { ParamWithTypeMetadata } from './parameter-metadata-accessor'; +import { SwaggerTypesMapper } from './swagger-types-mapper'; +export declare class SchemaObjectFactory { + private readonly modelPropertiesAccessor; + private readonly swaggerTypesMapper; + constructor(modelPropertiesAccessor: ModelPropertiesAccessor, swaggerTypesMapper: SwaggerTypesMapper); + createFromModel(parameters: ParamWithTypeMetadata[], schemas: Record): Array; + getCustomType(param: ParamWithTypeMetadata, schemas: Record): { + name: string | number | object; + schema: { + type: string; + items: { + $ref: string; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + type?: string; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + items?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; + } | { + $ref: string; + }; + }; + type?: Type; + in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; + isArray?: boolean; + items?: SchemaObject; + required?: boolean; + enum?: unknown[]; + enumName?: string; + enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; + selfRequired?: boolean; + } | { + name: string | number | object; + schema: { + $ref: string; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + type?: string; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + items?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; + } | { + $ref: string; + }; + type?: Type; + in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; + isArray?: boolean; + items?: SchemaObject; + required?: boolean; + enum?: unknown[]; + enumName?: string; + enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; + selfRequired?: boolean; + }; + private createQueryOrParamSchema; + extractPropertiesFromType(type: Type, schemas: Record, pendingSchemasRefs?: string[]): ParameterObject[]; + exploreModelSchema(type: Type | Function, schemas: Record, pendingSchemasRefs?: string[]): string; + getSchemaMetadata(type: Function | Type): { + schemaName: string; + schemaProperties: { + description?: string; + }; + }; + mergePropertyWithMetadata(key: string, prototype: Type, schemas: Record, pendingSchemaRefs: string[], metadata?: SchemaObjectMetadata): SchemaObjectMetadata | ReferenceObject | ParameterObject | (SchemaObject & { + selfRequired?: boolean; + }); + createEnumParam(param: ParamWithTypeMetadata & BaseParameterObject, schemas: Record): Partial; + createEnumSchemaType(key: string, metadata: SchemaObjectMetadata, schemas: Record): SchemaObjectMetadata; + createNotBuiltInTypeReference(key: string, metadata: SchemaObjectMetadata, trueMetadataType: unknown, schemas: Record, pendingSchemaRefs: string[]): SchemaObjectMetadata; + transformToArraySchemaProperty(metadata: SchemaObjectMetadata, key: string, type: string | Record): SchemaObjectMetadata; + mapArrayCtorParam(param: ParamWithTypeMetadata): any; + createFromObjectLiteral(key: string, literalObj: Record, schemas: Record): { + name: string; + type: string; + properties: {}; + required: any[]; + }; + createFromNestedArray(key: string, metadata: SchemaObjectMetadata, schemas: Record, pendingSchemaRefs: string[]): any; + private createSchemaMetadata; + private isArrayCtor; + private isPrimitiveType; + private isLazyTypeFunc; + private getTypeName; + private isObjectLiteral; + private isBigInt; + private extractPropertyModifiers; +} diff --git a/dist/services/schema-object-factory.js b/dist/services/schema-object-factory.js new file mode 100644 index 000000000..36dbd776f --- /dev/null +++ b/dist/services/schema-object-factory.js @@ -0,0 +1,471 @@ +"use strict"; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SchemaObjectFactory = void 0; +const common_1 = require("@nestjs/common"); +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const helpers_1 = require("../decorators/helpers"); +const api_extra_models_explorer_1 = require("../explorers/api-extra-models.explorer"); +const utils_1 = require("../utils"); +const enum_utils_1 = require("../utils/enum.utils"); +const is_body_parameter_util_1 = require("../utils/is-body-parameter.util"); +const is_built_in_type_util_1 = require("../utils/is-built-in-type.util"); +const is_date_ctor_util_1 = require("../utils/is-date-ctor.util"); +class SchemaObjectFactory { + constructor(modelPropertiesAccessor, swaggerTypesMapper) { + this.modelPropertiesAccessor = modelPropertiesAccessor; + this.swaggerTypesMapper = swaggerTypesMapper; + } + createFromModel(parameters, schemas) { + const parameterObjects = parameters.map((param) => { + if (this.isLazyTypeFunc(param.type)) { + [param.type, param.isArray] = (0, helpers_1.getTypeIsArrayTuple)(param.type(), undefined); + } + if (!(0, is_body_parameter_util_1.isBodyParameter)(param) && param.enumName) { + return this.createEnumParam(param, schemas); + } + if (this.isPrimitiveType(param.type)) { + return param; + } + if (this.isArrayCtor(param.type)) { + return this.mapArrayCtorParam(param); + } + if (!(0, is_body_parameter_util_1.isBodyParameter)(param)) { + return this.createQueryOrParamSchema(param, schemas); + } + return this.getCustomType(param, schemas); + }); + return (0, lodash_1.flatten)(parameterObjects); + } + getCustomType(param, schemas) { + const modelName = this.exploreModelSchema(param.type, schemas); + const name = param.name || modelName; + const schema = Object.assign(Object.assign({}, (param.schema || {})), { $ref: (0, utils_1.getSchemaPath)(modelName) }); + const isArray = param.isArray; + param = (0, lodash_1.omit)(param, 'isArray'); + if (isArray) { + return Object.assign(Object.assign({}, param), { name, schema: { + type: 'array', + items: schema + } }); + } + return Object.assign(Object.assign({}, param), { name, + schema }); + } + createQueryOrParamSchema(param, schemas) { + if ((0, is_date_ctor_util_1.isDateCtor)(param.type)) { + return Object.assign(Object.assign({ format: 'date-time' }, param), { type: 'string' }); + } + if (this.isBigInt(param.type)) { + return Object.assign(Object.assign({ format: 'int64' }, param), { type: 'integer' }); + } + if ((0, lodash_1.isFunction)(param.type)) { + if (param.name) { + return this.getCustomType(param, schemas); + } + const propertiesWithType = this.extractPropertiesFromType(param.type, schemas); + if (!propertiesWithType) { + return param; + } + return propertiesWithType.map((property) => { + const keysToOmit = [ + 'isArray', + 'enumName', + 'enumSchema', + 'selfRequired' + ]; + const parameterObject = Object.assign(Object.assign({}, (0, lodash_1.omit)(property, keysToOmit)), { in: 'query', required: 'selfRequired' in property + ? property.selfRequired + : typeof property.required === 'boolean' + ? property.required + : true }); + const keysToMoveToSchema = [ + ...this.swaggerTypesMapper.getSchemaOptionsKeys(), + 'allOf' + ]; + return keysToMoveToSchema.reduce((acc, key) => { + if (key in property) { + acc.schema = Object.assign(Object.assign({}, acc.schema), { [key]: property[key] }); + delete acc[key]; + } + return acc; + }, parameterObject); + }); + } + if (this.isObjectLiteral(param.type)) { + const schemaFromObjectLiteral = this.createFromObjectLiteral(param.name, param.type, schemas); + if (param.isArray) { + return Object.assign(Object.assign({}, param), { schema: { + type: 'array', + items: (0, lodash_1.omit)(schemaFromObjectLiteral, 'name') + }, selfRequired: param.required }); + } + return Object.assign(Object.assign({}, param), { schema: { + type: schemaFromObjectLiteral.type, + properties: schemaFromObjectLiteral.properties, + required: schemaFromObjectLiteral.required + }, selfRequired: param.required }); + } + return param; + } + extractPropertiesFromType(type, schemas, pendingSchemasRefs = []) { + const { prototype } = type; + if (!prototype) { + return; + } + const extraModels = (0, api_extra_models_explorer_1.exploreGlobalApiExtraModelsMetadata)(type); + extraModels.forEach((item) => this.exploreModelSchema(item, schemas, pendingSchemasRefs)); + this.modelPropertiesAccessor.applyMetadataFactory(prototype); + const modelProperties = this.modelPropertiesAccessor.getModelProperties(prototype); + const propertiesWithType = modelProperties.map((key) => { + const property = this.mergePropertyWithMetadata(key, prototype, schemas, pendingSchemasRefs); + const schemaCombinators = ['oneOf', 'anyOf', 'allOf']; + const declaredSchemaCombinator = schemaCombinators.find((combinator) => combinator in property); + if (declaredSchemaCombinator) { + const schemaObjectMetadata = property; + if ((schemaObjectMetadata === null || schemaObjectMetadata === void 0 ? void 0 : schemaObjectMetadata.type) === 'array' || + schemaObjectMetadata.isArray) { + schemaObjectMetadata.items = {}; + schemaObjectMetadata.items[declaredSchemaCombinator] = + property[declaredSchemaCombinator]; + delete property[declaredSchemaCombinator]; + } + else { + delete schemaObjectMetadata.type; + } + } + return property; + }); + return propertiesWithType; + } + exploreModelSchema(type, schemas, pendingSchemasRefs = []) { + if (this.isLazyTypeFunc(type)) { + type = type(); + } + const propertiesWithType = this.extractPropertiesFromType(type, schemas, pendingSchemasRefs); + if (!propertiesWithType) { + return ''; + } + const extensionProperties = Reflect.getMetadata(constants_1.DECORATORS.API_EXTENSION, type) || {}; + const { schemaName, schemaProperties } = this.getSchemaMetadata(type); + const typeDefinition = Object.assign(Object.assign({ type: 'object', properties: (0, lodash_1.mapValues)((0, lodash_1.keyBy)(propertiesWithType, 'name'), (property) => { + const keysToOmit = [ + 'name', + 'isArray', + 'enumName', + 'enumSchema', + 'selfRequired' + ]; + if ('required' in property && Array.isArray(property.required)) { + return (0, lodash_1.omit)(property, keysToOmit); + } + return (0, lodash_1.omit)(property, [...keysToOmit, 'required']); + }) }, extensionProperties), schemaProperties); + const typeDefinitionRequiredFields = propertiesWithType + .filter((property) => 'selfRequired' in property + ? property.selfRequired != false + : property.required != false && !Array.isArray(property.required)) + .map((property) => property.name); + if (typeDefinitionRequiredFields.length > 0) { + typeDefinition['required'] = typeDefinitionRequiredFields; + } + if (schemas[schemaName] && !(0, lodash_1.isEqual)(schemas[schemaName], typeDefinition)) { + common_1.Logger.error(`Duplicate DTO detected: "${schemaName}" is defined multiple times with different schemas.\n` + + `Consider using unique class names or applying @ApiExtraModels() decorator with custom schema names.\n` + + `Note: This will throw an error in the next major version.`); + } + schemas[schemaName] = typeDefinition; + return schemaName; + } + getSchemaMetadata(type) { + var _a, _b; + const schemas = (_a = Reflect.getOwnMetadata(constants_1.DECORATORS.API_SCHEMA, type)) !== null && _a !== void 0 ? _a : []; + const _c = (_b = schemas[schemas.length - 1]) !== null && _b !== void 0 ? _b : {}, { name } = _c, schemaProperties = __rest(_c, ["name"]); + return { schemaName: name !== null && name !== void 0 ? name : type.name, schemaProperties }; + } + mergePropertyWithMetadata(key, prototype, schemas, pendingSchemaRefs, metadata) { + if (!metadata) { + metadata = + (0, lodash_1.omit)(Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key), 'link') || {}; + } + if (this.isLazyTypeFunc(metadata.type)) { + metadata.type = metadata.type(); + [metadata.type, metadata.isArray] = (0, helpers_1.getTypeIsArrayTuple)(metadata.type, metadata.isArray); + } + if (Array.isArray(metadata.type)) { + return this.createFromNestedArray(key, metadata, schemas, pendingSchemaRefs); + } + return this.createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs); + } + createEnumParam(param, schemas) { + var _a, _b, _c, _d, _e; + const enumName = param.enumName; + const $ref = (0, utils_1.getSchemaPath)(enumName); + if (!(enumName in schemas)) { + const _enum = param.enum + ? param.enum + : param.schema + ? param.schema['items'] + ? param.schema['items']['enum'] + : param.schema['enum'] + : param.isArray && param.items + ? param.items.enum + : undefined; + schemas[enumName] = Object.assign(Object.assign({ type: (_d = (param.isArray + ? (_b = (_a = param.schema) === null || _a === void 0 ? void 0 : _a['items']) === null || _b === void 0 ? void 0 : _b['type'] + : (_c = param.schema) === null || _c === void 0 ? void 0 : _c['type'])) !== null && _d !== void 0 ? _d : 'string', enum: _enum }, param.enumSchema), (param['x-enumNames'] ? { 'x-enumNames': param['x-enumNames'] } : {})); + } + else { + if (param.enumSchema) { + schemas[enumName] = Object.assign(Object.assign({}, schemas[enumName]), param.enumSchema); + } + } + param.schema = + param.isArray || ((_e = param.schema) === null || _e === void 0 ? void 0 : _e['items']) + ? { type: 'array', items: { $ref } } + : { $ref }; + return (0, lodash_1.omit)(param, [ + 'isArray', + 'items', + 'enumName', + 'enum', + 'x-enumNames', + 'enumSchema' + ]); + } + createEnumSchemaType(key, metadata, schemas) { + var _a, _b, _c; + if (!('enumName' in metadata) || !metadata.enumName) { + return Object.assign(Object.assign({}, metadata), { name: metadata.name || key }); + } + const enumName = metadata.enumName; + const $ref = (0, utils_1.getSchemaPath)(enumName); + const enumType = (_a = (metadata.isArray ? metadata.items['type'] : metadata.type)) !== null && _a !== void 0 ? _a : 'string'; + if (!schemas[enumName]) { + schemas[enumName] = Object.assign(Object.assign({ type: enumType }, metadata.enumSchema), { enum: metadata.isArray && metadata.items + ? metadata.items['enum'] + : metadata.enum, description: (_b = metadata.description) !== null && _b !== void 0 ? _b : undefined, 'x-enumNames': (_c = metadata['x-enumNames']) !== null && _c !== void 0 ? _c : undefined }); + } + else { + if (metadata.enumSchema) { + schemas[enumName] = Object.assign(Object.assign({}, schemas[enumName]), metadata.enumSchema); + } + if (metadata['x-enumNames']) { + schemas[enumName]['x-enumNames'] = metadata['x-enumNames']; + } + } + const _schemaObject = Object.assign(Object.assign({}, metadata), { name: metadata.name || key, type: metadata.isArray ? 'array' : 'string' }); + const refHost = metadata.isArray + ? { items: { $ref } } + : { allOf: [{ $ref }] }; + const paramObject = Object.assign(Object.assign({}, _schemaObject), refHost); + const pathsToOmit = ['enum', 'enumName', 'enumSchema', 'x-enumNames']; + if (!metadata.isArray) { + pathsToOmit.push('type'); + } + return (0, lodash_1.omit)(paramObject, pathsToOmit); + } + createNotBuiltInTypeReference(key, metadata, trueMetadataType, schemas, pendingSchemaRefs) { + if ((0, shared_utils_1.isUndefined)(trueMetadataType)) { + throw new Error(`A circular dependency has been detected (property key: "${key}"). Please, make sure that each side of a bidirectional relationships are using lazy resolvers ("type: () => ClassType").`); + } + let { schemaName: schemaObjectName } = this.getSchemaMetadata(trueMetadataType); + if (!(schemaObjectName in schemas) && + !pendingSchemaRefs.includes(schemaObjectName)) { + schemaObjectName = this.exploreModelSchema(trueMetadataType, schemas, [...pendingSchemaRefs, schemaObjectName]); + } + const $ref = (0, utils_1.getSchemaPath)(schemaObjectName); + if (metadata.isArray) { + return this.transformToArraySchemaProperty(metadata, key, { $ref }); + } + const keysToRemove = ['type', 'isArray', 'required', 'name']; + const validMetadataObject = (0, lodash_1.omit)(metadata, keysToRemove); + const extraMetadataKeys = Object.keys(validMetadataObject); + if (extraMetadataKeys.length > 0) { + return Object.assign(Object.assign({ name: metadata.name || key, required: metadata.required }, validMetadataObject), { allOf: [{ $ref }] }); + } + return { + name: metadata.name || key, + required: metadata.required, + $ref + }; + } + transformToArraySchemaProperty(metadata, key, type) { + const keysToRemove = ['type', 'enum']; + const [movedProperties, keysToMove] = this.extractPropertyModifiers(metadata); + const schemaHost = Object.assign(Object.assign({}, (0, lodash_1.omit)(metadata, [...keysToRemove, ...keysToMove])), { name: metadata.name || key, type: 'array', items: (0, lodash_1.isString)(type) + ? Object.assign({ type }, movedProperties) : Object.assign(Object.assign({}, type), movedProperties) }); + schemaHost.items = (0, lodash_1.omitBy)(schemaHost.items, shared_utils_1.isUndefined); + return schemaHost; + } + mapArrayCtorParam(param) { + return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, 'type')), { schema: { + type: 'array', + items: { + type: 'string' + } + } }); + } + createFromObjectLiteral(key, literalObj, schemas) { + const objLiteralKeys = Object.keys(literalObj); + const properties = {}; + const required = []; + objLiteralKeys.forEach((key) => { + const propertyCompilerMetadata = literalObj[key]; + if ((0, enum_utils_1.isEnumArray)(propertyCompilerMetadata)) { + propertyCompilerMetadata.type = 'array'; + const enumValues = (0, enum_utils_1.getEnumValues)(propertyCompilerMetadata.enum); + propertyCompilerMetadata.items = { + type: (0, enum_utils_1.getEnumType)(enumValues), + enum: enumValues + }; + delete propertyCompilerMetadata.enum; + } + else if (propertyCompilerMetadata.enum) { + const enumValues = (0, enum_utils_1.getEnumValues)(propertyCompilerMetadata.enum); + propertyCompilerMetadata.enum = enumValues; + propertyCompilerMetadata.type = (0, enum_utils_1.getEnumType)(enumValues); + } + const propertyMetadata = this.mergePropertyWithMetadata(key, Object, schemas, [], propertyCompilerMetadata); + if ('required' in propertyMetadata && propertyMetadata.required) { + required.push(key); + } + const keysToRemove = ['isArray', 'name', 'required']; + const validMetadataObject = (0, lodash_1.omit)(propertyMetadata, keysToRemove); + properties[key] = validMetadataObject; + }); + const schema = { + name: key, + type: 'object', + properties, + required + }; + return schema; + } + createFromNestedArray(key, metadata, schemas, pendingSchemaRefs) { + const recurse = (type) => { + if (!Array.isArray(type)) { + const schemaMetadata = this.createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs, type); + return (0, lodash_1.omit)(schemaMetadata, ['isArray', 'name']); + } + return { + name: key, + type: 'array', + items: recurse(type[0]) + }; + }; + return recurse(metadata.type); + } + createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs, nestedArrayType) { + const typeRef = nestedArrayType || metadata.type; + if (this.isObjectLiteral(typeRef)) { + const schemaFromObjectLiteral = this.createFromObjectLiteral(key, typeRef, schemas); + if (metadata.isArray) { + return { + name: schemaFromObjectLiteral.name, + type: 'array', + items: (0, lodash_1.omit)(schemaFromObjectLiteral, 'name'), + selfRequired: metadata.required + }; + } + return Object.assign(Object.assign({}, schemaFromObjectLiteral), { selfRequired: metadata.required }); + } + if ((0, lodash_1.isString)(typeRef)) { + if ((0, enum_utils_1.isEnumMetadata)(metadata)) { + return this.createEnumSchemaType(key, metadata, schemas); + } + if (metadata.isArray) { + return this.transformToArraySchemaProperty(metadata, key, typeRef); + } + return Object.assign(Object.assign({}, metadata), { name: metadata.name || key }); + } + if ((0, is_date_ctor_util_1.isDateCtor)(typeRef)) { + if (metadata.isArray) { + return this.transformToArraySchemaProperty(metadata, key, { + format: metadata.format || 'date-time', + type: 'string' + }); + } + return Object.assign(Object.assign({ format: 'date-time' }, metadata), { type: 'string', name: metadata.name || key }); + } + if (this.isBigInt(typeRef)) { + return Object.assign(Object.assign({ format: 'int64' }, metadata), { type: 'integer', name: metadata.name || key }); + } + if (!(0, is_built_in_type_util_1.isBuiltInType)(typeRef)) { + return this.createNotBuiltInTypeReference(key, metadata, typeRef, schemas, pendingSchemaRefs); + } + const typeName = this.getTypeName(typeRef); + const itemType = this.swaggerTypesMapper.mapTypeToOpenAPIType(typeName); + if (metadata.isArray) { + return this.transformToArraySchemaProperty(metadata, key, { + type: itemType + }); + } + else if (itemType === 'array') { + const defaultOnArray = 'string'; + const hasSchemaCombinator = ['oneOf', 'anyOf', 'allOf'].some((combinator) => combinator in metadata); + if (hasSchemaCombinator) { + return Object.assign(Object.assign({}, metadata), { type: undefined, name: metadata.name || key }); + } + return this.transformToArraySchemaProperty(metadata, key, { + type: defaultOnArray + }); + } + return Object.assign(Object.assign({}, metadata), { name: metadata.name || key, type: itemType }); + } + isArrayCtor(type) { + return type === Array; + } + isPrimitiveType(type) { + return ((0, lodash_1.isFunction)(type) && + [String, Boolean, Number].some((item) => item === type)); + } + isLazyTypeFunc(type) { + return (0, lodash_1.isFunction)(type) && type.name == 'type'; + } + getTypeName(type) { + return type && (0, lodash_1.isFunction)(type) ? type.name : type; + } + isObjectLiteral(obj) { + if (typeof obj !== 'object' || !obj) { + return false; + } + const hasOwnProp = Object.prototype.hasOwnProperty; + let objPrototype = obj; + while (Object.getPrototypeOf((objPrototype = Object.getPrototypeOf(objPrototype))) !== null) + ; + for (const prop in obj) { + if (!hasOwnProp.call(obj, prop) && !hasOwnProp.call(objPrototype, prop)) { + return false; + } + } + return Object.getPrototypeOf(obj) === objPrototype; + } + isBigInt(type) { + return type === BigInt; + } + extractPropertyModifiers(metadata) { + const modifierKeys = [ + 'format', + 'maximum', + 'maxLength', + 'minimum', + 'minLength', + 'pattern' + ]; + return [(0, lodash_1.pick)(metadata, modifierKeys), modifierKeys]; + } +} +exports.SchemaObjectFactory = SchemaObjectFactory; diff --git a/dist/services/swagger-types-mapper.d.ts b/dist/services/swagger-types-mapper.d.ts new file mode 100644 index 000000000..1b28dcc20 --- /dev/null +++ b/dist/services/swagger-types-mapper.d.ts @@ -0,0 +1,260 @@ +import { ApiPropertyOptions } from '../decorators'; +import { BaseParameterObject, ReferenceObject, SchemaObject } from '../interfaces/open-api-spec.interface'; +import { ParamWithTypeMetadata } from './parameter-metadata-accessor'; +type KeysToRemove = keyof ApiPropertyOptions | '$ref' | 'properties' | 'enumName' | 'enumSchema' | 'selfRequired'; +export declare class SwaggerTypesMapper { + private readonly keysToRemove; + mapParamTypes(parameters: Array): (Partial | Partial | { + schema: { + type: string; + items: any; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; + }; + } | { + schema: import("lodash").Dictionary; + description?: string; + required?: boolean; + deprecated?: boolean; + allowEmptyValue?: boolean; + style?: import("../interfaces/open-api-spec.interface").ParameterStyle; + explode?: boolean; + allowReserved?: boolean; + examples?: Record; + example?: any; + content?: import("../interfaces/open-api-spec.interface").ContentObject; + } | { + schema: import("lodash").Dictionary; + name?: string | number | object; + type?: import("@nestjs/common").Type; + in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; + isArray?: boolean; + items?: SchemaObject; + required?: boolean; + enum?: unknown[]; + enumName?: string; + enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; + selfRequired?: boolean; + })[]; + mapTypeToOpenAPIType(type: string | Function): string; + mapEnumArrayType(param: Record, keysToRemove: KeysToRemove[]): { + schema: { + type: string; + items: any; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; + }; + }; + mapArrayType(param: (ParamWithTypeMetadata & SchemaObject) | BaseParameterObject, keysToRemove: KeysToRemove[]): { + schema: { + type: string; + items: any; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; + }; + description?: string; + required?: boolean; + deprecated?: boolean; + allowEmptyValue?: boolean; + style?: import("../interfaces/open-api-spec.interface").ParameterStyle; + explode?: boolean; + allowReserved?: boolean; + examples?: Record; + example?: any; + content?: import("../interfaces/open-api-spec.interface").ContentObject; + } | { + schema: { + type: string; + items: any; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + required?: string[]; + enum?: any[]; + 'x-enumNames'?: string[]; + }; + name?: string | number | object; + type?: import("@nestjs/common").Type & string; + in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; + isArray?: boolean; + items?: SchemaObject | (SchemaObject & ReferenceObject); + required?: boolean & string[]; + enum?: unknown[] & any[]; + enumName?: string; + enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; + selfRequired?: boolean; + nullable?: boolean; + discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; + readOnly?: boolean; + writeOnly?: boolean; + xml?: import("../interfaces/open-api-spec.interface").XmlObject; + externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; + example?: any; + examples?: any[] | Record; + deprecated?: boolean; + allOf?: (SchemaObject | ReferenceObject)[]; + oneOf?: (SchemaObject | ReferenceObject)[]; + anyOf?: (SchemaObject | ReferenceObject)[]; + not?: SchemaObject | ReferenceObject; + properties?: Record; + additionalProperties?: SchemaObject | ReferenceObject | boolean; + patternProperties?: SchemaObject | ReferenceObject | any; + description?: string; + format?: string; + default?: any; + title?: string; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: boolean; + minimum?: number; + exclusiveMinimum?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxProperties?: number; + minProperties?: number; + 'x-enumNames'?: string[]; + }; + getSchemaOptionsKeys(): Array; + private getSchemaOptions; + private isEnumArrayType; + private hasSchemaDefinition; + private hasRawContentDefinition; + private omitParamKeys; +} +export {}; diff --git a/dist/services/swagger-types-mapper.js b/dist/services/swagger-types-mapper.js new file mode 100644 index 000000000..3eb2c2f2b --- /dev/null +++ b/dist/services/swagger-types-mapper.js @@ -0,0 +1,107 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SwaggerTypesMapper = void 0; +const lodash_1 = require("lodash"); +class SwaggerTypesMapper { + constructor() { + this.keysToRemove = [ + 'isArray', + 'enum', + 'enumName', + 'enumSchema', + '$ref', + 'selfRequired', + ...this.getSchemaOptionsKeys() + ]; + } + mapParamTypes(parameters) { + return parameters.map((param) => { + if (this.hasSchemaDefinition(param) || + this.hasRawContentDefinition(param)) { + if (Array.isArray(param.required) && 'schema' in param) { + param.schema.required = param.required; + delete param.required; + } + if ('selfRequired' in param) { + param.required = param.selfRequired; + } + return this.omitParamKeys(param); + } + const { type } = param; + const typeName = type && (0, lodash_1.isFunction)(type) + ? this.mapTypeToOpenAPIType(type.name) + : this.mapTypeToOpenAPIType(type); + const paramWithTypeMetadata = (0, lodash_1.omitBy)(Object.assign(Object.assign({}, param), { type: typeName }), lodash_1.isUndefined); + if (this.isEnumArrayType(paramWithTypeMetadata)) { + return this.mapEnumArrayType(paramWithTypeMetadata, this.keysToRemove); + } + else if (paramWithTypeMetadata.isArray) { + return this.mapArrayType(paramWithTypeMetadata, this.keysToRemove); + } + return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, this.keysToRemove)), { schema: (0, lodash_1.omitBy)(Object.assign(Object.assign(Object.assign({}, this.getSchemaOptions(param)), (param.schema || {})), { enum: paramWithTypeMetadata.enum, type: paramWithTypeMetadata.type, $ref: paramWithTypeMetadata.$ref }), lodash_1.isUndefined) }); + }); + } + mapTypeToOpenAPIType(type) { + if (!(type && type.charAt)) { + return; + } + return type.charAt(0).toLowerCase() + type.slice(1); + } + mapEnumArrayType(param, keysToRemove) { + return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, keysToRemove)), { schema: Object.assign(Object.assign({}, this.getSchemaOptions(param)), { type: 'array', items: param.items }) }); + } + mapArrayType(param, keysToRemove) { + const itemsModifierKeys = ['format', 'maximum', 'minimum', 'pattern']; + const items = param.items || + (0, lodash_1.omitBy)(Object.assign(Object.assign({}, (param.schema || {})), { enum: param.enum, type: this.mapTypeToOpenAPIType(param.type) }), lodash_1.isUndefined); + const modifierProperties = (0, lodash_1.pick)(param, itemsModifierKeys); + return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, keysToRemove)), { schema: Object.assign(Object.assign({}, (0, lodash_1.omit)(this.getSchemaOptions(param), [...itemsModifierKeys])), { type: 'array', items: (0, lodash_1.isString)(items.type) + ? Object.assign({ type: items.type }, modifierProperties) : Object.assign(Object.assign({}, items.type), modifierProperties) }) }); + } + getSchemaOptionsKeys() { + return [ + 'properties', + 'patternProperties', + 'additionalProperties', + 'minimum', + 'maximum', + 'maxProperties', + 'minItems', + 'minProperties', + 'maxItems', + 'minLength', + 'maxLength', + 'exclusiveMaximum', + 'exclusiveMinimum', + 'uniqueItems', + 'title', + 'format', + 'pattern', + 'nullable', + 'default', + 'example', + 'oneOf', + 'anyOf', + 'type', + 'items' + ]; + } + getSchemaOptions(param) { + const schemaKeys = this.getSchemaOptionsKeys(); + const optionsObject = schemaKeys.reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: param[key] })), {}); + return (0, lodash_1.omitBy)(optionsObject, lodash_1.isUndefined); + } + isEnumArrayType(param) { + return param.isArray && param.items && param.items.enum; + } + hasSchemaDefinition(param) { + return !!param.schema; + } + hasRawContentDefinition(param) { + return 'content' in param; + } + omitParamKeys(param) { + return (0, lodash_1.omit)(param, this.keysToRemove); + } +} +exports.SwaggerTypesMapper = SwaggerTypesMapper; diff --git a/dist/storages/global-parameters.storage.d.ts b/dist/storages/global-parameters.storage.d.ts new file mode 100644 index 000000000..5de3fbb24 --- /dev/null +++ b/dist/storages/global-parameters.storage.d.ts @@ -0,0 +1,8 @@ +import { ParameterObject } from '../interfaces/open-api-spec.interface'; +export declare class GlobalParametersStorageHost { + private parameters; + add(...parameters: ParameterObject[]): void; + getAll(): ParameterObject[]; + clear(): void; +} +export declare const GlobalParametersStorage: GlobalParametersStorageHost; diff --git a/dist/storages/global-parameters.storage.js b/dist/storages/global-parameters.storage.js new file mode 100644 index 000000000..a8d7b0e6d --- /dev/null +++ b/dist/storages/global-parameters.storage.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GlobalParametersStorage = exports.GlobalParametersStorageHost = void 0; +class GlobalParametersStorageHost { + constructor() { + this.parameters = new Array(); + } + add(...parameters) { + this.parameters.push(...parameters); + } + getAll() { + return this.parameters; + } + clear() { + this.parameters = []; + } +} +exports.GlobalParametersStorageHost = GlobalParametersStorageHost; +const globalRef = global; +exports.GlobalParametersStorage = globalRef.SwaggerGlobalParametersStorage || + (globalRef.SwaggerGlobalParametersStorage = + new GlobalParametersStorageHost()); diff --git a/dist/storages/global-responses.storage.d.ts b/dist/storages/global-responses.storage.d.ts new file mode 100644 index 000000000..64ac45dde --- /dev/null +++ b/dist/storages/global-responses.storage.d.ts @@ -0,0 +1,10 @@ +import { ApiResponseOptions } from '../decorators'; +type GlobalResponesMap = Record>; +export declare class GlobalResponsesStorageHost { + private responses; + add(responses: GlobalResponesMap): void; + getAll(): GlobalResponesMap; + clear(): void; +} +export declare const GlobalResponsesStorage: GlobalResponsesStorageHost; +export {}; diff --git a/dist/storages/global-responses.storage.js b/dist/storages/global-responses.storage.js new file mode 100644 index 000000000..0468d933a --- /dev/null +++ b/dist/storages/global-responses.storage.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GlobalResponsesStorage = exports.GlobalResponsesStorageHost = void 0; +class GlobalResponsesStorageHost { + constructor() { + this.responses = {}; + } + add(responses) { + this.responses = Object.assign(Object.assign({}, this.responses), responses); + } + getAll() { + return this.responses; + } + clear() { + this.responses = {}; + } +} +exports.GlobalResponsesStorageHost = GlobalResponsesStorageHost; +const globalRef = global; +exports.GlobalResponsesStorage = globalRef.SwaggerGlobalResponsesStorage || + (globalRef.SwaggerGlobalResponsesStorage = new GlobalResponsesStorageHost()); diff --git a/dist/swagger-explorer.d.ts b/dist/swagger-explorer.d.ts new file mode 100644 index 000000000..97e8a5745 --- /dev/null +++ b/dist/swagger-explorer.d.ts @@ -0,0 +1,42 @@ +import { Controller } from '@nestjs/common/interfaces'; +import { ApplicationConfig } from '@nestjs/core'; +import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; +import { OperationIdFactory } from './interfaces'; +import { DenormalizedDoc } from './interfaces/denormalized-doc.interface'; +import { SchemaObject } from './interfaces/open-api-spec.interface'; +import { SchemaObjectFactory } from './services/schema-object-factory'; +export declare class SwaggerExplorer { + private readonly schemaObjectFactory; + private readonly options; + private readonly mimetypeContentWrapper; + private readonly metadataScanner; + private readonly schemas; + private operationIdFactory; + private routePathFactory?; + private linkNameFactory; + constructor(schemaObjectFactory: SchemaObjectFactory, options?: { + httpAdapterType?: string; + }); + exploreController(wrapper: InstanceWrapper, applicationConfig: ApplicationConfig, options: { + modulePath?: string; + globalPrefix?: string; + operationIdFactory?: OperationIdFactory; + linkNameFactory?: (controllerKey: string, methodKey: string, fieldKey: string) => string; + autoTagControllers?: boolean; + onlyIncludeDecoratedEndpoints?: boolean; + }): DenormalizedDoc[]; + getSchemas(): Record; + private generateDenormalizedDocument; + private exploreGlobalMetadata; + private exploreRoutePathAndMethod; + private getOperationId; + private getRoutePathVersions; + private reflectControllerPath; + private validateRoutePath; + private mergeMetadata; + private deepMergeMetadata; + private mergeValues; + private migrateOperationSchema; + private registerExtraModels; + private getVersionMetadata; +} diff --git a/dist/swagger-explorer.js b/dist/swagger-explorer.js new file mode 100644 index 000000000..774130a08 --- /dev/null +++ b/dist/swagger-explorer.js @@ -0,0 +1,319 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SwaggerExplorer = void 0; +const common_1 = require("@nestjs/common"); +const constants_1 = require("@nestjs/common/constants"); +const interfaces_1 = require("@nestjs/common/interfaces"); +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +const core_1 = require("@nestjs/core"); +const legacy_route_converter_1 = require("@nestjs/core/router/legacy-route-converter"); +const route_path_factory_1 = require("@nestjs/core/router/route-path-factory"); +const lodash_1 = require("lodash"); +const path_to_regexp_1 = require("path-to-regexp"); +const constants_2 = require("./constants"); +const api_callbacks_explorer_1 = require("./explorers/api-callbacks.explorer"); +const api_exclude_controller_explorer_1 = require("./explorers/api-exclude-controller.explorer"); +const api_exclude_endpoint_explorer_1 = require("./explorers/api-exclude-endpoint.explorer"); +const api_include_endpoint_explorer_1 = require("./explorers/api-include-endpoint.explorer"); +const api_extra_models_explorer_1 = require("./explorers/api-extra-models.explorer"); +const api_headers_explorer_1 = require("./explorers/api-headers.explorer"); +const api_operation_explorer_1 = require("./explorers/api-operation.explorer"); +const api_parameters_explorer_1 = require("./explorers/api-parameters.explorer"); +const api_response_explorer_1 = require("./explorers/api-response.explorer"); +const api_security_explorer_1 = require("./explorers/api-security.explorer"); +const api_use_tags_explorer_1 = require("./explorers/api-use-tags.explorer"); +const mimetype_content_wrapper_1 = require("./services/mimetype-content-wrapper"); +const is_body_parameter_util_1 = require("./utils/is-body-parameter.util"); +const merge_and_uniq_util_1 = require("./utils/merge-and-uniq.util"); +class SwaggerExplorer { + constructor(schemaObjectFactory, options = {}) { + this.schemaObjectFactory = schemaObjectFactory; + this.options = options; + this.mimetypeContentWrapper = new mimetype_content_wrapper_1.MimetypeContentWrapper(); + this.metadataScanner = new core_1.MetadataScanner(); + this.schemas = {}; + this.operationIdFactory = (controllerKey, methodKey, version) => version + ? controllerKey + ? `${controllerKey}_${methodKey}_${version}` + : `${methodKey}_${version}` + : controllerKey + ? `${controllerKey}_${methodKey}` + : methodKey; + this.linkNameFactory = (controllerKey, methodKey, fieldKey) => controllerKey + ? `${controllerKey}_${methodKey}_from_${fieldKey}` + : `${methodKey}_from_${fieldKey}`; + } + exploreController(wrapper, applicationConfig, options) { + const { operationIdFactory, linkNameFactory } = options; + this.routePathFactory = new route_path_factory_1.RoutePathFactory(applicationConfig); + if (operationIdFactory) { + this.operationIdFactory = operationIdFactory; + } + if (linkNameFactory) { + this.linkNameFactory = linkNameFactory; + } + const { instance, metatype } = wrapper; + const prototype = Object.getPrototypeOf(instance); + const documentResolvers = { + root: [ + this.exploreRoutePathAndMethod, + api_operation_explorer_1.exploreApiOperationMetadata, + api_parameters_explorer_1.exploreApiParametersMetadata.bind(null, this.schemas) + ], + security: [api_security_explorer_1.exploreApiSecurityMetadata], + tags: [api_use_tags_explorer_1.exploreApiTagsMetadata], + callbacks: [api_callbacks_explorer_1.exploreApiCallbacksMetadata], + responses: [ + api_response_explorer_1.exploreApiResponseMetadata.bind(null, this.schemas, { + operationId: this.operationIdFactory, + linkName: this.linkNameFactory + }) + ] + }; + return this.generateDenormalizedDocument(metatype, prototype, instance, documentResolvers, applicationConfig, options); + } + getSchemas() { + return this.schemas; + } + generateDenormalizedDocument(metatype, prototype, instance, documentResolvers, applicationConfig, options) { + const self = this; + const excludeController = (0, api_exclude_controller_explorer_1.exploreApiExcludeControllerMetadata)(metatype); + if (excludeController) { + return []; + } + const globalMetadata = this.exploreGlobalMetadata(metatype, { + autoTagControllers: options.autoTagControllers + }); + const ctrlExtraModels = (0, api_extra_models_explorer_1.exploreGlobalApiExtraModelsMetadata)(metatype); + this.registerExtraModels(ctrlExtraModels); + const denormalizedPaths = this.metadataScanner.scanFromPrototype(instance, prototype, (name) => { + const targetCallback = prototype[name]; + const includeEndpoint = (0, api_include_endpoint_explorer_1.exploreApiIncludeEndpointMetadata)(instance, prototype, targetCallback); + if (options.onlyIncludeDecoratedEndpoints && !includeEndpoint) { + return; + } + const excludeEndpoint = (0, api_exclude_endpoint_explorer_1.exploreApiExcludeEndpointMetadata)(instance, prototype, targetCallback); + if (excludeEndpoint && excludeEndpoint.disable) { + return; + } + const ctrlExtraModels = (0, api_extra_models_explorer_1.exploreApiExtraModelsMetadata)(instance, prototype, targetCallback); + this.registerExtraModels(ctrlExtraModels); + const methodMetadata = (0, lodash_1.mapValues)(documentResolvers, (explorers) => explorers.reduce((metadata, fn) => { + const exploredMetadata = fn.call(self, instance, prototype, targetCallback, metatype, options.globalPrefix, options.modulePath, applicationConfig, options.autoTagControllers); + if (!exploredMetadata) { + return metadata; + } + if (!(0, lodash_1.isArray)(exploredMetadata)) { + if (Array.isArray(metadata)) { + return metadata.map((item) => (Object.assign(Object.assign({}, item), exploredMetadata))); + } + return Object.assign(Object.assign({}, metadata), exploredMetadata); + } + return (0, lodash_1.isArray)(metadata) + ? [...metadata, ...exploredMetadata] + : exploredMetadata; + }, {})); + if (Array.isArray(methodMetadata.root)) { + return methodMetadata.root.map((endpointMetadata) => { + endpointMetadata = (0, lodash_1.cloneDeep)(Object.assign(Object.assign({}, methodMetadata), { root: endpointMetadata })); + const mergedMethodMetadata = this.mergeMetadata(globalMetadata, (0, lodash_1.omitBy)(endpointMetadata, lodash_1.isEmpty)); + return this.migrateOperationSchema(Object.assign(Object.assign({ responses: {} }, (0, lodash_1.omit)(globalMetadata, 'chunks')), mergedMethodMetadata), prototype, targetCallback); + }); + } + const mergedMethodMetadata = this.mergeMetadata(globalMetadata, (0, lodash_1.omitBy)(methodMetadata, lodash_1.isEmpty)); + return [ + this.migrateOperationSchema(Object.assign(Object.assign({ responses: {} }, (0, lodash_1.omit)(globalMetadata, 'chunks')), mergedMethodMetadata), prototype, targetCallback) + ]; + }); + return (0, lodash_1.flatten)(denormalizedPaths).filter((path) => { var _a; return (_a = path.root) === null || _a === void 0 ? void 0 : _a.path; }); + } + exploreGlobalMetadata(metatype, options) { + const globalExplorers = [ + (0, api_use_tags_explorer_1.exploreGlobalApiTagsMetadata)(options.autoTagControllers), + api_security_explorer_1.exploreGlobalApiSecurityMetadata, + api_response_explorer_1.exploreGlobalApiResponseMetadata.bind(null, this.schemas), + api_headers_explorer_1.exploreGlobalApiHeaderMetadata + ]; + const globalMetadata = globalExplorers + .map((explorer) => explorer.call(explorer, metatype)) + .filter((val) => !(0, shared_utils_1.isUndefined)(val)) + .reduce((curr, next) => { + if (next.depth) { + return Object.assign(Object.assign({}, curr), { chunks: (curr.chunks || []).concat(next) }); + } + return Object.assign(Object.assign({}, curr), next); + }, {}); + return globalMetadata; + } + exploreRoutePathAndMethod(instance, prototype, method, metatype, globalPrefix, modulePath, applicationConfig) { + const methodPath = Reflect.getMetadata(constants_1.PATH_METADATA, method); + if ((0, shared_utils_1.isUndefined)(methodPath)) { + return undefined; + } + const requestMethod = Reflect.getMetadata(constants_1.METHOD_METADATA, method); + const methodVersion = Reflect.getMetadata(constants_1.VERSION_METADATA, method); + const versioningOptions = applicationConfig.getVersioning(); + const controllerVersion = this.getVersionMetadata(metatype, versioningOptions); + const versionOrVersions = methodVersion !== null && methodVersion !== void 0 ? methodVersion : controllerVersion; + const versions = this.getRoutePathVersions(versionOrVersions, versioningOptions); + const allRoutePaths = this.routePathFactory.create({ + methodPath, + methodVersion, + modulePath, + globalPrefix, + controllerVersion, + ctrlPath: this.reflectControllerPath(metatype), + versioningOptions: applicationConfig.getVersioning() + }, requestMethod); + return (0, lodash_1.flatten)(allRoutePaths.map((routePath, index) => { + const fullPath = this.validateRoutePath(routePath); + const apiExtension = Reflect.getMetadata(constants_2.DECORATORS.API_EXTENSION, method); + if (requestMethod === common_1.RequestMethod.ALL) { + const validMethods = [ + 'get', + 'post', + 'put', + 'delete', + 'patch', + 'options', + 'head', + 'search' + ]; + return validMethods.map((requestMethod) => (Object.assign({ method: requestMethod, path: fullPath === '' ? '/' : fullPath, operationId: `${this.getOperationId(instance, method.name)}_${requestMethod.toLowerCase()}` }, apiExtension))); + } + const pathVersion = versions.find((v) => fullPath.includes(`/${v}/`) || fullPath.endsWith(`/${v}`)); + const isAlias = allRoutePaths.length > 1 && allRoutePaths.length !== versions.length; + const methodKey = isAlias ? `${method.name}[${index}]` : method.name; + return Object.assign({ method: common_1.RequestMethod[requestMethod].toLowerCase(), path: fullPath === '' ? '/' : fullPath, operationId: this.getOperationId(instance, methodKey, pathVersion) }, apiExtension); + })); + } + getOperationId(instance, methodKey, version) { + var _a; + return this.operationIdFactory(((_a = instance.constructor) === null || _a === void 0 ? void 0 : _a.name) || '', methodKey, version); + } + getRoutePathVersions(versionValue, versioningOptions) { + let versions = []; + if (!versionValue || (versioningOptions === null || versioningOptions === void 0 ? void 0 : versioningOptions.type) !== common_1.VersioningType.URI) { + return versions; + } + if (Array.isArray(versionValue)) { + versions = versionValue.filter((v) => v !== interfaces_1.VERSION_NEUTRAL); + } + else if (versionValue !== interfaces_1.VERSION_NEUTRAL) { + versions = [versionValue]; + } + const prefix = this.routePathFactory.getVersionPrefix(versioningOptions); + versions = versions.map((v) => `${prefix}${v}`); + return versions; + } + reflectControllerPath(metatype) { + return Reflect.getMetadata(constants_1.PATH_METADATA, metatype); + } + validateRoutePath(path) { + if ((0, shared_utils_1.isUndefined)(path)) { + return ''; + } + if (Array.isArray(path)) { + path = (0, lodash_1.head)(path); + } + let pathWithParams = ''; + try { + let normalizedPath = legacy_route_converter_1.LegacyRouteConverter.tryConvert(path, { + logs: this.options.httpAdapterType !== 'fastify' + }); + normalizedPath = normalizedPath.replace(/::/g, '\\:'); + normalizedPath = normalizedPath.replace(/\[:\]/g, '\\:'); + normalizedPath = normalizedPath.replace(/\(\^([^)]+)\)/g, ''); + const { tokens } = (0, path_to_regexp_1.parse)(normalizedPath); + for (const item of tokens) { + if (item.type === 'text') { + pathWithParams += item.value; + } + else if (item.type === 'param') { + pathWithParams += `{${item.name}}`; + } + else if (item.type === 'wildcard') { + pathWithParams += `{${item.name}}`; + } + else if (item.type === 'group') { + pathWithParams += item.tokens.reduce((acc, item) => acc + + (item.type === 'text' + ? item.value + : `{${item.name}}`), ''); + } + } + } + catch (err) { + if (err instanceof TypeError) { + legacy_route_converter_1.LegacyRouteConverter.printError(path); + } + throw err; + } + return pathWithParams === '/' ? '' : (0, shared_utils_1.addLeadingSlash)(pathWithParams); + } + mergeMetadata(globalMetadata, methodMetadata) { + if (methodMetadata.root && !methodMetadata.root.parameters) { + methodMetadata.root.parameters = []; + } + const deepMerge = (metadata) => (value, key) => { + if (!metadata[key]) { + return value; + } + const globalValue = metadata[key]; + if (metadata.depth) { + return this.deepMergeMetadata(globalValue, value, metadata.depth); + } + return this.mergeValues(globalValue, value); + }; + if (globalMetadata.chunks) { + const { chunks } = globalMetadata; + chunks.forEach((chunk) => { + methodMetadata = (0, lodash_1.mapValues)(methodMetadata, deepMerge(chunk)); + }); + } + return (0, lodash_1.mapValues)(methodMetadata, deepMerge(globalMetadata)); + } + deepMergeMetadata(globalValue, methodValue, maxDepth, currentDepthLevel = 0) { + if (currentDepthLevel === maxDepth) { + return this.mergeValues(globalValue, methodValue); + } + return (0, lodash_1.mapValues)(methodValue, (value, key) => { + if (key in globalValue) { + return this.deepMergeMetadata(globalValue[key], methodValue[key], maxDepth, currentDepthLevel + 1); + } + return value; + }); + } + mergeValues(globalValue, methodValue) { + if (!(0, lodash_1.isArray)(globalValue)) { + return Object.assign(Object.assign({}, globalValue), methodValue); + } + return [...globalValue, ...methodValue]; + } + migrateOperationSchema(document, prototype, method) { + const parametersObject = (0, lodash_1.get)(document, 'root.parameters'); + const requestBodyIndex = (parametersObject || []).findIndex(is_body_parameter_util_1.isBodyParameter); + if (requestBodyIndex < 0) { + return document; + } + const requestBody = parametersObject[requestBodyIndex]; + parametersObject.splice(requestBodyIndex, 1); + const classConsumes = Reflect.getMetadata(constants_2.DECORATORS.API_CONSUMES, prototype); + const methodConsumes = Reflect.getMetadata(constants_2.DECORATORS.API_CONSUMES, method); + let consumes = (0, merge_and_uniq_util_1.mergeAndUniq)(classConsumes, methodConsumes); + consumes = (0, lodash_1.isEmpty)(consumes) ? ['application/json'] : consumes; + const keysToRemove = ['schema', 'in', 'name', 'examples']; + document.root.requestBody = Object.assign(Object.assign({}, (0, lodash_1.omit)(requestBody, keysToRemove)), this.mimetypeContentWrapper.wrap(consumes, (0, lodash_1.pick)(requestBody, ['schema', 'examples']))); + return document; + } + registerExtraModels(extraModels) { + extraModels.forEach((item) => this.schemaObjectFactory.exploreModelSchema(item, this.schemas)); + } + getVersionMetadata(metatype, versioningOptions) { + var _a; + if ((versioningOptions === null || versioningOptions === void 0 ? void 0 : versioningOptions.type) === common_1.VersioningType.URI) { + return ((_a = Reflect.getMetadata(constants_1.VERSION_METADATA, metatype)) !== null && _a !== void 0 ? _a : versioningOptions.defaultVersion); + } + } +} +exports.SwaggerExplorer = SwaggerExplorer; diff --git a/dist/swagger-module.d.ts b/dist/swagger-module.d.ts new file mode 100644 index 000000000..2831fec8b --- /dev/null +++ b/dist/swagger-module.d.ts @@ -0,0 +1,26 @@ +import { INestApplication } from '@nestjs/common'; +import { HttpServer } from '@nestjs/common/interfaces/http/http-server.interface'; +import { OpenAPIObject, SwaggerCustomOptions, SwaggerDocumentOptions } from './interfaces'; +export declare class SwaggerModule { + private static readonly metadataLoader; + static createDocument(app: INestApplication, config: Omit, options?: SwaggerDocumentOptions): OpenAPIObject; + static loadPluginMetadata(metadataFn: () => Promise>): Promise; + protected static serveStatic(finalPath: string, app: INestApplication, customStaticPath?: string): void; + protected static serveDocuments(finalPath: string, urlLastSubdirectory: string, httpAdapter: HttpServer, documentOrFactory: OpenAPIObject | (() => OpenAPIObject), options: { + ui: boolean; + raw: boolean | Array<'json' | 'yaml'>; + jsonDocumentUrl: string; + yamlDocumentUrl: string; + swaggerOptions: SwaggerCustomOptions; + }): void; + protected static serveSwaggerUi(finalPath: string, urlLastSubdirectory: string, httpAdapter: HttpServer, getBuiltDocument: () => OpenAPIObject, swaggerOptions: SwaggerCustomOptions): void; + protected static serveDefinitions(httpAdapter: HttpServer, getBuiltDocument: () => OpenAPIObject, options: { + jsonDocumentUrl: string; + yamlDocumentUrl: string; + swaggerOptions: SwaggerCustomOptions; + }, serveOptions: { + serveJson: boolean; + serveYaml: boolean; + }): void; + static setup(path: string, app: INestApplication, documentOrFactory: OpenAPIObject | (() => OpenAPIObject), options?: SwaggerCustomOptions): void; +} diff --git a/dist/swagger-module.js b/dist/swagger-module.js new file mode 100644 index 000000000..9dbd21ccc --- /dev/null +++ b/dist/swagger-module.js @@ -0,0 +1,196 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SwaggerModule = void 0; +const common_1 = require("@nestjs/common"); +const jsyaml = require("js-yaml"); +const metadata_loader_1 = require("./plugin/metadata-loader"); +const swagger_scanner_1 = require("./swagger-scanner"); +const swagger_ui_1 = require("./swagger-ui"); +const assign_two_levels_deep_1 = require("./utils/assign-two-levels-deep"); +const get_global_prefix_1 = require("./utils/get-global-prefix"); +const normalize_rel_path_1 = require("./utils/normalize-rel-path"); +const resolve_path_util_1 = require("./utils/resolve-path.util"); +const validate_global_prefix_util_1 = require("./utils/validate-global-prefix.util"); +const validate_path_util_1 = require("./utils/validate-path.util"); +class SwaggerModule { + static createDocument(app, config, options = {}) { + const swaggerScanner = new swagger_scanner_1.SwaggerScanner(); + const document = swaggerScanner.scanApplication(app, options); + document.components = (0, assign_two_levels_deep_1.assignTwoLevelsDeep)({}, config.components, document.components); + return Object.assign(Object.assign({ openapi: '3.0.0', paths: {} }, config), document); + } + static loadPluginMetadata(metadataFn) { + return __awaiter(this, void 0, void 0, function* () { + const metadata = yield metadataFn(); + return this.metadataLoader.load(metadata); + }); + } + static serveStatic(finalPath, app, customStaticPath) { + const httpAdapter = app.getHttpAdapter(); + const swaggerAssetsPath = customStaticPath + ? (0, resolve_path_util_1.resolvePath)(customStaticPath) + : (0, swagger_ui_1.getSwaggerAssetsAbsoluteFSPath)(); + if (httpAdapter && httpAdapter.getType() === 'fastify') { + app.useStaticAssets({ + root: swaggerAssetsPath, + prefix: finalPath, + decorateReply: false + }); + } + else { + app.useStaticAssets(swaggerAssetsPath, { + prefix: finalPath + }); + } + } + static serveDocuments(finalPath, urlLastSubdirectory, httpAdapter, documentOrFactory, options) { + let document; + const getBuiltDocument = () => { + if (!document) { + document = + typeof documentOrFactory === 'function' + ? documentOrFactory() + : documentOrFactory; + } + return document; + }; + if (options.ui) { + this.serveSwaggerUi(finalPath, urlLastSubdirectory, httpAdapter, getBuiltDocument, options.swaggerOptions); + } + if (options.raw === true || + (Array.isArray(options.raw) && options.raw.length > 0)) { + const serveJson = options.raw === true || options.raw.includes('json'); + const serveYaml = options.raw === true || options.raw.includes('yaml'); + this.serveDefinitions(httpAdapter, getBuiltDocument, options, { + serveJson, + serveYaml + }); + } + } + static serveSwaggerUi(finalPath, urlLastSubdirectory, httpAdapter, getBuiltDocument, swaggerOptions) { + const baseUrlForSwaggerUI = (0, normalize_rel_path_1.normalizeRelPath)(`./${urlLastSubdirectory}/`); + let swaggerUiHtml; + let swaggerUiInitJS; + httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(`${finalPath}/swagger-ui-init.js`), (req, res) => { + res.type('application/javascript'); + const document = getBuiltDocument(); + if (swaggerOptions.patchDocumentOnRequest) { + const documentToSerialize = swaggerOptions.patchDocumentOnRequest(req, res, document); + const swaggerInitJsPerRequest = (0, swagger_ui_1.buildSwaggerInitJS)(documentToSerialize, swaggerOptions); + return res.send(swaggerInitJsPerRequest); + } + if (!swaggerUiInitJS) { + swaggerUiInitJS = (0, swagger_ui_1.buildSwaggerInitJS)(document, swaggerOptions); + } + res.send(swaggerUiInitJS); + }); + try { + httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(`${finalPath}/${urlLastSubdirectory}/swagger-ui-init.js`), (req, res) => { + res.type('application/javascript'); + const document = getBuiltDocument(); + if (swaggerOptions.patchDocumentOnRequest) { + const documentToSerialize = swaggerOptions.patchDocumentOnRequest(req, res, document); + const swaggerInitJsPerRequest = (0, swagger_ui_1.buildSwaggerInitJS)(documentToSerialize, swaggerOptions); + return res.send(swaggerInitJsPerRequest); + } + if (!swaggerUiInitJS) { + swaggerUiInitJS = (0, swagger_ui_1.buildSwaggerInitJS)(document, swaggerOptions); + } + res.send(swaggerUiInitJS); + }); + } + catch (_a) { + } + function serveSwaggerHtml(_, res) { + res.type('text/html'); + if (!swaggerUiHtml) { + swaggerUiHtml = (0, swagger_ui_1.buildSwaggerHTML)(baseUrlForSwaggerUI, swaggerOptions); + } + res.send(swaggerUiHtml); + } + httpAdapter.get(finalPath, serveSwaggerHtml); + httpAdapter.get(`${finalPath}/index.html`, serveSwaggerHtml); + httpAdapter.get(`${finalPath}/LICENSE`, () => { + throw new common_1.NotFoundException(); + }); + try { + httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(`${finalPath}/`), serveSwaggerHtml); + } + catch (_b) { + } + } + static serveDefinitions(httpAdapter, getBuiltDocument, options, serveOptions) { + if (serveOptions.serveJson) { + httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(options.jsonDocumentUrl), (req, res) => { + res.type('application/json'); + const document = getBuiltDocument(); + const documentToSerialize = options.swaggerOptions + .patchDocumentOnRequest + ? options.swaggerOptions.patchDocumentOnRequest(req, res, document) + : document; + res.send(JSON.stringify(documentToSerialize)); + }); + } + if (serveOptions.serveYaml) { + httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(options.yamlDocumentUrl), (req, res) => { + res.type('text/yaml'); + const document = getBuiltDocument(); + const documentToSerialize = options.swaggerOptions + .patchDocumentOnRequest + ? options.swaggerOptions.patchDocumentOnRequest(req, res, document) + : document; + const yamlDocument = jsyaml.dump(documentToSerialize, { + skipInvalid: true, + noRefs: true + }); + res.send(yamlDocument); + }); + } + } + static setup(path, app, documentOrFactory, options) { + var _a, _b, _c; + const globalPrefix = (0, get_global_prefix_1.getGlobalPrefix)(app); + const finalPath = (0, validate_path_util_1.validatePath)((options === null || options === void 0 ? void 0 : options.useGlobalPrefix) && (0, validate_global_prefix_util_1.validateGlobalPrefix)(globalPrefix) + ? `${globalPrefix}${(0, validate_path_util_1.validatePath)(path)}` + : path); + const urlLastSubdirectory = finalPath.split('/').slice(-1).pop() || ''; + const validatedGlobalPrefix = (options === null || options === void 0 ? void 0 : options.useGlobalPrefix) && (0, validate_global_prefix_util_1.validateGlobalPrefix)(globalPrefix) + ? (0, validate_path_util_1.validatePath)(globalPrefix) + : ''; + const finalJSONDocumentPath = (options === null || options === void 0 ? void 0 : options.jsonDocumentUrl) + ? `${validatedGlobalPrefix}${(0, validate_path_util_1.validatePath)(options.jsonDocumentUrl)}` + : `${finalPath}-json`; + const finalYAMLDocumentPath = (options === null || options === void 0 ? void 0 : options.yamlDocumentUrl) + ? `${validatedGlobalPrefix}${(0, validate_path_util_1.validatePath)(options.yamlDocumentUrl)}` + : `${finalPath}-yaml`; + const ui = (_b = (_a = options === null || options === void 0 ? void 0 : options.ui) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.swaggerUiEnabled) !== null && _b !== void 0 ? _b : true; + const raw = (_c = options === null || options === void 0 ? void 0 : options.raw) !== null && _c !== void 0 ? _c : true; + const httpAdapter = app.getHttpAdapter(); + SwaggerModule.serveDocuments(finalPath, urlLastSubdirectory, httpAdapter, documentOrFactory, { + ui, + raw, + jsonDocumentUrl: finalJSONDocumentPath, + yamlDocumentUrl: finalYAMLDocumentPath, + swaggerOptions: options || {} + }); + if (ui) { + SwaggerModule.serveStatic(finalPath, app, options === null || options === void 0 ? void 0 : options.customSwaggerUiPath); + if (finalPath === `/${urlLastSubdirectory}`) { + return; + } + const serveStaticSlashEndingPath = `${finalPath}/${urlLastSubdirectory}`; + SwaggerModule.serveStatic(serveStaticSlashEndingPath, app); + } + } +} +exports.SwaggerModule = SwaggerModule; +SwaggerModule.metadataLoader = new metadata_loader_1.MetadataLoader(); diff --git a/dist/swagger-scanner.d.ts b/dist/swagger-scanner.d.ts new file mode 100644 index 000000000..87fa336c5 --- /dev/null +++ b/dist/swagger-scanner.d.ts @@ -0,0 +1,25 @@ +import { INestApplication, InjectionToken } from '@nestjs/common'; +import { ApplicationConfig } from '@nestjs/core'; +import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; +import { Module } from '@nestjs/core/injector/module'; +import { OpenAPIObject, OperationIdFactory, SwaggerDocumentOptions } from './interfaces'; +import { ModuleRoute } from './interfaces/module-route.interface'; +import { SchemaObject } from './interfaces/open-api-spec.interface'; +export declare class SwaggerScanner { + private readonly transformer; + private readonly schemaObjectFactory; + private explorer; + scanApplication(app: INestApplication, options: SwaggerDocumentOptions): Omit; + scanModuleControllers(controller: Map, applicationConfig: ApplicationConfig, options: { + modulePath: string | undefined; + globalPrefix: string | undefined; + operationIdFactory?: OperationIdFactory; + linkNameFactory?: (controllerKey: string, methodKey: string, fieldKey: string) => string; + autoTagControllers?: boolean; + onlyIncludeDecoratedEndpoints?: boolean; + }): ModuleRoute[]; + getModules(modulesContainer: Map, include: Function[]): Module[]; + addExtraModels(schemas: Record, extraModels: Function[]): void; + private getModulePathMetadata; + private initializeSwaggerExplorer; +} diff --git a/dist/swagger-scanner.js b/dist/swagger-scanner.js new file mode 100644 index 000000000..da6d7ff8f --- /dev/null +++ b/dist/swagger-scanner.js @@ -0,0 +1,92 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SwaggerScanner = void 0; +const constants_1 = require("@nestjs/common/constants"); +const lodash_1 = require("lodash"); +const model_properties_accessor_1 = require("./services/model-properties-accessor"); +const schema_object_factory_1 = require("./services/schema-object-factory"); +const swagger_types_mapper_1 = require("./services/swagger-types-mapper"); +const swagger_explorer_1 = require("./swagger-explorer"); +const swagger_transformer_1 = require("./swagger-transformer"); +const get_global_prefix_1 = require("./utils/get-global-prefix"); +const strip_last_slash_util_1 = require("./utils/strip-last-slash.util"); +class SwaggerScanner { + constructor() { + this.transformer = new swagger_transformer_1.SwaggerTransformer(); + this.schemaObjectFactory = new schema_object_factory_1.SchemaObjectFactory(new model_properties_accessor_1.ModelPropertiesAccessor(), new swagger_types_mapper_1.SwaggerTypesMapper()); + } + scanApplication(app, options) { + const { deepScanRoutes, include: includedModules = [], extraModels = [], ignoreGlobalPrefix = false, operationIdFactory, linkNameFactory, autoTagControllers = true, onlyIncludeDecoratedEndpoints = false } = options; + const untypedApp = app; + const container = untypedApp.container; + const internalConfigRef = untypedApp.config; + const httpAdapterType = app.getHttpAdapter().getType(); + this.initializeSwaggerExplorer(httpAdapterType); + const modules = this.getModules(container.getModules(), includedModules); + const globalPrefix = !ignoreGlobalPrefix + ? (0, strip_last_slash_util_1.stripLastSlash)((0, get_global_prefix_1.getGlobalPrefix)(app)) + : ''; + const denormalizedPaths = modules.map(({ controllers, metatype, imports }) => { + let result = []; + if (deepScanRoutes) { + const isGlobal = (module) => !container.isGlobalModule(module); + Array.from(imports.values()) + .filter(isGlobal) + .forEach(({ metatype, controllers }) => { + const modulePath = this.getModulePathMetadata(container, metatype); + result = result.concat(this.scanModuleControllers(controllers, internalConfigRef, { + modulePath, + globalPrefix, + operationIdFactory, + linkNameFactory, + autoTagControllers, + onlyIncludeDecoratedEndpoints + })); + }); + } + const modulePath = this.getModulePathMetadata(container, metatype); + return result.concat(this.scanModuleControllers(controllers, internalConfigRef, { + modulePath, + globalPrefix, + operationIdFactory, + linkNameFactory, + autoTagControllers, + onlyIncludeDecoratedEndpoints + })); + }); + const schemas = this.explorer.getSchemas(); + this.addExtraModels(schemas, extraModels); + return Object.assign(Object.assign({}, this.transformer.normalizePaths((0, lodash_1.flatten)(denormalizedPaths))), { components: { + schemas: schemas + } }); + } + scanModuleControllers(controller, applicationConfig, options) { + const denormalizedArray = [...controller.values()].map((ctrl) => this.explorer.exploreController(ctrl, applicationConfig, options)); + return (0, lodash_1.flatten)(denormalizedArray); + } + getModules(modulesContainer, include) { + if (!include || (0, lodash_1.isEmpty)(include)) { + return [...modulesContainer.values()]; + } + return [...modulesContainer.values()].filter(({ metatype }) => include.some((item) => item === metatype)); + } + addExtraModels(schemas, extraModels) { + extraModels.forEach((item) => { + this.schemaObjectFactory.exploreModelSchema(item, schemas); + }); + } + getModulePathMetadata(container, metatype) { + const modulesContainer = container.getModules(); + const modulePath = Reflect.getMetadata(constants_1.MODULE_PATH + modulesContainer.applicationId, metatype); + return modulePath !== null && modulePath !== void 0 ? modulePath : Reflect.getMetadata(constants_1.MODULE_PATH, metatype); + } + initializeSwaggerExplorer(httpAdapterType) { + if (this.explorer) { + return; + } + this.explorer = new swagger_explorer_1.SwaggerExplorer(this.schemaObjectFactory, { + httpAdapterType + }); + } +} +exports.SwaggerScanner = SwaggerScanner; diff --git a/dist/swagger-transformer.d.ts b/dist/swagger-transformer.d.ts new file mode 100644 index 000000000..2703485d5 --- /dev/null +++ b/dist/swagger-transformer.d.ts @@ -0,0 +1,4 @@ +import { OpenAPIObject } from './interfaces'; +export declare class SwaggerTransformer { + normalizePaths(denormalizedDoc: (Partial & Record<'root', any>)[]): Record<'paths', OpenAPIObject['paths']>; +} diff --git a/dist/swagger-transformer.js b/dist/swagger-transformer.js new file mode 100644 index 000000000..93098aae1 --- /dev/null +++ b/dist/swagger-transformer.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SwaggerTransformer = void 0; +const lodash_1 = require("lodash"); +const sort_object_lexicographically_1 = require("./utils/sort-object-lexicographically"); +class SwaggerTransformer { + normalizePaths(denormalizedDoc) { + const roots = (0, lodash_1.filter)(denormalizedDoc, (r) => r.root); + const groupedByPath = (0, lodash_1.groupBy)(roots, ({ root }) => root.path); + const paths = (0, lodash_1.mapValues)(groupedByPath, (routes) => { + const keyByMethod = (0, lodash_1.keyBy)(routes, ({ root }) => root.method); + return (0, lodash_1.mapValues)(keyByMethod, (route) => { + const mergedDefinition = Object.assign(Object.assign({}, (0, lodash_1.omit)(route, 'root')), (0, lodash_1.omit)(route.root, ['method', 'path'])); + return (0, sort_object_lexicographically_1.sortObjectLexicographically)(mergedDefinition); + }); + }); + return { + paths + }; + } +} +exports.SwaggerTransformer = SwaggerTransformer; diff --git a/dist/swagger-ui/constants.d.ts b/dist/swagger-ui/constants.d.ts new file mode 100644 index 000000000..5ef1a350b --- /dev/null +++ b/dist/swagger-ui/constants.d.ts @@ -0,0 +1,3 @@ +export declare const favIconHtml: string; +export declare const htmlTemplateString = "\n\n\n\n\n \n <% title %>\n swagger-ui.css\" >\n <% favIconString %>\n \n\n\n\n\n\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n\n \n \n \n\n \n \n \n\n \n\n\n
\n\n\n\n\n<% customJs %>\n<% customJsStr %>\n<% customCssUrl %>\n\n\n\n\n"; +export declare const jsTemplateString = "\nwindow.onload = function() {\n // Build a system\n let url = window.location.search.match(/url=([^&]+)/);\n if (url && url.length > 1) {\n url = decodeURIComponent(url[1]);\n } else {\n url = window.location.origin;\n }\n <% swaggerOptions %>\n url = options.swaggerUrl || url\n let urls = options.swaggerUrls\n let customOptions = options.customOptions\n let spec1 = options.swaggerDoc\n let swaggerOptions = {\n spec: spec1,\n url: url,\n urls: urls,\n dom_id: '#swagger-ui',\n deepLinking: true,\n presets: [\n SwaggerUIBundle.presets.apis,\n SwaggerUIStandalonePreset\n ],\n plugins: [\n SwaggerUIBundle.plugins.DownloadUrl\n ],\n layout: \"StandaloneLayout\"\n }\n for (let attrname in customOptions) {\n swaggerOptions[attrname] = customOptions[attrname];\n }\n let ui = SwaggerUIBundle(swaggerOptions)\n\n if (customOptions.initOAuth) {\n ui.initOAuth(customOptions.initOAuth)\n }\n\n if (customOptions.authAction) {\n ui.authActions.authorize(customOptions.authAction)\n }\n \n window.ui = ui\n}\n"; diff --git a/dist/swagger-ui/constants.js b/dist/swagger-ui/constants.js new file mode 100644 index 000000000..6f47648e2 --- /dev/null +++ b/dist/swagger-ui/constants.js @@ -0,0 +1,132 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.jsTemplateString = exports.htmlTemplateString = exports.favIconHtml = void 0; +exports.favIconHtml = '' + + ''; +exports.htmlTemplateString = ` + + + + + + <% title %> + + <% favIconString %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +<% customJs %> +<% customJsStr %> +<% customCssUrl %> + + + + +`; +exports.jsTemplateString = ` +window.onload = function() { + // Build a system + let url = window.location.search.match(/url=([^&]+)/); + if (url && url.length > 1) { + url = decodeURIComponent(url[1]); + } else { + url = window.location.origin; + } + <% swaggerOptions %> + url = options.swaggerUrl || url + let urls = options.swaggerUrls + let customOptions = options.customOptions + let spec1 = options.swaggerDoc + let swaggerOptions = { + spec: spec1, + url: url, + urls: urls, + dom_id: '#swagger-ui', + deepLinking: true, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + } + for (let attrname in customOptions) { + swaggerOptions[attrname] = customOptions[attrname]; + } + let ui = SwaggerUIBundle(swaggerOptions) + + if (customOptions.initOAuth) { + ui.initOAuth(customOptions.initOAuth) + } + + if (customOptions.authAction) { + ui.authActions.authorize(customOptions.authAction) + } + + window.ui = ui +} +`; diff --git a/dist/swagger-ui/helpers.d.ts b/dist/swagger-ui/helpers.d.ts new file mode 100644 index 000000000..e0d2bc09e --- /dev/null +++ b/dist/swagger-ui/helpers.d.ts @@ -0,0 +1,2 @@ +import { SwaggerUIInitOptions } from '../interfaces/swagger-ui-init-options.interface'; +export declare function buildJSInitOptions(initOptions: SwaggerUIInitOptions): string; diff --git a/dist/swagger-ui/helpers.js b/dist/swagger-ui/helpers.js new file mode 100644 index 000000000..40ab9fbfa --- /dev/null +++ b/dist/swagger-ui/helpers.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.buildJSInitOptions = buildJSInitOptions; +function buildJSInitOptions(initOptions) { + const functionPlaceholder = '____FUNCTION_PLACEHOLDER____'; + const fns = []; + let json = JSON.stringify(initOptions, (key, value) => { + if (typeof value === 'function') { + fns.push(value); + return functionPlaceholder; + } + return value; + }, 2); + json = json.replace(new RegExp('"' + functionPlaceholder + '"', 'g'), () => fns.shift()); + return `let options = ${json};`; +} diff --git a/dist/swagger-ui/index.d.ts b/dist/swagger-ui/index.d.ts new file mode 100644 index 000000000..863a2abec --- /dev/null +++ b/dist/swagger-ui/index.d.ts @@ -0,0 +1 @@ +export * from './swagger-ui'; diff --git a/dist/swagger-ui/index.js b/dist/swagger-ui/index.js new file mode 100644 index 000000000..f8d1886b9 --- /dev/null +++ b/dist/swagger-ui/index.js @@ -0,0 +1,17 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./swagger-ui"), exports); diff --git a/dist/swagger-ui/swagger-ui.d.ts b/dist/swagger-ui/swagger-ui.d.ts new file mode 100644 index 000000000..361b69b08 --- /dev/null +++ b/dist/swagger-ui/swagger-ui.d.ts @@ -0,0 +1,4 @@ +import { OpenAPIObject, SwaggerCustomOptions } from '../interfaces'; +export declare function buildSwaggerInitJS(swaggerDoc: OpenAPIObject, customOptions?: SwaggerCustomOptions): string; +export declare function getSwaggerAssetsAbsoluteFSPath(): string; +export declare function buildSwaggerHTML(baseUrl: string, customOptions?: SwaggerCustomOptions): string; diff --git a/dist/swagger-ui/swagger-ui.js b/dist/swagger-ui/swagger-ui.js new file mode 100644 index 000000000..2b48f9b80 --- /dev/null +++ b/dist/swagger-ui/swagger-ui.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.buildSwaggerInitJS = buildSwaggerInitJS; +exports.getSwaggerAssetsAbsoluteFSPath = getSwaggerAssetsAbsoluteFSPath; +exports.buildSwaggerHTML = buildSwaggerHTML; +const constants_1 = require("./constants"); +const helpers_1 = require("./helpers"); +function buildSwaggerInitJS(swaggerDoc, customOptions = {}) { + const { swaggerOptions = {}, swaggerUrl } = customOptions; + const swaggerInitOptions = { + swaggerDoc, + swaggerUrl, + customOptions: swaggerOptions + }; + const jsInitOptions = (0, helpers_1.buildJSInitOptions)(swaggerInitOptions); + return constants_1.jsTemplateString.replace('<% swaggerOptions %>', jsInitOptions); +} +let swaggerAssetsAbsoluteFSPath; +function getSwaggerAssetsAbsoluteFSPath() { + if (!swaggerAssetsAbsoluteFSPath) { + swaggerAssetsAbsoluteFSPath = require('swagger-ui-dist/absolute-path.js')(); + } + return swaggerAssetsAbsoluteFSPath; +} +function toExternalScriptTag(url) { + return ``; +} +function toInlineScriptTag(jsCode) { + return ``; +} +function toExternalStylesheetTag(url) { + return ``; +} +function toTags(customCode, toScript) { + if (!customCode) { + return ''; + } + if (typeof customCode === 'string') { + return toScript(customCode); + } + else { + return customCode.map(toScript).join('\n'); + } +} +function buildSwaggerHTML(baseUrl, customOptions = {}) { + const { customCss = '', customJs = '', customJsStr = '', customfavIcon = false, customSiteTitle = 'Swagger UI', customCssUrl = '', explorer = false } = customOptions; + const favIconString = customfavIcon + ? `` + : constants_1.favIconHtml; + const explorerCss = explorer + ? '' + : '.swagger-ui .topbar .download-url-wrapper { display: none }'; + return constants_1.htmlTemplateString + .replace('<% customCss %>', customCss) + .replace('<% explorerCss %>', explorerCss) + .replace('<% favIconString %>', favIconString) + .replace(/<% baseUrl %>/g, baseUrl) + .replace('<% customJs %>', toTags(customJs, toExternalScriptTag)) + .replace('<% customJsStr %>', toTags(customJsStr, toInlineScriptTag)) + .replace('<% customCssUrl %>', toTags(customCssUrl, toExternalStylesheetTag)) + .replace('<% title %>', customSiteTitle); +} diff --git a/dist/type-helpers/index.d.ts b/dist/type-helpers/index.d.ts new file mode 100644 index 000000000..dbd86ed6b --- /dev/null +++ b/dist/type-helpers/index.d.ts @@ -0,0 +1,4 @@ +export * from './intersection-type.helper'; +export * from './omit-type.helper'; +export * from './partial-type.helper'; +export * from './pick-type.helper'; diff --git a/dist/type-helpers/index.js b/dist/type-helpers/index.js new file mode 100644 index 000000000..3f056058e --- /dev/null +++ b/dist/type-helpers/index.js @@ -0,0 +1,20 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./intersection-type.helper"), exports); +__exportStar(require("./omit-type.helper"), exports); +__exportStar(require("./partial-type.helper"), exports); +__exportStar(require("./pick-type.helper"), exports); diff --git a/dist/type-helpers/intersection-type.helper.d.ts b/dist/type-helpers/intersection-type.helper.d.ts new file mode 100644 index 000000000..f6331b9e0 --- /dev/null +++ b/dist/type-helpers/intersection-type.helper.d.ts @@ -0,0 +1,8 @@ +import { Type } from '@nestjs/common'; +type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; +type ClassRefsToConstructors = { + [U in keyof T]: T[U] extends Type ? V : never; +}; +type Intersection = Type[number]>>; +export declare function IntersectionType(...classRefs: T): Intersection; +export {}; diff --git a/dist/type-helpers/intersection-type.helper.js b/dist/type-helpers/intersection-type.helper.js new file mode 100644 index 000000000..ff7da273a --- /dev/null +++ b/dist/type-helpers/intersection-type.helper.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntersectionType = IntersectionType; +const mapped_types_1 = require("@nestjs/mapped-types"); +const constants_1 = require("../constants"); +const decorators_1 = require("../decorators"); +const metadata_loader_1 = require("../plugin/metadata-loader"); +const model_properties_accessor_1 = require("../services/model-properties-accessor"); +const mapped_types_utils_1 = require("./mapped-types.utils"); +const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); +function IntersectionType(...classRefs) { + class IntersectionClassType { + constructor() { + classRefs.forEach((classRef) => { + (0, mapped_types_1.inheritPropertyInitializers)(this, classRef); + }); + } + } + classRefs.forEach((classRef) => { + const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); + (0, mapped_types_1.inheritValidationMetadata)(classRef, IntersectionClassType); + (0, mapped_types_1.inheritTransformationMetadata)(classRef, IntersectionClassType); + function applyFields(fields) { + (0, mapped_types_utils_1.clonePluginMetadataFactory)(IntersectionClassType, classRef.prototype); + fields.forEach((propertyKey) => { + const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey); + const decoratorFactory = (0, decorators_1.ApiProperty)(metadata); + decoratorFactory(IntersectionClassType.prototype, propertyKey); + }); + } + applyFields(fields); + metadata_loader_1.MetadataLoader.addRefreshHook(() => { + const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); + applyFields(fields); + }); + }); + const intersectedNames = classRefs.reduce((prev, ref) => prev + ref.name, ''); + Object.defineProperty(IntersectionClassType, 'name', { + value: `Intersection${intersectedNames}` + }); + return IntersectionClassType; +} diff --git a/dist/type-helpers/mapped-types.utils.d.ts b/dist/type-helpers/mapped-types.utils.d.ts new file mode 100644 index 000000000..cf5713cfa --- /dev/null +++ b/dist/type-helpers/mapped-types.utils.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare function clonePluginMetadataFactory(target: Type, parent: Type, transformFn?: (metadata: Record) => Record): void; diff --git a/dist/type-helpers/mapped-types.utils.js b/dist/type-helpers/mapped-types.utils.js new file mode 100644 index 000000000..c28844606 --- /dev/null +++ b/dist/type-helpers/mapped-types.utils.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.clonePluginMetadataFactory = clonePluginMetadataFactory; +const lodash_1 = require("lodash"); +const plugin_constants_1 = require("../plugin/plugin-constants"); +function clonePluginMetadataFactory(target, parent, transformFn = lodash_1.identity) { + let targetMetadata = {}; + do { + if (!parent.constructor) { + return; + } + if (!parent.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { + continue; + } + const parentMetadata = parent.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); + targetMetadata = Object.assign(Object.assign({}, parentMetadata), targetMetadata); + } while ((parent = Reflect.getPrototypeOf(parent)) && + parent !== Object.prototype && + parent); + targetMetadata = transformFn(targetMetadata); + if (target[plugin_constants_1.METADATA_FACTORY_NAME]) { + const originalFactory = target[plugin_constants_1.METADATA_FACTORY_NAME]; + target[plugin_constants_1.METADATA_FACTORY_NAME] = () => { + const originalMetadata = originalFactory(); + return Object.assign(Object.assign({}, originalMetadata), targetMetadata); + }; + } + else { + target[plugin_constants_1.METADATA_FACTORY_NAME] = () => targetMetadata; + } +} diff --git a/dist/type-helpers/omit-type.helper.d.ts b/dist/type-helpers/omit-type.helper.d.ts new file mode 100644 index 000000000..dec224897 --- /dev/null +++ b/dist/type-helpers/omit-type.helper.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare function OmitType(classRef: Type, keys: readonly K[]): Type>; diff --git a/dist/type-helpers/omit-type.helper.js b/dist/type-helpers/omit-type.helper.js new file mode 100644 index 000000000..c570ea7f2 --- /dev/null +++ b/dist/type-helpers/omit-type.helper.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OmitType = OmitType; +const mapped_types_1 = require("@nestjs/mapped-types"); +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const decorators_1 = require("../decorators"); +const metadata_loader_1 = require("../plugin/metadata-loader"); +const model_properties_accessor_1 = require("../services/model-properties-accessor"); +const mapped_types_utils_1 = require("./mapped-types.utils"); +const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); +function OmitType(classRef, keys) { + const fields = modelPropertiesAccessor + .getModelProperties(classRef.prototype) + .filter((item) => !keys.includes(item)); + const isInheritedPredicate = (propertyKey) => !keys.includes(propertyKey); + class OmitTypeClass { + constructor() { + (0, mapped_types_1.inheritPropertyInitializers)(this, classRef, isInheritedPredicate); + } + } + (0, mapped_types_1.inheritValidationMetadata)(classRef, OmitTypeClass, isInheritedPredicate); + (0, mapped_types_1.inheritTransformationMetadata)(classRef, OmitTypeClass, isInheritedPredicate); + function applyFields(fields) { + (0, mapped_types_utils_1.clonePluginMetadataFactory)(OmitTypeClass, classRef.prototype, (metadata) => (0, lodash_1.omit)(metadata, keys)); + fields.forEach((propertyKey) => { + const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey); + const decoratorFactory = (0, decorators_1.ApiProperty)(metadata); + decoratorFactory(OmitTypeClass.prototype, propertyKey); + }); + } + applyFields(fields); + metadata_loader_1.MetadataLoader.addRefreshHook(() => { + const fields = modelPropertiesAccessor + .getModelProperties(classRef.prototype) + .filter((item) => !keys.includes(item)); + applyFields(fields); + }); + return OmitTypeClass; +} diff --git a/dist/type-helpers/partial-type.helper.d.ts b/dist/type-helpers/partial-type.helper.d.ts new file mode 100644 index 000000000..2cdd8a462 --- /dev/null +++ b/dist/type-helpers/partial-type.helper.d.ts @@ -0,0 +1,4 @@ +import { Type } from '@nestjs/common'; +export declare function PartialType(classRef: Type, options?: { + skipNullProperties?: boolean; +}): Type>; diff --git a/dist/type-helpers/partial-type.helper.js b/dist/type-helpers/partial-type.helper.js new file mode 100644 index 000000000..c897cde75 --- /dev/null +++ b/dist/type-helpers/partial-type.helper.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PartialType = PartialType; +const mapped_types_1 = require("@nestjs/mapped-types"); +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const decorators_1 = require("../decorators"); +const metadata_loader_1 = require("../plugin/metadata-loader"); +const plugin_constants_1 = require("../plugin/plugin-constants"); +const model_properties_accessor_1 = require("../services/model-properties-accessor"); +const mapped_types_utils_1 = require("./mapped-types.utils"); +const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); +function PartialType(classRef, options = {}) { + const applyPartialDecoratorFn = options.skipNullProperties === false + ? mapped_types_1.applyValidateIfDefinedDecorator + : mapped_types_1.applyIsOptionalDecorator; + const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); + class PartialTypeClass { + constructor() { + (0, mapped_types_1.inheritPropertyInitializers)(this, classRef); + } + } + const keysWithValidationConstraints = (0, mapped_types_1.inheritValidationMetadata)(classRef, PartialTypeClass); + if (keysWithValidationConstraints) { + keysWithValidationConstraints + .filter((key) => !fields.includes(key)) + .forEach((key) => applyPartialDecoratorFn(PartialTypeClass, key)); + } + (0, mapped_types_1.inheritTransformationMetadata)(classRef, PartialTypeClass); + function applyFields(fields) { + (0, mapped_types_utils_1.clonePluginMetadataFactory)(PartialTypeClass, classRef.prototype, (metadata) => (0, lodash_1.mapValues)(metadata, (item) => (Object.assign(Object.assign({}, item), { required: false })))); + if (PartialTypeClass[plugin_constants_1.METADATA_FACTORY_NAME]) { + const pluginFields = Object.keys(PartialTypeClass[plugin_constants_1.METADATA_FACTORY_NAME]()); + pluginFields.forEach((key) => applyPartialDecoratorFn(PartialTypeClass, key)); + } + fields.forEach((key) => { + const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, key) || {}; + const decoratorFactory = (0, decorators_1.ApiProperty)(Object.assign(Object.assign({}, metadata), { required: false })); + decoratorFactory(PartialTypeClass.prototype, key); + applyPartialDecoratorFn(PartialTypeClass, key); + }); + } + applyFields(fields); + metadata_loader_1.MetadataLoader.addRefreshHook(() => { + const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); + applyFields(fields); + }); + return PartialTypeClass; +} diff --git a/dist/type-helpers/pick-type.helper.d.ts b/dist/type-helpers/pick-type.helper.d.ts new file mode 100644 index 000000000..dbba78e8b --- /dev/null +++ b/dist/type-helpers/pick-type.helper.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare function PickType(classRef: Type, keys: readonly K[]): Type>; diff --git a/dist/type-helpers/pick-type.helper.js b/dist/type-helpers/pick-type.helper.js new file mode 100644 index 000000000..d56188a49 --- /dev/null +++ b/dist/type-helpers/pick-type.helper.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PickType = PickType; +const mapped_types_1 = require("@nestjs/mapped-types"); +const lodash_1 = require("lodash"); +const constants_1 = require("../constants"); +const decorators_1 = require("../decorators"); +const metadata_loader_1 = require("../plugin/metadata-loader"); +const model_properties_accessor_1 = require("../services/model-properties-accessor"); +const mapped_types_utils_1 = require("./mapped-types.utils"); +const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); +function PickType(classRef, keys) { + const fields = modelPropertiesAccessor + .getModelProperties(classRef.prototype) + .filter((item) => keys.includes(item)); + const isInheritedPredicate = (propertyKey) => keys.includes(propertyKey); + class PickTypeClass { + constructor() { + (0, mapped_types_1.inheritPropertyInitializers)(this, classRef, isInheritedPredicate); + } + } + (0, mapped_types_1.inheritValidationMetadata)(classRef, PickTypeClass, isInheritedPredicate); + (0, mapped_types_1.inheritTransformationMetadata)(classRef, PickTypeClass, isInheritedPredicate); + function applyFields(fields) { + (0, mapped_types_utils_1.clonePluginMetadataFactory)(PickTypeClass, classRef.prototype, (metadata) => (0, lodash_1.pick)(metadata, keys)); + fields.forEach((propertyKey) => { + const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey); + const decoratorFactory = (0, decorators_1.ApiProperty)(metadata); + decoratorFactory(PickTypeClass.prototype, propertyKey); + }); + } + applyFields(fields); + metadata_loader_1.MetadataLoader.addRefreshHook(() => { + const fields = modelPropertiesAccessor + .getModelProperties(classRef.prototype) + .filter((item) => keys.includes(item)); + applyFields(fields); + }); + return PickTypeClass; +} diff --git a/dist/types/swagger-enum.type.d.ts b/dist/types/swagger-enum.type.d.ts new file mode 100644 index 000000000..5a12633f4 --- /dev/null +++ b/dist/types/swagger-enum.type.d.ts @@ -0,0 +1 @@ +export type SwaggerEnumType = string[] | number[] | (string | number)[] | Record; diff --git a/dist/types/swagger-enum.type.js b/dist/types/swagger-enum.type.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/types/swagger-enum.type.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/assign-two-levels-deep.d.ts b/dist/utils/assign-two-levels-deep.d.ts new file mode 100644 index 000000000..22756a01c --- /dev/null +++ b/dist/utils/assign-two-levels-deep.d.ts @@ -0,0 +1 @@ +export declare function assignTwoLevelsDeep(_dest: TObject, ...args: T[]): TObject & T; diff --git a/dist/utils/assign-two-levels-deep.js b/dist/utils/assign-two-levels-deep.js new file mode 100644 index 000000000..ffa1b91f3 --- /dev/null +++ b/dist/utils/assign-two-levels-deep.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.assignTwoLevelsDeep = assignTwoLevelsDeep; +function assignTwoLevelsDeep(_dest, ...args) { + const dest = _dest; + for (const arg of args) { + for (const [key, value] of Object.entries(arg !== null && arg !== void 0 ? arg : {})) { + dest[key] = Object.assign(Object.assign({}, dest[key]), value); + } + } + return dest; +} diff --git a/dist/utils/enum.utils.d.ts b/dist/utils/enum.utils.d.ts new file mode 100644 index 000000000..bf1057ac0 --- /dev/null +++ b/dist/utils/enum.utils.d.ts @@ -0,0 +1,9 @@ +import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; +import { SwaggerEnumType } from '../types/swagger-enum.type'; +export declare function getEnumValues(enumType: SwaggerEnumType | (() => SwaggerEnumType)): string[] | number[]; +export declare function getEnumType(values: (string | number)[]): 'string' | 'number'; +export declare function addEnumArraySchema(paramDefinition: Partial>, decoratorOptions: Partial>): void; +export declare function addEnumSchema(paramDefinition: Partial>, decoratorOptions: Partial>): void; +export declare const isEnumArray: >>(obj: Record) => obj is T; +export declare const isEnumDefined: >>(obj: Record) => obj is T; +export declare const isEnumMetadata: (metadata: SchemaObjectMetadata) => any; diff --git a/dist/utils/enum.utils.js b/dist/utils/enum.utils.js new file mode 100644 index 000000000..6c20dc98b --- /dev/null +++ b/dist/utils/enum.utils.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isEnumMetadata = exports.isEnumDefined = exports.isEnumArray = void 0; +exports.getEnumValues = getEnumValues; +exports.getEnumType = getEnumType; +exports.addEnumArraySchema = addEnumArraySchema; +exports.addEnumSchema = addEnumSchema; +const lodash_1 = require("lodash"); +function getEnumValues(enumType) { + if (typeof enumType === 'function') { + return getEnumValues(enumType()); + } + if (Array.isArray(enumType)) { + return enumType; + } + if (typeof enumType !== 'object') { + return []; + } + const numericValues = Object.values(enumType) + .filter((value) => typeof value === 'number') + .map((value) => value.toString()); + return Object.keys(enumType) + .filter((key) => !numericValues.includes(key)) + .map((key) => enumType[key]); +} +function getEnumType(values) { + const hasString = values.filter(lodash_1.isString).length > 0; + return hasString ? 'string' : 'number'; +} +function addEnumArraySchema(paramDefinition, decoratorOptions) { + const paramSchema = paramDefinition.schema || {}; + paramDefinition.schema = paramSchema; + paramSchema.type = 'array'; + delete paramDefinition.isArray; + const enumValues = getEnumValues(decoratorOptions.enum); + paramSchema.items = { + type: getEnumType(enumValues), + enum: enumValues + }; + if (decoratorOptions.enumName) { + paramDefinition.enumName = decoratorOptions.enumName; + } + if (decoratorOptions.enumSchema) { + paramDefinition.enumSchema = decoratorOptions.enumSchema; + } +} +function addEnumSchema(paramDefinition, decoratorOptions) { + const paramSchema = paramDefinition.schema || {}; + const enumValues = getEnumValues(decoratorOptions.enum); + paramDefinition.schema = paramSchema; + paramSchema.enum = enumValues; + paramSchema.type = getEnumType(enumValues); + if (decoratorOptions.enumName) { + paramDefinition.enumName = decoratorOptions.enumName; + } + if (decoratorOptions.enumSchema) { + paramDefinition.enumSchema = decoratorOptions.enumSchema; + } +} +const isEnumArray = (obj) => obj.isArray && obj.enum; +exports.isEnumArray = isEnumArray; +const isEnumDefined = (obj) => obj.enum; +exports.isEnumDefined = isEnumDefined; +const isEnumMetadata = (metadata) => { var _a; return metadata.enum || (metadata.isArray && ((_a = metadata.items) === null || _a === void 0 ? void 0 : _a['enum'])); }; +exports.isEnumMetadata = isEnumMetadata; diff --git a/dist/utils/extend-metadata.util.d.ts b/dist/utils/extend-metadata.util.d.ts new file mode 100644 index 000000000..e88c198e5 --- /dev/null +++ b/dist/utils/extend-metadata.util.d.ts @@ -0,0 +1,2 @@ +import 'reflect-metadata'; +export declare function extendMetadata[] = any[]>(metadata: T, metakey: string, target: object): any; diff --git a/dist/utils/extend-metadata.util.js b/dist/utils/extend-metadata.util.js new file mode 100644 index 000000000..24386ffc2 --- /dev/null +++ b/dist/utils/extend-metadata.util.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.extendMetadata = extendMetadata; +require("reflect-metadata"); +function extendMetadata(metadata, metakey, target) { + const existingMetadata = Reflect.getMetadata(metakey, target); + if (!existingMetadata) { + return metadata; + } + return existingMetadata.concat(metadata); +} diff --git a/dist/utils/get-global-prefix.d.ts b/dist/utils/get-global-prefix.d.ts new file mode 100644 index 000000000..77cdd5367 --- /dev/null +++ b/dist/utils/get-global-prefix.d.ts @@ -0,0 +1,2 @@ +import { INestApplication } from '@nestjs/common'; +export declare function getGlobalPrefix(app: INestApplication): string; diff --git a/dist/utils/get-global-prefix.js b/dist/utils/get-global-prefix.js new file mode 100644 index 000000000..b06b2e211 --- /dev/null +++ b/dist/utils/get-global-prefix.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getGlobalPrefix = getGlobalPrefix; +function getGlobalPrefix(app) { + const internalConfigRef = app.config; + return (internalConfigRef && internalConfigRef.getGlobalPrefix()) || ''; +} diff --git a/dist/utils/get-schema-path.util.d.ts b/dist/utils/get-schema-path.util.d.ts new file mode 100644 index 000000000..a755c75a4 --- /dev/null +++ b/dist/utils/get-schema-path.util.d.ts @@ -0,0 +1,4 @@ +export declare function getSchemaPath(model: string | Function): string; +export declare function refs(...models: Function[]): { + $ref: string; +}[]; diff --git a/dist/utils/get-schema-path.util.js b/dist/utils/get-schema-path.util.js new file mode 100644 index 000000000..af99666f7 --- /dev/null +++ b/dist/utils/get-schema-path.util.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getSchemaPath = getSchemaPath; +exports.refs = refs; +const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); +const constants_1 = require("../constants"); +function getSchemaPath(model) { + const modelName = (0, shared_utils_1.isString)(model) ? model : getSchemaNameByClass(model); + return `#/components/schemas/${modelName}`; +} +function getSchemaNameByClass(target) { + var _a; + if (!target || typeof target !== 'function') { + return ''; + } + const customSchema = Reflect.getOwnMetadata(constants_1.DECORATORS.API_SCHEMA, target); + if (!customSchema || customSchema.length === 0) { + return target.name; + } + return (_a = customSchema[customSchema.length - 1].name) !== null && _a !== void 0 ? _a : target.name; +} +function refs(...models) { + return models.map((item) => ({ + $ref: getSchemaPath(item.name) + })); +} diff --git a/dist/utils/index.d.ts b/dist/utils/index.d.ts new file mode 100644 index 000000000..eda441c67 --- /dev/null +++ b/dist/utils/index.d.ts @@ -0,0 +1 @@ +export * from './get-schema-path.util'; diff --git a/dist/utils/index.js b/dist/utils/index.js new file mode 100644 index 000000000..a7ea8c90d --- /dev/null +++ b/dist/utils/index.js @@ -0,0 +1,17 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./get-schema-path.util"), exports); diff --git a/dist/utils/is-body-parameter.util.d.ts b/dist/utils/is-body-parameter.util.d.ts new file mode 100644 index 000000000..095a799ee --- /dev/null +++ b/dist/utils/is-body-parameter.util.d.ts @@ -0,0 +1,2 @@ +import { ParamWithTypeMetadata } from '../services/parameter-metadata-accessor'; +export declare function isBodyParameter(param: ParamWithTypeMetadata): boolean; diff --git a/dist/utils/is-body-parameter.util.js b/dist/utils/is-body-parameter.util.js new file mode 100644 index 000000000..d28e4b8d8 --- /dev/null +++ b/dist/utils/is-body-parameter.util.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isBodyParameter = isBodyParameter; +function isBodyParameter(param) { + return param.in === 'body'; +} diff --git a/dist/utils/is-built-in-type.util.d.ts b/dist/utils/is-built-in-type.util.d.ts new file mode 100644 index 000000000..bf565f611 --- /dev/null +++ b/dist/utils/is-built-in-type.util.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare function isBuiltInType(type: Type | Function | string): boolean; diff --git a/dist/utils/is-built-in-type.util.js b/dist/utils/is-built-in-type.util.js new file mode 100644 index 000000000..6df4b0233 --- /dev/null +++ b/dist/utils/is-built-in-type.util.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isBuiltInType = isBuiltInType; +const lodash_1 = require("lodash"); +const constants_1 = require("../services/constants"); +function isBuiltInType(type) { + return (0, lodash_1.isFunction)(type) && constants_1.BUILT_IN_TYPES.some((item) => item === type); +} diff --git a/dist/utils/is-date-ctor.util.d.ts b/dist/utils/is-date-ctor.util.d.ts new file mode 100644 index 000000000..3c37683d3 --- /dev/null +++ b/dist/utils/is-date-ctor.util.d.ts @@ -0,0 +1,2 @@ +import { Type } from '@nestjs/common'; +export declare function isDateCtor(type: Type | Function | string): boolean; diff --git a/dist/utils/is-date-ctor.util.js b/dist/utils/is-date-ctor.util.js new file mode 100644 index 000000000..b01b52df0 --- /dev/null +++ b/dist/utils/is-date-ctor.util.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isDateCtor = isDateCtor; +function isDateCtor(type) { + return type === Date; +} diff --git a/dist/utils/merge-and-uniq.util.d.ts b/dist/utils/merge-and-uniq.util.d.ts new file mode 100644 index 000000000..401377124 --- /dev/null +++ b/dist/utils/merge-and-uniq.util.d.ts @@ -0,0 +1 @@ +export declare function mergeAndUniq(a?: unknown, b?: unknown): T; diff --git a/dist/utils/merge-and-uniq.util.js b/dist/utils/merge-and-uniq.util.js new file mode 100644 index 000000000..2af6d0665 --- /dev/null +++ b/dist/utils/merge-and-uniq.util.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mergeAndUniq = mergeAndUniq; +const lodash_1 = require("lodash"); +function mergeAndUniq(a = [], b = []) { + return (0, lodash_1.uniq)((0, lodash_1.merge)(a, b)); +} diff --git a/dist/utils/normalize-rel-path.d.ts b/dist/utils/normalize-rel-path.d.ts new file mode 100644 index 000000000..227895859 --- /dev/null +++ b/dist/utils/normalize-rel-path.d.ts @@ -0,0 +1 @@ +export declare function normalizeRelPath(input: string): string; diff --git a/dist/utils/normalize-rel-path.js b/dist/utils/normalize-rel-path.js new file mode 100644 index 000000000..c7f5f6083 --- /dev/null +++ b/dist/utils/normalize-rel-path.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.normalizeRelPath = normalizeRelPath; +function normalizeRelPath(input) { + const output = input.replace(/\/\/+/g, '/'); + return output; +} diff --git a/dist/utils/remove-undefined-keys.d.ts b/dist/utils/remove-undefined-keys.d.ts new file mode 100644 index 000000000..140ad84f4 --- /dev/null +++ b/dist/utils/remove-undefined-keys.d.ts @@ -0,0 +1,5 @@ +export declare function removeUndefinedKeys(obj: { + [x: string]: any; +}): { + [x: string]: any; +}; diff --git a/dist/utils/remove-undefined-keys.js b/dist/utils/remove-undefined-keys.js new file mode 100644 index 000000000..c642ab634 --- /dev/null +++ b/dist/utils/remove-undefined-keys.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.removeUndefinedKeys = removeUndefinedKeys; +function removeUndefinedKeys(obj) { + Object.entries(obj).forEach(([key, value]) => { + if (value === undefined) { + delete obj[key]; + } + }); + return obj; +} diff --git a/dist/utils/resolve-path.util.d.ts b/dist/utils/resolve-path.util.d.ts new file mode 100644 index 000000000..c771101b7 --- /dev/null +++ b/dist/utils/resolve-path.util.d.ts @@ -0,0 +1 @@ +export declare function resolvePath(path: string): string; diff --git a/dist/utils/resolve-path.util.js b/dist/utils/resolve-path.util.js new file mode 100644 index 000000000..91b547b35 --- /dev/null +++ b/dist/utils/resolve-path.util.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.resolvePath = resolvePath; +const pathLib = require("path"); +function resolvePath(path) { + return path ? pathLib.resolve(path) : path; +} diff --git a/dist/utils/reverse-object-keys.util.d.ts b/dist/utils/reverse-object-keys.util.d.ts new file mode 100644 index 000000000..90336d5ea --- /dev/null +++ b/dist/utils/reverse-object-keys.util.d.ts @@ -0,0 +1 @@ +export declare function reverseObjectKeys(originalObject: Record): Record; diff --git a/dist/utils/reverse-object-keys.util.js b/dist/utils/reverse-object-keys.util.js new file mode 100644 index 000000000..80c02c146 --- /dev/null +++ b/dist/utils/reverse-object-keys.util.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.reverseObjectKeys = reverseObjectKeys; +function reverseObjectKeys(originalObject) { + const reversedObject = {}; + const keys = Object.keys(originalObject).reverse(); + for (const key of keys) { + reversedObject[key] = originalObject[key]; + } + return reversedObject; +} diff --git a/dist/utils/sort-object-lexicographically.d.ts b/dist/utils/sort-object-lexicographically.d.ts new file mode 100644 index 000000000..7c67a471b --- /dev/null +++ b/dist/utils/sort-object-lexicographically.d.ts @@ -0,0 +1,5 @@ +export declare function sortObjectLexicographically(obj: { + [key: string]: any; +}): { + [key: string]: any; +}; diff --git a/dist/utils/sort-object-lexicographically.js b/dist/utils/sort-object-lexicographically.js new file mode 100644 index 000000000..08c2ce461 --- /dev/null +++ b/dist/utils/sort-object-lexicographically.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.sortObjectLexicographically = sortObjectLexicographically; +function sortObjectLexicographically(obj) { + const sortedKeys = Object.keys(obj).sort(); + const sortedObj = {}; + for (const key of sortedKeys) { + sortedObj[key] = obj[key]; + } + return sortedObj; +} diff --git a/dist/utils/strip-last-slash.util.d.ts b/dist/utils/strip-last-slash.util.d.ts new file mode 100644 index 000000000..d40d325d6 --- /dev/null +++ b/dist/utils/strip-last-slash.util.d.ts @@ -0,0 +1 @@ +export declare function stripLastSlash(path: string): string; diff --git a/dist/utils/strip-last-slash.util.js b/dist/utils/strip-last-slash.util.js new file mode 100644 index 000000000..9082452e3 --- /dev/null +++ b/dist/utils/strip-last-slash.util.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.stripLastSlash = stripLastSlash; +function stripLastSlash(path) { + return path && path[path.length - 1] === '/' + ? path.slice(0, path.length - 1) + : path; +} diff --git a/dist/utils/validate-global-prefix.util.d.ts b/dist/utils/validate-global-prefix.util.d.ts new file mode 100644 index 000000000..a8ad70d68 --- /dev/null +++ b/dist/utils/validate-global-prefix.util.d.ts @@ -0,0 +1 @@ +export declare const validateGlobalPrefix: (globalPrefix: string) => boolean; diff --git a/dist/utils/validate-global-prefix.util.js b/dist/utils/validate-global-prefix.util.js new file mode 100644 index 000000000..3b4987632 --- /dev/null +++ b/dist/utils/validate-global-prefix.util.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validateGlobalPrefix = void 0; +const validateGlobalPrefix = (globalPrefix) => globalPrefix && !globalPrefix.match(/^(\/?)$/); +exports.validateGlobalPrefix = validateGlobalPrefix; diff --git a/dist/utils/validate-path.util.d.ts b/dist/utils/validate-path.util.d.ts new file mode 100644 index 000000000..475ba5bfc --- /dev/null +++ b/dist/utils/validate-path.util.d.ts @@ -0,0 +1 @@ +export declare const validatePath: (inputPath: string) => string; diff --git a/dist/utils/validate-path.util.js b/dist/utils/validate-path.util.js new file mode 100644 index 000000000..5198b0f5a --- /dev/null +++ b/dist/utils/validate-path.util.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validatePath = void 0; +const validatePath = (inputPath) => inputPath.charAt(0) !== '/' ? '/' + inputPath : inputPath; +exports.validatePath = validatePath; From d7df30d85476a69e8ed13cb761d4e28cdf9ecf30 Mon Sep 17 00:00:00 2001 From: Tom Smeets Date: Fri, 24 Oct 2025 19:24:00 +0200 Subject: [PATCH 3/6] change version name --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6daf6e555..ec3a7032c 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "@nestjs/swagger", + "name": "@TomSpott/nestjs-swagger-fork", "version": "11.2.1", "description": "Nest - modern, fast, powerful node.js web framework (@swagger)", "author": "Kamil Mysliwiec", "license": "MIT", - "repository": "https://github.com/nestjs/swagger", + "repository": "https://github.com/TomSpott/swagger-fork", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { From 989ce60b7c6bf3faa85d554a6db4a902e2c6ad8c Mon Sep 17 00:00:00 2001 From: Tom Smeets Date: Mon, 27 Oct 2025 12:16:27 +0100 Subject: [PATCH 4/6] remove dist from remote --- .gitignore | 8 +- dist/constants.d.ts | 22 - dist/constants.js | 25 - dist/decorators/api-basic.decorator.d.ts | 1 - dist/decorators/api-basic.decorator.js | 7 - dist/decorators/api-bearer.decorator.d.ts | 1 - dist/decorators/api-bearer.decorator.js | 7 - dist/decorators/api-body.decorator.d.ts | 16 - dist/decorators/api-body.decorator.js | 22 - dist/decorators/api-callbacks.decorator.d.ts | 2 - dist/decorators/api-callbacks.decorator.js | 8 - dist/decorators/api-consumes.decorator.d.ts | 1 - dist/decorators/api-consumes.decorator.js | 8 - dist/decorators/api-cookie.decorator.d.ts | 1 - dist/decorators/api-cookie.decorator.js | 7 - .../api-default-getter.decorator.d.ts | 2 - .../api-default-getter.decorator.js | 12 - .../api-exclude-controller.decorator.d.ts | 1 - .../api-exclude-controller.decorator.js | 8 - .../api-exclude-endpoint.decorator.d.ts | 1 - .../api-exclude-endpoint.decorator.js | 10 - dist/decorators/api-extension.decorator.d.ts | 1 - dist/decorators/api-extension.decorator.js | 37 -- .../api-extra-models.decorator.d.ts | 1 - dist/decorators/api-extra-models.decorator.js | 17 - dist/decorators/api-header.decorator.d.ts | 7 - dist/decorators/api-header.decorator.js | 37 -- .../api-hide-property.decorator.d.ts | 1 - .../decorators/api-hide-property.decorator.js | 6 - .../api-include-endpoint.decorator.d.ts | 1 - .../api-include-endpoint.decorator.js | 10 - dist/decorators/api-link.decorator.d.ts | 7 - dist/decorators/api-link.decorator.js | 21 - dist/decorators/api-oauth2.decorator.d.ts | 1 - dist/decorators/api-oauth2.decorator.js | 7 - dist/decorators/api-operation.decorator.d.ts | 5 - dist/decorators/api-operation.decorator.js | 12 - dist/decorators/api-param.decorator.d.ts | 22 - dist/decorators/api-param.decorator.js | 17 - dist/decorators/api-produces.decorator.d.ts | 1 - dist/decorators/api-produces.decorator.js | 8 - dist/decorators/api-property.decorator.d.ts | 15 - dist/decorators/api-property.decorator.js | 48 -- dist/decorators/api-query.decorator.d.ts | 24 - dist/decorators/api-query.decorator.js | 25 - dist/decorators/api-response.decorator.d.ts | 39 -- dist/decorators/api-response.decorator.js | 55 -- dist/decorators/api-schema.decorator.d.ts | 6 - dist/decorators/api-schema.decorator.js | 8 - dist/decorators/api-security.decorator.d.ts | 2 - dist/decorators/api-security.decorator.js | 25 - dist/decorators/api-use-tags.decorator.d.ts | 1 - dist/decorators/api-use-tags.decorator.js | 8 - dist/decorators/helpers.d.ts | 8 - dist/decorators/helpers.js | 123 ----- dist/decorators/index.d.ts | 25 - dist/decorators/index.js | 45 -- dist/document-builder.d.ts | 29 - dist/document-builder.js | 141 ----- dist/explorers/api-callbacks.explorer.d.ts | 2 - dist/explorers/api-callbacks.explorer.js | 36 -- dist/explorers/api-consumes.explorer.d.ts | 5 - dist/explorers/api-consumes.explorer.js | 11 - .../api-exclude-controller.explorer.d.ts | 2 - .../api-exclude-controller.explorer.js | 10 - .../api-exclude-endpoint.explorer.d.ts | 2 - .../api-exclude-endpoint.explorer.js | 6 - dist/explorers/api-extra-models.explorer.d.ts | 3 - dist/explorers/api-extra-models.explorer.js | 11 - dist/explorers/api-headers.explorer.d.ts | 7 - dist/explorers/api-headers.explorer.js | 9 - .../api-include-endpoint.explorer.d.ts | 2 - .../api-include-endpoint.explorer.js | 6 - dist/explorers/api-operation.explorer.d.ts | 2 - dist/explorers/api-operation.explorer.js | 43 -- dist/explorers/api-parameters.explorer.d.ts | 71 --- dist/explorers/api-parameters.explorer.js | 47 -- dist/explorers/api-produces.explorer.d.ts | 5 - dist/explorers/api-produces.explorer.js | 11 - dist/explorers/api-response.explorer.d.ts | 13 - dist/explorers/api-response.explorer.js | 103 ---- dist/explorers/api-security.explorer.d.ts | 5 - dist/explorers/api-security.explorer.js | 13 - dist/explorers/api-use-tags.explorer.d.ts | 5 - dist/explorers/api-use-tags.explorer.js | 18 - dist/extra/swagger-shim.d.ts | 97 ---- dist/extra/swagger-shim.js | 355 ------------ dist/fixtures/document.base.d.ts | 2 - dist/fixtures/document.base.js | 16 - dist/index.d.ts | 7 - dist/index.js | 23 - .../interfaces/callback-object.interface.d.ts | 12 - dist/interfaces/callback-object.interface.js | 2 - .../denormalized-doc-resolvers.interface.d.ts | 7 - .../denormalized-doc-resolvers.interface.js | 2 - .../denormalized-doc.interface.d.ts | 8 - dist/interfaces/denormalized-doc.interface.js | 2 - .../enum-schema-attributes.interface.d.ts | 2 - .../enum-schema-attributes.interface.js | 2 - dist/interfaces/index.d.ts | 3 - dist/interfaces/index.js | 18 - dist/interfaces/module-route.interface.d.ts | 2 - dist/interfaces/module-route.interface.js | 2 - dist/interfaces/open-api-spec.interface.d.ts | 239 -------- dist/interfaces/open-api-spec.interface.js | 2 - .../schema-object-metadata.interface.d.ts | 30 - .../schema-object-metadata.interface.js | 2 - .../swagger-custom-options.interface.d.ts | 24 - .../swagger-custom-options.interface.js | 2 - .../swagger-document-options.interface.d.ts | 11 - .../swagger-document-options.interface.js | 2 - .../swagger-ui-init-options.interface.d.ts | 7 - .../swagger-ui-init-options.interface.js | 2 - .../swagger-ui-options.interface.d.ts | 15 - .../swagger-ui-options.interface.js | 2 - dist/plugin/compiler-plugin.d.ts | 2 - dist/plugin/compiler-plugin.js | 30 - dist/plugin/index.d.ts | 2 - dist/plugin/index.js | 18 - dist/plugin/merge-options.d.ts | 17 - dist/plugin/merge-options.js | 37 -- dist/plugin/metadata-loader.d.ts | 7 - dist/plugin/metadata-loader.js | 51 -- dist/plugin/plugin-constants.d.ts | 3 - dist/plugin/plugin-constants.js | 6 - dist/plugin/plugin-debug-logger.d.ts | 5 - dist/plugin/plugin-debug-logger.js | 7 - dist/plugin/utils/ast-utils.d.ts | 30 - dist/plugin/utils/ast-utils.js | 273 ---------- .../utils/is-filename-matched.util.d.ts | 1 - dist/plugin/utils/is-filename-matched.util.js | 5 - dist/plugin/utils/plugin-utils.d.ts | 30 - dist/plugin/utils/plugin-utils.js | 307 ----------- .../type-reference-to-identifier.util.d.ts | 7 - .../type-reference-to-identifier.util.js | 52 -- dist/plugin/visitors/abstract.visitor.d.ts | 4 - dist/plugin/visitors/abstract.visitor.js | 30 - .../visitors/controller-class.visitor.d.ts | 20 - .../visitors/controller-class.visitor.js | 265 --------- dist/plugin/visitors/model-class.visitor.d.ts | 35 -- dist/plugin/visitors/model-class.visitor.js | 514 ------------------ dist/plugin/visitors/readonly.visitor.d.ts | 21 - dist/plugin/visitors/readonly.visitor.js | 40 -- dist/services/constants.d.ts | 1 - dist/services/constants.js | 4 - dist/services/decorators-properties.d.ts | 21 - dist/services/decorators-properties.js | 149 ----- dist/services/mimetype-content-wrapper.d.ts | 4 - dist/services/mimetype-content-wrapper.js | 11 - dist/services/model-properties-accessor.d.ts | 6 - dist/services/model-properties-accessor.js | 37 -- .../services/parameter-metadata-accessor.d.ts | 22 - dist/services/parameter-metadata-accessor.js | 41 -- dist/services/parameters-metadata-mapper.d.ts | 9 - dist/services/parameters-metadata-mapper.js | 38 -- dist/services/response-object-factory.d.ts | 22 - dist/services/response-object-factory.js | 94 ---- dist/services/response-object-mapper.d.ts | 39 -- dist/services/response-object-mapper.js | 38 -- dist/services/schema-object-factory.d.ts | 156 ------ dist/services/schema-object-factory.js | 471 ---------------- dist/services/swagger-types-mapper.d.ts | 260 --------- dist/services/swagger-types-mapper.js | 107 ---- dist/storages/global-parameters.storage.d.ts | 8 - dist/storages/global-parameters.storage.js | 22 - dist/storages/global-responses.storage.d.ts | 10 - dist/storages/global-responses.storage.js | 21 - dist/swagger-explorer.d.ts | 42 -- dist/swagger-explorer.js | 319 ----------- dist/swagger-module.d.ts | 26 - dist/swagger-module.js | 196 ------- dist/swagger-scanner.d.ts | 25 - dist/swagger-scanner.js | 92 ---- dist/swagger-transformer.d.ts | 4 - dist/swagger-transformer.js | 22 - dist/swagger-ui/constants.d.ts | 3 - dist/swagger-ui/constants.js | 132 ----- dist/swagger-ui/helpers.d.ts | 2 - dist/swagger-ui/helpers.js | 16 - dist/swagger-ui/index.d.ts | 1 - dist/swagger-ui/index.js | 17 - dist/swagger-ui/swagger-ui.d.ts | 4 - dist/swagger-ui/swagger-ui.js | 62 --- dist/type-helpers/index.d.ts | 4 - dist/type-helpers/index.js | 20 - .../intersection-type.helper.d.ts | 8 - dist/type-helpers/intersection-type.helper.js | 42 -- dist/type-helpers/mapped-types.utils.d.ts | 2 - dist/type-helpers/mapped-types.utils.js | 31 -- dist/type-helpers/omit-type.helper.d.ts | 2 - dist/type-helpers/omit-type.helper.js | 40 -- dist/type-helpers/partial-type.helper.d.ts | 4 - dist/type-helpers/partial-type.helper.js | 49 -- dist/type-helpers/pick-type.helper.d.ts | 2 - dist/type-helpers/pick-type.helper.js | 40 -- dist/types/swagger-enum.type.d.ts | 1 - dist/types/swagger-enum.type.js | 2 - dist/utils/assign-two-levels-deep.d.ts | 1 - dist/utils/assign-two-levels-deep.js | 12 - dist/utils/enum.utils.d.ts | 9 - dist/utils/enum.utils.js | 65 --- dist/utils/extend-metadata.util.d.ts | 2 - dist/utils/extend-metadata.util.js | 11 - dist/utils/get-global-prefix.d.ts | 2 - dist/utils/get-global-prefix.js | 7 - dist/utils/get-schema-path.util.d.ts | 4 - dist/utils/get-schema-path.util.js | 26 - dist/utils/index.d.ts | 1 - dist/utils/index.js | 17 - dist/utils/is-body-parameter.util.d.ts | 2 - dist/utils/is-body-parameter.util.js | 6 - dist/utils/is-built-in-type.util.d.ts | 2 - dist/utils/is-built-in-type.util.js | 8 - dist/utils/is-date-ctor.util.d.ts | 2 - dist/utils/is-date-ctor.util.js | 6 - dist/utils/merge-and-uniq.util.d.ts | 1 - dist/utils/merge-and-uniq.util.js | 7 - dist/utils/normalize-rel-path.d.ts | 1 - dist/utils/normalize-rel-path.js | 7 - dist/utils/remove-undefined-keys.d.ts | 5 - dist/utils/remove-undefined-keys.js | 11 - dist/utils/resolve-path.util.d.ts | 1 - dist/utils/resolve-path.util.js | 7 - dist/utils/reverse-object-keys.util.d.ts | 1 - dist/utils/reverse-object-keys.util.js | 11 - dist/utils/sort-object-lexicographically.d.ts | 5 - dist/utils/sort-object-lexicographically.js | 11 - dist/utils/strip-last-slash.util.d.ts | 1 - dist/utils/strip-last-slash.util.js | 8 - dist/utils/validate-global-prefix.util.d.ts | 1 - dist/utils/validate-global-prefix.util.js | 5 - dist/utils/validate-path.util.d.ts | 1 - dist/utils/validate-path.util.js | 5 - 233 files changed, 4 insertions(+), 7252 deletions(-) delete mode 100644 dist/constants.d.ts delete mode 100644 dist/constants.js delete mode 100644 dist/decorators/api-basic.decorator.d.ts delete mode 100644 dist/decorators/api-basic.decorator.js delete mode 100644 dist/decorators/api-bearer.decorator.d.ts delete mode 100644 dist/decorators/api-bearer.decorator.js delete mode 100644 dist/decorators/api-body.decorator.d.ts delete mode 100644 dist/decorators/api-body.decorator.js delete mode 100644 dist/decorators/api-callbacks.decorator.d.ts delete mode 100644 dist/decorators/api-callbacks.decorator.js delete mode 100644 dist/decorators/api-consumes.decorator.d.ts delete mode 100644 dist/decorators/api-consumes.decorator.js delete mode 100644 dist/decorators/api-cookie.decorator.d.ts delete mode 100644 dist/decorators/api-cookie.decorator.js delete mode 100644 dist/decorators/api-default-getter.decorator.d.ts delete mode 100644 dist/decorators/api-default-getter.decorator.js delete mode 100644 dist/decorators/api-exclude-controller.decorator.d.ts delete mode 100644 dist/decorators/api-exclude-controller.decorator.js delete mode 100644 dist/decorators/api-exclude-endpoint.decorator.d.ts delete mode 100644 dist/decorators/api-exclude-endpoint.decorator.js delete mode 100644 dist/decorators/api-extension.decorator.d.ts delete mode 100644 dist/decorators/api-extension.decorator.js delete mode 100644 dist/decorators/api-extra-models.decorator.d.ts delete mode 100644 dist/decorators/api-extra-models.decorator.js delete mode 100644 dist/decorators/api-header.decorator.d.ts delete mode 100644 dist/decorators/api-header.decorator.js delete mode 100644 dist/decorators/api-hide-property.decorator.d.ts delete mode 100644 dist/decorators/api-hide-property.decorator.js delete mode 100644 dist/decorators/api-include-endpoint.decorator.d.ts delete mode 100644 dist/decorators/api-include-endpoint.decorator.js delete mode 100644 dist/decorators/api-link.decorator.d.ts delete mode 100644 dist/decorators/api-link.decorator.js delete mode 100644 dist/decorators/api-oauth2.decorator.d.ts delete mode 100644 dist/decorators/api-oauth2.decorator.js delete mode 100644 dist/decorators/api-operation.decorator.d.ts delete mode 100644 dist/decorators/api-operation.decorator.js delete mode 100644 dist/decorators/api-param.decorator.d.ts delete mode 100644 dist/decorators/api-param.decorator.js delete mode 100644 dist/decorators/api-produces.decorator.d.ts delete mode 100644 dist/decorators/api-produces.decorator.js delete mode 100644 dist/decorators/api-property.decorator.d.ts delete mode 100644 dist/decorators/api-property.decorator.js delete mode 100644 dist/decorators/api-query.decorator.d.ts delete mode 100644 dist/decorators/api-query.decorator.js delete mode 100644 dist/decorators/api-response.decorator.d.ts delete mode 100644 dist/decorators/api-response.decorator.js delete mode 100644 dist/decorators/api-schema.decorator.d.ts delete mode 100644 dist/decorators/api-schema.decorator.js delete mode 100644 dist/decorators/api-security.decorator.d.ts delete mode 100644 dist/decorators/api-security.decorator.js delete mode 100644 dist/decorators/api-use-tags.decorator.d.ts delete mode 100644 dist/decorators/api-use-tags.decorator.js delete mode 100644 dist/decorators/helpers.d.ts delete mode 100644 dist/decorators/helpers.js delete mode 100644 dist/decorators/index.d.ts delete mode 100644 dist/decorators/index.js delete mode 100644 dist/document-builder.d.ts delete mode 100644 dist/document-builder.js delete mode 100644 dist/explorers/api-callbacks.explorer.d.ts delete mode 100644 dist/explorers/api-callbacks.explorer.js delete mode 100644 dist/explorers/api-consumes.explorer.d.ts delete mode 100644 dist/explorers/api-consumes.explorer.js delete mode 100644 dist/explorers/api-exclude-controller.explorer.d.ts delete mode 100644 dist/explorers/api-exclude-controller.explorer.js delete mode 100644 dist/explorers/api-exclude-endpoint.explorer.d.ts delete mode 100644 dist/explorers/api-exclude-endpoint.explorer.js delete mode 100644 dist/explorers/api-extra-models.explorer.d.ts delete mode 100644 dist/explorers/api-extra-models.explorer.js delete mode 100644 dist/explorers/api-headers.explorer.d.ts delete mode 100644 dist/explorers/api-headers.explorer.js delete mode 100644 dist/explorers/api-include-endpoint.explorer.d.ts delete mode 100644 dist/explorers/api-include-endpoint.explorer.js delete mode 100644 dist/explorers/api-operation.explorer.d.ts delete mode 100644 dist/explorers/api-operation.explorer.js delete mode 100644 dist/explorers/api-parameters.explorer.d.ts delete mode 100644 dist/explorers/api-parameters.explorer.js delete mode 100644 dist/explorers/api-produces.explorer.d.ts delete mode 100644 dist/explorers/api-produces.explorer.js delete mode 100644 dist/explorers/api-response.explorer.d.ts delete mode 100644 dist/explorers/api-response.explorer.js delete mode 100644 dist/explorers/api-security.explorer.d.ts delete mode 100644 dist/explorers/api-security.explorer.js delete mode 100644 dist/explorers/api-use-tags.explorer.d.ts delete mode 100644 dist/explorers/api-use-tags.explorer.js delete mode 100644 dist/extra/swagger-shim.d.ts delete mode 100644 dist/extra/swagger-shim.js delete mode 100644 dist/fixtures/document.base.d.ts delete mode 100644 dist/fixtures/document.base.js delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/interfaces/callback-object.interface.d.ts delete mode 100644 dist/interfaces/callback-object.interface.js delete mode 100644 dist/interfaces/denormalized-doc-resolvers.interface.d.ts delete mode 100644 dist/interfaces/denormalized-doc-resolvers.interface.js delete mode 100644 dist/interfaces/denormalized-doc.interface.d.ts delete mode 100644 dist/interfaces/denormalized-doc.interface.js delete mode 100644 dist/interfaces/enum-schema-attributes.interface.d.ts delete mode 100644 dist/interfaces/enum-schema-attributes.interface.js delete mode 100644 dist/interfaces/index.d.ts delete mode 100644 dist/interfaces/index.js delete mode 100644 dist/interfaces/module-route.interface.d.ts delete mode 100644 dist/interfaces/module-route.interface.js delete mode 100644 dist/interfaces/open-api-spec.interface.d.ts delete mode 100644 dist/interfaces/open-api-spec.interface.js delete mode 100644 dist/interfaces/schema-object-metadata.interface.d.ts delete mode 100644 dist/interfaces/schema-object-metadata.interface.js delete mode 100644 dist/interfaces/swagger-custom-options.interface.d.ts delete mode 100644 dist/interfaces/swagger-custom-options.interface.js delete mode 100644 dist/interfaces/swagger-document-options.interface.d.ts delete mode 100644 dist/interfaces/swagger-document-options.interface.js delete mode 100644 dist/interfaces/swagger-ui-init-options.interface.d.ts delete mode 100644 dist/interfaces/swagger-ui-init-options.interface.js delete mode 100644 dist/interfaces/swagger-ui-options.interface.d.ts delete mode 100644 dist/interfaces/swagger-ui-options.interface.js delete mode 100644 dist/plugin/compiler-plugin.d.ts delete mode 100644 dist/plugin/compiler-plugin.js delete mode 100644 dist/plugin/index.d.ts delete mode 100644 dist/plugin/index.js delete mode 100644 dist/plugin/merge-options.d.ts delete mode 100644 dist/plugin/merge-options.js delete mode 100644 dist/plugin/metadata-loader.d.ts delete mode 100644 dist/plugin/metadata-loader.js delete mode 100644 dist/plugin/plugin-constants.d.ts delete mode 100644 dist/plugin/plugin-constants.js delete mode 100644 dist/plugin/plugin-debug-logger.d.ts delete mode 100644 dist/plugin/plugin-debug-logger.js delete mode 100644 dist/plugin/utils/ast-utils.d.ts delete mode 100644 dist/plugin/utils/ast-utils.js delete mode 100644 dist/plugin/utils/is-filename-matched.util.d.ts delete mode 100644 dist/plugin/utils/is-filename-matched.util.js delete mode 100644 dist/plugin/utils/plugin-utils.d.ts delete mode 100644 dist/plugin/utils/plugin-utils.js delete mode 100644 dist/plugin/utils/type-reference-to-identifier.util.d.ts delete mode 100644 dist/plugin/utils/type-reference-to-identifier.util.js delete mode 100644 dist/plugin/visitors/abstract.visitor.d.ts delete mode 100644 dist/plugin/visitors/abstract.visitor.js delete mode 100644 dist/plugin/visitors/controller-class.visitor.d.ts delete mode 100644 dist/plugin/visitors/controller-class.visitor.js delete mode 100644 dist/plugin/visitors/model-class.visitor.d.ts delete mode 100644 dist/plugin/visitors/model-class.visitor.js delete mode 100644 dist/plugin/visitors/readonly.visitor.d.ts delete mode 100644 dist/plugin/visitors/readonly.visitor.js delete mode 100644 dist/services/constants.d.ts delete mode 100644 dist/services/constants.js delete mode 100644 dist/services/decorators-properties.d.ts delete mode 100644 dist/services/decorators-properties.js delete mode 100644 dist/services/mimetype-content-wrapper.d.ts delete mode 100644 dist/services/mimetype-content-wrapper.js delete mode 100644 dist/services/model-properties-accessor.d.ts delete mode 100644 dist/services/model-properties-accessor.js delete mode 100644 dist/services/parameter-metadata-accessor.d.ts delete mode 100644 dist/services/parameter-metadata-accessor.js delete mode 100644 dist/services/parameters-metadata-mapper.d.ts delete mode 100644 dist/services/parameters-metadata-mapper.js delete mode 100644 dist/services/response-object-factory.d.ts delete mode 100644 dist/services/response-object-factory.js delete mode 100644 dist/services/response-object-mapper.d.ts delete mode 100644 dist/services/response-object-mapper.js delete mode 100644 dist/services/schema-object-factory.d.ts delete mode 100644 dist/services/schema-object-factory.js delete mode 100644 dist/services/swagger-types-mapper.d.ts delete mode 100644 dist/services/swagger-types-mapper.js delete mode 100644 dist/storages/global-parameters.storage.d.ts delete mode 100644 dist/storages/global-parameters.storage.js delete mode 100644 dist/storages/global-responses.storage.d.ts delete mode 100644 dist/storages/global-responses.storage.js delete mode 100644 dist/swagger-explorer.d.ts delete mode 100644 dist/swagger-explorer.js delete mode 100644 dist/swagger-module.d.ts delete mode 100644 dist/swagger-module.js delete mode 100644 dist/swagger-scanner.d.ts delete mode 100644 dist/swagger-scanner.js delete mode 100644 dist/swagger-transformer.d.ts delete mode 100644 dist/swagger-transformer.js delete mode 100644 dist/swagger-ui/constants.d.ts delete mode 100644 dist/swagger-ui/constants.js delete mode 100644 dist/swagger-ui/helpers.d.ts delete mode 100644 dist/swagger-ui/helpers.js delete mode 100644 dist/swagger-ui/index.d.ts delete mode 100644 dist/swagger-ui/index.js delete mode 100644 dist/swagger-ui/swagger-ui.d.ts delete mode 100644 dist/swagger-ui/swagger-ui.js delete mode 100644 dist/type-helpers/index.d.ts delete mode 100644 dist/type-helpers/index.js delete mode 100644 dist/type-helpers/intersection-type.helper.d.ts delete mode 100644 dist/type-helpers/intersection-type.helper.js delete mode 100644 dist/type-helpers/mapped-types.utils.d.ts delete mode 100644 dist/type-helpers/mapped-types.utils.js delete mode 100644 dist/type-helpers/omit-type.helper.d.ts delete mode 100644 dist/type-helpers/omit-type.helper.js delete mode 100644 dist/type-helpers/partial-type.helper.d.ts delete mode 100644 dist/type-helpers/partial-type.helper.js delete mode 100644 dist/type-helpers/pick-type.helper.d.ts delete mode 100644 dist/type-helpers/pick-type.helper.js delete mode 100644 dist/types/swagger-enum.type.d.ts delete mode 100644 dist/types/swagger-enum.type.js delete mode 100644 dist/utils/assign-two-levels-deep.d.ts delete mode 100644 dist/utils/assign-two-levels-deep.js delete mode 100644 dist/utils/enum.utils.d.ts delete mode 100644 dist/utils/enum.utils.js delete mode 100644 dist/utils/extend-metadata.util.d.ts delete mode 100644 dist/utils/extend-metadata.util.js delete mode 100644 dist/utils/get-global-prefix.d.ts delete mode 100644 dist/utils/get-global-prefix.js delete mode 100644 dist/utils/get-schema-path.util.d.ts delete mode 100644 dist/utils/get-schema-path.util.js delete mode 100644 dist/utils/index.d.ts delete mode 100644 dist/utils/index.js delete mode 100644 dist/utils/is-body-parameter.util.d.ts delete mode 100644 dist/utils/is-body-parameter.util.js delete mode 100644 dist/utils/is-built-in-type.util.d.ts delete mode 100644 dist/utils/is-built-in-type.util.js delete mode 100644 dist/utils/is-date-ctor.util.d.ts delete mode 100644 dist/utils/is-date-ctor.util.js delete mode 100644 dist/utils/merge-and-uniq.util.d.ts delete mode 100644 dist/utils/merge-and-uniq.util.js delete mode 100644 dist/utils/normalize-rel-path.d.ts delete mode 100644 dist/utils/normalize-rel-path.js delete mode 100644 dist/utils/remove-undefined-keys.d.ts delete mode 100644 dist/utils/remove-undefined-keys.js delete mode 100644 dist/utils/resolve-path.util.d.ts delete mode 100644 dist/utils/resolve-path.util.js delete mode 100644 dist/utils/reverse-object-keys.util.d.ts delete mode 100644 dist/utils/reverse-object-keys.util.js delete mode 100644 dist/utils/sort-object-lexicographically.d.ts delete mode 100644 dist/utils/sort-object-lexicographically.js delete mode 100644 dist/utils/strip-last-slash.util.d.ts delete mode 100644 dist/utils/strip-last-slash.util.js delete mode 100644 dist/utils/validate-global-prefix.util.d.ts delete mode 100644 dist/utils/validate-global-prefix.util.js delete mode 100644 dist/utils/validate-path.util.d.ts delete mode 100644 dist/utils/validate-path.util.js diff --git a/.gitignore b/.gitignore index 0579af373..9ae7e08cf 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ npm-debug.log /.nyc_output # source -# dist -# index.js -# index.d.ts -/sample \ No newline at end of file +dist +index.js +index.d.ts +/sample diff --git a/dist/constants.d.ts b/dist/constants.d.ts deleted file mode 100644 index fa92f0eec..000000000 --- a/dist/constants.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -export declare const DECORATORS_PREFIX = "swagger"; -export declare const DECORATORS: { - API_OPERATION: string; - API_RESPONSE: string; - API_PRODUCES: string; - API_CONSUMES: string; - API_TAGS: string; - API_CALLBACKS: string; - API_PARAMETERS: string; - API_HEADERS: string; - API_MODEL_PROPERTIES: string; - API_MODEL_PROPERTIES_ARRAY: string; - API_SECURITY: string; - API_EXCLUDE_ENDPOINT: string; - API_INCLUDE_ENDPOINT: string; - API_EXCLUDE_CONTROLLER: string; - API_EXTRA_MODELS: string; - API_EXTENSION: string; - API_SCHEMA: string; - API_DEFAULT_GETTER: string; - API_LINK: string; -}; diff --git a/dist/constants.js b/dist/constants.js deleted file mode 100644 index fb72375bf..000000000 --- a/dist/constants.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DECORATORS = exports.DECORATORS_PREFIX = void 0; -exports.DECORATORS_PREFIX = 'swagger'; -exports.DECORATORS = { - API_OPERATION: `${exports.DECORATORS_PREFIX}/apiOperation`, - API_RESPONSE: `${exports.DECORATORS_PREFIX}/apiResponse`, - API_PRODUCES: `${exports.DECORATORS_PREFIX}/apiProduces`, - API_CONSUMES: `${exports.DECORATORS_PREFIX}/apiConsumes`, - API_TAGS: `${exports.DECORATORS_PREFIX}/apiUseTags`, - API_CALLBACKS: `${exports.DECORATORS_PREFIX}/apiCallbacks`, - API_PARAMETERS: `${exports.DECORATORS_PREFIX}/apiParameters`, - API_HEADERS: `${exports.DECORATORS_PREFIX}/apiHeaders`, - API_MODEL_PROPERTIES: `${exports.DECORATORS_PREFIX}/apiModelProperties`, - API_MODEL_PROPERTIES_ARRAY: `${exports.DECORATORS_PREFIX}/apiModelPropertiesArray`, - API_SECURITY: `${exports.DECORATORS_PREFIX}/apiSecurity`, - API_EXCLUDE_ENDPOINT: `${exports.DECORATORS_PREFIX}/apiExcludeEndpoint`, - API_INCLUDE_ENDPOINT: `${exports.DECORATORS_PREFIX}/apiIncludeEndpoint`, - API_EXCLUDE_CONTROLLER: `${exports.DECORATORS_PREFIX}/apiExcludeController`, - API_EXTRA_MODELS: `${exports.DECORATORS_PREFIX}/apiExtraModels`, - API_EXTENSION: `${exports.DECORATORS_PREFIX}/apiExtension`, - API_SCHEMA: `${exports.DECORATORS_PREFIX}/apiSchema`, - API_DEFAULT_GETTER: `${exports.DECORATORS_PREFIX}/apiDefaultGetter`, - API_LINK: `${exports.DECORATORS_PREFIX}/apiLink` -}; diff --git a/dist/decorators/api-basic.decorator.d.ts b/dist/decorators/api-basic.decorator.d.ts deleted file mode 100644 index 6c8af2c2f..000000000 --- a/dist/decorators/api-basic.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiBasicAuth(name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-basic.decorator.js b/dist/decorators/api-basic.decorator.js deleted file mode 100644 index 1b00cea4f..000000000 --- a/dist/decorators/api-basic.decorator.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiBasicAuth = ApiBasicAuth; -const api_security_decorator_1 = require("./api-security.decorator"); -function ApiBasicAuth(name = 'basic') { - return (0, api_security_decorator_1.ApiSecurity)(name); -} diff --git a/dist/decorators/api-bearer.decorator.d.ts b/dist/decorators/api-bearer.decorator.d.ts deleted file mode 100644 index 92f2edc4a..000000000 --- a/dist/decorators/api-bearer.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiBearerAuth(name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-bearer.decorator.js b/dist/decorators/api-bearer.decorator.js deleted file mode 100644 index 3391a44c7..000000000 --- a/dist/decorators/api-bearer.decorator.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiBearerAuth = ApiBearerAuth; -const api_security_decorator_1 = require("./api-security.decorator"); -function ApiBearerAuth(name = 'bearer') { - return (0, api_security_decorator_1.ApiSecurity)(name); -} diff --git a/dist/decorators/api-body.decorator.d.ts b/dist/decorators/api-body.decorator.d.ts deleted file mode 100644 index 69c6d4853..000000000 --- a/dist/decorators/api-body.decorator.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Type } from '@nestjs/common'; -import { ExamplesObject, ReferenceObject, RequestBodyObject, SchemaObject } from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; -type RequestBodyOptions = Omit; -interface ApiBodyMetadata extends RequestBodyOptions { - type?: Type | Function | [Function] | string; - isArray?: boolean; - enum?: SwaggerEnumType; -} -interface ApiBodySchemaHost extends RequestBodyOptions { - schema: SchemaObject | ReferenceObject; - examples?: ExamplesObject; -} -export type ApiBodyOptions = ApiBodyMetadata | ApiBodySchemaHost; -export declare function ApiBody(options: ApiBodyOptions): MethodDecorator; -export {}; diff --git a/dist/decorators/api-body.decorator.js b/dist/decorators/api-body.decorator.js deleted file mode 100644 index a92a42312..000000000 --- a/dist/decorators/api-body.decorator.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiBody = ApiBody; -const lodash_1 = require("lodash"); -const enum_utils_1 = require("../utils/enum.utils"); -const helpers_1 = require("./helpers"); -const defaultBodyMetadata = { - type: String, - required: true -}; -function ApiBody(options) { - const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(options.type, options.isArray); - const param = Object.assign(Object.assign({ in: 'body' }, (0, lodash_1.omit)(options, 'enum')), { type, - isArray }); - if ((0, enum_utils_1.isEnumArray)(options)) { - (0, enum_utils_1.addEnumArraySchema)(param, options); - } - else if ((0, enum_utils_1.isEnumDefined)(options)) { - (0, enum_utils_1.addEnumSchema)(param, options); - } - return (0, helpers_1.createParamDecorator)(param, defaultBodyMetadata); -} diff --git a/dist/decorators/api-callbacks.decorator.d.ts b/dist/decorators/api-callbacks.decorator.d.ts deleted file mode 100644 index 9be976374..000000000 --- a/dist/decorators/api-callbacks.decorator.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { CallBackObject } from '../interfaces/callback-object.interface'; -export declare function ApiCallbacks(...callbackObject: Array>): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-callbacks.decorator.js b/dist/decorators/api-callbacks.decorator.js deleted file mode 100644 index 5cffa8d15..000000000 --- a/dist/decorators/api-callbacks.decorator.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiCallbacks = ApiCallbacks; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiCallbacks(...callbackObject) { - return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_CALLBACKS, callbackObject); -} diff --git a/dist/decorators/api-consumes.decorator.d.ts b/dist/decorators/api-consumes.decorator.d.ts deleted file mode 100644 index 91a5f0ee9..000000000 --- a/dist/decorators/api-consumes.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiConsumes(...mimeTypes: string[]): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-consumes.decorator.js b/dist/decorators/api-consumes.decorator.js deleted file mode 100644 index 4d1ce020a..000000000 --- a/dist/decorators/api-consumes.decorator.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiConsumes = ApiConsumes; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiConsumes(...mimeTypes) { - return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_CONSUMES, mimeTypes); -} diff --git a/dist/decorators/api-cookie.decorator.d.ts b/dist/decorators/api-cookie.decorator.d.ts deleted file mode 100644 index 65d37a7ca..000000000 --- a/dist/decorators/api-cookie.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiCookieAuth(name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-cookie.decorator.js b/dist/decorators/api-cookie.decorator.js deleted file mode 100644 index 0489444d5..000000000 --- a/dist/decorators/api-cookie.decorator.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiCookieAuth = ApiCookieAuth; -const api_security_decorator_1 = require("./api-security.decorator"); -function ApiCookieAuth(name = 'cookie') { - return (0, api_security_decorator_1.ApiSecurity)(name); -} diff --git a/dist/decorators/api-default-getter.decorator.d.ts b/dist/decorators/api-default-getter.decorator.d.ts deleted file mode 100644 index a1844503b..000000000 --- a/dist/decorators/api-default-getter.decorator.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare function ApiDefaultGetter(type: Type | Function, parameter: string): MethodDecorator; diff --git a/dist/decorators/api-default-getter.decorator.js b/dist/decorators/api-default-getter.decorator.js deleted file mode 100644 index a27c42e87..000000000 --- a/dist/decorators/api-default-getter.decorator.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiDefaultGetter = ApiDefaultGetter; -const constants_1 = require("../constants"); -function ApiDefaultGetter(type, parameter) { - return (prototype, key, descriptor) => { - if (type.prototype) { - Reflect.defineMetadata(constants_1.DECORATORS.API_DEFAULT_GETTER, { getter: descriptor.value, parameter, prototype }, type.prototype); - } - return descriptor; - }; -} diff --git a/dist/decorators/api-exclude-controller.decorator.d.ts b/dist/decorators/api-exclude-controller.decorator.d.ts deleted file mode 100644 index 6de204ea3..000000000 --- a/dist/decorators/api-exclude-controller.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiExcludeController(disable?: boolean): ClassDecorator; diff --git a/dist/decorators/api-exclude-controller.decorator.js b/dist/decorators/api-exclude-controller.decorator.js deleted file mode 100644 index 4ab55fc84..000000000 --- a/dist/decorators/api-exclude-controller.decorator.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiExcludeController = ApiExcludeController; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiExcludeController(disable = true) { - return (0, helpers_1.createClassDecorator)(constants_1.DECORATORS.API_EXCLUDE_CONTROLLER, [disable]); -} diff --git a/dist/decorators/api-exclude-endpoint.decorator.d.ts b/dist/decorators/api-exclude-endpoint.decorator.d.ts deleted file mode 100644 index 0f9ca3f82..000000000 --- a/dist/decorators/api-exclude-endpoint.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiExcludeEndpoint(disable?: boolean): MethodDecorator; diff --git a/dist/decorators/api-exclude-endpoint.decorator.js b/dist/decorators/api-exclude-endpoint.decorator.js deleted file mode 100644 index 7afa44ac0..000000000 --- a/dist/decorators/api-exclude-endpoint.decorator.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiExcludeEndpoint = ApiExcludeEndpoint; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiExcludeEndpoint(disable = true) { - return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_EXCLUDE_ENDPOINT, { - disable - }); -} diff --git a/dist/decorators/api-extension.decorator.d.ts b/dist/decorators/api-extension.decorator.d.ts deleted file mode 100644 index bfe9dac36..000000000 --- a/dist/decorators/api-extension.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiExtension(extensionKey: string, extensionProperties: any): (target: object | Function, key?: string | symbol, descriptor?: TypedPropertyDescriptor) => any; diff --git a/dist/decorators/api-extension.decorator.js b/dist/decorators/api-extension.decorator.js deleted file mode 100644 index 223498c69..000000000 --- a/dist/decorators/api-extension.decorator.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiExtension = ApiExtension; -const constants_1 = require("@nestjs/common/constants"); -const constants_2 = require("../constants"); -const lodash_1 = require("lodash"); -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -function applyExtension(target, key, value) { - const extensions = Reflect.getMetadata(constants_2.DECORATORS.API_EXTENSION, target) || {}; - Reflect.defineMetadata(constants_2.DECORATORS.API_EXTENSION, Object.assign({ [key]: value }, extensions), target); -} -function ApiExtension(extensionKey, extensionProperties) { - if (!extensionKey.startsWith('x-')) { - throw new Error('Extension key is not prefixed. Please ensure you prefix it with `x-`.'); - } - return (target, key, descriptor) => { - const extensionValue = (0, lodash_1.clone)(extensionProperties); - if (descriptor) { - applyExtension(descriptor.value, extensionKey, extensionValue); - return descriptor; - } - if (typeof target === 'object') { - return target; - } - const apiMethods = Object.getOwnPropertyNames(target.prototype) - .filter((propertyKey) => !(0, shared_utils_1.isConstructor)(propertyKey)) - .map((propertyKey) => { var _a; return (_a = Object.getOwnPropertyDescriptor(target.prototype, propertyKey)) === null || _a === void 0 ? void 0 : _a.value; }) - .filter((methodDescriptor) => methodDescriptor !== undefined && Reflect.hasMetadata(constants_1.METHOD_METADATA, methodDescriptor)); - if (apiMethods.length > 0) { - apiMethods.forEach((method) => applyExtension(method, extensionKey, extensionValue)); - } - else { - applyExtension(target, extensionKey, extensionValue); - } - return target; - }; -} diff --git a/dist/decorators/api-extra-models.decorator.d.ts b/dist/decorators/api-extra-models.decorator.d.ts deleted file mode 100644 index 31af477af..000000000 --- a/dist/decorators/api-extra-models.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiExtraModels(...models: Function[]): (target: object, key?: string | symbol, descriptor?: TypedPropertyDescriptor) => any; diff --git a/dist/decorators/api-extra-models.decorator.js b/dist/decorators/api-extra-models.decorator.js deleted file mode 100644 index 19e996c38..000000000 --- a/dist/decorators/api-extra-models.decorator.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiExtraModels = ApiExtraModels; -const constants_1 = require("../constants"); -function ApiExtraModels(...models) { - return (target, key, descriptor) => { - if (descriptor) { - const extraModels = Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, descriptor.value) || - []; - Reflect.defineMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, [...extraModels, ...models], descriptor.value); - return descriptor; - } - const extraModels = Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, target) || []; - Reflect.defineMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, [...extraModels, ...models], target); - return target; - }; -} diff --git a/dist/decorators/api-header.decorator.d.ts b/dist/decorators/api-header.decorator.d.ts deleted file mode 100644 index 522c425da..000000000 --- a/dist/decorators/api-header.decorator.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ParameterObject } from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; -export interface ApiHeaderOptions extends Omit { - enum?: SwaggerEnumType; -} -export declare function ApiHeader(options: ApiHeaderOptions): MethodDecorator & ClassDecorator; -export declare const ApiHeaders: (headers: ApiHeaderOptions[]) => MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-header.decorator.js b/dist/decorators/api-header.decorator.js deleted file mode 100644 index 1bab6b0c0..000000000 --- a/dist/decorators/api-header.decorator.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiHeaders = void 0; -exports.ApiHeader = ApiHeader; -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const enum_utils_1 = require("../utils/enum.utils"); -const helpers_1 = require("./helpers"); -const defaultHeaderOptions = { - name: '' -}; -function ApiHeader(options) { - const param = (0, lodash_1.pickBy)({ - name: (0, lodash_1.isNil)(options.name) ? defaultHeaderOptions.name : options.name, - in: 'header', - description: options.description, - required: options.required, - examples: options.examples, - schema: Object.assign({ type: 'string' }, (options.schema || {})) - }, (0, lodash_1.negate)(lodash_1.isUndefined)); - if (options.enum) { - const enumValues = (0, enum_utils_1.getEnumValues)(options.enum); - param.schema = Object.assign(Object.assign({}, param.schema), { enum: enumValues, type: (0, enum_utils_1.getEnumType)(enumValues) }); - } - return (target, key, descriptor) => { - if (descriptor) { - return (0, helpers_1.createParamDecorator)(param, defaultHeaderOptions)(target, key, descriptor); - } - return (0, helpers_1.createClassDecorator)(constants_1.DECORATORS.API_HEADERS, [param])(target); - }; -} -const ApiHeaders = (headers) => { - return (target, key, descriptor) => { - headers.forEach((options) => ApiHeader(options)(target, key, descriptor)); - }; -}; -exports.ApiHeaders = ApiHeaders; diff --git a/dist/decorators/api-hide-property.decorator.d.ts b/dist/decorators/api-hide-property.decorator.d.ts deleted file mode 100644 index dbeb840e7..000000000 --- a/dist/decorators/api-hide-property.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiHideProperty(): PropertyDecorator; diff --git a/dist/decorators/api-hide-property.decorator.js b/dist/decorators/api-hide-property.decorator.js deleted file mode 100644 index 689823f0a..000000000 --- a/dist/decorators/api-hide-property.decorator.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiHideProperty = ApiHideProperty; -function ApiHideProperty() { - return (target, propertyKey) => { }; -} diff --git a/dist/decorators/api-include-endpoint.decorator.d.ts b/dist/decorators/api-include-endpoint.decorator.d.ts deleted file mode 100644 index 2fe671015..000000000 --- a/dist/decorators/api-include-endpoint.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiIncludeEndpoint(disable?: boolean): MethodDecorator; diff --git a/dist/decorators/api-include-endpoint.decorator.js b/dist/decorators/api-include-endpoint.decorator.js deleted file mode 100644 index ae70e1e48..000000000 --- a/dist/decorators/api-include-endpoint.decorator.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiIncludeEndpoint = ApiIncludeEndpoint; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiIncludeEndpoint(disable = true) { - return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_INCLUDE_ENDPOINT, { - disable - }); -} diff --git a/dist/decorators/api-link.decorator.d.ts b/dist/decorators/api-link.decorator.d.ts deleted file mode 100644 index 376d5a635..000000000 --- a/dist/decorators/api-link.decorator.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Type } from '@nestjs/common'; -export interface ApiLinkOptions { - from: Type | Function; - fromField?: string; - routeParam: string; -} -export declare function ApiLink({ from, fromField, routeParam }: ApiLinkOptions): MethodDecorator; diff --git a/dist/decorators/api-link.decorator.js b/dist/decorators/api-link.decorator.js deleted file mode 100644 index 443f70678..000000000 --- a/dist/decorators/api-link.decorator.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiLink = ApiLink; -const constants_1 = require("../constants"); -function ApiLink({ from, fromField = 'id', routeParam }) { - return (controllerPrototype, key, descriptor) => { - var _a; - const { prototype } = from; - if (prototype) { - const links = (_a = Reflect.getMetadata(constants_1.DECORATORS.API_LINK, prototype)) !== null && _a !== void 0 ? _a : []; - links.push({ - method: descriptor.value, - prototype: controllerPrototype, - field: fromField, - parameter: routeParam - }); - Reflect.defineMetadata(constants_1.DECORATORS.API_LINK, links, prototype); - } - return descriptor; - }; -} diff --git a/dist/decorators/api-oauth2.decorator.d.ts b/dist/decorators/api-oauth2.decorator.d.ts deleted file mode 100644 index 507bff199..000000000 --- a/dist/decorators/api-oauth2.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiOAuth2(scopes: string[], name?: string): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-oauth2.decorator.js b/dist/decorators/api-oauth2.decorator.js deleted file mode 100644 index a24be45fb..000000000 --- a/dist/decorators/api-oauth2.decorator.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiOAuth2 = ApiOAuth2; -const api_security_decorator_1 = require("./api-security.decorator"); -function ApiOAuth2(scopes, name = 'oauth2') { - return (0, api_security_decorator_1.ApiSecurity)(name, scopes); -} diff --git a/dist/decorators/api-operation.decorator.d.ts b/dist/decorators/api-operation.decorator.d.ts deleted file mode 100644 index c44be54dd..000000000 --- a/dist/decorators/api-operation.decorator.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { OperationObject } from '../interfaces/open-api-spec.interface'; -export type ApiOperationOptions = Partial; -export declare function ApiOperation(options: ApiOperationOptions, { overrideExisting }?: { - overrideExisting: boolean; -}): MethodDecorator; diff --git a/dist/decorators/api-operation.decorator.js b/dist/decorators/api-operation.decorator.js deleted file mode 100644 index 09f28ed69..000000000 --- a/dist/decorators/api-operation.decorator.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiOperation = ApiOperation; -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -const defaultOperationOptions = { - summary: '' -}; -function ApiOperation(options, { overrideExisting } = { overrideExisting: true }) { - return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_OPERATION, (0, lodash_1.pickBy)(Object.assign(Object.assign({}, defaultOperationOptions), options), (0, lodash_1.negate)(lodash_1.isUndefined)), { overrideExisting }); -} diff --git a/dist/decorators/api-param.decorator.d.ts b/dist/decorators/api-param.decorator.d.ts deleted file mode 100644 index 15ec7632e..000000000 --- a/dist/decorators/api-param.decorator.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Type } from '@nestjs/common'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; -import { ParameterObject, SchemaObject } from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; -type ParameterOptions = Omit; -interface ApiParamCommonMetadata extends ParameterOptions { - type?: Type | Function | [Function] | string; - format?: string; - enum?: SwaggerEnumType; - enumName?: string; - enumSchema?: EnumSchemaAttributes; -} -type ApiParamMetadata = ApiParamCommonMetadata | (ApiParamCommonMetadata & { - enumName: string; - enumSchema?: EnumSchemaAttributes; -}); -interface ApiParamSchemaHost extends ParameterOptions { - schema: SchemaObject; -} -export type ApiParamOptions = ApiParamMetadata | ApiParamSchemaHost; -export declare function ApiParam(options: ApiParamOptions): MethodDecorator & ClassDecorator; -export {}; diff --git a/dist/decorators/api-param.decorator.js b/dist/decorators/api-param.decorator.js deleted file mode 100644 index 5c63f10ab..000000000 --- a/dist/decorators/api-param.decorator.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiParam = ApiParam; -const lodash_1 = require("lodash"); -const enum_utils_1 = require("../utils/enum.utils"); -const helpers_1 = require("./helpers"); -const defaultParamOptions = { - name: '', - required: true -}; -function ApiParam(options) { - const param = Object.assign({ name: (0, lodash_1.isNil)(options.name) ? defaultParamOptions.name : options.name, in: 'path' }, (0, lodash_1.omit)(options, 'enum')); - if ((0, enum_utils_1.isEnumDefined)(options)) { - (0, enum_utils_1.addEnumSchema)(param, options); - } - return (0, helpers_1.createParamDecorator)(param, defaultParamOptions); -} diff --git a/dist/decorators/api-produces.decorator.d.ts b/dist/decorators/api-produces.decorator.d.ts deleted file mode 100644 index 3bddc01e1..000000000 --- a/dist/decorators/api-produces.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiProduces(...mimeTypes: string[]): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-produces.decorator.js b/dist/decorators/api-produces.decorator.js deleted file mode 100644 index 3ef2d8290..000000000 --- a/dist/decorators/api-produces.decorator.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiProduces = ApiProduces; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiProduces(...mimeTypes) { - return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_PRODUCES, mimeTypes); -} diff --git a/dist/decorators/api-property.decorator.d.ts b/dist/decorators/api-property.decorator.d.ts deleted file mode 100644 index b2f562550..000000000 --- a/dist/decorators/api-property.decorator.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Type } from '@nestjs/common'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; -import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; -export type ApiPropertyCommonOptions = SchemaObjectMetadata & { - 'x-enumNames'?: string[]; - link?: () => Type | Function; -}; -export type ApiPropertyOptions = ApiPropertyCommonOptions | (ApiPropertyCommonOptions & { - enumName: string; - enumSchema?: EnumSchemaAttributes; -}); -export declare function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator; -export declare function createApiPropertyDecorator(options?: ApiPropertyOptions, overrideExisting?: boolean): PropertyDecorator; -export declare function ApiPropertyOptional(options?: ApiPropertyOptions): PropertyDecorator; -export declare function ApiResponseProperty(options?: Pick): PropertyDecorator; diff --git a/dist/decorators/api-property.decorator.js b/dist/decorators/api-property.decorator.js deleted file mode 100644 index 83bec1a25..000000000 --- a/dist/decorators/api-property.decorator.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiProperty = ApiProperty; -exports.createApiPropertyDecorator = createApiPropertyDecorator; -exports.ApiPropertyOptional = ApiPropertyOptional; -exports.ApiResponseProperty = ApiResponseProperty; -const constants_1 = require("../constants"); -const enum_utils_1 = require("../utils/enum.utils"); -const helpers_1 = require("./helpers"); -const isEnumArray = (opts) => opts.isArray && 'enum' in opts && opts.enum !== undefined; -function ApiProperty(options = {}) { - return createApiPropertyDecorator(options); -} -function createApiPropertyDecorator(options = {}, overrideExisting = true) { - const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(options.type, options.isArray); - options = Object.assign(Object.assign({}, options), { type, - isArray }); - if (isEnumArray(options)) { - options.type = 'array'; - const enumValues = (0, enum_utils_1.getEnumValues)(options.enum); - options.items = { - type: (0, enum_utils_1.getEnumType)(enumValues), - enum: enumValues - }; - delete options.enum; - } - else if ('enum' in options && options.enum !== undefined) { - const enumValues = (0, enum_utils_1.getEnumValues)(options.enum); - options.enum = enumValues; - options.type = (0, enum_utils_1.getEnumType)(enumValues); - } - if (Array.isArray(options.type)) { - options.type = 'array'; - options.items = { - type: 'array', - items: { - type: options.type[0] - } - }; - } - return (0, helpers_1.createPropertyDecorator)(constants_1.DECORATORS.API_MODEL_PROPERTIES, options, overrideExisting); -} -function ApiPropertyOptional(options = {}) { - return ApiProperty(Object.assign(Object.assign({}, options), { required: false })); -} -function ApiResponseProperty(options = {}) { - return ApiProperty(Object.assign({ readOnly: true }, options)); -} diff --git a/dist/decorators/api-query.decorator.d.ts b/dist/decorators/api-query.decorator.d.ts deleted file mode 100644 index 474727802..000000000 --- a/dist/decorators/api-query.decorator.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Type } from '@nestjs/common'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; -import { ParameterObject, ReferenceObject, SchemaObject } from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; -type ParameterOptions = Omit; -interface ApiQueryCommonMetadata extends ParameterOptions { - type?: Type | Function | [Function] | string; - isArray?: boolean; - enum?: SwaggerEnumType; -} -export type ApiQueryMetadata = ApiQueryCommonMetadata | ({ - name: string; -} & ApiQueryCommonMetadata & Omit) | ({ - name?: string; - enumName: string; - enumSchema?: EnumSchemaAttributes; -} & ApiQueryCommonMetadata); -interface ApiQuerySchemaHost extends ParameterOptions { - name?: string; - schema: SchemaObject | ReferenceObject; -} -export type ApiQueryOptions = ApiQueryMetadata | ApiQuerySchemaHost; -export declare function ApiQuery(options: ApiQueryOptions): MethodDecorator & ClassDecorator; -export {}; diff --git a/dist/decorators/api-query.decorator.js b/dist/decorators/api-query.decorator.js deleted file mode 100644 index 6080bdaf6..000000000 --- a/dist/decorators/api-query.decorator.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiQuery = ApiQuery; -const lodash_1 = require("lodash"); -const enum_utils_1 = require("../utils/enum.utils"); -const helpers_1 = require("./helpers"); -const defaultQueryOptions = { - name: '', - required: true -}; -function ApiQuery(options) { - const apiQueryMetadata = options; - const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(apiQueryMetadata.type, apiQueryMetadata.isArray); - const param = Object.assign(Object.assign({ name: 'name' in options ? options.name : defaultQueryOptions.name, in: 'query' }, (0, lodash_1.omit)(options, 'enum')), { type }); - if ((0, enum_utils_1.isEnumArray)(options)) { - (0, enum_utils_1.addEnumArraySchema)(param, options); - } - else if ((0, enum_utils_1.isEnumDefined)(options)) { - (0, enum_utils_1.addEnumSchema)(param, options); - } - if (isArray) { - param.isArray = isArray; - } - return (0, helpers_1.createParamDecorator)(param, defaultQueryOptions); -} diff --git a/dist/decorators/api-response.decorator.d.ts b/dist/decorators/api-response.decorator.d.ts deleted file mode 100644 index 5a6ad4460..000000000 --- a/dist/decorators/api-response.decorator.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Type } from '@nestjs/common'; -import { ReferenceObject, ResponseObject, SchemaObject } from '../interfaces/open-api-spec.interface'; -type ApiResponseExampleValue = any; -export interface ApiResponseExamples { - summary: string; - value: ApiResponseExampleValue; -} -export interface ApiResponseCommonMetadata extends Omit { - status?: number | 'default' | '1XX' | '2XX' | '3XX' | '4XX' | '5XX'; - type?: Type | Function | [Function] | string; - isArray?: boolean; - description?: string; -} -export type ApiResponseMetadata = (ApiResponseCommonMetadata & { - example?: ApiResponseExampleValue; -}) | (ApiResponseCommonMetadata & { - examples?: { - [key: string]: ApiResponseExamples; - }; -}); -export interface ApiResponseSchemaHost extends Omit { - schema: SchemaObject & Partial; - status?: number | 'default' | '1XX' | '2XX' | '3XX' | '4XX' | '5XX'; - description?: string; -} -export type ApiResponseOptions = ApiResponseMetadata | ApiResponseSchemaHost; -export type ApiResponseNoStatusOptions = (Omit & { - example?: ApiResponseExampleValue; -}) | (Omit & { - examples?: { - [key: string]: ApiResponseExamples; - }; -}) | Omit; -export declare function ApiResponse(options: ApiResponseOptions, { overrideExisting }?: { - overrideExisting: boolean; -}): MethodDecorator & ClassDecorator; -export declare const ApiContinueResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiSwitchingProtocolsResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiProcessingResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiEarlyhintsResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiOkResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiCreatedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiAcceptedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNonAuthoritativeInformationResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNoContentResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiResetContentResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPartialContentResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiAmbiguousResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiMovedPermanentlyResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiFoundResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiSeeOtherResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotModifiedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiTemporaryRedirectResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPermanentRedirectResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiBadRequestResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUnauthorizedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPaymentRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiForbiddenResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotFoundResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiMethodNotAllowedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotAcceptableResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiProxyAuthenticationRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiRequestTimeoutResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiConflictResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiGoneResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiLengthRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPreconditionFailedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPayloadTooLargeResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUriTooLongResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUnsupportedMediaTypeResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiRequestedRangeNotSatisfiableResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiExpectationFailedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiIAmATeapotResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiMisdirectedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiUnprocessableEntityResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiFailedDependencyResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiPreconditionRequiredResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiTooManyRequestsResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiInternalServerErrorResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiNotImplementedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiBadGatewayResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiServiceUnavailableResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiGatewayTimeoutResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator, ApiHttpVersionNotSupportedResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator; -export declare const ApiDefaultResponse: (options?: ApiResponseNoStatusOptions) => MethodDecorator & ClassDecorator; -export {}; diff --git a/dist/decorators/api-response.decorator.js b/dist/decorators/api-response.decorator.js deleted file mode 100644 index 3e873a5d9..000000000 --- a/dist/decorators/api-response.decorator.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiDefaultResponse = exports.ApiHttpVersionNotSupportedResponse = exports.ApiGatewayTimeoutResponse = exports.ApiServiceUnavailableResponse = exports.ApiBadGatewayResponse = exports.ApiNotImplementedResponse = exports.ApiInternalServerErrorResponse = exports.ApiTooManyRequestsResponse = exports.ApiPreconditionRequiredResponse = exports.ApiFailedDependencyResponse = exports.ApiUnprocessableEntityResponse = exports.ApiMisdirectedResponse = exports.ApiIAmATeapotResponse = exports.ApiExpectationFailedResponse = exports.ApiRequestedRangeNotSatisfiableResponse = exports.ApiUnsupportedMediaTypeResponse = exports.ApiUriTooLongResponse = exports.ApiPayloadTooLargeResponse = exports.ApiPreconditionFailedResponse = exports.ApiLengthRequiredResponse = exports.ApiGoneResponse = exports.ApiConflictResponse = exports.ApiRequestTimeoutResponse = exports.ApiProxyAuthenticationRequiredResponse = exports.ApiNotAcceptableResponse = exports.ApiMethodNotAllowedResponse = exports.ApiNotFoundResponse = exports.ApiForbiddenResponse = exports.ApiPaymentRequiredResponse = exports.ApiUnauthorizedResponse = exports.ApiBadRequestResponse = exports.ApiPermanentRedirectResponse = exports.ApiTemporaryRedirectResponse = exports.ApiNotModifiedResponse = exports.ApiSeeOtherResponse = exports.ApiFoundResponse = exports.ApiMovedPermanentlyResponse = exports.ApiAmbiguousResponse = exports.ApiPartialContentResponse = exports.ApiResetContentResponse = exports.ApiNoContentResponse = exports.ApiNonAuthoritativeInformationResponse = exports.ApiAcceptedResponse = exports.ApiCreatedResponse = exports.ApiOkResponse = exports.ApiEarlyhintsResponse = exports.ApiProcessingResponse = exports.ApiSwitchingProtocolsResponse = exports.ApiContinueResponse = void 0; -exports.ApiResponse = ApiResponse; -const common_1 = require("@nestjs/common"); -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiResponse(options, { overrideExisting } = { overrideExisting: true }) { - const apiResponseMetadata = options; - const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(apiResponseMetadata.type, apiResponseMetadata.isArray); - apiResponseMetadata.type = type; - apiResponseMetadata.isArray = isArray; - options.description = options.description ? options.description : ''; - const groupedMetadata = { - [options.status || 'default']: (0, lodash_1.omit)(options, 'status') - }; - return (target, key, descriptor) => { - if (descriptor) { - const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, descriptor.value); - if (responses && !overrideExisting) { - return descriptor; - } - Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), descriptor.value); - return descriptor; - } - const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, target); - if (responses && !overrideExisting) { - return descriptor; - } - Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), target); - return target; - }; -} -const decorators = {}; -const statusList = Object.keys(common_1.HttpStatus) - .filter((key) => !isNaN(Number(common_1.HttpStatus[key]))) - .map((key) => { - const functionName = key - .split('_') - .map((strToken) => `${strToken[0].toUpperCase()}${strToken.slice(1).toLowerCase()}`) - .join(''); - return { - code: Number(common_1.HttpStatus[key]), - functionName: `Api${functionName}Response` - }; -}); -statusList.forEach(({ code, functionName }) => { - decorators[functionName] = function (options = {}) { - return ApiResponse(Object.assign(Object.assign({}, options), { status: code })); - }; -}); -exports.ApiContinueResponse = decorators.ApiContinueResponse, exports.ApiSwitchingProtocolsResponse = decorators.ApiSwitchingProtocolsResponse, exports.ApiProcessingResponse = decorators.ApiProcessingResponse, exports.ApiEarlyhintsResponse = decorators.ApiEarlyhintsResponse, exports.ApiOkResponse = decorators.ApiOkResponse, exports.ApiCreatedResponse = decorators.ApiCreatedResponse, exports.ApiAcceptedResponse = decorators.ApiAcceptedResponse, exports.ApiNonAuthoritativeInformationResponse = decorators.ApiNonAuthoritativeInformationResponse, exports.ApiNoContentResponse = decorators.ApiNoContentResponse, exports.ApiResetContentResponse = decorators.ApiResetContentResponse, exports.ApiPartialContentResponse = decorators.ApiPartialContentResponse, exports.ApiAmbiguousResponse = decorators.ApiAmbiguousResponse, exports.ApiMovedPermanentlyResponse = decorators.ApiMovedPermanentlyResponse, exports.ApiFoundResponse = decorators.ApiFoundResponse, exports.ApiSeeOtherResponse = decorators.ApiSeeOtherResponse, exports.ApiNotModifiedResponse = decorators.ApiNotModifiedResponse, exports.ApiTemporaryRedirectResponse = decorators.ApiTemporaryRedirectResponse, exports.ApiPermanentRedirectResponse = decorators.ApiPermanentRedirectResponse, exports.ApiBadRequestResponse = decorators.ApiBadRequestResponse, exports.ApiUnauthorizedResponse = decorators.ApiUnauthorizedResponse, exports.ApiPaymentRequiredResponse = decorators.ApiPaymentRequiredResponse, exports.ApiForbiddenResponse = decorators.ApiForbiddenResponse, exports.ApiNotFoundResponse = decorators.ApiNotFoundResponse, exports.ApiMethodNotAllowedResponse = decorators.ApiMethodNotAllowedResponse, exports.ApiNotAcceptableResponse = decorators.ApiNotAcceptableResponse, exports.ApiProxyAuthenticationRequiredResponse = decorators.ApiProxyAuthenticationRequiredResponse, exports.ApiRequestTimeoutResponse = decorators.ApiRequestTimeoutResponse, exports.ApiConflictResponse = decorators.ApiConflictResponse, exports.ApiGoneResponse = decorators.ApiGoneResponse, exports.ApiLengthRequiredResponse = decorators.ApiLengthRequiredResponse, exports.ApiPreconditionFailedResponse = decorators.ApiPreconditionFailedResponse, exports.ApiPayloadTooLargeResponse = decorators.ApiPayloadTooLargeResponse, exports.ApiUriTooLongResponse = decorators.ApiUriTooLongResponse, exports.ApiUnsupportedMediaTypeResponse = decorators.ApiUnsupportedMediaTypeResponse, exports.ApiRequestedRangeNotSatisfiableResponse = decorators.ApiRequestedRangeNotSatisfiableResponse, exports.ApiExpectationFailedResponse = decorators.ApiExpectationFailedResponse, exports.ApiIAmATeapotResponse = decorators.ApiIAmATeapotResponse, exports.ApiMisdirectedResponse = decorators.ApiMisdirectedResponse, exports.ApiUnprocessableEntityResponse = decorators.ApiUnprocessableEntityResponse, exports.ApiFailedDependencyResponse = decorators.ApiFailedDependencyResponse, exports.ApiPreconditionRequiredResponse = decorators.ApiPreconditionRequiredResponse, exports.ApiTooManyRequestsResponse = decorators.ApiTooManyRequestsResponse, exports.ApiInternalServerErrorResponse = decorators.ApiInternalServerErrorResponse, exports.ApiNotImplementedResponse = decorators.ApiNotImplementedResponse, exports.ApiBadGatewayResponse = decorators.ApiBadGatewayResponse, exports.ApiServiceUnavailableResponse = decorators.ApiServiceUnavailableResponse, exports.ApiGatewayTimeoutResponse = decorators.ApiGatewayTimeoutResponse, exports.ApiHttpVersionNotSupportedResponse = decorators.ApiHttpVersionNotSupportedResponse; -const ApiDefaultResponse = (options = {}) => ApiResponse(Object.assign(Object.assign({}, options), { status: 'default' })); -exports.ApiDefaultResponse = ApiDefaultResponse; diff --git a/dist/decorators/api-schema.decorator.d.ts b/dist/decorators/api-schema.decorator.d.ts deleted file mode 100644 index c3f6f7453..000000000 --- a/dist/decorators/api-schema.decorator.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; -export interface ApiSchemaOptions extends Pick { - name?: string; - description?: string; -} -export declare function ApiSchema(options?: ApiSchemaOptions): ClassDecorator; diff --git a/dist/decorators/api-schema.decorator.js b/dist/decorators/api-schema.decorator.js deleted file mode 100644 index ddcd4498c..000000000 --- a/dist/decorators/api-schema.decorator.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiSchema = ApiSchema; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiSchema(options) { - return (0, helpers_1.createClassDecorator)(constants_1.DECORATORS.API_SCHEMA, [options]); -} diff --git a/dist/decorators/api-security.decorator.d.ts b/dist/decorators/api-security.decorator.d.ts deleted file mode 100644 index ddba129c9..000000000 --- a/dist/decorators/api-security.decorator.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { SecurityRequirementObject } from '../interfaces/open-api-spec.interface'; -export declare function ApiSecurity(name: string | SecurityRequirementObject, requirements?: string[]): ClassDecorator & MethodDecorator; diff --git a/dist/decorators/api-security.decorator.js b/dist/decorators/api-security.decorator.js deleted file mode 100644 index 8110f2d36..000000000 --- a/dist/decorators/api-security.decorator.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiSecurity = ApiSecurity; -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const extend_metadata_util_1 = require("../utils/extend-metadata.util"); -function ApiSecurity(name, requirements = []) { - let metadata; - if ((0, lodash_1.isString)(name)) { - metadata = [{ [name]: requirements }]; - } - else { - metadata = [name]; - } - return (target, key, descriptor) => { - if (descriptor) { - metadata = (0, extend_metadata_util_1.extendMetadata)(metadata, constants_1.DECORATORS.API_SECURITY, descriptor.value); - Reflect.defineMetadata(constants_1.DECORATORS.API_SECURITY, metadata, descriptor.value); - return descriptor; - } - metadata = (0, extend_metadata_util_1.extendMetadata)(metadata, constants_1.DECORATORS.API_SECURITY, target); - Reflect.defineMetadata(constants_1.DECORATORS.API_SECURITY, metadata, target); - return target; - }; -} diff --git a/dist/decorators/api-use-tags.decorator.d.ts b/dist/decorators/api-use-tags.decorator.d.ts deleted file mode 100644 index 53074190f..000000000 --- a/dist/decorators/api-use-tags.decorator.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function ApiTags(...tags: string[]): MethodDecorator & ClassDecorator; diff --git a/dist/decorators/api-use-tags.decorator.js b/dist/decorators/api-use-tags.decorator.js deleted file mode 100644 index 717da892a..000000000 --- a/dist/decorators/api-use-tags.decorator.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiTags = ApiTags; -const constants_1 = require("../constants"); -const helpers_1 = require("./helpers"); -function ApiTags(...tags) { - return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_TAGS, tags); -} diff --git a/dist/decorators/helpers.d.ts b/dist/decorators/helpers.d.ts deleted file mode 100644 index 5dda2c47c..000000000 --- a/dist/decorators/helpers.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare function createMethodDecorator(metakey: string, metadata: T, { overrideExisting }?: { - overrideExisting: boolean; -}): MethodDecorator; -export declare function createClassDecorator = any>(metakey: string, metadata?: T): ClassDecorator; -export declare function createPropertyDecorator = any>(metakey: string, metadata: T, overrideExisting?: boolean): PropertyDecorator; -export declare function createMixedDecorator(metakey: string, metadata: T): MethodDecorator & ClassDecorator; -export declare function createParamDecorator = any>(metadata: T, initial: Partial): MethodDecorator & ClassDecorator; -export declare function getTypeIsArrayTuple(input: Function | [Function] | undefined | string | Record, isArrayFlag: boolean): [Function | undefined, boolean]; diff --git a/dist/decorators/helpers.js b/dist/decorators/helpers.js deleted file mode 100644 index b4cf0bc01..000000000 --- a/dist/decorators/helpers.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createMethodDecorator = createMethodDecorator; -exports.createClassDecorator = createClassDecorator; -exports.createPropertyDecorator = createPropertyDecorator; -exports.createMixedDecorator = createMixedDecorator; -exports.createParamDecorator = createParamDecorator; -exports.getTypeIsArrayTuple = getTypeIsArrayTuple; -const constants_1 = require("@nestjs/common/constants"); -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -const lodash_1 = require("lodash"); -const constants_2 = require("../constants"); -const plugin_constants_1 = require("../plugin/plugin-constants"); -function createMethodDecorator(metakey, metadata, { overrideExisting } = { overrideExisting: true }) { - return (target, key, descriptor) => { - if (typeof metadata === 'object') { - const prevValue = Reflect.getMetadata(metakey, descriptor.value); - if (prevValue && !overrideExisting) { - return descriptor; - } - Reflect.defineMetadata(metakey, Object.assign(Object.assign({}, prevValue), metadata), descriptor.value); - return descriptor; - } - Reflect.defineMetadata(metakey, metadata, descriptor.value); - return descriptor; - }; -} -function createClassDecorator(metakey, metadata = []) { - return (target) => { - const prevValue = Reflect.getMetadata(metakey, target) || []; - Reflect.defineMetadata(metakey, [...prevValue, ...metadata], target); - return target; - }; -} -function createPropertyDecorator(metakey, metadata, overrideExisting = true) { - return (target, propertyKey) => { - var _a, _b, _c, _d; - const properties = Reflect.getMetadata(constants_2.DECORATORS.API_MODEL_PROPERTIES_ARRAY, target) || []; - const key = `:${propertyKey}`; - if (!properties.includes(key)) { - Reflect.defineMetadata(constants_2.DECORATORS.API_MODEL_PROPERTIES_ARRAY, [...properties, `:${propertyKey}`], target); - } - const existingMetadata = Reflect.getMetadata(metakey, target, propertyKey); - if (existingMetadata) { - const newMetadata = (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined)); - const metadataToSave = overrideExisting - ? Object.assign(Object.assign({}, existingMetadata), newMetadata) : Object.assign(Object.assign({}, newMetadata), existingMetadata); - Reflect.defineMetadata(metakey, metadataToSave, target, propertyKey); - } - else { - const type = (_d = (_c = (_b = (_a = target === null || target === void 0 ? void 0 : target.constructor) === null || _a === void 0 ? void 0 : _a[plugin_constants_1.METADATA_FACTORY_NAME]) === null || _b === void 0 ? void 0 : _b.call(_a)[propertyKey]) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : Reflect.getMetadata('design:type', target, propertyKey); - Reflect.defineMetadata(metakey, Object.assign({ type }, (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined))), target, propertyKey); - } - }; -} -function createMixedDecorator(metakey, metadata) { - return (target, key, descriptor) => { - if (descriptor) { - let metadatas; - if (Array.isArray(metadata)) { - const previousMetadata = Reflect.getMetadata(metakey, descriptor.value) || []; - metadatas = [...previousMetadata, ...metadata]; - } - else { - const previousMetadata = Reflect.getMetadata(metakey, descriptor.value) || {}; - metadatas = Object.assign(Object.assign({}, previousMetadata), metadata); - } - Reflect.defineMetadata(metakey, metadatas, descriptor.value); - return descriptor; - } - let metadatas; - if (Array.isArray(metadata)) { - const previousMetadata = Reflect.getMetadata(metakey, target) || []; - metadatas = [...previousMetadata, ...metadata]; - } - else { - const previousMetadata = Reflect.getMetadata(metakey, target) || {}; - metadatas = Object.assign(Object.assign({}, previousMetadata), metadata); - } - Reflect.defineMetadata(metakey, metadatas, target); - return target; - }; -} -function createParamDecorator(metadata, initial) { - return (target, key, descriptor) => { - const paramOptions = Object.assign(Object.assign({}, initial), (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined))); - if (descriptor) { - const parameters = Reflect.getMetadata(constants_2.DECORATORS.API_PARAMETERS, descriptor.value) || []; - Reflect.defineMetadata(constants_2.DECORATORS.API_PARAMETERS, [...parameters, paramOptions], descriptor.value); - return descriptor; - } - if (typeof target === 'object') { - return target; - } - const propertyKeys = Object.getOwnPropertyNames(target.prototype); - for (const propertyKey of propertyKeys) { - if ((0, shared_utils_1.isConstructor)(propertyKey)) { - continue; - } - const methodDescriptor = Object.getOwnPropertyDescriptor(target.prototype, propertyKey); - if (!methodDescriptor) { - continue; - } - const isApiMethod = Reflect.hasMetadata(constants_1.METHOD_METADATA, methodDescriptor.value); - if (!isApiMethod) { - continue; - } - const parameters = Reflect.getMetadata(constants_2.DECORATORS.API_PARAMETERS, methodDescriptor.value) || []; - Reflect.defineMetadata(constants_2.DECORATORS.API_PARAMETERS, [...parameters, paramOptions], methodDescriptor.value); - } - }; -} -function getTypeIsArrayTuple(input, isArrayFlag) { - if (!input) { - return [input, isArrayFlag]; - } - if (isArrayFlag) { - return [input, isArrayFlag]; - } - const isInputArray = (0, lodash_1.isArray)(input); - const type = isInputArray ? input[0] : input; - return [type, isInputArray]; -} diff --git a/dist/decorators/index.d.ts b/dist/decorators/index.d.ts deleted file mode 100644 index 29c147d7d..000000000 --- a/dist/decorators/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -export * from './api-basic.decorator'; -export * from './api-bearer.decorator'; -export * from './api-body.decorator'; -export * from './api-consumes.decorator'; -export * from './api-cookie.decorator'; -export * from './api-default-getter.decorator'; -export * from './api-exclude-endpoint.decorator'; -export * from './api-include-endpoint.decorator'; -export * from './api-exclude-controller.decorator'; -export * from './api-extra-models.decorator'; -export * from './api-header.decorator'; -export * from './api-hide-property.decorator'; -export * from './api-link.decorator'; -export * from './api-oauth2.decorator'; -export * from './api-operation.decorator'; -export * from './api-param.decorator'; -export * from './api-produces.decorator'; -export { ApiProperty, ApiPropertyOptional, ApiPropertyOptions, ApiResponseProperty } from './api-property.decorator'; -export * from './api-query.decorator'; -export * from './api-response.decorator'; -export * from './api-security.decorator'; -export * from './api-use-tags.decorator'; -export * from './api-callbacks.decorator'; -export * from './api-extension.decorator'; -export * from './api-schema.decorator'; diff --git a/dist/decorators/index.js b/dist/decorators/index.js deleted file mode 100644 index 825bdbcee..000000000 --- a/dist/decorators/index.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiResponseProperty = exports.ApiPropertyOptional = exports.ApiProperty = void 0; -__exportStar(require("./api-basic.decorator"), exports); -__exportStar(require("./api-bearer.decorator"), exports); -__exportStar(require("./api-body.decorator"), exports); -__exportStar(require("./api-consumes.decorator"), exports); -__exportStar(require("./api-cookie.decorator"), exports); -__exportStar(require("./api-default-getter.decorator"), exports); -__exportStar(require("./api-exclude-endpoint.decorator"), exports); -__exportStar(require("./api-include-endpoint.decorator"), exports); -__exportStar(require("./api-exclude-controller.decorator"), exports); -__exportStar(require("./api-extra-models.decorator"), exports); -__exportStar(require("./api-header.decorator"), exports); -__exportStar(require("./api-hide-property.decorator"), exports); -__exportStar(require("./api-link.decorator"), exports); -__exportStar(require("./api-oauth2.decorator"), exports); -__exportStar(require("./api-operation.decorator"), exports); -__exportStar(require("./api-param.decorator"), exports); -__exportStar(require("./api-produces.decorator"), exports); -var api_property_decorator_1 = require("./api-property.decorator"); -Object.defineProperty(exports, "ApiProperty", { enumerable: true, get: function () { return api_property_decorator_1.ApiProperty; } }); -Object.defineProperty(exports, "ApiPropertyOptional", { enumerable: true, get: function () { return api_property_decorator_1.ApiPropertyOptional; } }); -Object.defineProperty(exports, "ApiResponseProperty", { enumerable: true, get: function () { return api_property_decorator_1.ApiResponseProperty; } }); -__exportStar(require("./api-query.decorator"), exports); -__exportStar(require("./api-response.decorator"), exports); -__exportStar(require("./api-security.decorator"), exports); -__exportStar(require("./api-use-tags.decorator"), exports); -__exportStar(require("./api-callbacks.decorator"), exports); -__exportStar(require("./api-extension.decorator"), exports); -__exportStar(require("./api-schema.decorator"), exports); diff --git a/dist/document-builder.d.ts b/dist/document-builder.d.ts deleted file mode 100644 index 073f6afc8..000000000 --- a/dist/document-builder.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ApiResponseOptions } from './decorators/api-response.decorator'; -import { OpenAPIObject } from './interfaces'; -import { ExtensionLocation, ExternalDocumentationObject, ParameterObject, SecurityRequirementObject, SecuritySchemeObject, ServerVariableObject } from './interfaces/open-api-spec.interface'; -export declare class DocumentBuilder { - private readonly logger; - private readonly document; - setTitle(title: string): this; - setDescription(description: string): this; - setVersion(version: string): this; - setTermsOfService(termsOfService: string): this; - setContact(name: string, url: string, email: string): this; - setLicense(name: string, url: string): this; - setOpenAPIVersion(version: string): this; - addServer(url: string, description?: string, variables?: Record): this; - setExternalDoc(description: string, url: string): this; - setBasePath(path: string): this; - addTag(name: string, description?: string, externalDocs?: ExternalDocumentationObject): this; - addExtension(extensionKey: string, extensionProperties: any, location?: ExtensionLocation): this; - addSecurity(name: string, options: SecuritySchemeObject): this; - addGlobalResponse(...respones: ApiResponseOptions[]): this; - addGlobalParameters(...parameters: Omit[]): this; - addSecurityRequirements(name: string | SecurityRequirementObject, requirements?: string[]): this; - addBearerAuth(options?: SecuritySchemeObject, name?: string): this; - addOAuth2(options?: SecuritySchemeObject, name?: string): this; - addApiKey(options?: SecuritySchemeObject, name?: string): this; - addBasicAuth(options?: SecuritySchemeObject, name?: string): this; - addCookieAuth(cookieName?: string, options?: SecuritySchemeObject, securityName?: string): this; - build(): Omit; -} diff --git a/dist/document-builder.js b/dist/document-builder.js deleted file mode 100644 index 20c1b2cb9..000000000 --- a/dist/document-builder.js +++ /dev/null @@ -1,141 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DocumentBuilder = void 0; -const common_1 = require("@nestjs/common"); -const lodash_1 = require("lodash"); -const document_base_1 = require("./fixtures/document.base"); -const global_parameters_storage_1 = require("./storages/global-parameters.storage"); -const global_responses_storage_1 = require("./storages/global-responses.storage"); -class DocumentBuilder { - constructor() { - this.logger = new common_1.Logger(DocumentBuilder.name); - this.document = (0, document_base_1.buildDocumentBase)(); - } - setTitle(title) { - this.document.info.title = title; - return this; - } - setDescription(description) { - this.document.info.description = description; - return this; - } - setVersion(version) { - this.document.info.version = version; - return this; - } - setTermsOfService(termsOfService) { - this.document.info.termsOfService = termsOfService; - return this; - } - setContact(name, url, email) { - this.document.info.contact = { name, url, email }; - return this; - } - setLicense(name, url) { - this.document.info.license = { name, url }; - return this; - } - setOpenAPIVersion(version) { - if (version.match(/^\d\.\d\.\d$/)) { - this.document.openapi = version; - } - else { - this.logger.warn('The OpenApi version is invalid. Expecting format "x.x.x"'); - } - return this; - } - addServer(url, description, variables) { - this.document.servers.push({ url, description, variables }); - return this; - } - setExternalDoc(description, url) { - this.document.externalDocs = { description, url }; - return this; - } - setBasePath(path) { - this.logger.warn('The "setBasePath" method has been deprecated. Now, a global prefix is populated automatically. If you want to ignore it, take a look here: https://docs.nestjs.com/recipes/swagger#global-prefix. Alternatively, you can use "addServer" method to set up multiple different paths.'); - return this; - } - addTag(name, description = '', externalDocs) { - this.document.tags = this.document.tags.concat((0, lodash_1.pickBy)({ - name, - description, - externalDocs - }, (0, lodash_1.negate)(lodash_1.isUndefined))); - return this; - } - addExtension(extensionKey, extensionProperties, location = 'root') { - if (!extensionKey.startsWith('x-')) { - throw new Error('Extension key is not prefixed. Please ensure you prefix it with `x-`.'); - } - if (location === 'root') { - this.document[extensionKey] = (0, lodash_1.clone)(extensionProperties); - } - else { - this.document[location][extensionKey] = (0, lodash_1.clone)(extensionProperties); - } - return this; - } - addSecurity(name, options) { - this.document.components.securitySchemes = Object.assign(Object.assign({}, (this.document.components.securitySchemes || {})), { [name]: options }); - return this; - } - addGlobalResponse(...respones) { - const groupedByStatus = respones.reduce((acc, response) => { - const { status = 'default' } = response; - acc[status] = (0, lodash_1.omit)(response, 'status'); - return acc; - }, {}); - global_responses_storage_1.GlobalResponsesStorage.add(groupedByStatus); - return this; - } - addGlobalParameters(...parameters) { - global_parameters_storage_1.GlobalParametersStorage.add(...parameters); - return this; - } - addSecurityRequirements(name, requirements = []) { - let securityRequirement; - if ((0, lodash_1.isString)(name)) { - securityRequirement = { [name]: requirements }; - } - else { - securityRequirement = name; - } - this.document.security = (this.document.security || []).concat(Object.assign({}, securityRequirement)); - return this; - } - addBearerAuth(options = { - type: 'http' - }, name = 'bearer') { - this.addSecurity(name, Object.assign({ scheme: 'bearer', bearerFormat: 'JWT' }, options)); - return this; - } - addOAuth2(options = { - type: 'oauth2' - }, name = 'oauth2') { - this.addSecurity(name, Object.assign({ type: 'oauth2', flows: {} }, options)); - return this; - } - addApiKey(options = { - type: 'apiKey' - }, name = 'api_key') { - this.addSecurity(name, Object.assign({ type: 'apiKey', in: 'header', name }, options)); - return this; - } - addBasicAuth(options = { - type: 'http' - }, name = 'basic') { - this.addSecurity(name, Object.assign({ type: 'http', scheme: 'basic' }, options)); - return this; - } - addCookieAuth(cookieName = 'connect.sid', options = { - type: 'apiKey' - }, securityName = 'cookie') { - this.addSecurity(securityName, Object.assign({ type: 'apiKey', in: 'cookie', name: cookieName }, options)); - return this; - } - build() { - return this.document; - } -} -exports.DocumentBuilder = DocumentBuilder; diff --git a/dist/explorers/api-callbacks.explorer.d.ts b/dist/explorers/api-callbacks.explorer.d.ts deleted file mode 100644 index a29febb0b..000000000 --- a/dist/explorers/api-callbacks.explorer.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreApiCallbacksMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-callbacks.explorer.js b/dist/explorers/api-callbacks.explorer.js deleted file mode 100644 index 72958c19a..000000000 --- a/dist/explorers/api-callbacks.explorer.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiCallbacksMetadata = void 0; -const constants_1 = require("../constants"); -const utils_1 = require("../utils"); -const exploreApiCallbacksMetadata = (instance, prototype, method) => { - const callbacksData = Reflect.getMetadata(constants_1.DECORATORS.API_CALLBACKS, method); - if (!callbacksData) - return callbacksData; - return callbacksData.reduce((acc, callbackData) => { - const { name: eventName, callbackUrl, method: callbackMethod, requestBody, expectedResponse } = callbackData; - return Object.assign(Object.assign({}, acc), { [eventName]: { - [callbackUrl]: { - [callbackMethod]: { - requestBody: { - required: true, - content: { - 'application/json': { - schema: { - $ref: (0, utils_1.getSchemaPath)(requestBody.type) - } - } - } - }, - responses: { - [expectedResponse.status]: { - description: expectedResponse.description || - 'Your server returns this code if it accepts the callback' - } - } - } - } - } }); - }, {}); -}; -exports.exploreApiCallbacksMetadata = exploreApiCallbacksMetadata; diff --git a/dist/explorers/api-consumes.explorer.d.ts b/dist/explorers/api-consumes.explorer.d.ts deleted file mode 100644 index 1f1bf2c98..000000000 --- a/dist/explorers/api-consumes.explorer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreGlobalApiConsumesMetadata: (metatype: Type) => { - consumes: any; -}; -export declare const exploreApiConsumesMetadata: (instance: object, prototype: Type, method: object) => string[] | undefined; diff --git a/dist/explorers/api-consumes.explorer.js b/dist/explorers/api-consumes.explorer.js deleted file mode 100644 index cfb037f3e..000000000 --- a/dist/explorers/api-consumes.explorer.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiConsumesMetadata = exports.exploreGlobalApiConsumesMetadata = void 0; -const constants_1 = require("../constants"); -const exploreGlobalApiConsumesMetadata = (metatype) => { - const consumes = Reflect.getMetadata(constants_1.DECORATORS.API_CONSUMES, metatype); - return consumes ? { consumes } : undefined; -}; -exports.exploreGlobalApiConsumesMetadata = exploreGlobalApiConsumesMetadata; -const exploreApiConsumesMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_CONSUMES, method); -exports.exploreApiConsumesMetadata = exploreApiConsumesMetadata; diff --git a/dist/explorers/api-exclude-controller.explorer.d.ts b/dist/explorers/api-exclude-controller.explorer.d.ts deleted file mode 100644 index 546eaff79..000000000 --- a/dist/explorers/api-exclude-controller.explorer.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreApiExcludeControllerMetadata: (metatype: Type) => boolean; diff --git a/dist/explorers/api-exclude-controller.explorer.js b/dist/explorers/api-exclude-controller.explorer.js deleted file mode 100644 index 7ca847e4e..000000000 --- a/dist/explorers/api-exclude-controller.explorer.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiExcludeControllerMetadata = void 0; -const constants_1 = require("../constants"); -const exploreApiExcludeControllerMetadata = (metatype) => { - var _a; - return ((_a = Reflect.getMetadata(constants_1.DECORATORS.API_EXCLUDE_CONTROLLER, metatype)) === null || _a === void 0 ? void 0 : _a[0]) === - true; -}; -exports.exploreApiExcludeControllerMetadata = exploreApiExcludeControllerMetadata; diff --git a/dist/explorers/api-exclude-endpoint.explorer.d.ts b/dist/explorers/api-exclude-endpoint.explorer.d.ts deleted file mode 100644 index 44dac2597..000000000 --- a/dist/explorers/api-exclude-endpoint.explorer.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreApiExcludeEndpointMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-exclude-endpoint.explorer.js b/dist/explorers/api-exclude-endpoint.explorer.js deleted file mode 100644 index fb42f74da..000000000 --- a/dist/explorers/api-exclude-endpoint.explorer.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiExcludeEndpointMetadata = void 0; -const constants_1 = require("../constants"); -const exploreApiExcludeEndpointMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_EXCLUDE_ENDPOINT, method); -exports.exploreApiExcludeEndpointMetadata = exploreApiExcludeEndpointMetadata; diff --git a/dist/explorers/api-extra-models.explorer.d.ts b/dist/explorers/api-extra-models.explorer.d.ts deleted file mode 100644 index e67b7605d..000000000 --- a/dist/explorers/api-extra-models.explorer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreGlobalApiExtraModelsMetadata: (metatype: Type) => Function[]; -export declare const exploreApiExtraModelsMetadata: (instance: object, prototype: Type, method: object) => Function[]; diff --git a/dist/explorers/api-extra-models.explorer.js b/dist/explorers/api-extra-models.explorer.js deleted file mode 100644 index dfa5c9214..000000000 --- a/dist/explorers/api-extra-models.explorer.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiExtraModelsMetadata = exports.exploreGlobalApiExtraModelsMetadata = void 0; -const constants_1 = require("../constants"); -const exploreGlobalApiExtraModelsMetadata = (metatype) => { - const extraModels = Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, metatype); - return extraModels || []; -}; -exports.exploreGlobalApiExtraModelsMetadata = exploreGlobalApiExtraModelsMetadata; -const exploreApiExtraModelsMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_EXTRA_MODELS, method) || []; -exports.exploreApiExtraModelsMetadata = exploreApiExtraModelsMetadata; diff --git a/dist/explorers/api-headers.explorer.d.ts b/dist/explorers/api-headers.explorer.d.ts deleted file mode 100644 index 171bf2f9a..000000000 --- a/dist/explorers/api-headers.explorer.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreGlobalApiHeaderMetadata: (metatype: Type) => { - root: { - parameters: any; - }; - depth: number; -}; diff --git a/dist/explorers/api-headers.explorer.js b/dist/explorers/api-headers.explorer.js deleted file mode 100644 index 79430ed83..000000000 --- a/dist/explorers/api-headers.explorer.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreGlobalApiHeaderMetadata = void 0; -const constants_1 = require("../constants"); -const exploreGlobalApiHeaderMetadata = (metatype) => { - const headers = Reflect.getMetadata(constants_1.DECORATORS.API_HEADERS, metatype); - return headers ? { root: { parameters: headers }, depth: 1 } : undefined; -}; -exports.exploreGlobalApiHeaderMetadata = exploreGlobalApiHeaderMetadata; diff --git a/dist/explorers/api-include-endpoint.explorer.d.ts b/dist/explorers/api-include-endpoint.explorer.d.ts deleted file mode 100644 index 2f68cac33..000000000 --- a/dist/explorers/api-include-endpoint.explorer.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreApiIncludeEndpointMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-include-endpoint.explorer.js b/dist/explorers/api-include-endpoint.explorer.js deleted file mode 100644 index 853bb1eaa..000000000 --- a/dist/explorers/api-include-endpoint.explorer.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiIncludeEndpointMetadata = void 0; -const constants_1 = require("../constants"); -const exploreApiIncludeEndpointMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_INCLUDE_ENDPOINT, method); -exports.exploreApiIncludeEndpointMetadata = exploreApiIncludeEndpointMetadata; diff --git a/dist/explorers/api-operation.explorer.d.ts b/dist/explorers/api-operation.explorer.d.ts deleted file mode 100644 index 2ae0ce2ef..000000000 --- a/dist/explorers/api-operation.explorer.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreApiOperationMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-operation.explorer.js b/dist/explorers/api-operation.explorer.js deleted file mode 100644 index 67cd4ddef..000000000 --- a/dist/explorers/api-operation.explorer.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiOperationMetadata = void 0; -const constants_1 = require("../constants"); -const api_operation_decorator_1 = require("../decorators/api-operation.decorator"); -const plugin_constants_1 = require("../plugin/plugin-constants"); -const exploreApiOperationMetadata = (instance, prototype, method) => { - applyMetadataFactory(prototype, instance); - return Reflect.getMetadata(constants_1.DECORATORS.API_OPERATION, method); -}; -exports.exploreApiOperationMetadata = exploreApiOperationMetadata; -function applyMetadataFactory(prototype, instance) { - const classPrototype = prototype; - do { - if (!prototype.constructor) { - return; - } - if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { - continue; - } - const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); - const methodKeys = Object.keys(metadata).filter((key) => typeof instance[key] === 'function'); - methodKeys.forEach((key) => { - const operationMeta = {}; - const { summary, deprecated, tags, description } = metadata[key]; - applyIfNotNil(operationMeta, 'summary', summary); - applyIfNotNil(operationMeta, 'deprecated', deprecated); - applyIfNotNil(operationMeta, 'tags', tags); - applyIfNotNil(operationMeta, 'description', description); - if (Object.keys(operationMeta).length === 0) { - return; - } - (0, api_operation_decorator_1.ApiOperation)(operationMeta, { overrideExisting: false })(classPrototype, key, Object.getOwnPropertyDescriptor(classPrototype, key)); - }); - } while ((prototype = Reflect.getPrototypeOf(prototype)) && - prototype !== Object.prototype && - prototype); -} -function applyIfNotNil(target, key, value) { - if (value !== undefined && value !== null) { - target[key] = value; - } -} diff --git a/dist/explorers/api-parameters.explorer.d.ts b/dist/explorers/api-parameters.explorer.d.ts deleted file mode 100644 index 062fa30ac..000000000 --- a/dist/explorers/api-parameters.explorer.d.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Type } from '@nestjs/common'; -import { SchemaObject } from '../interfaces/open-api-spec.interface'; -import { ParamWithTypeMetadata } from '../services/parameter-metadata-accessor'; -export declare const exploreApiParametersMetadata: (schemas: Record, instance: object, prototype: Type, method: Function) => { - parameters: (Partial | Partial | { - schema: { - type: string; - items: any; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - allOf?: (SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject)[]; - oneOf?: (SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject)[]; - anyOf?: (SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject)[]; - not?: SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject | boolean; - patternProperties?: SchemaObject | import("../interfaces/open-api-spec.interface").ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; - }; - } | { - schema: import("lodash").Dictionary; - description?: string; - required?: boolean; - deprecated?: boolean; - allowEmptyValue?: boolean; - style?: import("../interfaces/open-api-spec.interface").ParameterStyle; - explode?: boolean; - allowReserved?: boolean; - examples?: Record; - example?: any; - content?: import("../interfaces/open-api-spec.interface").ContentObject; - } | { - schema: import("lodash").Dictionary; - name?: string | number | object; - type?: Type; - in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; - isArray?: boolean; - items?: SchemaObject; - required?: boolean; - enum?: unknown[]; - enumName?: string; - enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; - selfRequired?: boolean; - })[]; -}; diff --git a/dist/explorers/api-parameters.explorer.js b/dist/explorers/api-parameters.explorer.js deleted file mode 100644 index e7c91de6d..000000000 --- a/dist/explorers/api-parameters.explorer.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiParametersMetadata = void 0; -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const model_properties_accessor_1 = require("../services/model-properties-accessor"); -const parameter_metadata_accessor_1 = require("../services/parameter-metadata-accessor"); -const parameters_metadata_mapper_1 = require("../services/parameters-metadata-mapper"); -const schema_object_factory_1 = require("../services/schema-object-factory"); -const swagger_types_mapper_1 = require("../services/swagger-types-mapper"); -const global_parameters_storage_1 = require("../storages/global-parameters.storage"); -const parameterMetadataAccessor = new parameter_metadata_accessor_1.ParameterMetadataAccessor(); -const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); -const parametersMetadataMapper = new parameters_metadata_mapper_1.ParametersMetadataMapper(modelPropertiesAccessor); -const swaggerTypesMapper = new swagger_types_mapper_1.SwaggerTypesMapper(); -const schemaObjectFactory = new schema_object_factory_1.SchemaObjectFactory(modelPropertiesAccessor, swaggerTypesMapper); -const exploreApiParametersMetadata = (schemas, instance, prototype, method) => { - const explicitParameters = Reflect.getMetadata(constants_1.DECORATORS.API_PARAMETERS, method); - const globalParameters = global_parameters_storage_1.GlobalParametersStorage.getAll(); - const parametersMetadata = parameterMetadataAccessor.explore(instance, prototype, method); - const noExplicitAndGlobalMetadata = (0, lodash_1.isNil)(explicitParameters) && (0, lodash_1.isNil)(globalParameters); - if (noExplicitAndGlobalMetadata && (0, lodash_1.isNil)(parametersMetadata)) { - return undefined; - } - const reflectedParametersAsProperties = parametersMetadataMapper.transformModelToProperties(parametersMetadata || {}); - let properties = reflectedParametersAsProperties; - if (!noExplicitAndGlobalMetadata) { - const mergeImplicitAndExplicit = (item) => (0, lodash_1.assign)(item, (0, lodash_1.find)(explicitParameters, ['name', item.name])); - properties = removeBodyMetadataIfExplicitExists(properties, explicitParameters); - properties = (0, lodash_1.map)(properties, mergeImplicitAndExplicit); - properties = (0, lodash_1.unionWith)(properties, explicitParameters, globalParameters, (arrVal, othVal) => { - return arrVal.name === othVal.name && arrVal.in === othVal.in; - }); - } - const paramsWithDefinitions = schemaObjectFactory.createFromModel(properties, schemas); - const parameters = swaggerTypesMapper.mapParamTypes(paramsWithDefinitions); - return parameters ? { parameters } : undefined; -}; -exports.exploreApiParametersMetadata = exploreApiParametersMetadata; -function removeBodyMetadataIfExplicitExists(properties, explicitParams) { - const isBodyReflected = (0, lodash_1.some)(properties, (p) => p.in === 'body'); - const isBodyDefinedExplicitly = (0, lodash_1.some)(explicitParams, (p) => p.in === 'body'); - if (isBodyReflected && isBodyDefinedExplicitly) { - return (0, lodash_1.omitBy)(properties, (p) => p.in === 'body'); - } - return properties; -} diff --git a/dist/explorers/api-produces.explorer.d.ts b/dist/explorers/api-produces.explorer.d.ts deleted file mode 100644 index ec0ef6418..000000000 --- a/dist/explorers/api-produces.explorer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreGlobalApiProducesMetadata: (metatype: Type) => { - produces: any; -}; -export declare const exploreApiProducesMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-produces.explorer.js b/dist/explorers/api-produces.explorer.js deleted file mode 100644 index ac4980c90..000000000 --- a/dist/explorers/api-produces.explorer.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiProducesMetadata = exports.exploreGlobalApiProducesMetadata = void 0; -const constants_1 = require("../constants"); -const exploreGlobalApiProducesMetadata = (metatype) => { - const produces = Reflect.getMetadata(constants_1.DECORATORS.API_PRODUCES, metatype); - return produces ? { produces } : undefined; -}; -exports.exploreGlobalApiProducesMetadata = exploreGlobalApiProducesMetadata; -const exploreApiProducesMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_PRODUCES, method); -exports.exploreApiProducesMetadata = exploreApiProducesMetadata; diff --git a/dist/explorers/api-response.explorer.d.ts b/dist/explorers/api-response.explorer.d.ts deleted file mode 100644 index 89ea4001b..000000000 --- a/dist/explorers/api-response.explorer.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Type } from '@nestjs/common'; -import { SchemaObject } from '../interfaces/open-api-spec.interface'; -import { FactoriesNeededByResponseFactory } from '../services/response-object-factory'; -export declare const exploreGlobalApiResponseMetadata: (schemas: Record, metatype: Type, factories: FactoriesNeededByResponseFactory) => { - responses: { - [x: string]: boolean; - }; -}; -export declare const exploreApiResponseMetadata: (schemas: Record, factories: FactoriesNeededByResponseFactory, instance: object, prototype: Type, method: Function) => import("lodash").Dictionary | { - [status]: { - description: string; - }; -}; diff --git a/dist/explorers/api-response.explorer.js b/dist/explorers/api-response.explorer.js deleted file mode 100644 index 2ba5ad2f3..000000000 --- a/dist/explorers/api-response.explorer.js +++ /dev/null @@ -1,103 +0,0 @@ -"use strict"; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiResponseMetadata = exports.exploreGlobalApiResponseMetadata = void 0; -const common_1 = require("@nestjs/common"); -const constants_1 = require("@nestjs/common/constants"); -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -const lodash_1 = require("lodash"); -const constants_2 = require("../constants"); -const decorators_1 = require("../decorators"); -const plugin_constants_1 = require("../plugin/plugin-constants"); -const response_object_factory_1 = require("../services/response-object-factory"); -const global_responses_storage_1 = require("../storages/global-responses.storage"); -const merge_and_uniq_util_1 = require("../utils/merge-and-uniq.util"); -const responseObjectFactory = new response_object_factory_1.ResponseObjectFactory(); -const exploreGlobalApiResponseMetadata = (schemas, metatype, factories) => { - const responses = Reflect.getMetadata(constants_2.DECORATORS.API_RESPONSE, metatype); - const globalResponses = global_responses_storage_1.GlobalResponsesStorage.getAll(); - const mappedGlobalResponsesOrUndefined = globalResponses - ? mapResponsesToSwaggerResponses(globalResponses, schemas, undefined, factories) - : undefined; - const produces = Reflect.getMetadata(constants_2.DECORATORS.API_PRODUCES, metatype); - return responses - ? { - responses: Object.assign(Object.assign({}, mappedGlobalResponsesOrUndefined), mapResponsesToSwaggerResponses(responses, schemas, produces, factories)) - } - : mappedGlobalResponsesOrUndefined - ? { - responses: mappedGlobalResponsesOrUndefined - } - : undefined; -}; -exports.exploreGlobalApiResponseMetadata = exploreGlobalApiResponseMetadata; -const exploreApiResponseMetadata = (schemas, factories, instance, prototype, method) => { - applyMetadataFactory(prototype, instance); - const responses = Reflect.getMetadata(constants_2.DECORATORS.API_RESPONSE, method); - if (responses) { - const classProduces = Reflect.getMetadata(constants_2.DECORATORS.API_PRODUCES, prototype); - const methodProduces = Reflect.getMetadata(constants_2.DECORATORS.API_PRODUCES, method); - const produces = (0, merge_and_uniq_util_1.mergeAndUniq)((0, lodash_1.get)(classProduces, 'produces'), methodProduces); - return mapResponsesToSwaggerResponses(responses, schemas, produces, factories); - } - const status = getStatusCode(method); - if (status) { - return { [status]: { description: '' } }; - } - return undefined; -}; -exports.exploreApiResponseMetadata = exploreApiResponseMetadata; -const getStatusCode = (method) => { - const status = Reflect.getMetadata(constants_1.HTTP_CODE_METADATA, method); - if (status) { - return status; - } - const requestMethod = Reflect.getMetadata(constants_1.METHOD_METADATA, method); - switch (requestMethod) { - case common_1.RequestMethod.POST: - return common_1.HttpStatus.CREATED; - default: - return common_1.HttpStatus.OK; - } -}; -const omitParamType = (param) => (0, lodash_1.omit)(param, 'type'); -const mapResponsesToSwaggerResponses = (responses, schemas, produces = ['application/json'], factories) => { - produces = (0, shared_utils_1.isEmpty)(produces) ? ['application/json'] : produces; - const openApiResponses = (0, lodash_1.mapValues)(responses, (response) => responseObjectFactory.create(response, produces, schemas, factories)); - return (0, lodash_1.mapValues)(openApiResponses, omitParamType); -}; -function applyMetadataFactory(prototype, instance) { - const classPrototype = prototype; - do { - if (!prototype.constructor) { - return; - } - if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { - continue; - } - const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); - const methodKeys = Object.keys(metadata).filter((key) => typeof instance[key] === 'function'); - methodKeys.forEach((key) => { - const _a = metadata[key], { summary, deprecated, tags } = _a, meta = __rest(_a, ["summary", "deprecated", "tags"]); - if (Object.keys(meta).length === 0) { - return; - } - if (meta.status === undefined) { - meta.status = getStatusCode(instance[key]); - } - (0, decorators_1.ApiResponse)(meta, { overrideExisting: false })(classPrototype, key, Object.getOwnPropertyDescriptor(classPrototype, key)); - }); - } while ((prototype = Reflect.getPrototypeOf(prototype)) && - prototype !== Object.prototype && - prototype); -} diff --git a/dist/explorers/api-security.explorer.d.ts b/dist/explorers/api-security.explorer.d.ts deleted file mode 100644 index b99f2b624..000000000 --- a/dist/explorers/api-security.explorer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreGlobalApiSecurityMetadata: (metatype: Type) => { - security: any; -}; -export declare const exploreApiSecurityMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-security.explorer.js b/dist/explorers/api-security.explorer.js deleted file mode 100644 index 26b30ae8a..000000000 --- a/dist/explorers/api-security.explorer.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiSecurityMetadata = exports.exploreGlobalApiSecurityMetadata = void 0; -const constants_1 = require("../constants"); -const exploreGlobalApiSecurityMetadata = (metatype) => { - const security = Reflect.getMetadata(constants_1.DECORATORS.API_SECURITY, metatype); - return security ? { security } : undefined; -}; -exports.exploreGlobalApiSecurityMetadata = exploreGlobalApiSecurityMetadata; -const exploreApiSecurityMetadata = (instance, prototype, method) => { - return Reflect.getMetadata(constants_1.DECORATORS.API_SECURITY, method); -}; -exports.exploreApiSecurityMetadata = exploreApiSecurityMetadata; diff --git a/dist/explorers/api-use-tags.explorer.d.ts b/dist/explorers/api-use-tags.explorer.d.ts deleted file mode 100644 index 8916f1e85..000000000 --- a/dist/explorers/api-use-tags.explorer.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare const exploreGlobalApiTagsMetadata: (autoTagControllers?: boolean) => (metatype: Type) => { - tags: any; -}; -export declare const exploreApiTagsMetadata: (instance: object, prototype: Type, method: object) => any; diff --git a/dist/explorers/api-use-tags.explorer.js b/dist/explorers/api-use-tags.explorer.js deleted file mode 100644 index cfa44d838..000000000 --- a/dist/explorers/api-use-tags.explorer.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.exploreApiTagsMetadata = exports.exploreGlobalApiTagsMetadata = void 0; -const constants_1 = require("../constants"); -const exploreGlobalApiTagsMetadata = (autoTagControllers) => (metatype) => { - const decoratorTags = Reflect.getMetadata(constants_1.DECORATORS.API_TAGS, metatype); - const isEmpty = !decoratorTags || decoratorTags.length === 0; - if (isEmpty && autoTagControllers) { - const defaultTag = metatype.name.replace(/Controller$/, ''); - return { - tags: [defaultTag] - }; - } - return isEmpty ? undefined : { tags: decoratorTags }; -}; -exports.exploreGlobalApiTagsMetadata = exploreGlobalApiTagsMetadata; -const exploreApiTagsMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_TAGS, method); -exports.exploreApiTagsMetadata = exploreApiTagsMetadata; diff --git a/dist/extra/swagger-shim.d.ts b/dist/extra/swagger-shim.d.ts deleted file mode 100644 index e50885857..000000000 --- a/dist/extra/swagger-shim.d.ts +++ /dev/null @@ -1,97 +0,0 @@ -export declare function ApiProperty(): () => void; -export declare function ApiPropertyOptional(): () => void; -export declare function ApiResponseProperty(): () => void; -export declare function ApiBasicAuth(): () => void; -export declare function ApiBearerAuth(): () => void; -export declare function ApiBody(): () => void; -export declare function ApiConsumes(): () => void; -export declare function ApiCookieAuth(): () => void; -export declare function ApiExcludeEndpoint(): () => void; -export declare function ApiIncludeEndpoint(): () => void; -export declare function ApiExcludeController(): () => void; -export declare function ApiExtraModels(): () => void; -export declare function ApiHeader(): () => void; -export declare function ApiHeaders(): () => void; -export declare function ApiHideProperty(): () => void; -export declare function ApiOAuth2(): () => void; -export declare function ApiOperation(): () => void; -export declare function ApiParam(): () => void; -export declare function ApiProduces(): () => void; -export declare function ApiQuery(): () => void; -export declare function ApiResponse(): () => void; -export declare function ApiContinueResponse(): () => void; -export declare function ApiSwitchingProtocolsResponse(): () => void; -export declare function ApiProcessingResponse(): () => void; -export declare function ApiEarlyhintsResponse(): () => void; -export declare function ApiOkResponse(): () => void; -export declare function ApiCreatedResponse(): () => void; -export declare function ApiAcceptedResponse(): () => void; -export declare function ApiNonAuthoritativeInformationResponse(): () => void; -export declare function ApiNoContentResponse(): () => void; -export declare function ApiResetContentResponse(): () => void; -export declare function ApiPartialContentResponse(): () => void; -export declare function ApiAmbiguousResponse(): () => void; -export declare function ApiMovedPermanentlyResponse(): () => void; -export declare function ApiFoundResponse(): () => void; -export declare function ApiSeeOtherResponse(): () => void; -export declare function ApiNotModifiedResponse(): () => void; -export declare function ApiTemporaryRedirectResponse(): () => void; -export declare function ApiPermanentRedirectResponse(): () => void; -export declare function ApiBadRequestResponse(): () => void; -export declare function ApiUnauthorizedResponse(): () => void; -export declare function ApiPaymentRequiredResponse(): () => void; -export declare function ApiForbiddenResponse(): () => void; -export declare function ApiNotFoundResponse(): () => void; -export declare function ApiMethodNotAllowedResponse(): () => void; -export declare function ApiNotAcceptableResponse(): () => void; -export declare function ApiProxyAuthenticationRequiredResponse(): () => void; -export declare function ApiRequestTimeoutResponse(): () => void; -export declare function ApiConflictResponse(): () => void; -export declare function ApiGoneResponse(): () => void; -export declare function ApiLengthRequiredResponse(): () => void; -export declare function ApiPreconditionFailedResponse(): () => void; -export declare function ApiPayloadTooLargeResponse(): () => void; -export declare function ApiUriTooLongResponse(): () => void; -export declare function ApiUnsupportedMediaTypeResponse(): () => void; -export declare function ApiRequestedRangeNotSatisfiableResponse(): () => void; -export declare function ApiExpectationFailedResponse(): () => void; -export declare function ApiIAmATeapotResponse(): () => void; -export declare function ApiMisdirectedResponse(): () => void; -export declare function ApiUnprocessableEntityResponse(): () => void; -export declare function ApiFailedDependencyResponse(): () => void; -export declare function ApiPreconditionRequiredResponse(): () => void; -export declare function ApiTooManyRequestsResponse(): () => void; -export declare function ApiInternalServerErrorResponse(): () => void; -export declare function ApiNotImplementedResponse(): () => void; -export declare function ApiBadGatewayResponse(): () => void; -export declare function ApiServiceUnavailableResponse(): () => void; -export declare function ApiGatewayTimeoutResponse(): () => void; -export declare function ApiHttpVersionNotSupportedResponse(): () => void; -export declare function ApiDefaultResponse(): () => void; -export declare function ApiSchema(): () => void; -export declare function ApiSecurity(): () => void; -export declare function ApiTags(): () => void; -export declare function ApiCallbacks(): () => void; -export declare function ApiLink(): () => void; -export declare function ApiDefaultGetter(): () => void; -export declare function ApiExtension(): () => void; -export declare function DocumentBuilder(): () => void; -export declare function SwaggerModule(): () => void; -export declare function IntersectionType(): { - new (): {}; -}; -export declare function OmitType(): { - new (): {}; -}; -export declare function PartialType(): { - new (): {}; -}; -export declare function PickType(): { - new (): {}; -}; -export declare function getSchemaPath(): () => string; -export declare function refs(): any[]; -export declare function before(): () => string; -export declare function ReadonlyVisitor(): { - new (): {}; -}; diff --git a/dist/extra/swagger-shim.js b/dist/extra/swagger-shim.js deleted file mode 100644 index 1503a200e..000000000 --- a/dist/extra/swagger-shim.js +++ /dev/null @@ -1,355 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiProperty = ApiProperty; -exports.ApiPropertyOptional = ApiPropertyOptional; -exports.ApiResponseProperty = ApiResponseProperty; -exports.ApiBasicAuth = ApiBasicAuth; -exports.ApiBearerAuth = ApiBearerAuth; -exports.ApiBody = ApiBody; -exports.ApiConsumes = ApiConsumes; -exports.ApiCookieAuth = ApiCookieAuth; -exports.ApiExcludeEndpoint = ApiExcludeEndpoint; -exports.ApiIncludeEndpoint = ApiIncludeEndpoint; -exports.ApiExcludeController = ApiExcludeController; -exports.ApiExtraModels = ApiExtraModels; -exports.ApiHeader = ApiHeader; -exports.ApiHeaders = ApiHeaders; -exports.ApiHideProperty = ApiHideProperty; -exports.ApiOAuth2 = ApiOAuth2; -exports.ApiOperation = ApiOperation; -exports.ApiParam = ApiParam; -exports.ApiProduces = ApiProduces; -exports.ApiQuery = ApiQuery; -exports.ApiResponse = ApiResponse; -exports.ApiContinueResponse = ApiContinueResponse; -exports.ApiSwitchingProtocolsResponse = ApiSwitchingProtocolsResponse; -exports.ApiProcessingResponse = ApiProcessingResponse; -exports.ApiEarlyhintsResponse = ApiEarlyhintsResponse; -exports.ApiOkResponse = ApiOkResponse; -exports.ApiCreatedResponse = ApiCreatedResponse; -exports.ApiAcceptedResponse = ApiAcceptedResponse; -exports.ApiNonAuthoritativeInformationResponse = ApiNonAuthoritativeInformationResponse; -exports.ApiNoContentResponse = ApiNoContentResponse; -exports.ApiResetContentResponse = ApiResetContentResponse; -exports.ApiPartialContentResponse = ApiPartialContentResponse; -exports.ApiAmbiguousResponse = ApiAmbiguousResponse; -exports.ApiMovedPermanentlyResponse = ApiMovedPermanentlyResponse; -exports.ApiFoundResponse = ApiFoundResponse; -exports.ApiSeeOtherResponse = ApiSeeOtherResponse; -exports.ApiNotModifiedResponse = ApiNotModifiedResponse; -exports.ApiTemporaryRedirectResponse = ApiTemporaryRedirectResponse; -exports.ApiPermanentRedirectResponse = ApiPermanentRedirectResponse; -exports.ApiBadRequestResponse = ApiBadRequestResponse; -exports.ApiUnauthorizedResponse = ApiUnauthorizedResponse; -exports.ApiPaymentRequiredResponse = ApiPaymentRequiredResponse; -exports.ApiForbiddenResponse = ApiForbiddenResponse; -exports.ApiNotFoundResponse = ApiNotFoundResponse; -exports.ApiMethodNotAllowedResponse = ApiMethodNotAllowedResponse; -exports.ApiNotAcceptableResponse = ApiNotAcceptableResponse; -exports.ApiProxyAuthenticationRequiredResponse = ApiProxyAuthenticationRequiredResponse; -exports.ApiRequestTimeoutResponse = ApiRequestTimeoutResponse; -exports.ApiConflictResponse = ApiConflictResponse; -exports.ApiGoneResponse = ApiGoneResponse; -exports.ApiLengthRequiredResponse = ApiLengthRequiredResponse; -exports.ApiPreconditionFailedResponse = ApiPreconditionFailedResponse; -exports.ApiPayloadTooLargeResponse = ApiPayloadTooLargeResponse; -exports.ApiUriTooLongResponse = ApiUriTooLongResponse; -exports.ApiUnsupportedMediaTypeResponse = ApiUnsupportedMediaTypeResponse; -exports.ApiRequestedRangeNotSatisfiableResponse = ApiRequestedRangeNotSatisfiableResponse; -exports.ApiExpectationFailedResponse = ApiExpectationFailedResponse; -exports.ApiIAmATeapotResponse = ApiIAmATeapotResponse; -exports.ApiMisdirectedResponse = ApiMisdirectedResponse; -exports.ApiUnprocessableEntityResponse = ApiUnprocessableEntityResponse; -exports.ApiFailedDependencyResponse = ApiFailedDependencyResponse; -exports.ApiPreconditionRequiredResponse = ApiPreconditionRequiredResponse; -exports.ApiTooManyRequestsResponse = ApiTooManyRequestsResponse; -exports.ApiInternalServerErrorResponse = ApiInternalServerErrorResponse; -exports.ApiNotImplementedResponse = ApiNotImplementedResponse; -exports.ApiBadGatewayResponse = ApiBadGatewayResponse; -exports.ApiServiceUnavailableResponse = ApiServiceUnavailableResponse; -exports.ApiGatewayTimeoutResponse = ApiGatewayTimeoutResponse; -exports.ApiHttpVersionNotSupportedResponse = ApiHttpVersionNotSupportedResponse; -exports.ApiDefaultResponse = ApiDefaultResponse; -exports.ApiSchema = ApiSchema; -exports.ApiSecurity = ApiSecurity; -exports.ApiTags = ApiTags; -exports.ApiCallbacks = ApiCallbacks; -exports.ApiLink = ApiLink; -exports.ApiDefaultGetter = ApiDefaultGetter; -exports.ApiExtension = ApiExtension; -exports.DocumentBuilder = DocumentBuilder; -exports.SwaggerModule = SwaggerModule; -exports.IntersectionType = IntersectionType; -exports.OmitType = OmitType; -exports.PartialType = PartialType; -exports.PickType = PickType; -exports.getSchemaPath = getSchemaPath; -exports.refs = refs; -exports.before = before; -exports.ReadonlyVisitor = ReadonlyVisitor; -function ApiProperty() { - return () => { }; -} -function ApiPropertyOptional() { - return () => { }; -} -function ApiResponseProperty() { - return () => { }; -} -function ApiBasicAuth() { - return () => { }; -} -function ApiBearerAuth() { - return () => { }; -} -function ApiBody() { - return () => { }; -} -function ApiConsumes() { - return () => { }; -} -function ApiCookieAuth() { - return () => { }; -} -function ApiExcludeEndpoint() { - return () => { }; -} -function ApiIncludeEndpoint() { - return () => { }; -} -function ApiExcludeController() { - return () => { }; -} -function ApiExtraModels() { - return () => { }; -} -function ApiHeader() { - return () => { }; -} -function ApiHeaders() { - return () => { }; -} -function ApiHideProperty() { - return () => { }; -} -function ApiOAuth2() { - return () => { }; -} -function ApiOperation() { - return () => { }; -} -function ApiParam() { - return () => { }; -} -function ApiProduces() { - return () => { }; -} -function ApiQuery() { - return () => { }; -} -function ApiResponse() { - return () => { }; -} -function ApiContinueResponse() { - return () => { }; -} -function ApiSwitchingProtocolsResponse() { - return () => { }; -} -function ApiProcessingResponse() { - return () => { }; -} -function ApiEarlyhintsResponse() { - return () => { }; -} -function ApiOkResponse() { - return () => { }; -} -function ApiCreatedResponse() { - return () => { }; -} -function ApiAcceptedResponse() { - return () => { }; -} -function ApiNonAuthoritativeInformationResponse() { - return () => { }; -} -function ApiNoContentResponse() { - return () => { }; -} -function ApiResetContentResponse() { - return () => { }; -} -function ApiPartialContentResponse() { - return () => { }; -} -function ApiAmbiguousResponse() { - return () => { }; -} -function ApiMovedPermanentlyResponse() { - return () => { }; -} -function ApiFoundResponse() { - return () => { }; -} -function ApiSeeOtherResponse() { - return () => { }; -} -function ApiNotModifiedResponse() { - return () => { }; -} -function ApiTemporaryRedirectResponse() { - return () => { }; -} -function ApiPermanentRedirectResponse() { - return () => { }; -} -function ApiBadRequestResponse() { - return () => { }; -} -function ApiUnauthorizedResponse() { - return () => { }; -} -function ApiPaymentRequiredResponse() { - return () => { }; -} -function ApiForbiddenResponse() { - return () => { }; -} -function ApiNotFoundResponse() { - return () => { }; -} -function ApiMethodNotAllowedResponse() { - return () => { }; -} -function ApiNotAcceptableResponse() { - return () => { }; -} -function ApiProxyAuthenticationRequiredResponse() { - return () => { }; -} -function ApiRequestTimeoutResponse() { - return () => { }; -} -function ApiConflictResponse() { - return () => { }; -} -function ApiGoneResponse() { - return () => { }; -} -function ApiLengthRequiredResponse() { - return () => { }; -} -function ApiPreconditionFailedResponse() { - return () => { }; -} -function ApiPayloadTooLargeResponse() { - return () => { }; -} -function ApiUriTooLongResponse() { - return () => { }; -} -function ApiUnsupportedMediaTypeResponse() { - return () => { }; -} -function ApiRequestedRangeNotSatisfiableResponse() { - return () => { }; -} -function ApiExpectationFailedResponse() { - return () => { }; -} -function ApiIAmATeapotResponse() { - return () => { }; -} -function ApiMisdirectedResponse() { - return () => { }; -} -function ApiUnprocessableEntityResponse() { - return () => { }; -} -function ApiFailedDependencyResponse() { - return () => { }; -} -function ApiPreconditionRequiredResponse() { - return () => { }; -} -function ApiTooManyRequestsResponse() { - return () => { }; -} -function ApiInternalServerErrorResponse() { - return () => { }; -} -function ApiNotImplementedResponse() { - return () => { }; -} -function ApiBadGatewayResponse() { - return () => { }; -} -function ApiServiceUnavailableResponse() { - return () => { }; -} -function ApiGatewayTimeoutResponse() { - return () => { }; -} -function ApiHttpVersionNotSupportedResponse() { - return () => { }; -} -function ApiDefaultResponse() { - return () => { }; -} -function ApiSchema() { - return () => { }; -} -function ApiSecurity() { - return () => { }; -} -function ApiTags() { - return () => { }; -} -function ApiCallbacks() { - return () => { }; -} -function ApiLink() { - return () => { }; -} -function ApiDefaultGetter() { - return () => { }; -} -function ApiExtension() { - return () => { }; -} -function DocumentBuilder() { - return () => { }; -} -function SwaggerModule() { - return () => { }; -} -function IntersectionType() { - return class { - }; -} -function OmitType() { - return class { - }; -} -function PartialType() { - return class { - }; -} -function PickType() { - return class { - }; -} -function getSchemaPath() { - return () => ''; -} -function refs() { - return []; -} -function before() { - return () => ''; -} -function ReadonlyVisitor() { - return class { - }; -} diff --git a/dist/fixtures/document.base.d.ts b/dist/fixtures/document.base.d.ts deleted file mode 100644 index 163223666..000000000 --- a/dist/fixtures/document.base.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { OpenAPIObject } from '../interfaces'; -export declare const buildDocumentBase: () => Omit; diff --git a/dist/fixtures/document.base.js b/dist/fixtures/document.base.js deleted file mode 100644 index 1bd15a2e1..000000000 --- a/dist/fixtures/document.base.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.buildDocumentBase = void 0; -const buildDocumentBase = () => ({ - openapi: '3.0.0', - info: { - title: '', - description: '', - version: '1.0.0', - contact: {} - }, - tags: [], - servers: [], - components: {} -}); -exports.buildDocumentBase = buildDocumentBase; diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 98e2c2653..000000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import 'reflect-metadata'; -export * from './decorators'; -export * from './document-builder'; -export * from './interfaces'; -export * from './swagger-module'; -export * from './type-helpers'; -export * from './utils'; diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index b2f581adb..000000000 --- a/dist/index.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -require("reflect-metadata"); -__exportStar(require("./decorators"), exports); -__exportStar(require("./document-builder"), exports); -__exportStar(require("./interfaces"), exports); -__exportStar(require("./swagger-module"), exports); -__exportStar(require("./type-helpers"), exports); -__exportStar(require("./utils"), exports); diff --git a/dist/interfaces/callback-object.interface.d.ts b/dist/interfaces/callback-object.interface.d.ts deleted file mode 100644 index 58985d9b4..000000000 --- a/dist/interfaces/callback-object.interface.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface CallBackObject { - name: string; - callbackUrl: string; - method: string; - requestBody: { - type: T; - }; - expectedResponse: { - status: number; - description?: string; - }; -} diff --git a/dist/interfaces/callback-object.interface.js b/dist/interfaces/callback-object.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/callback-object.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/denormalized-doc-resolvers.interface.d.ts b/dist/interfaces/denormalized-doc-resolvers.interface.d.ts deleted file mode 100644 index 09dac0ee5..000000000 --- a/dist/interfaces/denormalized-doc-resolvers.interface.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface DenormalizedDocResolvers { - root: Function[]; - security: Function[]; - tags: Function[]; - callbacks: Function[]; - responses: Function[]; -} diff --git a/dist/interfaces/denormalized-doc-resolvers.interface.js b/dist/interfaces/denormalized-doc-resolvers.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/denormalized-doc-resolvers.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/denormalized-doc.interface.d.ts b/dist/interfaces/denormalized-doc.interface.d.ts deleted file mode 100644 index 89ee8bc99..000000000 --- a/dist/interfaces/denormalized-doc.interface.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { OpenAPIObject, OperationObject, ResponsesObject } from './open-api-spec.interface'; -export interface DenormalizedDoc extends Partial { - root?: { - method: string; - path: string; - } & OperationObject; - responses?: ResponsesObject; -} diff --git a/dist/interfaces/denormalized-doc.interface.js b/dist/interfaces/denormalized-doc.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/denormalized-doc.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/enum-schema-attributes.interface.d.ts b/dist/interfaces/enum-schema-attributes.interface.d.ts deleted file mode 100644 index 2241a3611..000000000 --- a/dist/interfaces/enum-schema-attributes.interface.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { SchemaObject } from './open-api-spec.interface'; -export type EnumSchemaAttributes = Pick; diff --git a/dist/interfaces/enum-schema-attributes.interface.js b/dist/interfaces/enum-schema-attributes.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/enum-schema-attributes.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/index.d.ts b/dist/interfaces/index.d.ts deleted file mode 100644 index 068c50a86..000000000 --- a/dist/interfaces/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { OpenAPIObject } from './open-api-spec.interface'; -export * from './swagger-custom-options.interface'; -export * from './swagger-document-options.interface'; diff --git a/dist/interfaces/index.js b/dist/interfaces/index.js deleted file mode 100644 index b64b78292..000000000 --- a/dist/interfaces/index.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./swagger-custom-options.interface"), exports); -__exportStar(require("./swagger-document-options.interface"), exports); diff --git a/dist/interfaces/module-route.interface.d.ts b/dist/interfaces/module-route.interface.d.ts deleted file mode 100644 index e44c1c79f..000000000 --- a/dist/interfaces/module-route.interface.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { OpenAPIObject } from '.'; -export type ModuleRoute = Omit & Record<'root', any>; diff --git a/dist/interfaces/module-route.interface.js b/dist/interfaces/module-route.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/module-route.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/open-api-spec.interface.d.ts b/dist/interfaces/open-api-spec.interface.d.ts deleted file mode 100644 index ba914bd2a..000000000 --- a/dist/interfaces/open-api-spec.interface.d.ts +++ /dev/null @@ -1,239 +0,0 @@ -export interface OpenAPIObject { - openapi: string; - info: InfoObject; - servers?: ServerObject[]; - paths: PathsObject; - components?: ComponentsObject; - security?: SecurityRequirementObject[]; - tags?: TagObject[]; - externalDocs?: ExternalDocumentationObject; -} -export interface InfoObject { - title: string; - description?: string; - termsOfService?: string; - contact?: ContactObject; - license?: LicenseObject; - version: string; -} -export interface ContactObject { - name?: string; - url?: string; - email?: string; -} -export interface LicenseObject { - name: string; - url?: string; -} -export interface ServerObject { - url: string; - description?: string; - variables?: Record; -} -export interface ServerVariableObject { - enum?: string[] | boolean[] | number[]; - default: string | boolean | number; - description?: string; -} -export interface ComponentsObject { - schemas?: Record; - responses?: Record; - parameters?: Record; - examples?: Record; - requestBodies?: Record; - headers?: Record; - securitySchemes?: Record; - links?: Record; - callbacks?: Record; -} -export type PathsObject = Record; -export interface PathItemObject { - $ref?: string; - summary?: string; - description?: string; - get?: OperationObject; - put?: OperationObject; - post?: OperationObject; - delete?: OperationObject; - options?: OperationObject; - head?: OperationObject; - patch?: OperationObject; - trace?: OperationObject; - servers?: ServerObject[]; - parameters?: (ParameterObject | ReferenceObject)[]; -} -export interface OperationObject { - tags?: string[]; - summary?: string; - description?: string; - externalDocs?: ExternalDocumentationObject; - operationId?: string; - parameters?: (ParameterObject | ReferenceObject)[]; - requestBody?: RequestBodyObject | ReferenceObject; - responses: ResponsesObject; - callbacks?: CallbacksObject; - deprecated?: boolean; - security?: SecurityRequirementObject[]; - servers?: ServerObject[]; -} -export interface ExternalDocumentationObject { - description?: string; - url: string; -} -export type ParameterLocation = 'query' | 'header' | 'path' | 'cookie'; -export type ParameterStyle = 'matrix' | 'label' | 'form' | 'simple' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject'; -export interface BaseParameterObject { - description?: string; - required?: boolean; - deprecated?: boolean; - allowEmptyValue?: boolean; - style?: ParameterStyle; - explode?: boolean; - allowReserved?: boolean; - schema?: SchemaObject | ReferenceObject; - examples?: Record; - example?: any; - content?: ContentObject; -} -export interface ParameterObject extends BaseParameterObject { - name: string; - in: ParameterLocation; -} -export interface RequestBodyObject { - description?: string; - content: ContentObject; - required?: boolean; -} -export type ContentObject = Record; -export interface MediaTypeObject { - schema?: SchemaObject | ReferenceObject; - examples?: ExamplesObject; - example?: any; - encoding?: EncodingObject; -} -export type EncodingObject = Record; -export interface EncodingPropertyObject { - contentType?: string; - headers?: Record; - style?: string; - explode?: boolean; - allowReserved?: boolean; -} -export interface ResponsesObject extends Record { - default?: ResponseObject | ReferenceObject; -} -export interface ResponseObject { - description: string; - headers?: HeadersObject; - content?: ContentObject; - links?: LinksObject; -} -export type CallbacksObject = Record; -export type CallbackObject = Record; -export type HeadersObject = Record; -export interface ExampleObject { - summary?: string; - description?: string; - value?: any; - externalValue?: string; -} -export type LinksObject = Record; -export interface LinkObject { - operationRef?: string; - operationId?: string; - parameters?: LinkParametersObject; - requestBody?: any | string; - description?: string; - server?: ServerObject; -} -export type LinkParametersObject = Record; -export type HeaderObject = BaseParameterObject; -export interface TagObject { - name: string; - description?: string; - externalDocs?: ExternalDocumentationObject; -} -export type ExamplesObject = Record; -export interface ReferenceObject { - $ref: string; -} -export interface SchemaObject { - nullable?: boolean; - discriminator?: DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: XmlObject; - externalDocs?: ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - type?: string; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - items?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; -} -export type SchemasObject = Record; -export interface DiscriminatorObject { - propertyName: string; - mapping?: Record; -} -export interface XmlObject { - name?: string; - namespace?: string; - prefix?: string; - attribute?: boolean; - wrapped?: boolean; -} -export type SecuritySchemeType = 'apiKey' | 'http' | 'oauth2' | 'openIdConnect'; -export interface SecuritySchemeObject { - type: SecuritySchemeType; - description?: string; - name?: string; - in?: string; - scheme?: string; - bearerFormat?: string; - flows?: OAuthFlowsObject; - openIdConnectUrl?: string; - 'x-tokenName'?: string; - [extension: `x-${string}`]: any; -} -export interface OAuthFlowsObject { - implicit?: OAuthFlowObject; - password?: OAuthFlowObject; - clientCredentials?: OAuthFlowObject; - authorizationCode?: OAuthFlowObject; -} -export interface OAuthFlowObject { - authorizationUrl?: string; - tokenUrl?: string; - refreshUrl?: string; - scopes: ScopesObject; -} -export type ScopesObject = Record; -export type SecurityRequirementObject = Record; -export type ExtensionLocation = 'root' | 'info'; diff --git a/dist/interfaces/open-api-spec.interface.js b/dist/interfaces/open-api-spec.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/open-api-spec.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/schema-object-metadata.interface.d.ts b/dist/interfaces/schema-object-metadata.interface.d.ts deleted file mode 100644 index f7cfce5f4..000000000 --- a/dist/interfaces/schema-object-metadata.interface.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Type } from '@nestjs/common'; -import { EnumSchemaAttributes } from './enum-schema-attributes.interface'; -import { ReferenceObject, SchemaObject } from './open-api-spec.interface'; -export type EnumAllowedTypes = any[] | Record | (() => any[] | Record); -interface SchemaObjectCommonMetadata extends Omit { - isArray?: boolean; - name?: string; - enum?: EnumAllowedTypes; -} -export type SchemaObjectMetadata = (SchemaObjectCommonMetadata & { - type?: Type | Function | [Function] | 'array' | 'string' | 'number' | 'boolean' | 'integer' | 'null'; - required?: boolean; -}) | ({ - type?: Type | Function | [Function] | Record; - required?: boolean; - enumName: string; - enumSchema?: EnumSchemaAttributes; -} & SchemaObjectCommonMetadata) | ({ - type: 'object'; - properties: Record; - required?: string[]; - selfRequired?: boolean; -} & SchemaObjectCommonMetadata) | ({ - type: 'object'; - properties?: Record; - additionalProperties: SchemaObject | ReferenceObject | boolean; - required?: string[]; - selfRequired?: boolean; -} & SchemaObjectCommonMetadata); -export {}; diff --git a/dist/interfaces/schema-object-metadata.interface.js b/dist/interfaces/schema-object-metadata.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/schema-object-metadata.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-custom-options.interface.d.ts b/dist/interfaces/swagger-custom-options.interface.d.ts deleted file mode 100644 index 605622d43..000000000 --- a/dist/interfaces/swagger-custom-options.interface.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { OpenAPIObject } from './open-api-spec.interface'; -import { SwaggerUiOptions } from './swagger-ui-options.interface'; -export interface SwaggerCustomOptions { - useGlobalPrefix?: boolean; - swaggerUiEnabled?: boolean; - ui?: boolean; - raw?: boolean | Array<'json' | 'yaml'>; - swaggerUrl?: string; - jsonDocumentUrl?: string; - yamlDocumentUrl?: string; - patchDocumentOnRequest?: (req: TRequest, res: TResponse, document: OpenAPIObject) => OpenAPIObject; - explorer?: boolean; - swaggerOptions?: SwaggerUiOptions; - customCss?: string; - customCssUrl?: string | string[]; - customJs?: string | string[]; - customJsStr?: string | string[]; - customfavIcon?: string; - customSiteTitle?: string; - customSwaggerUiPath?: string; - validatorUrl?: string; - url?: string; - urls?: Record<'url' | 'name', string>[]; -} diff --git a/dist/interfaces/swagger-custom-options.interface.js b/dist/interfaces/swagger-custom-options.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/swagger-custom-options.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-document-options.interface.d.ts b/dist/interfaces/swagger-document-options.interface.d.ts deleted file mode 100644 index 68747a827..000000000 --- a/dist/interfaces/swagger-document-options.interface.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type OperationIdFactory = (controllerKey: string, methodKey: string, version?: string) => string; -export interface SwaggerDocumentOptions { - include?: Function[]; - extraModels?: Function[]; - ignoreGlobalPrefix?: boolean; - deepScanRoutes?: boolean; - operationIdFactory?: OperationIdFactory; - linkNameFactory?: (controllerKey: string, methodKey: string, fieldKey: string) => string; - autoTagControllers?: boolean; - onlyIncludeDecoratedEndpoints?: boolean; -} diff --git a/dist/interfaces/swagger-document-options.interface.js b/dist/interfaces/swagger-document-options.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/swagger-document-options.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-ui-init-options.interface.d.ts b/dist/interfaces/swagger-ui-init-options.interface.d.ts deleted file mode 100644 index 9ece09ccd..000000000 --- a/dist/interfaces/swagger-ui-init-options.interface.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { OpenAPIObject } from './open-api-spec.interface'; -import { SwaggerUiOptions } from './swagger-ui-options.interface'; -export interface SwaggerUIInitOptions { - swaggerDoc: OpenAPIObject; - customOptions: SwaggerUiOptions; - swaggerUrl: string; -} diff --git a/dist/interfaces/swagger-ui-init-options.interface.js b/dist/interfaces/swagger-ui-init-options.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/swagger-ui-init-options.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/swagger-ui-options.interface.d.ts b/dist/interfaces/swagger-ui-options.interface.d.ts deleted file mode 100644 index 5d5624925..000000000 --- a/dist/interfaces/swagger-ui-options.interface.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface SwaggerUiOptions { - initOAuth?: { - clientId?: string; - clientSecret?: string; - realm?: string; - appName?: string; - scopeSeparator?: string; - scopes?: string[]; - additionalQueryStringParams?: Record; - useBasicAuthenticationWithAccessCodeGrant?: boolean; - usePkceWithAuthorizationCodeGrant?: boolean; - }; - persistAuthorization?: boolean; - [key: string]: any; -} diff --git a/dist/interfaces/swagger-ui-options.interface.js b/dist/interfaces/swagger-ui-options.interface.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/interfaces/swagger-ui-options.interface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/plugin/compiler-plugin.d.ts b/dist/plugin/compiler-plugin.d.ts deleted file mode 100644 index be0604abe..000000000 --- a/dist/plugin/compiler-plugin.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as ts from 'typescript'; -export declare const before: (options?: Record, program?: ts.Program) => (ctx: ts.TransformationContext) => ts.Transformer; diff --git a/dist/plugin/compiler-plugin.js b/dist/plugin/compiler-plugin.js deleted file mode 100644 index 56f4069d4..000000000 --- a/dist/plugin/compiler-plugin.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.before = void 0; -const merge_options_1 = require("./merge-options"); -const plugin_debug_logger_1 = require("./plugin-debug-logger"); -const is_filename_matched_util_1 = require("./utils/is-filename-matched.util"); -const controller_class_visitor_1 = require("./visitors/controller-class.visitor"); -const model_class_visitor_1 = require("./visitors/model-class.visitor"); -const modelClassVisitor = new model_class_visitor_1.ModelClassVisitor(); -const controllerClassVisitor = new controller_class_visitor_1.ControllerClassVisitor(); -const before = (options, program) => { - options = (0, merge_options_1.mergePluginOptions)(options); - if (!program) { - const error = `The "program" reference must be provided when using the CLI Plugin. This error is likely caused by the "isolatedModules" compiler option being set to "true".`; - plugin_debug_logger_1.pluginDebugLogger.debug(error); - throw new Error(error); - } - return (ctx) => { - return (sf) => { - if ((0, is_filename_matched_util_1.isFilenameMatched)(options.dtoFileNameSuffix, sf.fileName)) { - return modelClassVisitor.visit(sf, ctx, program, options); - } - if ((0, is_filename_matched_util_1.isFilenameMatched)(options.controllerFileNameSuffix, sf.fileName)) { - return controllerClassVisitor.visit(sf, ctx, program, options); - } - return sf; - }; - }; -}; -exports.before = before; diff --git a/dist/plugin/index.d.ts b/dist/plugin/index.d.ts deleted file mode 100644 index f980bda5b..000000000 --- a/dist/plugin/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './compiler-plugin'; -export * from './visitors/readonly.visitor'; diff --git a/dist/plugin/index.js b/dist/plugin/index.js deleted file mode 100644 index f5a43755b..000000000 --- a/dist/plugin/index.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./compiler-plugin"), exports); -__exportStar(require("./visitors/readonly.visitor"), exports); diff --git a/dist/plugin/merge-options.d.ts b/dist/plugin/merge-options.d.ts deleted file mode 100644 index 0ddae3274..000000000 --- a/dist/plugin/merge-options.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -export interface PluginOptions { - dtoFileNameSuffix?: string | string[]; - controllerFileNameSuffix?: string | string[]; - classValidatorShim?: boolean; - classTransformerShim?: boolean | 'exclusive'; - dtoKeyOfComment?: string; - controllerKeyOfComment?: string; - introspectComments?: boolean; - esmCompatible?: boolean; - readonly?: boolean; - pathToSource?: string; - debug?: boolean; - parameterProperties?: boolean; - skipAutoHttpCode?: boolean; - skipDefaultValues?: boolean; -} -export declare const mergePluginOptions: (options?: Record) => PluginOptions; diff --git a/dist/plugin/merge-options.js b/dist/plugin/merge-options.js deleted file mode 100644 index a4269d0d9..000000000 --- a/dist/plugin/merge-options.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.mergePluginOptions = void 0; -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -const plugin_debug_logger_1 = require("./plugin-debug-logger"); -const defaultOptions = { - dtoFileNameSuffix: ['.dto.ts', '.entity.ts'], - controllerFileNameSuffix: ['.controller.ts'], - classValidatorShim: true, - classTransformerShim: false, - dtoKeyOfComment: 'description', - controllerKeyOfComment: 'summary', - introspectComments: false, - esmCompatible: false, - readonly: false, - debug: false, - skipDefaultValues: false -}; -const mergePluginOptions = (options = {}) => { - if ((0, shared_utils_1.isString)(options.dtoFileNameSuffix)) { - options.dtoFileNameSuffix = [options.dtoFileNameSuffix]; - } - if ((0, shared_utils_1.isString)(options.controllerFileNameSuffix)) { - options.controllerFileNameSuffix = [options.controllerFileNameSuffix]; - } - for (const key of ['dtoFileNameSuffix', 'controllerFileNameSuffix']) { - if (options[key] && options[key].includes('.ts')) { - plugin_debug_logger_1.pluginDebugLogger.warn(`Skipping ${key} option ".ts" because it can cause unwanted behaviour.`); - options[key] = options[key].filter((pattern) => pattern !== '.ts'); - if (options[key].length == 0) { - delete options[key]; - } - } - } - return Object.assign(Object.assign({}, defaultOptions), options); -}; -exports.mergePluginOptions = mergePluginOptions; diff --git a/dist/plugin/metadata-loader.d.ts b/dist/plugin/metadata-loader.d.ts deleted file mode 100644 index e2b3eaa7d..000000000 --- a/dist/plugin/metadata-loader.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare class MetadataLoader { - private static readonly refreshHooks; - static addRefreshHook(hook: () => void): number; - load(metadata: Record): Promise; - private applyMetadata; - private runHooks; -} diff --git a/dist/plugin/metadata-loader.js b/dist/plugin/metadata-loader.js deleted file mode 100644 index e8a73d859..000000000 --- a/dist/plugin/metadata-loader.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MetadataLoader = void 0; -const plugin_constants_1 = require("./plugin-constants"); -class MetadataLoader { - static addRefreshHook(hook) { - return MetadataLoader.refreshHooks.push(hook); - } - load(metadata) { - return __awaiter(this, void 0, void 0, function* () { - const pkgMetadata = metadata['@nestjs/swagger']; - if (!pkgMetadata) { - return; - } - const { models, controllers } = pkgMetadata; - if (models) { - yield this.applyMetadata(models); - } - if (controllers) { - yield this.applyMetadata(controllers); - } - this.runHooks(); - }); - } - applyMetadata(meta) { - return __awaiter(this, void 0, void 0, function* () { - const loadPromises = meta.map((_a) => __awaiter(this, [_a], void 0, function* ([fileImport, fileMeta]) { - const fileRef = yield fileImport; - Object.keys(fileMeta).map((key) => { - const clsRef = fileRef[key]; - clsRef[plugin_constants_1.METADATA_FACTORY_NAME] = () => fileMeta[key]; - }); - })); - yield Promise.all(loadPromises); - }); - } - runHooks() { - MetadataLoader.refreshHooks.forEach((hook) => hook()); - } -} -exports.MetadataLoader = MetadataLoader; -MetadataLoader.refreshHooks = new Array(); diff --git a/dist/plugin/plugin-constants.d.ts b/dist/plugin/plugin-constants.d.ts deleted file mode 100644 index fef0dd138..000000000 --- a/dist/plugin/plugin-constants.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const OPENAPI_NAMESPACE = "openapi"; -export declare const OPENAPI_PACKAGE_NAME = "@nestjs/swagger"; -export declare const METADATA_FACTORY_NAME = "_OPENAPI_METADATA_FACTORY"; diff --git a/dist/plugin/plugin-constants.js b/dist/plugin/plugin-constants.js deleted file mode 100644 index e31c07b2e..000000000 --- a/dist/plugin/plugin-constants.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.METADATA_FACTORY_NAME = exports.OPENAPI_PACKAGE_NAME = exports.OPENAPI_NAMESPACE = void 0; -exports.OPENAPI_NAMESPACE = 'openapi'; -exports.OPENAPI_PACKAGE_NAME = '@nestjs/swagger'; -exports.METADATA_FACTORY_NAME = '_OPENAPI_METADATA_FACTORY'; diff --git a/dist/plugin/plugin-debug-logger.d.ts b/dist/plugin/plugin-debug-logger.d.ts deleted file mode 100644 index dd9544ee9..000000000 --- a/dist/plugin/plugin-debug-logger.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ConsoleLogger } from '@nestjs/common'; -declare class PluginDebugLogger extends ConsoleLogger { -} -export declare const pluginDebugLogger: PluginDebugLogger; -export {}; diff --git a/dist/plugin/plugin-debug-logger.js b/dist/plugin/plugin-debug-logger.js deleted file mode 100644 index 0f9365e0c..000000000 --- a/dist/plugin/plugin-debug-logger.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.pluginDebugLogger = void 0; -const common_1 = require("@nestjs/common"); -class PluginDebugLogger extends common_1.ConsoleLogger { -} -exports.pluginDebugLogger = new PluginDebugLogger('CLI Plugin'); diff --git a/dist/plugin/utils/ast-utils.d.ts b/dist/plugin/utils/ast-utils.d.ts deleted file mode 100644 index d7639c70c..000000000 --- a/dist/plugin/utils/ast-utils.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { DocComment, DocNode } from '@microsoft/tsdoc'; -import * as ts from 'typescript'; -import { Decorator, Node, ObjectFlags, Type, TypeChecker, TypeFlags, TypeFormatFlags, UnionTypeNode } from 'typescript'; -export declare function renderDocNode(docNode: DocNode): string; -export declare function isArray(type: Type): boolean; -export declare function getTypeArguments(type: Type): any; -export declare function isBoolean(type: Type): boolean; -export declare function isString(type: Type): boolean; -export declare function isStringLiteral(type: Type): boolean; -export declare function isStringMapping(type: Type): boolean; -export declare function isNumber(type: Type): boolean; -export declare function isBigInt(type: Type): boolean; -export declare function isInterface(type: Type): boolean; -export declare function isEnum(type: Type): boolean; -export declare function isEnumLiteral(type: Type): boolean; -export declare function hasFlag(type: Type, flag: TypeFlags): boolean; -export declare function hasObjectFlag(type: Type, flag: ObjectFlags): boolean; -export declare function getText(type: Type, typeChecker: TypeChecker, enclosingNode?: Node, typeFormatFlags?: TypeFormatFlags): string; -export declare function getDefaultTypeFormatFlags(enclosingNode: Node): number; -export declare function getDocComment(node: Node): DocComment; -export declare function getMainCommentOfNode(node: Node): string; -export declare function parseCommentDocValue(docValue: string, type: ts.Type): string; -export declare function getTsDocTagsOfNode(node: Node, typeChecker: TypeChecker): any; -export declare function getTsDocErrorsOfNode(node: Node): any[]; -export declare function getDecoratorArguments(decorator: Decorator): any[] | ts.NodeArray; -export declare function getDecoratorName(decorator: Decorator): string; -export declare function findNullableTypeFromUnion(typeNode: UnionTypeNode, typeChecker: TypeChecker): ts.TypeNode; -export declare function createBooleanLiteral(factory: ts.NodeFactory, flag: boolean): ts.BooleanLiteral; -export declare function createPrimitiveLiteral(factory: ts.NodeFactory, item: unknown, typeOfItem?: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"): ts.StringLiteral | ts.NumericLiteral | ts.PrefixUnaryExpression | ts.BooleanLiteral; -export declare function createLiteralFromAnyValue(factory: ts.NodeFactory, item: unknown): any; diff --git a/dist/plugin/utils/ast-utils.js b/dist/plugin/utils/ast-utils.js deleted file mode 100644 index d6876d8a0..000000000 --- a/dist/plugin/utils/ast-utils.js +++ /dev/null @@ -1,273 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.renderDocNode = renderDocNode; -exports.isArray = isArray; -exports.getTypeArguments = getTypeArguments; -exports.isBoolean = isBoolean; -exports.isString = isString; -exports.isStringLiteral = isStringLiteral; -exports.isStringMapping = isStringMapping; -exports.isNumber = isNumber; -exports.isBigInt = isBigInt; -exports.isInterface = isInterface; -exports.isEnum = isEnum; -exports.isEnumLiteral = isEnumLiteral; -exports.hasFlag = hasFlag; -exports.hasObjectFlag = hasObjectFlag; -exports.getText = getText; -exports.getDefaultTypeFormatFlags = getDefaultTypeFormatFlags; -exports.getDocComment = getDocComment; -exports.getMainCommentOfNode = getMainCommentOfNode; -exports.parseCommentDocValue = parseCommentDocValue; -exports.getTsDocTagsOfNode = getTsDocTagsOfNode; -exports.getTsDocErrorsOfNode = getTsDocErrorsOfNode; -exports.getDecoratorArguments = getDecoratorArguments; -exports.getDecoratorName = getDecoratorName; -exports.findNullableTypeFromUnion = findNullableTypeFromUnion; -exports.createBooleanLiteral = createBooleanLiteral; -exports.createPrimitiveLiteral = createPrimitiveLiteral; -exports.createLiteralFromAnyValue = createLiteralFromAnyValue; -const tsdoc_1 = require("@microsoft/tsdoc"); -const typescript_1 = require("typescript"); -const plugin_utils_1 = require("./plugin-utils"); -function renderDocNode(docNode) { - let result = ''; - if (docNode) { - if (docNode instanceof tsdoc_1.DocExcerpt) { - result += docNode.content.toString(); - } - for (const childNode of docNode.getChildNodes()) { - result += renderDocNode(childNode); - } - } - return result; -} -function isArray(type) { - const symbol = type.getSymbol(); - if (!symbol) { - return false; - } - return symbol.getName() === 'Array' && getTypeArguments(type).length === 1; -} -function getTypeArguments(type) { - return type.typeArguments || []; -} -function isBoolean(type) { - return hasFlag(type, typescript_1.TypeFlags.Boolean); -} -function isString(type) { - return hasFlag(type, typescript_1.TypeFlags.String); -} -function isStringLiteral(type) { - return hasFlag(type, typescript_1.TypeFlags.StringLiteral) && !type.isUnion(); -} -function isStringMapping(type) { - return hasFlag(type, typescript_1.TypeFlags.StringMapping); -} -function isNumber(type) { - return hasFlag(type, typescript_1.TypeFlags.Number); -} -function isBigInt(type) { - return hasFlag(type, typescript_1.TypeFlags.BigInt); -} -function isInterface(type) { - return hasObjectFlag(type, typescript_1.ObjectFlags.Interface); -} -function isEnum(type) { - const hasEnumFlag = hasFlag(type, typescript_1.TypeFlags.Enum); - if (hasEnumFlag) { - return true; - } - if (isEnumLiteral(type)) { - return false; - } - const symbol = type.getSymbol(); - if (!symbol) { - return false; - } - const valueDeclaration = symbol.valueDeclaration; - if (!valueDeclaration) { - return false; - } - return valueDeclaration.kind === typescript_1.SyntaxKind.EnumDeclaration; -} -function isEnumLiteral(type) { - return hasFlag(type, typescript_1.TypeFlags.EnumLiteral) && !type.isUnion(); -} -function hasFlag(type, flag) { - return (type.flags & flag) === flag; -} -function hasObjectFlag(type, flag) { - return (type.objectFlags & flag) === flag; -} -function getText(type, typeChecker, enclosingNode, typeFormatFlags) { - if (!typeFormatFlags) { - typeFormatFlags = getDefaultTypeFormatFlags(enclosingNode); - } - const compilerNode = !enclosingNode ? undefined : enclosingNode; - return typeChecker.typeToString(type, compilerNode, typeFormatFlags); -} -function getDefaultTypeFormatFlags(enclosingNode) { - let formatFlags = typescript_1.TypeFormatFlags.UseTypeOfFunction | - typescript_1.TypeFormatFlags.NoTruncation | - typescript_1.TypeFormatFlags.UseFullyQualifiedType | - typescript_1.TypeFormatFlags.WriteTypeArgumentsOfSignature; - if (enclosingNode && enclosingNode.kind === typescript_1.SyntaxKind.TypeAliasDeclaration) - formatFlags |= typescript_1.TypeFormatFlags.InTypeAlias; - return formatFlags; -} -function getDocComment(node) { - const tsdocParser = new tsdoc_1.TSDocParser(); - const parserContext = tsdocParser.parseString(node.getFullText()); - return parserContext.docComment; -} -function getMainCommentOfNode(node) { - const docComment = getDocComment(node); - return renderDocNode(docComment.summarySection).trim(); -} -function parseCommentDocValue(docValue, type) { - let value = docValue.replace(/'/g, '"').trim(); - if (!type || !isString(type)) { - try { - value = JSON.parse(value); - } - catch (_a) { - } - } - else if (isString(type)) { - if (value.split(' ').length !== 1 && !value.startsWith('"')) { - value = null; - } - else { - value = value.replace(/"/g, ''); - } - } - return value; -} -function getTsDocTagsOfNode(node, typeChecker) { - const docComment = getDocComment(node); - const tagDefinitions = { - example: { - hasProperties: true, - repeatable: true - } - }; - const tagResults = {}; - const introspectTsDocTags = (docComment) => { - for (const tag in tagDefinitions) { - const { hasProperties, repeatable } = tagDefinitions[tag]; - const blocks = docComment.customBlocks.filter((block) => block.blockTag.tagName === `@${tag}`); - if (blocks.length === 0) { - continue; - } - if (repeatable && !tagResults[tag]) { - tagResults[tag] = []; - } - const type = typeChecker.getTypeAtLocation(node); - if (hasProperties) { - blocks.forEach((block) => { - const docValue = renderDocNode(block.content).split('\n')[0]; - const value = parseCommentDocValue(docValue, type); - if (value !== null) { - if (repeatable) { - tagResults[tag].push(value); - } - else { - tagResults[tag] = value; - } - } - }); - } - else { - tagResults[tag] = true; - } - } - if (docComment.remarksBlock) { - tagResults['remarks'] = renderDocNode(docComment.remarksBlock.content).trim(); - } - if (docComment.deprecatedBlock) { - tagResults['deprecated'] = true; - } - }; - introspectTsDocTags(docComment); - return tagResults; -} -function getTsDocErrorsOfNode(node) { - const tsdocParser = new tsdoc_1.TSDocParser(); - const parserContext = tsdocParser.parseString(node.getFullText()); - const docComment = parserContext.docComment; - const tagResults = []; - const errorParsingRegex = /{(\d+)} (.*)/; - const introspectTsDocTags = (docComment) => { - const blocks = docComment.customBlocks.filter((block) => block.blockTag.tagName === '@throws'); - blocks.forEach((block) => { - try { - const docValue = renderDocNode(block.content).split('\n')[0].trim(); - const match = docValue.match(errorParsingRegex); - tagResults.push({ - status: match[1], - description: `"${match[2]}"` - }); - } - catch (_a) { - } - }); - }; - introspectTsDocTags(docComment); - return tagResults; -} -function getDecoratorArguments(decorator) { - const callExpression = decorator.expression; - return (callExpression && callExpression.arguments) || []; -} -function getDecoratorName(decorator) { - const isDecoratorFactory = decorator.expression.kind === typescript_1.SyntaxKind.CallExpression; - if (isDecoratorFactory) { - const callExpression = decorator.expression; - const identifier = callExpression - .expression; - if ((0, plugin_utils_1.isDynamicallyAdded)(identifier)) { - return undefined; - } - return getIdentifierFromName(callExpression.expression).getText(); - } - return getIdentifierFromName(decorator.expression).getText(); -} -function getIdentifierFromName(expression) { - const identifier = getNameFromExpression(expression); - if (expression && expression.kind !== typescript_1.SyntaxKind.Identifier) { - throw new Error(); - } - return identifier; -} -function getNameFromExpression(expression) { - if (expression && expression.kind === typescript_1.SyntaxKind.PropertyAccessExpression) { - return expression.name; - } - return expression; -} -function findNullableTypeFromUnion(typeNode, typeChecker) { - return typeNode.types.find((tNode) => hasFlag(typeChecker.getTypeAtLocation(tNode), typescript_1.TypeFlags.Null)); -} -function createBooleanLiteral(factory, flag) { - return flag ? factory.createTrue() : factory.createFalse(); -} -function createPrimitiveLiteral(factory, item, typeOfItem = typeof item) { - switch (typeOfItem) { - case 'boolean': - return createBooleanLiteral(factory, item); - case 'number': { - if (item < 0) { - return factory.createPrefixUnaryExpression(typescript_1.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(item))); - } - return factory.createNumericLiteral(item); - } - case 'string': - return factory.createStringLiteral(item); - } -} -function createLiteralFromAnyValue(factory, item) { - return Array.isArray(item) - ? factory.createArrayLiteralExpression(item.map((item) => createLiteralFromAnyValue(factory, item))) - : createPrimitiveLiteral(factory, item); -} diff --git a/dist/plugin/utils/is-filename-matched.util.d.ts b/dist/plugin/utils/is-filename-matched.util.d.ts deleted file mode 100644 index bddf2006f..000000000 --- a/dist/plugin/utils/is-filename-matched.util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const isFilenameMatched: (patterns: string[], filename: string) => boolean; diff --git a/dist/plugin/utils/is-filename-matched.util.js b/dist/plugin/utils/is-filename-matched.util.js deleted file mode 100644 index e28ede211..000000000 --- a/dist/plugin/utils/is-filename-matched.util.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isFilenameMatched = void 0; -const isFilenameMatched = (patterns, filename) => patterns.some((path) => filename.includes(path)); -exports.isFilenameMatched = isFilenameMatched; diff --git a/dist/plugin/utils/plugin-utils.d.ts b/dist/plugin/utils/plugin-utils.d.ts deleted file mode 100644 index 4c4f41bb8..000000000 --- a/dist/plugin/utils/plugin-utils.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; -export declare function getDecoratorOrUndefinedByNames(names: string[], decorators: readonly ts.Decorator[], factory: ts.NodeFactory): ts.Decorator | undefined; -export declare function getTypeReferenceAsString(type: ts.Type, typeChecker: ts.TypeChecker, arrayDepth?: number): { - typeName: string; - isArray?: boolean; - arrayDepth?: number; -}; -export declare function isPromiseOrObservable(type: string): boolean; -export declare function hasPropertyKey(key: string, properties: ts.NodeArray): boolean; -export declare function getOutputExtension(fileName: string): string; -export declare function replaceImportPath(typeReference: string, fileName: string, options: PluginOptions): { - typeReference: string; - typeName: string; - importPath: string; -} | { - typeReference: string; - importPath: string; - typeName?: undefined; -}; -export declare function insertAt(string: string, index: number, substring: string): string; -export declare function isDynamicallyAdded(identifier: ts.Node): boolean; -export declare function isAutoGeneratedEnumUnion(type: ts.Type, typeChecker: ts.TypeChecker): ts.Type; -export declare function isAutoGeneratedTypeUnion(type: ts.Type): boolean; -export declare function extractTypeArgumentIfArray(type: ts.Type): { - type: ts.Type; - isArray: boolean; -}; -export declare function convertPath(windowsPath: string): string; -export declare function canReferenceNode(node: ts.Node, options: PluginOptions): boolean; diff --git a/dist/plugin/utils/plugin-utils.js b/dist/plugin/utils/plugin-utils.js deleted file mode 100644 index 97d3cdf35..000000000 --- a/dist/plugin/utils/plugin-utils.js +++ /dev/null @@ -1,307 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getDecoratorOrUndefinedByNames = getDecoratorOrUndefinedByNames; -exports.getTypeReferenceAsString = getTypeReferenceAsString; -exports.isPromiseOrObservable = isPromiseOrObservable; -exports.hasPropertyKey = hasPropertyKey; -exports.getOutputExtension = getOutputExtension; -exports.replaceImportPath = replaceImportPath; -exports.insertAt = insertAt; -exports.isDynamicallyAdded = isDynamicallyAdded; -exports.isAutoGeneratedEnumUnion = isAutoGeneratedEnumUnion; -exports.isAutoGeneratedTypeUnion = isAutoGeneratedTypeUnion; -exports.extractTypeArgumentIfArray = extractTypeArgumentIfArray; -exports.convertPath = convertPath; -exports.canReferenceNode = canReferenceNode; -const lodash_1 = require("lodash"); -const path_1 = require("path"); -const ts = require("typescript"); -const ast_utils_1 = require("./ast-utils"); -function getDecoratorOrUndefinedByNames(names, decorators, factory) { - return (decorators || factory.createNodeArray()).find((item) => { - try { - const decoratorName = (0, ast_utils_1.getDecoratorName)(item); - return names.includes(decoratorName); - } - catch (_a) { - return false; - } - }); -} -function getTypeReferenceAsString(type, typeChecker, arrayDepth = 0) { - if ((0, ast_utils_1.isArray)(type)) { - const arrayType = (0, ast_utils_1.getTypeArguments)(type)[0]; - const { typeName, arrayDepth: depth } = getTypeReferenceAsString(arrayType, typeChecker, arrayDepth + 1); - if (!typeName) { - return { typeName: undefined }; - } - return { - typeName: `${typeName}`, - isArray: true, - arrayDepth: depth - }; - } - if ((0, ast_utils_1.isBoolean)(type)) { - return { typeName: Boolean.name, arrayDepth }; - } - if ((0, ast_utils_1.isNumber)(type)) { - return { typeName: Number.name, arrayDepth }; - } - if ((0, ast_utils_1.isBigInt)(type)) { - return { typeName: BigInt.name, arrayDepth }; - } - if ((0, ast_utils_1.isString)(type) || (0, ast_utils_1.isStringLiteral)(type) || (0, ast_utils_1.isStringMapping)(type)) { - return { typeName: String.name, arrayDepth }; - } - if (isPromiseOrObservable((0, ast_utils_1.getText)(type, typeChecker))) { - const typeArguments = (0, ast_utils_1.getTypeArguments)(type); - const elementType = getTypeReferenceAsString((0, lodash_1.head)(typeArguments), typeChecker, arrayDepth); - return elementType; - } - if (type.isClass()) { - return { typeName: (0, ast_utils_1.getText)(type, typeChecker), arrayDepth }; - } - try { - const text = (0, ast_utils_1.getText)(type, typeChecker); - if (text === Date.name) { - return { typeName: text, arrayDepth }; - } - if (isOptionalBoolean(text)) { - return { typeName: Boolean.name, arrayDepth }; - } - if (isAutoGeneratedTypeUnion(type) || - isAutoGeneratedEnumUnion(type, typeChecker)) { - const types = type.types; - return getTypeReferenceAsString(types[types.length - 1], typeChecker, arrayDepth); - } - if (text === 'any' || - text === 'unknown' || - text === 'object' || - (0, ast_utils_1.isInterface)(type) || - (type.isUnionOrIntersection() && !(0, ast_utils_1.isEnum)(type))) { - return { typeName: 'Object', arrayDepth }; - } - if ((0, ast_utils_1.isEnum)(type)) { - return { typeName: undefined, arrayDepth }; - } - if (type.aliasSymbol) { - return { typeName: 'Object', arrayDepth }; - } - if (typeChecker.getApparentType(type).getSymbol().getEscapedName() === - 'String') { - return { typeName: String.name, arrayDepth }; - } - return { typeName: undefined }; - } - catch (_a) { - return { typeName: undefined }; - } -} -function isPromiseOrObservable(type) { - return type.includes('Promise<') || type.includes('Observable<'); -} -function hasPropertyKey(key, properties) { - return properties - .filter((item) => !isDynamicallyAdded(item)) - .some((item) => item.name.getText() === key); -} -function getOutputExtension(fileName) { - if (fileName.endsWith('.mts')) { - return '.mjs'; - } - else if (fileName.endsWith('.cts')) { - return '.cjs'; - } - else { - return '.js'; - } -} -function replaceImportPath(typeReference, fileName, options) { - if (!typeReference.includes('import')) { - return { typeReference, importPath: null }; - } - if (options.esmCompatible) { - typeReference = typeReference.replace(', { with: { "resolution-mode": "import" } }', ''); - } - let importPath = /\(\"([^)]).+(\")/.exec(typeReference)[0]; - if (!importPath) { - return { typeReference: undefined, importPath: null }; - } - importPath = convertPath(importPath); - importPath = importPath.slice(2, importPath.length - 1); - try { - if ((0, path_1.isAbsolute)(importPath)) { - throw {}; - } - require.resolve(importPath); - if (!options.esmCompatible) { - typeReference = typeReference.replace('import', 'require'); - } - return { - typeReference, - importPath: null - }; - } - catch (_a) { - const from = (options === null || options === void 0 ? void 0 : options.readonly) - ? convertPath(options.pathToSource) - : path_1.posix.dirname(convertPath(fileName)); - let relativePath = path_1.posix.relative(from, importPath); - relativePath = relativePath[0] !== '.' ? './' + relativePath : relativePath; - const nodeModulesText = 'node_modules'; - const nodeModulePos = relativePath.indexOf(nodeModulesText); - if (nodeModulePos >= 0) { - relativePath = relativePath.slice(nodeModulePos + nodeModulesText.length + 1); - const typesText = '@types'; - const typesPos = relativePath.indexOf(typesText); - if (typesPos >= 0) { - relativePath = relativePath.slice(typesPos + typesText.length + 1); - } - const indexText = '/index'; - const indexPos = relativePath.indexOf(indexText); - if (indexPos >= 0) { - relativePath = relativePath.slice(0, indexPos); - } - } - else if (options.esmCompatible) { - const extension = getOutputExtension(fileName); - relativePath += extension; - } - typeReference = typeReference.replace(importPath, relativePath); - if (options.readonly) { - const { typeName, typeImportStatement } = convertToAsyncImport(typeReference); - return { - typeReference: typeImportStatement, - typeName, - importPath: relativePath - }; - } - if (options.esmCompatible) { - const { typeName, typeImportStatement } = convertToAsyncImport(typeReference); - return { - typeReference: `(${typeImportStatement}).${typeName}`, - importPath: relativePath - }; - } - return { - typeReference: typeReference.replace('import', 'require'), - importPath: relativePath - }; - } -} -function convertToAsyncImport(typeReference) { - const regexp = /import\(.+\).([^\]]+)(\])?/; - const match = regexp.exec(typeReference); - if ((match === null || match === void 0 ? void 0 : match.length) >= 2) { - const importPos = typeReference.indexOf(match[0]); - typeReference = typeReference.replace(`.${match[1]}`, ''); - return { - typeImportStatement: insertAt(typeReference, importPos, 'await '), - typeName: match[1] - }; - } - return { typeImportStatement: typeReference }; -} -function insertAt(string, index, substring) { - return string.slice(0, index) + substring + string.slice(index); -} -function isDynamicallyAdded(identifier) { - return identifier && !identifier.parent && identifier.pos === -1; -} -function isAutoGeneratedEnumUnion(type, typeChecker) { - if (type.isUnionOrIntersection() && !(0, ast_utils_1.isEnum)(type)) { - if (!type.types) { - return undefined; - } - const undefinedTypeIndex = type.types.findIndex((type) => type.intrinsicName === 'undefined' || type.intrinsicName === 'null'); - if (undefinedTypeIndex < 0) { - return undefined; - } - let parentType = undefined; - const isParentSymbolEqual = type.types.every((item, index) => { - if (index === undefinedTypeIndex) { - return true; - } - if (!item.symbol) { - return false; - } - if (!item.symbol.parent || - item.symbol.flags !== ts.SymbolFlags.EnumMember) { - return false; - } - const symbolType = typeChecker.getDeclaredTypeOfSymbol(item.symbol.parent); - if (symbolType === parentType || !parentType) { - parentType = symbolType; - return true; - } - return false; - }); - if (isParentSymbolEqual) { - return parentType; - } - } - return undefined; -} -function isAutoGeneratedTypeUnion(type) { - if (type.isUnionOrIntersection() && !(0, ast_utils_1.isEnum)(type)) { - if (!type.types) { - return false; - } - const undefinedTypeIndex = type.types.findIndex((type) => type.intrinsicName === 'undefined'); - if (type.types.length === 2 && undefinedTypeIndex >= 0) { - return true; - } - } - return false; -} -function extractTypeArgumentIfArray(type) { - if ((0, ast_utils_1.isArray)(type)) { - type = (0, ast_utils_1.getTypeArguments)(type)[0]; - if (!type) { - return undefined; - } - return { - type, - isArray: true - }; - } - return { - type, - isArray: false - }; -} -function isOptionalBoolean(text) { - return typeof text === 'string' && text === 'boolean | undefined'; -} -function convertPath(windowsPath) { - return windowsPath - .replace(/^\\\\\?\\/, '') - .replace(/\\/g, '/') - .replace(/\/\/+/g, '/'); -} -function canReferenceNode(node, options) { - var _a; - if (!options.readonly) { - return true; - } - if (ts.isCallExpression(node) || ts.isIdentifier(node)) { - return false; - } - if (ts.isNewExpression(node)) { - if (((_a = node.expression) === null || _a === void 0 ? void 0 : _a.escapedText) === 'Date') { - return true; - } - return false; - } - if (node.kind === ts.SyntaxKind.FalseKeyword || - node.kind === ts.SyntaxKind.TrueKeyword || - node.kind === ts.SyntaxKind.NullKeyword) { - return true; - } - if (ts.isNumericLiteral(node) || - ts.isPrefixUnaryExpression(node) || - ts.isStringLiteral(node)) { - return true; - } - return false; -} diff --git a/dist/plugin/utils/type-reference-to-identifier.util.d.ts b/dist/plugin/utils/type-reference-to-identifier.util.d.ts deleted file mode 100644 index ae9be329f..000000000 --- a/dist/plugin/utils/type-reference-to-identifier.util.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; -export declare function typeReferenceToIdentifier(typeReferenceDescriptor: { - typeName: string; - isArray?: boolean; - arrayDepth?: number; -}, hostFilename: string, options: PluginOptions, factory: ts.NodeFactory, type: ts.Type, typeImports: Record): ts.Identifier; diff --git a/dist/plugin/utils/type-reference-to-identifier.util.js b/dist/plugin/utils/type-reference-to-identifier.util.js deleted file mode 100644 index b3a5eabde..000000000 --- a/dist/plugin/utils/type-reference-to-identifier.util.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.typeReferenceToIdentifier = typeReferenceToIdentifier; -const plugin_debug_logger_1 = require("../plugin-debug-logger"); -const plugin_utils_1 = require("./plugin-utils"); -function typeReferenceToIdentifier(typeReferenceDescriptor, hostFilename, options, factory, type, typeImports) { - if (options.readonly) { - assertReferenceableType(type, typeReferenceDescriptor.typeName, hostFilename, options); - } - const { typeReference, importPath, typeName } = (0, plugin_utils_1.replaceImportPath)(typeReferenceDescriptor.typeName, hostFilename, options); - let identifier; - if (options.readonly && (typeReference === null || typeReference === void 0 ? void 0 : typeReference.includes('import'))) { - if (!typeImports[importPath]) { - typeImports[importPath] = typeReference; - } - let ref = `t["${importPath}"].${typeName}`; - if (typeReferenceDescriptor.isArray) { - ref = wrapTypeInArray(ref, typeReferenceDescriptor.arrayDepth); - } - identifier = factory.createIdentifier(ref); - } - else { - let ref = typeReference; - if (typeReferenceDescriptor.isArray) { - ref = wrapTypeInArray(ref, typeReferenceDescriptor.arrayDepth); - } - identifier = factory.createIdentifier(ref); - } - return identifier; -} -function wrapTypeInArray(typeRef, arrayDepth) { - for (let i = 0; i < arrayDepth; i++) { - typeRef = `[${typeRef}]`; - } - return typeRef; -} -function assertReferenceableType(type, parsedTypeName, hostFilename, options) { - if (!type.symbol) { - return true; - } - if (!type.symbol.isReferenced) { - return true; - } - if (parsedTypeName.includes('import')) { - return true; - } - const errorMessage = `Type "${parsedTypeName}" is not referenceable ("${hostFilename}"). To fix this, make sure to export this type.`; - if (options.debug) { - plugin_debug_logger_1.pluginDebugLogger.debug(errorMessage); - } - throw new Error(errorMessage); -} diff --git a/dist/plugin/visitors/abstract.visitor.d.ts b/dist/plugin/visitors/abstract.visitor.d.ts deleted file mode 100644 index a985324fc..000000000 --- a/dist/plugin/visitors/abstract.visitor.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as ts from 'typescript'; -export declare class AbstractFileVisitor { - updateImports(sourceFile: ts.SourceFile, factory: ts.NodeFactory | undefined, program: ts.Program): ts.SourceFile; -} diff --git a/dist/plugin/visitors/abstract.visitor.js b/dist/plugin/visitors/abstract.visitor.js deleted file mode 100644 index c8dcb5a96..000000000 --- a/dist/plugin/visitors/abstract.visitor.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AbstractFileVisitor = void 0; -const ts = require("typescript"); -const plugin_constants_1 = require("../plugin-constants"); -const [major, minor] = ts.versionMajorMinor.split('.').map((x) => +x); -class AbstractFileVisitor { - updateImports(sourceFile, factory, program) { - if (major <= 4 && minor < 8) { - throw new Error('Nest CLI plugin does not support TypeScript < v4.8'); - } - const importEqualsDeclaration = factory.createImportEqualsDeclaration(undefined, false, factory.createIdentifier(plugin_constants_1.OPENAPI_NAMESPACE), factory.createExternalModuleReference(factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME))); - const compilerOptions = program.getCompilerOptions(); - if (compilerOptions.module >= ts.ModuleKind.ES2015 && - compilerOptions.module <= ts.ModuleKind.ESNext) { - const importAsDeclaration = factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier(plugin_constants_1.OPENAPI_NAMESPACE))), factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME), undefined); - return factory.updateSourceFile(sourceFile, [ - importAsDeclaration, - ...sourceFile.statements - ]); - } - else { - return factory.updateSourceFile(sourceFile, [ - importEqualsDeclaration, - ...sourceFile.statements - ]); - } - } -} -exports.AbstractFileVisitor = AbstractFileVisitor; diff --git a/dist/plugin/visitors/controller-class.visitor.d.ts b/dist/plugin/visitors/controller-class.visitor.d.ts deleted file mode 100644 index a6597fb49..000000000 --- a/dist/plugin/visitors/controller-class.visitor.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; -import { AbstractFileVisitor } from './abstract.visitor'; -type ClassMetadata = Record; -export declare class ControllerClassVisitor extends AbstractFileVisitor { - private readonly _collectedMetadata; - private readonly _typeImports; - get typeImports(): Record; - collectedMetadata(options: PluginOptions): Array<[ts.CallExpression, Record]>; - visit(sourceFile: ts.SourceFile, ctx: ts.TransformationContext, program: ts.Program, options: PluginOptions): ts.Node; - addDecoratorToNode(factory: ts.NodeFactory, compilerNode: ts.MethodDeclaration, typeChecker: ts.TypeChecker, options: PluginOptions, sourceFile: ts.SourceFile, metadata: ClassMetadata): ts.MethodDeclaration; - createApiOperationDecorator(factory: ts.NodeFactory, node: ts.MethodDeclaration, decorators: readonly ts.Decorator[], options: PluginOptions, sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker, metadata: ClassMetadata): ts.Decorator[]; - createApiResponseDecorator(factory: ts.NodeFactory, node: ts.MethodDeclaration, options: PluginOptions, metadata: ClassMetadata): ts.Decorator[]; - createDecoratorObjectLiteralExpr(factory: ts.NodeFactory, node: ts.MethodDeclaration, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, metadata: ClassMetadata, options: PluginOptions): ts.ObjectLiteralExpression; - createTypePropertyAssignment(factory: ts.NodeFactory, node: ts.MethodDeclaration, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.PropertyAssignment; - createStatusPropertyAssignment(factory: ts.NodeFactory, node: ts.MethodDeclaration, existingProperties: ts.NodeArray): ts.PropertyAssignment; - getStatusCodeIdentifier(factory: ts.NodeFactory, node: ts.MethodDeclaration): any; - private normalizeImportPath; -} -export {}; diff --git a/dist/plugin/visitors/controller-class.visitor.js b/dist/plugin/visitors/controller-class.visitor.js deleted file mode 100644 index 716d3c68a..000000000 --- a/dist/plugin/visitors/controller-class.visitor.js +++ /dev/null @@ -1,265 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ControllerClassVisitor = void 0; -const lodash_1 = require("lodash"); -const path_1 = require("path"); -const ts = require("typescript"); -const decorators_1 = require("../../decorators"); -const plugin_constants_1 = require("../plugin-constants"); -const ast_utils_1 = require("../utils/ast-utils"); -const plugin_utils_1 = require("../utils/plugin-utils"); -const type_reference_to_identifier_util_1 = require("../utils/type-reference-to-identifier.util"); -const abstract_visitor_1 = require("./abstract.visitor"); -class ControllerClassVisitor extends abstract_visitor_1.AbstractFileVisitor { - constructor() { - super(...arguments); - this._collectedMetadata = {}; - this._typeImports = {}; - } - get typeImports() { - return this._typeImports; - } - collectedMetadata(options) { - const metadataWithImports = []; - Object.keys(this._collectedMetadata).forEach((filePath) => { - const metadata = this._collectedMetadata[filePath]; - const fileExt = options.esmCompatible ? (0, plugin_utils_1.getOutputExtension)(filePath) : ''; - const path = filePath.replace(/\.[jt]s$/, fileExt); - const importExpr = ts.factory.createCallExpression(ts.factory.createToken(ts.SyntaxKind.ImportKeyword), undefined, [ts.factory.createStringLiteral(path)]); - metadataWithImports.push([importExpr, metadata]); - }); - return metadataWithImports; - } - visit(sourceFile, ctx, program, options) { - const typeChecker = program.getTypeChecker(); - if (!options.readonly) { - sourceFile = this.updateImports(sourceFile, ctx.factory, program); - } - const visitNode = (node) => { - var _a; - if (ts.isMethodDeclaration(node)) { - try { - const metadata = {}; - const updatedNode = this.addDecoratorToNode(ctx.factory, node, typeChecker, options, sourceFile, metadata); - if (!options.readonly) { - return updatedNode; - } - else { - const filePath = this.normalizeImportPath(options.pathToSource, sourceFile.fileName); - if (!this._collectedMetadata[filePath]) { - this._collectedMetadata[filePath] = {}; - } - const parent = node.parent; - const clsName = (_a = parent.name) === null || _a === void 0 ? void 0 : _a.getText(); - if (clsName) { - if (!this._collectedMetadata[filePath][clsName]) { - this._collectedMetadata[filePath][clsName] = {}; - } - Object.assign(this._collectedMetadata[filePath][clsName], metadata); - } - } - } - catch (_b) { - if (!options.readonly) { - return node; - } - } - } - if (options.readonly) { - ts.forEachChild(node, visitNode); - } - else { - return ts.visitEachChild(node, visitNode, ctx); - } - }; - return ts.visitNode(sourceFile, visitNode); - } - addDecoratorToNode(factory, compilerNode, typeChecker, options, sourceFile, metadata) { - var _a; - const hostFilename = sourceFile.fileName; - const decorators = ts.canHaveDecorators(compilerNode) && ts.getDecorators(compilerNode); - if (!decorators) { - return compilerNode; - } - const apiOperationDecoratorsArray = this.createApiOperationDecorator(factory, compilerNode, decorators, options, sourceFile, typeChecker, metadata); - const apiResponseDecoratorsArray = this.createApiResponseDecorator(factory, compilerNode, options, metadata); - const removeExistingApiOperationDecorator = apiOperationDecoratorsArray.length > 0; - const existingDecorators = removeExistingApiOperationDecorator - ? decorators.filter((item) => (0, ast_utils_1.getDecoratorName)(item) !== decorators_1.ApiOperation.name) - : decorators; - const modifiers = (_a = ts.getModifiers(compilerNode)) !== null && _a !== void 0 ? _a : []; - const objectLiteralExpr = this.createDecoratorObjectLiteralExpr(factory, compilerNode, typeChecker, factory.createNodeArray(), hostFilename, metadata, options); - const updatedDecorators = [ - ...apiOperationDecoratorsArray, - ...apiResponseDecoratorsArray, - ...existingDecorators, - factory.createDecorator(factory.createCallExpression(factory.createIdentifier(`${plugin_constants_1.OPENAPI_NAMESPACE}.${decorators_1.ApiResponse.name}`), undefined, [factory.createObjectLiteralExpression(objectLiteralExpr.properties)])) - ]; - if (!options.readonly) { - return factory.updateMethodDeclaration(compilerNode, [...updatedDecorators, ...modifiers], compilerNode.asteriskToken, compilerNode.name, compilerNode.questionToken, compilerNode.typeParameters, compilerNode.parameters, compilerNode.type, compilerNode.body); - } - else { - return compilerNode; - } - } - createApiOperationDecorator(factory, node, decorators, options, sourceFile, typeChecker, metadata) { - if (!options.introspectComments) { - return []; - } - const apiOperationDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decorators_1.ApiOperation.name], decorators, factory); - let apiOperationExistingProps = undefined; - if (apiOperationDecorator && !options.readonly) { - const apiOperationExpr = (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(apiOperationDecorator)); - if (apiOperationExpr) { - apiOperationExistingProps = - apiOperationExpr.properties; - } - } - const extractedComments = (0, ast_utils_1.getMainCommentOfNode)(node); - if (!extractedComments) { - return []; - } - const properties = [ - ...(apiOperationExistingProps !== null && apiOperationExistingProps !== void 0 ? apiOperationExistingProps : factory.createNodeArray()) - ]; - const tags = (0, ast_utils_1.getTsDocTagsOfNode)(node, typeChecker); - const hasRemarksKey = (0, plugin_utils_1.hasPropertyKey)('description', factory.createNodeArray(apiOperationExistingProps)); - if (!hasRemarksKey && tags.remarks) { - const remarksPropertyAssignment = factory.createPropertyAssignment('description', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.remarks)); - properties.push(remarksPropertyAssignment); - if (options.controllerKeyOfComment === 'description') { - properties.unshift(factory.createPropertyAssignment('summary', factory.createStringLiteral(extractedComments))); - } - else { - const keyToGenerate = options.controllerKeyOfComment; - properties.unshift(factory.createPropertyAssignment(keyToGenerate, factory.createStringLiteral(extractedComments))); - } - } - else { - const keyToGenerate = options.controllerKeyOfComment; - properties.unshift(factory.createPropertyAssignment(keyToGenerate, factory.createStringLiteral(extractedComments))); - } - const hasDeprecatedKey = (0, plugin_utils_1.hasPropertyKey)('deprecated', factory.createNodeArray(apiOperationExistingProps)); - if (!hasDeprecatedKey && tags.deprecated) { - const deprecatedPropertyAssignment = factory.createPropertyAssignment('deprecated', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.deprecated)); - properties.push(deprecatedPropertyAssignment); - } - const objectLiteralExpr = factory.createObjectLiteralExpression((0, lodash_1.compact)(properties)); - const apiOperationDecoratorArguments = factory.createNodeArray([objectLiteralExpr]); - const methodKey = node.name.getText(); - if (metadata[methodKey]) { - const existingObjectLiteralExpr = metadata[methodKey]; - const existingProperties = existingObjectLiteralExpr.properties; - const updatedProperties = factory.createNodeArray([ - ...existingProperties, - ...(0, lodash_1.compact)(properties) - ]); - const updatedObjectLiteralExpr = factory.createObjectLiteralExpression(updatedProperties); - metadata[methodKey] = updatedObjectLiteralExpr; - } - else { - metadata[methodKey] = objectLiteralExpr; - } - if (apiOperationDecorator) { - const expr = apiOperationDecorator.expression; - const updatedCallExpr = factory.updateCallExpression(expr, expr.expression, undefined, apiOperationDecoratorArguments); - return [factory.updateDecorator(apiOperationDecorator, updatedCallExpr)]; - } - else { - return [ - factory.createDecorator(factory.createCallExpression(factory.createIdentifier(`${plugin_constants_1.OPENAPI_NAMESPACE}.${decorators_1.ApiOperation.name}`), undefined, apiOperationDecoratorArguments)) - ]; - } - } - createApiResponseDecorator(factory, node, options, metadata) { - if (!options.introspectComments) { - return []; - } - const tags = (0, ast_utils_1.getTsDocErrorsOfNode)(node); - if (!tags.length) { - return []; - } - return tags.map((tag) => { - const properties = []; - properties.push(factory.createPropertyAssignment('status', factory.createNumericLiteral(tag.status))); - properties.push(factory.createPropertyAssignment('description', factory.createNumericLiteral(tag.description))); - const objectLiteralExpr = factory.createObjectLiteralExpression((0, lodash_1.compact)(properties)); - const methodKey = node.name.getText(); - metadata[methodKey] = objectLiteralExpr; - const apiResponseDecoratorArguments = factory.createNodeArray([objectLiteralExpr]); - return factory.createDecorator(factory.createCallExpression(factory.createIdentifier(`${plugin_constants_1.OPENAPI_NAMESPACE}.${decorators_1.ApiResponse.name}`), undefined, apiResponseDecoratorArguments)); - }); - } - createDecoratorObjectLiteralExpr(factory, node, typeChecker, existingProperties = factory.createNodeArray(), hostFilename, metadata, options) { - let properties = []; - if (!options.readonly && !options.skipAutoHttpCode) { - properties = properties.concat(existingProperties, this.createStatusPropertyAssignment(factory, node, existingProperties)); - } - properties = properties.concat([ - this.createTypePropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) - ]); - const objectLiteralExpr = factory.createObjectLiteralExpression((0, lodash_1.compact)(properties)); - const methodKey = node.name.getText(); - const existingExprOrUndefined = metadata[methodKey]; - if (existingExprOrUndefined) { - const existingProperties = existingExprOrUndefined.properties; - const updatedProperties = factory.createNodeArray([ - ...existingProperties, - ...(0, lodash_1.compact)(properties) - ]); - const updatedObjectLiteralExpr = factory.createObjectLiteralExpression(updatedProperties); - metadata[methodKey] = updatedObjectLiteralExpr; - } - else { - metadata[methodKey] = objectLiteralExpr; - } - return objectLiteralExpr; - } - createTypePropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) { - if ((0, plugin_utils_1.hasPropertyKey)('type', existingProperties)) { - return undefined; - } - const signature = typeChecker.getSignatureFromDeclaration(node); - const type = typeChecker.getReturnTypeOfSignature(signature); - if (!type) { - return undefined; - } - const typeReferenceDescriptor = (0, plugin_utils_1.getTypeReferenceAsString)(type, typeChecker); - if (!typeReferenceDescriptor.typeName) { - return undefined; - } - if (typeReferenceDescriptor.typeName.includes('node_modules')) { - return undefined; - } - const identifier = (0, type_reference_to_identifier_util_1.typeReferenceToIdentifier)(typeReferenceDescriptor, hostFilename, options, factory, type, this._typeImports); - return factory.createPropertyAssignment('type', identifier); - } - createStatusPropertyAssignment(factory, node, existingProperties) { - if ((0, plugin_utils_1.hasPropertyKey)('status', existingProperties)) { - return undefined; - } - const statusNode = this.getStatusCodeIdentifier(factory, node); - return factory.createPropertyAssignment('status', statusNode); - } - getStatusCodeIdentifier(factory, node) { - const decorators = ts.canHaveDecorators(node) && ts.getDecorators(node); - const httpCodeDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['HttpCode'], decorators, factory); - if (httpCodeDecorator) { - const argument = (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(httpCodeDecorator)); - if (argument) { - return argument; - } - } - const postDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['Post'], decorators, factory); - if (postDecorator) { - return factory.createIdentifier('201'); - } - return factory.createIdentifier('200'); - } - normalizeImportPath(pathToSource, path) { - let relativePath = path_1.posix.relative((0, plugin_utils_1.convertPath)(pathToSource), (0, plugin_utils_1.convertPath)(path)); - relativePath = relativePath[0] !== '.' ? './' + relativePath : relativePath; - return relativePath; - } -} -exports.ControllerClassVisitor = ControllerClassVisitor; diff --git a/dist/plugin/visitors/model-class.visitor.d.ts b/dist/plugin/visitors/model-class.visitor.d.ts deleted file mode 100644 index 2c49fc300..000000000 --- a/dist/plugin/visitors/model-class.visitor.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import * as ts from 'typescript'; -import { PropertyAssignment } from 'typescript'; -import { PluginOptions } from '../merge-options'; -import { AbstractFileVisitor } from './abstract.visitor'; -type ClassMetadata = Record; -export declare class ModelClassVisitor extends AbstractFileVisitor { - private readonly _typeImports; - private readonly _collectedMetadata; - get typeImports(): Record; - collectedMetadata(options: PluginOptions): Array<[ts.CallExpression, Record]>; - visit(sourceFile: ts.SourceFile, ctx: ts.TransformationContext, program: ts.Program, options: PluginOptions): ts.Node; - visitPropertyNodeDeclaration(node: ts.PropertyDeclaration, ctx: ts.TransformationContext, typeChecker: ts.TypeChecker, options: PluginOptions, sourceFile: ts.SourceFile, metadata: ClassMetadata): ts.PropertyDeclaration; - visitConstructorDeclarationNode(constructorNode: ts.ConstructorDeclaration, typeChecker: ts.TypeChecker, options: PluginOptions, sourceFile: ts.SourceFile, metadata: ClassMetadata): void; - addMetadataFactory(factory: ts.NodeFactory, node: ts.ClassDeclaration, classMetadata: ClassMetadata, sourceFile: ts.SourceFile, options: PluginOptions): ts.ClassDeclaration; - inspectPropertyDeclaration(factory: ts.NodeFactory, compilerNode: ts.PropertyDeclaration, typeChecker: ts.TypeChecker, options: PluginOptions, hostFilename: string, sourceFile: ts.SourceFile, metadata: ClassMetadata): void; - createDecoratorObjectLiteralExpr(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, typeChecker: ts.TypeChecker, existingProperties?: ts.NodeArray, options?: PluginOptions, hostFilename?: string, sourceFile?: ts.SourceFile): ts.ObjectLiteralExpression; - private createTypePropertyAssignments; - createInitializerForArrayLiteralTypeNode(node: ts.ArrayTypeNode, factory: ts.NodeFactory, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.ArrowFunction; - createInitializerForTypeLiteralNode(node: ts.TypeLiteralNode, factory: ts.NodeFactory, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.ArrowFunction; - isNullableUnion(node: ts.UnionTypeNode): { - nullableType: ts.TypeNode; - isNullable: boolean; - }; - createEnumPropertyAssignment(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, typeChecker: ts.TypeChecker, existingProperties: ts.NodeArray, hostFilename: string, options: PluginOptions): ts.PropertyAssignment | ts.PropertyAssignment[]; - createDefaultPropertyAssignment(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, existingProperties: ts.NodeArray, options: PluginOptions): ts.PropertyAssignment; - createValidationPropertyAssignments(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature, options: PluginOptions): ts.PropertyAssignment[]; - addPropertyByValidationDecorator(factory: ts.NodeFactory, decoratorName: string, propertyKey: string, decorators: readonly ts.Decorator[], assignments: ts.PropertyAssignment[], options: PluginOptions): void; - addPropertiesByValidationDecorator(factory: ts.NodeFactory, decoratorName: string, decorators: readonly ts.Decorator[], assignments: ts.PropertyAssignment[], addPropertyAssignments: (decoratorRef: ts.Decorator) => PropertyAssignment[]): void; - addClassMetadata(node: ts.PropertyDeclaration, objectLiteral: ts.ObjectLiteralExpression, sourceFile: ts.SourceFile, metadata: ClassMetadata): void; - createDescriptionAndTsDocTagPropertyAssignments(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature | ts.ParameterDeclaration, typeChecker: ts.TypeChecker, existingProperties?: ts.NodeArray, options?: PluginOptions, sourceFile?: ts.SourceFile): ts.PropertyAssignment[]; - private normalizeImportPath; - private clonePrimitiveLiteral; - private getInitializerPrimitiveTypeName; -} -export {}; diff --git a/dist/plugin/visitors/model-class.visitor.js b/dist/plugin/visitors/model-class.visitor.js deleted file mode 100644 index 1ea2388e4..000000000 --- a/dist/plugin/visitors/model-class.visitor.js +++ /dev/null @@ -1,514 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelClassVisitor = void 0; -const lodash_1 = require("lodash"); -const path_1 = require("path"); -const ts = require("typescript"); -const typescript_1 = require("typescript"); -const decorators_1 = require("../../decorators"); -const decorators_properties_1 = require("../../services/decorators-properties"); -const plugin_constants_1 = require("../plugin-constants"); -const plugin_debug_logger_1 = require("../plugin-debug-logger"); -const ast_utils_1 = require("../utils/ast-utils"); -const plugin_utils_1 = require("../utils/plugin-utils"); -const type_reference_to_identifier_util_1 = require("../utils/type-reference-to-identifier.util"); -const abstract_visitor_1 = require("./abstract.visitor"); -class ModelClassVisitor extends abstract_visitor_1.AbstractFileVisitor { - constructor() { - super(...arguments); - this._typeImports = {}; - this._collectedMetadata = {}; - } - get typeImports() { - return this._typeImports; - } - collectedMetadata(options) { - const metadataWithImports = []; - Object.keys(this._collectedMetadata).forEach((filePath) => { - const metadata = this._collectedMetadata[filePath]; - const fileExt = options.esmCompatible ? (0, plugin_utils_1.getOutputExtension)(filePath) : ''; - const path = filePath.replace(/\.[jt]s$/, fileExt); - const importExpr = ts.factory.createCallExpression(ts.factory.createToken(ts.SyntaxKind.ImportKeyword), undefined, [ts.factory.createStringLiteral(path)]); - metadataWithImports.push([importExpr, metadata]); - }); - return metadataWithImports; - } - visit(sourceFile, ctx, program, options) { - const typeChecker = program.getTypeChecker(); - sourceFile = this.updateImports(sourceFile, ctx.factory, program); - const propertyNodeVisitorFactory = (metadata) => (node) => { - const visit = () => { - if (ts.isPropertyDeclaration(node)) { - this.visitPropertyNodeDeclaration(node, ctx, typeChecker, options, sourceFile, metadata); - } - else if (options.parameterProperties && - ts.isConstructorDeclaration(node)) { - this.visitConstructorDeclarationNode(node, typeChecker, options, sourceFile, metadata); - } - return node; - }; - const visitedNode = visit(); - if (!options.readonly) { - return visitedNode; - } - }; - const visitClassNode = (node) => { - var _a; - if (ts.isClassDeclaration(node)) { - const metadata = {}; - const isExported = (_a = node.modifiers) === null || _a === void 0 ? void 0 : _a.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword); - if (options.readonly) { - if (isExported) { - ts.forEachChild(node, propertyNodeVisitorFactory(metadata)); - } - else { - if (options.debug) { - plugin_debug_logger_1.pluginDebugLogger.debug(`Skipping class "${node.name.getText()}" because it's not exported.`); - } - } - } - else { - node = ts.visitEachChild(node, propertyNodeVisitorFactory(metadata), ctx); - } - if ((isExported && options.readonly) || !options.readonly) { - const declaration = this.addMetadataFactory(ctx.factory, node, metadata, sourceFile, options); - if (!options.readonly) { - return declaration; - } - } - } - if (options.readonly) { - ts.forEachChild(node, visitClassNode); - } - else { - return ts.visitEachChild(node, visitClassNode, ctx); - } - }; - return ts.visitNode(sourceFile, visitClassNode); - } - visitPropertyNodeDeclaration(node, ctx, typeChecker, options, sourceFile, metadata) { - const isPropertyStatic = (node.modifiers || []).some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword); - if (isPropertyStatic) { - return node; - } - const isPrivateProperty = ts.isPrivateIdentifier(node.name); - if (isPrivateProperty) { - return node; - } - const decorators = ts.canHaveDecorators(node) && ts.getDecorators(node); - const classTransformerShim = options.classTransformerShim; - const hidePropertyDecoratorExists = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(classTransformerShim - ? [decorators_1.ApiHideProperty.name, 'Exclude'] - : [decorators_1.ApiHideProperty.name], decorators, typescript_1.factory); - const annotatePropertyDecoratorExists = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(classTransformerShim ? [decorators_1.ApiProperty.name, 'Expose'] : [decorators_1.ApiProperty.name], decorators, typescript_1.factory); - if (!annotatePropertyDecoratorExists && - (hidePropertyDecoratorExists || classTransformerShim === 'exclusive')) { - return node; - } - else if (annotatePropertyDecoratorExists && hidePropertyDecoratorExists) { - plugin_debug_logger_1.pluginDebugLogger.debug(`"${node.parent.name.getText()}->${node.name.getText()}" has conflicting decorators, excluding as @ApiHideProperty() takes priority.`); - return node; - } - try { - this.inspectPropertyDeclaration(ctx.factory, node, typeChecker, options, sourceFile.fileName, sourceFile, metadata); - } - catch (err) { - return node; - } - } - visitConstructorDeclarationNode(constructorNode, typeChecker, options, sourceFile, metadata) { - constructorNode.forEachChild((node) => { - if (ts.isParameter(node) && - node.modifiers != null && - node.modifiers.some((modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword || - modifier.kind === ts.SyntaxKind.PrivateKeyword || - modifier.kind === ts.SyntaxKind.PublicKeyword || - modifier.kind === ts.SyntaxKind.ProtectedKeyword)) { - const objectLiteralExpr = this.createDecoratorObjectLiteralExpr(typescript_1.factory, node, typeChecker, typescript_1.factory.createNodeArray(), options, sourceFile.fileName, sourceFile); - const propertyName = node.name.getText(); - metadata[propertyName] = objectLiteralExpr; - } - }); - } - addMetadataFactory(factory, node, classMetadata, sourceFile, options) { - const returnValue = factory.createObjectLiteralExpression(Object.keys(classMetadata).map((key) => factory.createPropertyAssignment(factory.createIdentifier(key), classMetadata[key]))); - if (options.readonly) { - const filePath = this.normalizeImportPath(options.pathToSource, sourceFile.fileName); - if (!this._collectedMetadata[filePath]) { - this._collectedMetadata[filePath] = {}; - } - const attributeKey = node.name.getText(); - this._collectedMetadata[filePath][attributeKey] = returnValue; - return; - } - const method = factory.createMethodDeclaration([factory.createModifier(ts.SyntaxKind.StaticKeyword)], undefined, factory.createIdentifier(plugin_constants_1.METADATA_FACTORY_NAME), undefined, undefined, [], undefined, factory.createBlock([factory.createReturnStatement(returnValue)], true)); - return factory.updateClassDeclaration(node, node.modifiers, node.name, node.typeParameters, node.heritageClauses, [...node.members, method]); - } - inspectPropertyDeclaration(factory, compilerNode, typeChecker, options, hostFilename, sourceFile, metadata) { - const objectLiteralExpr = this.createDecoratorObjectLiteralExpr(factory, compilerNode, typeChecker, factory.createNodeArray(), options, hostFilename, sourceFile); - this.addClassMetadata(compilerNode, objectLiteralExpr, sourceFile, metadata); - } - createDecoratorObjectLiteralExpr(factory, node, typeChecker, existingProperties = factory.createNodeArray(), options = {}, hostFilename = '', sourceFile) { - const isRequired = !node.questionToken; - const properties = [ - ...existingProperties, - !(0, plugin_utils_1.hasPropertyKey)('required', existingProperties) && - factory.createPropertyAssignment('required', (0, ast_utils_1.createBooleanLiteral)(factory, isRequired)), - ...this.createTypePropertyAssignments(factory, node.type, typeChecker, existingProperties, hostFilename, options), - ...this.createDescriptionAndTsDocTagPropertyAssignments(factory, node, typeChecker, existingProperties, options, sourceFile), - this.createDefaultPropertyAssignment(factory, node, existingProperties, options), - this.createEnumPropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) - ]; - if ((ts.isPropertyDeclaration(node) || ts.isPropertySignature(node)) && - options.classValidatorShim) { - properties.push(this.createValidationPropertyAssignments(factory, node, options)); - } - return factory.createObjectLiteralExpression((0, lodash_1.compact)((0, lodash_1.flatten)(properties))); - } - createTypePropertyAssignments(factory, node, typeChecker, existingProperties, hostFilename, options) { - const key = 'type'; - if ((0, plugin_utils_1.hasPropertyKey)(key, existingProperties)) { - return []; - } - if (node) { - if (ts.isArrayTypeNode(node) && ts.isTypeLiteralNode(node.elementType)) { - const initializer = this.createInitializerForArrayLiteralTypeNode(node, factory, typeChecker, existingProperties, hostFilename, options); - return [factory.createPropertyAssignment(key, initializer)]; - } - if (ts.isTypeLiteralNode(node)) { - const initializer = this.createInitializerForTypeLiteralNode(node, factory, typeChecker, existingProperties, hostFilename, options); - return [factory.createPropertyAssignment(key, initializer)]; - } - if (ts.isUnionTypeNode(node)) { - const { nullableType, isNullable } = this.isNullableUnion(node); - const remainingTypes = node.types.filter((t) => t !== nullableType); - if (remainingTypes.length === 1) { - const nonNullishNode = remainingTypes[0]; - const resolved = typeChecker.getTypeAtLocation(nonNullishNode); - let candidateType = resolved; - const arrayTuple = (0, plugin_utils_1.extractTypeArgumentIfArray)(candidateType); - if (arrayTuple) { - candidateType = arrayTuple.type; - } - let isEnumType = false; - if (candidateType) { - if ((0, ast_utils_1.isEnum)(candidateType)) { - isEnumType = true; - } - else { - const maybeEnum = (0, plugin_utils_1.isAutoGeneratedEnumUnion)(candidateType, typeChecker); - if (maybeEnum) { - isEnumType = true; - } - } - } - if (isEnumType) { - return isNullable - ? [ - factory.createPropertyAssignment('nullable', (0, ast_utils_1.createBooleanLiteral)(factory, true)) - ] - : []; - } - const propertyAssignments = this.createTypePropertyAssignments(factory, nonNullishNode, typeChecker, existingProperties, hostFilename, options); - if (!isNullable) { - return propertyAssignments; - } - return [ - ...propertyAssignments, - factory.createPropertyAssignment('nullable', (0, ast_utils_1.createBooleanLiteral)(factory, true)) - ]; - } - } - } - const type = typeChecker.getTypeAtLocation(node); - if (!type) { - return []; - } - const typeReferenceDescriptor = (0, plugin_utils_1.getTypeReferenceAsString)(type, typeChecker); - if (!typeReferenceDescriptor.typeName) { - return []; - } - const identifier = (0, type_reference_to_identifier_util_1.typeReferenceToIdentifier)(typeReferenceDescriptor, hostFilename, options, factory, type, this._typeImports); - const initializer = factory.createArrowFunction(undefined, undefined, [], undefined, undefined, identifier); - return [factory.createPropertyAssignment(key, initializer)]; - } - createInitializerForArrayLiteralTypeNode(node, factory, typeChecker, existingProperties, hostFilename, options) { - const elementType = node.elementType; - const propertyAssignments = Array.from(elementType.members || []).map((member) => { - const literalExpr = this.createDecoratorObjectLiteralExpr(factory, member, typeChecker, existingProperties, options, hostFilename); - return factory.createPropertyAssignment(factory.createIdentifier(member.name.getText()), literalExpr); - }); - const initializer = factory.createArrowFunction(undefined, undefined, [], undefined, undefined, factory.createArrayLiteralExpression([ - factory.createParenthesizedExpression(factory.createObjectLiteralExpression(propertyAssignments)) - ])); - return initializer; - } - createInitializerForTypeLiteralNode(node, factory, typeChecker, existingProperties, hostFilename, options) { - const propertyAssignments = Array.from(node.members || []).map((member) => { - const literalExpr = this.createDecoratorObjectLiteralExpr(factory, member, typeChecker, existingProperties, options, hostFilename); - return factory.createPropertyAssignment(factory.createIdentifier(member.name.getText()), literalExpr); - }); - const initializer = factory.createArrowFunction(undefined, undefined, [], undefined, undefined, factory.createParenthesizedExpression(factory.createObjectLiteralExpression(propertyAssignments))); - return initializer; - } - isNullableUnion(node) { - const nullableType = node.types.find((type) => type.kind === ts.SyntaxKind.NullKeyword || - (ts.SyntaxKind.LiteralType && type.getText() === 'null')); - const isNullable = !!nullableType; - return { nullableType, isNullable }; - } - createEnumPropertyAssignment(factory, node, typeChecker, existingProperties, hostFilename, options) { - const key = 'enum'; - if ((0, plugin_utils_1.hasPropertyKey)(key, existingProperties)) { - return undefined; - } - let type; - try { - if (node.type) { - type = typeChecker.getTypeFromTypeNode(node.type); - } - } - catch (e) { - } - if (!type) { - type = typeChecker.getTypeAtLocation(node); - } - if (!type) { - return undefined; - } - if ((type.flags & ts.TypeFlags.Union) !== 0) { - const union = type; - const nonNullish = union.types.filter((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)) === 0); - if (nonNullish.length === 1) { - type = nonNullish[0]; - } - } - if ((0, plugin_utils_1.isAutoGeneratedTypeUnion)(type)) { - const types = type.types; - const nonUndefined = types.find((t) => t.intrinsicName !== 'undefined'); - if (nonUndefined) { - type = nonUndefined; - } - } - if ((0, plugin_utils_1.isAutoGeneratedTypeUnion)(type)) { - const types = type.types; - type = types[types.length - 1]; - } - const typeIsArrayTuple = (0, plugin_utils_1.extractTypeArgumentIfArray)(type); - if (!typeIsArrayTuple) { - return undefined; - } - const isArrayType = typeIsArrayTuple.isArray; - type = typeIsArrayTuple.type; - const isEnumMember = type.symbol && type.symbol.flags === ts.SymbolFlags.EnumMember; - if (!(0, ast_utils_1.isEnum)(type) || isEnumMember) { - if (!isEnumMember) { - type = (0, plugin_utils_1.isAutoGeneratedEnumUnion)(type, typeChecker); - } - if (!type) { - return undefined; - } - const typeIsArrayTuple = (0, plugin_utils_1.extractTypeArgumentIfArray)(type); - if (!typeIsArrayTuple) { - return undefined; - } - type = typeIsArrayTuple.type; - } - const typeReferenceDescriptor = { typeName: (0, ast_utils_1.getText)(type, typeChecker) }; - const enumIdentifier = (0, type_reference_to_identifier_util_1.typeReferenceToIdentifier)(typeReferenceDescriptor, hostFilename, options, factory, type, this._typeImports); - const enumProperty = factory.createPropertyAssignment(key, enumIdentifier); - if (isArrayType) { - const isArrayKey = 'isArray'; - const isArrayProperty = factory.createPropertyAssignment(isArrayKey, factory.createIdentifier('true')); - return [enumProperty, isArrayProperty]; - } - return enumProperty; - } - createDefaultPropertyAssignment(factory, node, existingProperties, options) { - var _a; - const key = 'default'; - if (options.skipDefaultValues) { - return undefined; - } - if ((0, plugin_utils_1.hasPropertyKey)(key, existingProperties)) { - return undefined; - } - if (ts.isPropertySignature(node)) { - return undefined; - } - if (node.initializer == null) { - return undefined; - } - let initializer = node.initializer; - if (ts.isAsExpression(initializer)) { - initializer = initializer.expression; - } - initializer = - (_a = this.clonePrimitiveLiteral(factory, initializer)) !== null && _a !== void 0 ? _a : initializer; - if (!(0, plugin_utils_1.canReferenceNode)(initializer, options)) { - const parentFilePath = node.getSourceFile().fileName; - const propertyName = node.name.getText(); - plugin_debug_logger_1.pluginDebugLogger.debug(`Skipping registering default value for "${propertyName}" property in "${parentFilePath}" file because it is not a referenceable value ("${initializer.getText()}").`); - return undefined; - } - return factory.createPropertyAssignment(key, initializer); - } - createValidationPropertyAssignments(factory, node, options) { - const assignments = []; - const decorators = ts.canHaveDecorators(node) && ts.getDecorators(node); - if (!options.readonly) { - this.addPropertyByValidationDecorator(factory, 'IsIn', 'enum', decorators, assignments, options); - } - decorators_properties_1.decoratorsProperties.forEach((decoratorProperty) => { - if (decoratorProperty.mappingType === decorators_properties_1.decoratorsPropertiesMappingType.DIRECT) { - this.addPropertyByValidationDecorator(factory, decoratorProperty.decorator, decoratorProperty.property, decorators, assignments, options); - } - else if (decoratorProperty.mappingType === - decorators_properties_1.decoratorsPropertiesMappingType.INDIRECT_VALUE) { - this.addPropertiesByValidationDecorator(factory, decoratorProperty.decorator, decorators, assignments, () => { - return [ - factory.createPropertyAssignment(decoratorProperty.property, (0, ast_utils_1.createPrimitiveLiteral)(factory, decoratorProperty.value)) - ]; - }); - } - else if (decoratorProperty.mappingType === - decorators_properties_1.decoratorsPropertiesMappingType.INDIRECT_ARGUMENT) { - this.addPropertiesByValidationDecorator(factory, decoratorProperty.decorator, decorators, assignments, (decoratorRef) => { - const decoratorArguments = (0, ast_utils_1.getDecoratorArguments)(decoratorRef); - const result = []; - const argumentValue = (0, lodash_1.head)(decoratorArguments); - if (!(0, plugin_utils_1.canReferenceNode)(argumentValue, options)) { - return result; - } - const clonedArgumentValue = this.clonePrimitiveLiteral(factory, argumentValue); - if (clonedArgumentValue) { - result.push(factory.createPropertyAssignment(decoratorProperty.property, clonedArgumentValue)); - } - return result; - }); - } - }); - this.addPropertiesByValidationDecorator(factory, 'Length', decorators, assignments, (decoratorRef) => { - var _a, _b; - const decoratorArguments = (0, ast_utils_1.getDecoratorArguments)(decoratorRef); - const result = []; - const minLength = (0, lodash_1.head)(decoratorArguments); - if (!(0, plugin_utils_1.canReferenceNode)(minLength, options)) { - return result; - } - const clonedMinLength = (_a = this.clonePrimitiveLiteral(factory, minLength)) !== null && _a !== void 0 ? _a : minLength; - if (clonedMinLength) { - result.push(factory.createPropertyAssignment('minLength', clonedMinLength)); - } - if (decoratorArguments.length > 1) { - const maxLength = decoratorArguments[1]; - if (!(0, plugin_utils_1.canReferenceNode)(maxLength, options)) { - return result; - } - const clonedMaxLength = (_b = this.clonePrimitiveLiteral(factory, maxLength)) !== null && _b !== void 0 ? _b : maxLength; - if (clonedMaxLength) { - result.push(factory.createPropertyAssignment('maxLength', clonedMaxLength)); - } - } - return result; - }); - this.addPropertiesByValidationDecorator(factory, 'Matches', decorators, assignments, (decoratorRef) => { - const decoratorArguments = (0, ast_utils_1.getDecoratorArguments)(decoratorRef); - return [ - factory.createPropertyAssignment('pattern', (0, ast_utils_1.createPrimitiveLiteral)(factory, (0, lodash_1.head)(decoratorArguments).text)) - ]; - }); - return assignments; - } - addPropertyByValidationDecorator(factory, decoratorName, propertyKey, decorators, assignments, options) { - this.addPropertiesByValidationDecorator(factory, decoratorName, decorators, assignments, (decoratorRef) => { - var _a; - const argument = (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(decoratorRef)); - const assignment = (_a = this.clonePrimitiveLiteral(factory, argument)) !== null && _a !== void 0 ? _a : argument; - if (!(0, plugin_utils_1.canReferenceNode)(assignment, options)) { - return []; - } - return [factory.createPropertyAssignment(propertyKey, assignment)]; - }); - } - addPropertiesByValidationDecorator(factory, decoratorName, decorators, assignments, addPropertyAssignments) { - const decoratorRef = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decoratorName], decorators, factory); - if (!decoratorRef) { - return; - } - assignments.push(...addPropertyAssignments(decoratorRef)); - } - addClassMetadata(node, objectLiteral, sourceFile, metadata) { - const hostClass = node.parent; - const className = hostClass.name && hostClass.name.getText(); - if (!className) { - return; - } - const propertyName = node.name && node.name.getText(sourceFile); - if (!propertyName || - (node.name && node.name.kind === ts.SyntaxKind.ComputedPropertyName)) { - return; - } - metadata[propertyName] = objectLiteral; - } - createDescriptionAndTsDocTagPropertyAssignments(factory, node, typeChecker, existingProperties = factory.createNodeArray(), options = {}, sourceFile) { - var _a; - if (!options.introspectComments || !sourceFile) { - return []; - } - const propertyAssignments = []; - const comments = (0, ast_utils_1.getMainCommentOfNode)(node); - const tags = (0, ast_utils_1.getTsDocTagsOfNode)(node, typeChecker); - const keyOfComment = options.dtoKeyOfComment; - if (!(0, plugin_utils_1.hasPropertyKey)(keyOfComment, existingProperties) && comments) { - const descriptionPropertyAssignment = factory.createPropertyAssignment(keyOfComment, factory.createStringLiteral(comments)); - propertyAssignments.push(descriptionPropertyAssignment); - } - const hasExampleOrExamplesKey = (0, plugin_utils_1.hasPropertyKey)('example', existingProperties) || - (0, plugin_utils_1.hasPropertyKey)('examples', existingProperties); - if (!hasExampleOrExamplesKey && ((_a = tags.example) === null || _a === void 0 ? void 0 : _a.length)) { - if (tags.example.length === 1) { - const examplePropertyAssignment = factory.createPropertyAssignment('example', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.example[0])); - propertyAssignments.push(examplePropertyAssignment); - } - else { - const examplesPropertyAssignment = factory.createPropertyAssignment('examples', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.example)); - propertyAssignments.push(examplesPropertyAssignment); - } - } - const hasDeprecatedKey = (0, plugin_utils_1.hasPropertyKey)('deprecated', existingProperties); - if (!hasDeprecatedKey && tags.deprecated) { - const deprecatedPropertyAssignment = factory.createPropertyAssignment('deprecated', (0, ast_utils_1.createLiteralFromAnyValue)(factory, tags.deprecated)); - propertyAssignments.push(deprecatedPropertyAssignment); - } - return propertyAssignments; - } - normalizeImportPath(pathToSource, path) { - let relativePath = path_1.posix.relative((0, plugin_utils_1.convertPath)(pathToSource), (0, plugin_utils_1.convertPath)(path)); - relativePath = relativePath[0] !== '.' ? './' + relativePath : relativePath; - return relativePath; - } - clonePrimitiveLiteral(factory, node) { - var _a; - const primitiveTypeName = this.getInitializerPrimitiveTypeName(node); - if (!primitiveTypeName) { - return undefined; - } - const text = (_a = node.text) !== null && _a !== void 0 ? _a : node.getText(); - return (0, ast_utils_1.createPrimitiveLiteral)(factory, text, primitiveTypeName); - } - getInitializerPrimitiveTypeName(node) { - if (ts.isIdentifier(node) && - (node.text === 'true' || node.text === 'false')) { - return 'boolean'; - } - if (ts.isNumericLiteral(node) || ts.isPrefixUnaryExpression(node)) { - return 'number'; - } - if (ts.isStringLiteral(node)) { - return 'string'; - } - return undefined; - } -} -exports.ModelClassVisitor = ModelClassVisitor; diff --git a/dist/plugin/visitors/readonly.visitor.d.ts b/dist/plugin/visitors/readonly.visitor.d.ts deleted file mode 100644 index 9acdbe886..000000000 --- a/dist/plugin/visitors/readonly.visitor.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; -export declare class ReadonlyVisitor { - private readonly options; - readonly key = "@nestjs/swagger"; - private readonly modelClassVisitor; - private readonly controllerClassVisitor; - get typeImports(): { - [x: string]: string; - }; - constructor(options: PluginOptions); - visit(program: ts.Program, sf: ts.SourceFile): ts.Node; - collect(): { - models: [ts.CallExpression, Record][]; - controllers: [ts.CallExpression, Record][]; - }; -} diff --git a/dist/plugin/visitors/readonly.visitor.js b/dist/plugin/visitors/readonly.visitor.js deleted file mode 100644 index 9cf1894df..000000000 --- a/dist/plugin/visitors/readonly.visitor.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ReadonlyVisitor = void 0; -const ts = require("typescript"); -const merge_options_1 = require("../merge-options"); -const is_filename_matched_util_1 = require("../utils/is-filename-matched.util"); -const controller_class_visitor_1 = require("./controller-class.visitor"); -const model_class_visitor_1 = require("./model-class.visitor"); -class ReadonlyVisitor { - get typeImports() { - return Object.assign(Object.assign({}, this.modelClassVisitor.typeImports), this.controllerClassVisitor.typeImports); - } - constructor(options) { - this.options = options; - this.key = '@nestjs/swagger'; - this.modelClassVisitor = new model_class_visitor_1.ModelClassVisitor(); - this.controllerClassVisitor = new controller_class_visitor_1.ControllerClassVisitor(); - options.readonly = true; - if (!options.pathToSource) { - throw new Error(`"pathToSource" must be defined in plugin options`); - } - } - visit(program, sf) { - const factoryHost = { factory: ts.factory }; - const parsedOptions = (0, merge_options_1.mergePluginOptions)(this.options); - if ((0, is_filename_matched_util_1.isFilenameMatched)(parsedOptions.dtoFileNameSuffix, sf.fileName)) { - return this.modelClassVisitor.visit(sf, factoryHost, program, parsedOptions); - } - if ((0, is_filename_matched_util_1.isFilenameMatched)(parsedOptions.controllerFileNameSuffix, sf.fileName)) { - return this.controllerClassVisitor.visit(sf, factoryHost, program, parsedOptions); - } - } - collect() { - return { - models: this.modelClassVisitor.collectedMetadata(this.options), - controllers: this.controllerClassVisitor.collectedMetadata(this.options) - }; - } -} -exports.ReadonlyVisitor = ReadonlyVisitor; diff --git a/dist/services/constants.d.ts b/dist/services/constants.d.ts deleted file mode 100644 index 40899e0ec..000000000 --- a/dist/services/constants.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const BUILT_IN_TYPES: (ArrayConstructor | ObjectConstructor | NumberConstructor | StringConstructor | BooleanConstructor)[]; diff --git a/dist/services/constants.js b/dist/services/constants.js deleted file mode 100644 index d04046b7c..000000000 --- a/dist/services/constants.js +++ /dev/null @@ -1,4 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BUILT_IN_TYPES = void 0; -exports.BUILT_IN_TYPES = [String, Boolean, Number, Object, Array]; diff --git a/dist/services/decorators-properties.d.ts b/dist/services/decorators-properties.d.ts deleted file mode 100644 index dccde65a3..000000000 --- a/dist/services/decorators-properties.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export declare enum decoratorsPropertiesMappingType { - DIRECT = 0, - INDIRECT_VALUE = 1, - INDIRECT_ARGUMENT = 2 -} -export declare const decoratorsProperties: ({ - mappingType: decoratorsPropertiesMappingType; - decorator: string; - property: string; - value: number; -} | { - mappingType: decoratorsPropertiesMappingType; - decorator: string; - property: string; - value: boolean; -} | { - mappingType: decoratorsPropertiesMappingType; - decorator: string; - property: string; - value: string; -})[]; diff --git a/dist/services/decorators-properties.js b/dist/services/decorators-properties.js deleted file mode 100644 index 6c8f4455d..000000000 --- a/dist/services/decorators-properties.js +++ /dev/null @@ -1,149 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.decoratorsProperties = exports.decoratorsPropertiesMappingType = void 0; -var decoratorsPropertiesMappingType; -(function (decoratorsPropertiesMappingType) { - decoratorsPropertiesMappingType[decoratorsPropertiesMappingType["DIRECT"] = 0] = "DIRECT"; - decoratorsPropertiesMappingType[decoratorsPropertiesMappingType["INDIRECT_VALUE"] = 1] = "INDIRECT_VALUE"; - decoratorsPropertiesMappingType[decoratorsPropertiesMappingType["INDIRECT_ARGUMENT"] = 2] = "INDIRECT_ARGUMENT"; -})(decoratorsPropertiesMappingType || (exports.decoratorsPropertiesMappingType = decoratorsPropertiesMappingType = {})); -exports.decoratorsProperties = [ - { - mappingType: decoratorsPropertiesMappingType.DIRECT, - decorator: 'Min', - property: 'minimum', - value: undefined - }, - { - mappingType: decoratorsPropertiesMappingType.DIRECT, - decorator: 'Max', - property: 'maximum', - value: undefined - }, - { - mappingType: decoratorsPropertiesMappingType.DIRECT, - decorator: 'MinLength', - property: 'minLength', - value: undefined - }, - { - mappingType: decoratorsPropertiesMappingType.DIRECT, - decorator: 'MaxLength', - property: 'maxLength', - value: undefined - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'ArrayNotEmpty', - property: 'minItems', - value: 1 - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsPositive', - property: 'minimum', - value: 1 - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsNegative', - property: 'maximum', - value: -1 - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'ArrayUnique', - property: 'uniqueItems', - value: true - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsBase64', - property: 'format', - value: 'base64' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsCreditCard', - property: 'format', - value: 'credit-card' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsCurrency', - property: 'format', - value: 'currency' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsEmail', - property: 'format', - value: 'email' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsJSON', - property: 'format', - value: 'json' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsUrl', - property: 'format', - value: 'uri' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsUUID', - property: 'format', - value: 'uuid' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsMobilePhone', - property: 'format', - value: 'mobile-phone' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsAscii', - property: 'pattern', - value: '^[\\x00-\\x7F]+$' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsHexColor', - property: 'pattern', - value: '^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_VALUE, - decorator: 'IsHexadecimal', - property: 'pattern', - value: '^(0x|0h)?[0-9A-F]+$' - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, - decorator: 'ArrayMinSize', - property: 'minItems', - value: undefined - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, - decorator: 'ArrayMaxSize', - property: 'maxItems', - value: undefined - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, - decorator: 'IsDivisibleBy', - property: 'multipleOf', - value: undefined - }, - { - mappingType: decoratorsPropertiesMappingType.INDIRECT_ARGUMENT, - decorator: 'Contains', - property: 'pattern', - value: undefined - } -]; diff --git a/dist/services/mimetype-content-wrapper.d.ts b/dist/services/mimetype-content-wrapper.d.ts deleted file mode 100644 index b622fe8d7..000000000 --- a/dist/services/mimetype-content-wrapper.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ContentObject } from '../interfaces/open-api-spec.interface'; -export declare class MimetypeContentWrapper { - wrap(mimetype: string[], obj: Record): Record<'content', ContentObject>; -} diff --git a/dist/services/mimetype-content-wrapper.js b/dist/services/mimetype-content-wrapper.js deleted file mode 100644 index 371ce202f..000000000 --- a/dist/services/mimetype-content-wrapper.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MimetypeContentWrapper = void 0; -const remove_undefined_keys_1 = require("../utils/remove-undefined-keys"); -class MimetypeContentWrapper { - wrap(mimetype, obj) { - const content = mimetype.reduce((acc, item) => (Object.assign(Object.assign({}, acc), { [item]: (0, remove_undefined_keys_1.removeUndefinedKeys)(obj) })), {}); - return { content }; - } -} -exports.MimetypeContentWrapper = MimetypeContentWrapper; diff --git a/dist/services/model-properties-accessor.d.ts b/dist/services/model-properties-accessor.d.ts deleted file mode 100644 index 2df5cb1fe..000000000 --- a/dist/services/model-properties-accessor.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Type } from '@nestjs/common'; -import 'reflect-metadata'; -export declare class ModelPropertiesAccessor { - getModelProperties(prototype: Type): string[]; - applyMetadataFactory(prototype: Type): void; -} diff --git a/dist/services/model-properties-accessor.js b/dist/services/model-properties-accessor.js deleted file mode 100644 index 2b2465e08..000000000 --- a/dist/services/model-properties-accessor.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelPropertiesAccessor = void 0; -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -require("reflect-metadata"); -const constants_1 = require("../constants"); -const api_property_decorator_1 = require("../decorators/api-property.decorator"); -const plugin_constants_1 = require("../plugin/plugin-constants"); -class ModelPropertiesAccessor { - getModelProperties(prototype) { - const properties = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES_ARRAY, prototype) || - []; - return properties - .filter(shared_utils_1.isString) - .filter((key) => key.charAt(0) === ':' && !(0, shared_utils_1.isFunction)(prototype[key])) - .map((key) => key.slice(1)); - } - applyMetadataFactory(prototype) { - const classPrototype = prototype; - do { - if (!prototype.constructor) { - return; - } - if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { - continue; - } - const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); - const properties = Object.keys(metadata); - properties.forEach((key) => { - (0, api_property_decorator_1.createApiPropertyDecorator)(metadata[key], false)(classPrototype, key); - }); - } while ((prototype = Reflect.getPrototypeOf(prototype)) && - prototype !== Object.prototype && - prototype); - } -} -exports.ModelPropertiesAccessor = ModelPropertiesAccessor; diff --git a/dist/services/parameter-metadata-accessor.d.ts b/dist/services/parameter-metadata-accessor.d.ts deleted file mode 100644 index f97095a69..000000000 --- a/dist/services/parameter-metadata-accessor.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Type } from '@nestjs/common'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; -import { ParameterLocation, SchemaObject } from '../interfaces/open-api-spec.interface'; -export interface ParamWithTypeMetadata { - name?: string | number | object; - type?: Type; - in?: ParameterLocation | 'body' | typeof PARAM_TOKEN_PLACEHOLDER; - isArray?: boolean; - items?: SchemaObject; - required?: boolean; - enum?: unknown[]; - enumName?: string; - enumSchema?: EnumSchemaAttributes; - selfRequired?: boolean; -} -export type ParamsWithType = Record; -declare const PARAM_TOKEN_PLACEHOLDER = "placeholder"; -export declare class ParameterMetadataAccessor { - explore(instance: object, prototype: Type, method: Function): ParamsWithType; - private mapParamType; -} -export {}; diff --git a/dist/services/parameter-metadata-accessor.js b/dist/services/parameter-metadata-accessor.js deleted file mode 100644 index f0f5c77bf..000000000 --- a/dist/services/parameter-metadata-accessor.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ParameterMetadataAccessor = void 0; -const constants_1 = require("@nestjs/common/constants"); -const route_paramtypes_enum_1 = require("@nestjs/common/enums/route-paramtypes.enum"); -const lodash_1 = require("lodash"); -const reverse_object_keys_util_1 = require("../utils/reverse-object-keys.util"); -const PARAM_TOKEN_PLACEHOLDER = 'placeholder'; -class ParameterMetadataAccessor { - explore(instance, prototype, method) { - const types = Reflect.getMetadata(constants_1.PARAMTYPES_METADATA, instance, method.name); - if (!(types === null || types === void 0 ? void 0 : types.length)) { - return undefined; - } - const routeArgsMetadata = Reflect.getMetadata(constants_1.ROUTE_ARGS_METADATA, instance.constructor, method.name) || {}; - const parametersWithType = (0, lodash_1.mapValues)((0, reverse_object_keys_util_1.reverseObjectKeys)(routeArgsMetadata), (param) => ({ - type: types[param.index], - name: param.data, - required: true - })); - const excludePredicate = (val) => val.in === PARAM_TOKEN_PLACEHOLDER || (val.name && val.in === 'body'); - const parameters = (0, lodash_1.omitBy)((0, lodash_1.mapValues)(parametersWithType, (val, key) => (Object.assign(Object.assign({}, val), { in: this.mapParamType(key) }))), excludePredicate); - return !(0, lodash_1.isEmpty)(parameters) ? parameters : undefined; - } - mapParamType(key) { - const keyPair = key.split(':'); - switch (Number(keyPair[0])) { - case route_paramtypes_enum_1.RouteParamtypes.BODY: - return 'body'; - case route_paramtypes_enum_1.RouteParamtypes.PARAM: - return 'path'; - case route_paramtypes_enum_1.RouteParamtypes.QUERY: - return 'query'; - case route_paramtypes_enum_1.RouteParamtypes.HEADERS: - return 'header'; - default: - return PARAM_TOKEN_PLACEHOLDER; - } - } -} -exports.ParameterMetadataAccessor = ParameterMetadataAccessor; diff --git a/dist/services/parameters-metadata-mapper.d.ts b/dist/services/parameters-metadata-mapper.d.ts deleted file mode 100644 index 53aa77311..000000000 --- a/dist/services/parameters-metadata-mapper.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Type } from '@nestjs/common'; -import { ModelPropertiesAccessor } from './model-properties-accessor'; -import { ParamWithTypeMetadata, ParamsWithType } from './parameter-metadata-accessor'; -export declare class ParametersMetadataMapper { - private readonly modelPropertiesAccessor; - constructor(modelPropertiesAccessor: ModelPropertiesAccessor); - transformModelToProperties(parameters: ParamsWithType): ParamWithTypeMetadata[]; - mergeImplicitWithExplicit(key: string, prototype: Type, param: ParamWithTypeMetadata): ParamWithTypeMetadata; -} diff --git a/dist/services/parameters-metadata-mapper.js b/dist/services/parameters-metadata-mapper.js deleted file mode 100644 index bf661f224..000000000 --- a/dist/services/parameters-metadata-mapper.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ParametersMetadataMapper = void 0; -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const is_body_parameter_util_1 = require("../utils/is-body-parameter.util"); -class ParametersMetadataMapper { - constructor(modelPropertiesAccessor) { - this.modelPropertiesAccessor = modelPropertiesAccessor; - } - transformModelToProperties(parameters) { - const properties = (0, lodash_1.flatMap)(parameters, (param) => { - if (!param || param.type === Object || !param.type) { - return undefined; - } - if (param.name) { - return param; - } - if ((0, is_body_parameter_util_1.isBodyParameter)(param)) { - const isCtor = param.type && (0, shared_utils_1.isFunction)(param.type); - const name = isCtor ? param.type.name : param.type; - return Object.assign(Object.assign({}, param), { name }); - } - const { prototype } = param.type; - this.modelPropertiesAccessor.applyMetadataFactory(prototype); - const modelProperties = this.modelPropertiesAccessor.getModelProperties(prototype); - return modelProperties.map((key) => this.mergeImplicitWithExplicit(key, prototype, param)); - }); - return properties.filter(lodash_1.identity); - } - mergeImplicitWithExplicit(key, prototype, param) { - const reflectedParam = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key) || - {}; - return Object.assign(Object.assign(Object.assign({}, param), reflectedParam), { name: reflectedParam.name || key }); - } -} -exports.ParametersMetadataMapper = ParametersMetadataMapper; diff --git a/dist/services/response-object-factory.d.ts b/dist/services/response-object-factory.d.ts deleted file mode 100644 index a669aa7d9..000000000 --- a/dist/services/response-object-factory.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators'; -import { SchemaObject } from '../interfaces/open-api-spec.interface'; -export type FactoriesNeededByResponseFactory = { - linkName: (controllerKey: string, methodKey: string, fieldKey: string) => string; - operationId: (controllerKey: string, methodKey: string) => string; -}; -export declare class ResponseObjectFactory { - private readonly mimetypeContentWrapper; - private readonly modelPropertiesAccessor; - private readonly swaggerTypesMapper; - private readonly schemaObjectFactory; - private readonly responseObjectMapper; - create(response: ApiResponseMetadata, produces: string[], schemas: Record, factories: FactoriesNeededByResponseFactory): (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { - example?: any; - }) | (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { - examples?: { - [key: string]: import("../decorators").ApiResponseExamples; - }; - }) | { - content: import("../interfaces/open-api-spec.interface").ContentObject; - }; -} diff --git a/dist/services/response-object-factory.js b/dist/services/response-object-factory.js deleted file mode 100644 index 8e80fa453..000000000 --- a/dist/services/response-object-factory.js +++ /dev/null @@ -1,94 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResponseObjectFactory = void 0; -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const is_built_in_type_util_1 = require("../utils/is-built-in-type.util"); -const mimetype_content_wrapper_1 = require("./mimetype-content-wrapper"); -const model_properties_accessor_1 = require("./model-properties-accessor"); -const response_object_mapper_1 = require("./response-object-mapper"); -const schema_object_factory_1 = require("./schema-object-factory"); -const swagger_types_mapper_1 = require("./swagger-types-mapper"); -class ResponseObjectFactory { - constructor() { - this.mimetypeContentWrapper = new mimetype_content_wrapper_1.MimetypeContentWrapper(); - this.modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); - this.swaggerTypesMapper = new swagger_types_mapper_1.SwaggerTypesMapper(); - this.schemaObjectFactory = new schema_object_factory_1.SchemaObjectFactory(this.modelPropertiesAccessor, this.swaggerTypesMapper); - this.responseObjectMapper = new response_object_mapper_1.ResponseObjectMapper(); - } - create(response, produces, schemas, factories) { - var _a; - const { type, isArray } = response; - response = (0, lodash_1.omit)(response, ['isArray']); - if (!type) { - return this.responseObjectMapper.wrapSchemaWithContent(response, produces); - } - if ((0, is_built_in_type_util_1.isBuiltInType)(type)) { - const typeName = type && (0, lodash_1.isFunction)(type) ? type.name : type; - const swaggerType = this.swaggerTypesMapper.mapTypeToOpenAPIType(typeName); - const exampleKeys = ['example', 'examples']; - if (isArray) { - const content = this.mimetypeContentWrapper.wrap(produces, { - schema: { - type: 'array', - items: { - type: swaggerType - } - } - }); - return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), content); - } - const content = this.mimetypeContentWrapper.wrap(produces, { - schema: { - type: swaggerType - } - }); - return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), content); - } - const name = this.schemaObjectFactory.exploreModelSchema(type, schemas); - if ((0, lodash_1.isFunction)(type) && type.prototype) { - const { prototype } = type; - const links = {}; - const properties = this.modelPropertiesAccessor.getModelProperties(prototype); - const generateLink = (controllerPrototype, method, parameter, field) => { - if (!factories) { - return; - } - const linkName = factories.linkName(controllerPrototype.constructor.name, method.name, field); - links[linkName] = { - operationId: factories.operationId(controllerPrototype.constructor.name, method.name), - parameters: { - [parameter]: `$response.body#/${field}` - } - }; - }; - for (const key of properties) { - const metadata = (_a = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key)) !== null && _a !== void 0 ? _a : {}; - if (!metadata.link) { - continue; - } - const linkedType = metadata.link(); - const linkedGetterInfo = Reflect.getMetadata(constants_1.DECORATORS.API_DEFAULT_GETTER, linkedType.prototype); - if (!linkedGetterInfo) { - continue; - } - const { getter, parameter, prototype: controllerPrototype } = linkedGetterInfo; - generateLink(controllerPrototype, getter, parameter, key); - } - const customLinks = Reflect.getMetadata(constants_1.DECORATORS.API_LINK, prototype); - for (const customLink of customLinks !== null && customLinks !== void 0 ? customLinks : []) { - const { method, parameter, field, prototype: controllerPrototype } = customLink; - generateLink(controllerPrototype, method, parameter, field); - } - if (!(0, lodash_1.isEmpty)(links)) { - response.links = Object.assign(links, response.links); - } - } - if (isArray) { - return this.responseObjectMapper.toArrayRefObject(response, name, produces); - } - return this.responseObjectMapper.toRefObject(response, name, produces); - } -} -exports.ResponseObjectFactory = ResponseObjectFactory; diff --git a/dist/services/response-object-mapper.d.ts b/dist/services/response-object-mapper.d.ts deleted file mode 100644 index da84df1d5..000000000 --- a/dist/services/response-object-mapper.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators'; -export declare class ResponseObjectMapper { - private readonly mimetypeContentWrapper; - toArrayRefObject(response: Record, name: string, produces: string[]): { - content: import("../interfaces/open-api-spec.interface").ContentObject; - }; - toRefObject(response: Record, name: string, produces: string[]): { - content: import("../interfaces/open-api-spec.interface").ContentObject; - }; - wrapSchemaWithContent(response: ApiResponseSchemaHost & ApiResponseMetadata, produces: string[]): (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { - example?: any; - }) | (ApiResponseSchemaHost & import("../decorators").ApiResponseCommonMetadata & { - examples?: { - [key: string]: import("../decorators").ApiResponseExamples; - }; - }) | { - content: import("../interfaces/open-api-spec.interface").ContentObject; - schema?: import("../interfaces/open-api-spec.interface").SchemaObject & Partial; - status?: number | "default" | "1XX" | "2XX" | "3XX" | "4XX" | "5XX"; - description?: string; - headers?: import("../interfaces/open-api-spec.interface").HeadersObject; - links?: import("../interfaces/open-api-spec.interface").LinksObject; - type?: import("@nestjs/common").Type | Function | [Function] | string; - isArray?: boolean; - example?: any; - } | { - content: import("../interfaces/open-api-spec.interface").ContentObject; - schema?: import("../interfaces/open-api-spec.interface").SchemaObject & Partial; - status?: number | "default" | "1XX" | "2XX" | "3XX" | "4XX" | "5XX"; - description?: string; - headers?: import("../interfaces/open-api-spec.interface").HeadersObject; - links?: import("../interfaces/open-api-spec.interface").LinksObject; - type?: import("@nestjs/common").Type | Function | [Function] | string; - isArray?: boolean; - examples?: { - [key: string]: import("../decorators").ApiResponseExamples; - }; - }; -} diff --git a/dist/services/response-object-mapper.js b/dist/services/response-object-mapper.js deleted file mode 100644 index da1b67a9d..000000000 --- a/dist/services/response-object-mapper.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResponseObjectMapper = void 0; -const lodash_1 = require("lodash"); -const utils_1 = require("../utils"); -const mimetype_content_wrapper_1 = require("./mimetype-content-wrapper"); -class ResponseObjectMapper { - constructor() { - this.mimetypeContentWrapper = new mimetype_content_wrapper_1.MimetypeContentWrapper(); - } - toArrayRefObject(response, name, produces) { - const exampleKeys = ['example', 'examples']; - return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), this.mimetypeContentWrapper.wrap(produces, Object.assign({ schema: { - type: 'array', - items: { - $ref: (0, utils_1.getSchemaPath)(name) - } - } }, (0, lodash_1.pick)(response, exampleKeys)))); - } - toRefObject(response, name, produces) { - const exampleKeys = ['example', 'examples']; - return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, exampleKeys)), this.mimetypeContentWrapper.wrap(produces, Object.assign({ schema: { - $ref: (0, utils_1.getSchemaPath)(name) - } }, (0, lodash_1.pick)(response, exampleKeys)))); - } - wrapSchemaWithContent(response, produces) { - if (!response.schema && - !('example' in response) && - !('examples' in response)) { - return response; - } - const exampleKeys = ['example', 'examples']; - const content = this.mimetypeContentWrapper.wrap(produces, Object.assign({ schema: response.schema }, (0, lodash_1.pick)(response, exampleKeys))); - const keysToOmit = [...exampleKeys, 'schema']; - return Object.assign(Object.assign({}, (0, lodash_1.omit)(response, keysToOmit)), content); - } -} -exports.ResponseObjectMapper = ResponseObjectMapper; diff --git a/dist/services/schema-object-factory.d.ts b/dist/services/schema-object-factory.d.ts deleted file mode 100644 index 403e07b77..000000000 --- a/dist/services/schema-object-factory.d.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { Type } from '@nestjs/common'; -import { BaseParameterObject, ParameterObject, ReferenceObject, SchemaObject } from '../interfaces/open-api-spec.interface'; -import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; -import { ModelPropertiesAccessor } from './model-properties-accessor'; -import { ParamWithTypeMetadata } from './parameter-metadata-accessor'; -import { SwaggerTypesMapper } from './swagger-types-mapper'; -export declare class SchemaObjectFactory { - private readonly modelPropertiesAccessor; - private readonly swaggerTypesMapper; - constructor(modelPropertiesAccessor: ModelPropertiesAccessor, swaggerTypesMapper: SwaggerTypesMapper); - createFromModel(parameters: ParamWithTypeMetadata[], schemas: Record): Array; - getCustomType(param: ParamWithTypeMetadata, schemas: Record): { - name: string | number | object; - schema: { - type: string; - items: { - $ref: string; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - type?: string; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - items?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; - } | { - $ref: string; - }; - }; - type?: Type; - in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; - isArray?: boolean; - items?: SchemaObject; - required?: boolean; - enum?: unknown[]; - enumName?: string; - enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; - selfRequired?: boolean; - } | { - name: string | number | object; - schema: { - $ref: string; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - type?: string; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - items?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; - } | { - $ref: string; - }; - type?: Type; - in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; - isArray?: boolean; - items?: SchemaObject; - required?: boolean; - enum?: unknown[]; - enumName?: string; - enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; - selfRequired?: boolean; - }; - private createQueryOrParamSchema; - extractPropertiesFromType(type: Type, schemas: Record, pendingSchemasRefs?: string[]): ParameterObject[]; - exploreModelSchema(type: Type | Function, schemas: Record, pendingSchemasRefs?: string[]): string; - getSchemaMetadata(type: Function | Type): { - schemaName: string; - schemaProperties: { - description?: string; - }; - }; - mergePropertyWithMetadata(key: string, prototype: Type, schemas: Record, pendingSchemaRefs: string[], metadata?: SchemaObjectMetadata): SchemaObjectMetadata | ReferenceObject | ParameterObject | (SchemaObject & { - selfRequired?: boolean; - }); - createEnumParam(param: ParamWithTypeMetadata & BaseParameterObject, schemas: Record): Partial; - createEnumSchemaType(key: string, metadata: SchemaObjectMetadata, schemas: Record): SchemaObjectMetadata; - createNotBuiltInTypeReference(key: string, metadata: SchemaObjectMetadata, trueMetadataType: unknown, schemas: Record, pendingSchemaRefs: string[]): SchemaObjectMetadata; - transformToArraySchemaProperty(metadata: SchemaObjectMetadata, key: string, type: string | Record): SchemaObjectMetadata; - mapArrayCtorParam(param: ParamWithTypeMetadata): any; - createFromObjectLiteral(key: string, literalObj: Record, schemas: Record): { - name: string; - type: string; - properties: {}; - required: any[]; - }; - createFromNestedArray(key: string, metadata: SchemaObjectMetadata, schemas: Record, pendingSchemaRefs: string[]): any; - private createSchemaMetadata; - private isArrayCtor; - private isPrimitiveType; - private isLazyTypeFunc; - private getTypeName; - private isObjectLiteral; - private isBigInt; - private extractPropertyModifiers; -} diff --git a/dist/services/schema-object-factory.js b/dist/services/schema-object-factory.js deleted file mode 100644 index 36dbd776f..000000000 --- a/dist/services/schema-object-factory.js +++ /dev/null @@ -1,471 +0,0 @@ -"use strict"; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SchemaObjectFactory = void 0; -const common_1 = require("@nestjs/common"); -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const helpers_1 = require("../decorators/helpers"); -const api_extra_models_explorer_1 = require("../explorers/api-extra-models.explorer"); -const utils_1 = require("../utils"); -const enum_utils_1 = require("../utils/enum.utils"); -const is_body_parameter_util_1 = require("../utils/is-body-parameter.util"); -const is_built_in_type_util_1 = require("../utils/is-built-in-type.util"); -const is_date_ctor_util_1 = require("../utils/is-date-ctor.util"); -class SchemaObjectFactory { - constructor(modelPropertiesAccessor, swaggerTypesMapper) { - this.modelPropertiesAccessor = modelPropertiesAccessor; - this.swaggerTypesMapper = swaggerTypesMapper; - } - createFromModel(parameters, schemas) { - const parameterObjects = parameters.map((param) => { - if (this.isLazyTypeFunc(param.type)) { - [param.type, param.isArray] = (0, helpers_1.getTypeIsArrayTuple)(param.type(), undefined); - } - if (!(0, is_body_parameter_util_1.isBodyParameter)(param) && param.enumName) { - return this.createEnumParam(param, schemas); - } - if (this.isPrimitiveType(param.type)) { - return param; - } - if (this.isArrayCtor(param.type)) { - return this.mapArrayCtorParam(param); - } - if (!(0, is_body_parameter_util_1.isBodyParameter)(param)) { - return this.createQueryOrParamSchema(param, schemas); - } - return this.getCustomType(param, schemas); - }); - return (0, lodash_1.flatten)(parameterObjects); - } - getCustomType(param, schemas) { - const modelName = this.exploreModelSchema(param.type, schemas); - const name = param.name || modelName; - const schema = Object.assign(Object.assign({}, (param.schema || {})), { $ref: (0, utils_1.getSchemaPath)(modelName) }); - const isArray = param.isArray; - param = (0, lodash_1.omit)(param, 'isArray'); - if (isArray) { - return Object.assign(Object.assign({}, param), { name, schema: { - type: 'array', - items: schema - } }); - } - return Object.assign(Object.assign({}, param), { name, - schema }); - } - createQueryOrParamSchema(param, schemas) { - if ((0, is_date_ctor_util_1.isDateCtor)(param.type)) { - return Object.assign(Object.assign({ format: 'date-time' }, param), { type: 'string' }); - } - if (this.isBigInt(param.type)) { - return Object.assign(Object.assign({ format: 'int64' }, param), { type: 'integer' }); - } - if ((0, lodash_1.isFunction)(param.type)) { - if (param.name) { - return this.getCustomType(param, schemas); - } - const propertiesWithType = this.extractPropertiesFromType(param.type, schemas); - if (!propertiesWithType) { - return param; - } - return propertiesWithType.map((property) => { - const keysToOmit = [ - 'isArray', - 'enumName', - 'enumSchema', - 'selfRequired' - ]; - const parameterObject = Object.assign(Object.assign({}, (0, lodash_1.omit)(property, keysToOmit)), { in: 'query', required: 'selfRequired' in property - ? property.selfRequired - : typeof property.required === 'boolean' - ? property.required - : true }); - const keysToMoveToSchema = [ - ...this.swaggerTypesMapper.getSchemaOptionsKeys(), - 'allOf' - ]; - return keysToMoveToSchema.reduce((acc, key) => { - if (key in property) { - acc.schema = Object.assign(Object.assign({}, acc.schema), { [key]: property[key] }); - delete acc[key]; - } - return acc; - }, parameterObject); - }); - } - if (this.isObjectLiteral(param.type)) { - const schemaFromObjectLiteral = this.createFromObjectLiteral(param.name, param.type, schemas); - if (param.isArray) { - return Object.assign(Object.assign({}, param), { schema: { - type: 'array', - items: (0, lodash_1.omit)(schemaFromObjectLiteral, 'name') - }, selfRequired: param.required }); - } - return Object.assign(Object.assign({}, param), { schema: { - type: schemaFromObjectLiteral.type, - properties: schemaFromObjectLiteral.properties, - required: schemaFromObjectLiteral.required - }, selfRequired: param.required }); - } - return param; - } - extractPropertiesFromType(type, schemas, pendingSchemasRefs = []) { - const { prototype } = type; - if (!prototype) { - return; - } - const extraModels = (0, api_extra_models_explorer_1.exploreGlobalApiExtraModelsMetadata)(type); - extraModels.forEach((item) => this.exploreModelSchema(item, schemas, pendingSchemasRefs)); - this.modelPropertiesAccessor.applyMetadataFactory(prototype); - const modelProperties = this.modelPropertiesAccessor.getModelProperties(prototype); - const propertiesWithType = modelProperties.map((key) => { - const property = this.mergePropertyWithMetadata(key, prototype, schemas, pendingSchemasRefs); - const schemaCombinators = ['oneOf', 'anyOf', 'allOf']; - const declaredSchemaCombinator = schemaCombinators.find((combinator) => combinator in property); - if (declaredSchemaCombinator) { - const schemaObjectMetadata = property; - if ((schemaObjectMetadata === null || schemaObjectMetadata === void 0 ? void 0 : schemaObjectMetadata.type) === 'array' || - schemaObjectMetadata.isArray) { - schemaObjectMetadata.items = {}; - schemaObjectMetadata.items[declaredSchemaCombinator] = - property[declaredSchemaCombinator]; - delete property[declaredSchemaCombinator]; - } - else { - delete schemaObjectMetadata.type; - } - } - return property; - }); - return propertiesWithType; - } - exploreModelSchema(type, schemas, pendingSchemasRefs = []) { - if (this.isLazyTypeFunc(type)) { - type = type(); - } - const propertiesWithType = this.extractPropertiesFromType(type, schemas, pendingSchemasRefs); - if (!propertiesWithType) { - return ''; - } - const extensionProperties = Reflect.getMetadata(constants_1.DECORATORS.API_EXTENSION, type) || {}; - const { schemaName, schemaProperties } = this.getSchemaMetadata(type); - const typeDefinition = Object.assign(Object.assign({ type: 'object', properties: (0, lodash_1.mapValues)((0, lodash_1.keyBy)(propertiesWithType, 'name'), (property) => { - const keysToOmit = [ - 'name', - 'isArray', - 'enumName', - 'enumSchema', - 'selfRequired' - ]; - if ('required' in property && Array.isArray(property.required)) { - return (0, lodash_1.omit)(property, keysToOmit); - } - return (0, lodash_1.omit)(property, [...keysToOmit, 'required']); - }) }, extensionProperties), schemaProperties); - const typeDefinitionRequiredFields = propertiesWithType - .filter((property) => 'selfRequired' in property - ? property.selfRequired != false - : property.required != false && !Array.isArray(property.required)) - .map((property) => property.name); - if (typeDefinitionRequiredFields.length > 0) { - typeDefinition['required'] = typeDefinitionRequiredFields; - } - if (schemas[schemaName] && !(0, lodash_1.isEqual)(schemas[schemaName], typeDefinition)) { - common_1.Logger.error(`Duplicate DTO detected: "${schemaName}" is defined multiple times with different schemas.\n` + - `Consider using unique class names or applying @ApiExtraModels() decorator with custom schema names.\n` + - `Note: This will throw an error in the next major version.`); - } - schemas[schemaName] = typeDefinition; - return schemaName; - } - getSchemaMetadata(type) { - var _a, _b; - const schemas = (_a = Reflect.getOwnMetadata(constants_1.DECORATORS.API_SCHEMA, type)) !== null && _a !== void 0 ? _a : []; - const _c = (_b = schemas[schemas.length - 1]) !== null && _b !== void 0 ? _b : {}, { name } = _c, schemaProperties = __rest(_c, ["name"]); - return { schemaName: name !== null && name !== void 0 ? name : type.name, schemaProperties }; - } - mergePropertyWithMetadata(key, prototype, schemas, pendingSchemaRefs, metadata) { - if (!metadata) { - metadata = - (0, lodash_1.omit)(Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key), 'link') || {}; - } - if (this.isLazyTypeFunc(metadata.type)) { - metadata.type = metadata.type(); - [metadata.type, metadata.isArray] = (0, helpers_1.getTypeIsArrayTuple)(metadata.type, metadata.isArray); - } - if (Array.isArray(metadata.type)) { - return this.createFromNestedArray(key, metadata, schemas, pendingSchemaRefs); - } - return this.createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs); - } - createEnumParam(param, schemas) { - var _a, _b, _c, _d, _e; - const enumName = param.enumName; - const $ref = (0, utils_1.getSchemaPath)(enumName); - if (!(enumName in schemas)) { - const _enum = param.enum - ? param.enum - : param.schema - ? param.schema['items'] - ? param.schema['items']['enum'] - : param.schema['enum'] - : param.isArray && param.items - ? param.items.enum - : undefined; - schemas[enumName] = Object.assign(Object.assign({ type: (_d = (param.isArray - ? (_b = (_a = param.schema) === null || _a === void 0 ? void 0 : _a['items']) === null || _b === void 0 ? void 0 : _b['type'] - : (_c = param.schema) === null || _c === void 0 ? void 0 : _c['type'])) !== null && _d !== void 0 ? _d : 'string', enum: _enum }, param.enumSchema), (param['x-enumNames'] ? { 'x-enumNames': param['x-enumNames'] } : {})); - } - else { - if (param.enumSchema) { - schemas[enumName] = Object.assign(Object.assign({}, schemas[enumName]), param.enumSchema); - } - } - param.schema = - param.isArray || ((_e = param.schema) === null || _e === void 0 ? void 0 : _e['items']) - ? { type: 'array', items: { $ref } } - : { $ref }; - return (0, lodash_1.omit)(param, [ - 'isArray', - 'items', - 'enumName', - 'enum', - 'x-enumNames', - 'enumSchema' - ]); - } - createEnumSchemaType(key, metadata, schemas) { - var _a, _b, _c; - if (!('enumName' in metadata) || !metadata.enumName) { - return Object.assign(Object.assign({}, metadata), { name: metadata.name || key }); - } - const enumName = metadata.enumName; - const $ref = (0, utils_1.getSchemaPath)(enumName); - const enumType = (_a = (metadata.isArray ? metadata.items['type'] : metadata.type)) !== null && _a !== void 0 ? _a : 'string'; - if (!schemas[enumName]) { - schemas[enumName] = Object.assign(Object.assign({ type: enumType }, metadata.enumSchema), { enum: metadata.isArray && metadata.items - ? metadata.items['enum'] - : metadata.enum, description: (_b = metadata.description) !== null && _b !== void 0 ? _b : undefined, 'x-enumNames': (_c = metadata['x-enumNames']) !== null && _c !== void 0 ? _c : undefined }); - } - else { - if (metadata.enumSchema) { - schemas[enumName] = Object.assign(Object.assign({}, schemas[enumName]), metadata.enumSchema); - } - if (metadata['x-enumNames']) { - schemas[enumName]['x-enumNames'] = metadata['x-enumNames']; - } - } - const _schemaObject = Object.assign(Object.assign({}, metadata), { name: metadata.name || key, type: metadata.isArray ? 'array' : 'string' }); - const refHost = metadata.isArray - ? { items: { $ref } } - : { allOf: [{ $ref }] }; - const paramObject = Object.assign(Object.assign({}, _schemaObject), refHost); - const pathsToOmit = ['enum', 'enumName', 'enumSchema', 'x-enumNames']; - if (!metadata.isArray) { - pathsToOmit.push('type'); - } - return (0, lodash_1.omit)(paramObject, pathsToOmit); - } - createNotBuiltInTypeReference(key, metadata, trueMetadataType, schemas, pendingSchemaRefs) { - if ((0, shared_utils_1.isUndefined)(trueMetadataType)) { - throw new Error(`A circular dependency has been detected (property key: "${key}"). Please, make sure that each side of a bidirectional relationships are using lazy resolvers ("type: () => ClassType").`); - } - let { schemaName: schemaObjectName } = this.getSchemaMetadata(trueMetadataType); - if (!(schemaObjectName in schemas) && - !pendingSchemaRefs.includes(schemaObjectName)) { - schemaObjectName = this.exploreModelSchema(trueMetadataType, schemas, [...pendingSchemaRefs, schemaObjectName]); - } - const $ref = (0, utils_1.getSchemaPath)(schemaObjectName); - if (metadata.isArray) { - return this.transformToArraySchemaProperty(metadata, key, { $ref }); - } - const keysToRemove = ['type', 'isArray', 'required', 'name']; - const validMetadataObject = (0, lodash_1.omit)(metadata, keysToRemove); - const extraMetadataKeys = Object.keys(validMetadataObject); - if (extraMetadataKeys.length > 0) { - return Object.assign(Object.assign({ name: metadata.name || key, required: metadata.required }, validMetadataObject), { allOf: [{ $ref }] }); - } - return { - name: metadata.name || key, - required: metadata.required, - $ref - }; - } - transformToArraySchemaProperty(metadata, key, type) { - const keysToRemove = ['type', 'enum']; - const [movedProperties, keysToMove] = this.extractPropertyModifiers(metadata); - const schemaHost = Object.assign(Object.assign({}, (0, lodash_1.omit)(metadata, [...keysToRemove, ...keysToMove])), { name: metadata.name || key, type: 'array', items: (0, lodash_1.isString)(type) - ? Object.assign({ type }, movedProperties) : Object.assign(Object.assign({}, type), movedProperties) }); - schemaHost.items = (0, lodash_1.omitBy)(schemaHost.items, shared_utils_1.isUndefined); - return schemaHost; - } - mapArrayCtorParam(param) { - return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, 'type')), { schema: { - type: 'array', - items: { - type: 'string' - } - } }); - } - createFromObjectLiteral(key, literalObj, schemas) { - const objLiteralKeys = Object.keys(literalObj); - const properties = {}; - const required = []; - objLiteralKeys.forEach((key) => { - const propertyCompilerMetadata = literalObj[key]; - if ((0, enum_utils_1.isEnumArray)(propertyCompilerMetadata)) { - propertyCompilerMetadata.type = 'array'; - const enumValues = (0, enum_utils_1.getEnumValues)(propertyCompilerMetadata.enum); - propertyCompilerMetadata.items = { - type: (0, enum_utils_1.getEnumType)(enumValues), - enum: enumValues - }; - delete propertyCompilerMetadata.enum; - } - else if (propertyCompilerMetadata.enum) { - const enumValues = (0, enum_utils_1.getEnumValues)(propertyCompilerMetadata.enum); - propertyCompilerMetadata.enum = enumValues; - propertyCompilerMetadata.type = (0, enum_utils_1.getEnumType)(enumValues); - } - const propertyMetadata = this.mergePropertyWithMetadata(key, Object, schemas, [], propertyCompilerMetadata); - if ('required' in propertyMetadata && propertyMetadata.required) { - required.push(key); - } - const keysToRemove = ['isArray', 'name', 'required']; - const validMetadataObject = (0, lodash_1.omit)(propertyMetadata, keysToRemove); - properties[key] = validMetadataObject; - }); - const schema = { - name: key, - type: 'object', - properties, - required - }; - return schema; - } - createFromNestedArray(key, metadata, schemas, pendingSchemaRefs) { - const recurse = (type) => { - if (!Array.isArray(type)) { - const schemaMetadata = this.createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs, type); - return (0, lodash_1.omit)(schemaMetadata, ['isArray', 'name']); - } - return { - name: key, - type: 'array', - items: recurse(type[0]) - }; - }; - return recurse(metadata.type); - } - createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs, nestedArrayType) { - const typeRef = nestedArrayType || metadata.type; - if (this.isObjectLiteral(typeRef)) { - const schemaFromObjectLiteral = this.createFromObjectLiteral(key, typeRef, schemas); - if (metadata.isArray) { - return { - name: schemaFromObjectLiteral.name, - type: 'array', - items: (0, lodash_1.omit)(schemaFromObjectLiteral, 'name'), - selfRequired: metadata.required - }; - } - return Object.assign(Object.assign({}, schemaFromObjectLiteral), { selfRequired: metadata.required }); - } - if ((0, lodash_1.isString)(typeRef)) { - if ((0, enum_utils_1.isEnumMetadata)(metadata)) { - return this.createEnumSchemaType(key, metadata, schemas); - } - if (metadata.isArray) { - return this.transformToArraySchemaProperty(metadata, key, typeRef); - } - return Object.assign(Object.assign({}, metadata), { name: metadata.name || key }); - } - if ((0, is_date_ctor_util_1.isDateCtor)(typeRef)) { - if (metadata.isArray) { - return this.transformToArraySchemaProperty(metadata, key, { - format: metadata.format || 'date-time', - type: 'string' - }); - } - return Object.assign(Object.assign({ format: 'date-time' }, metadata), { type: 'string', name: metadata.name || key }); - } - if (this.isBigInt(typeRef)) { - return Object.assign(Object.assign({ format: 'int64' }, metadata), { type: 'integer', name: metadata.name || key }); - } - if (!(0, is_built_in_type_util_1.isBuiltInType)(typeRef)) { - return this.createNotBuiltInTypeReference(key, metadata, typeRef, schemas, pendingSchemaRefs); - } - const typeName = this.getTypeName(typeRef); - const itemType = this.swaggerTypesMapper.mapTypeToOpenAPIType(typeName); - if (metadata.isArray) { - return this.transformToArraySchemaProperty(metadata, key, { - type: itemType - }); - } - else if (itemType === 'array') { - const defaultOnArray = 'string'; - const hasSchemaCombinator = ['oneOf', 'anyOf', 'allOf'].some((combinator) => combinator in metadata); - if (hasSchemaCombinator) { - return Object.assign(Object.assign({}, metadata), { type: undefined, name: metadata.name || key }); - } - return this.transformToArraySchemaProperty(metadata, key, { - type: defaultOnArray - }); - } - return Object.assign(Object.assign({}, metadata), { name: metadata.name || key, type: itemType }); - } - isArrayCtor(type) { - return type === Array; - } - isPrimitiveType(type) { - return ((0, lodash_1.isFunction)(type) && - [String, Boolean, Number].some((item) => item === type)); - } - isLazyTypeFunc(type) { - return (0, lodash_1.isFunction)(type) && type.name == 'type'; - } - getTypeName(type) { - return type && (0, lodash_1.isFunction)(type) ? type.name : type; - } - isObjectLiteral(obj) { - if (typeof obj !== 'object' || !obj) { - return false; - } - const hasOwnProp = Object.prototype.hasOwnProperty; - let objPrototype = obj; - while (Object.getPrototypeOf((objPrototype = Object.getPrototypeOf(objPrototype))) !== null) - ; - for (const prop in obj) { - if (!hasOwnProp.call(obj, prop) && !hasOwnProp.call(objPrototype, prop)) { - return false; - } - } - return Object.getPrototypeOf(obj) === objPrototype; - } - isBigInt(type) { - return type === BigInt; - } - extractPropertyModifiers(metadata) { - const modifierKeys = [ - 'format', - 'maximum', - 'maxLength', - 'minimum', - 'minLength', - 'pattern' - ]; - return [(0, lodash_1.pick)(metadata, modifierKeys), modifierKeys]; - } -} -exports.SchemaObjectFactory = SchemaObjectFactory; diff --git a/dist/services/swagger-types-mapper.d.ts b/dist/services/swagger-types-mapper.d.ts deleted file mode 100644 index 1b28dcc20..000000000 --- a/dist/services/swagger-types-mapper.d.ts +++ /dev/null @@ -1,260 +0,0 @@ -import { ApiPropertyOptions } from '../decorators'; -import { BaseParameterObject, ReferenceObject, SchemaObject } from '../interfaces/open-api-spec.interface'; -import { ParamWithTypeMetadata } from './parameter-metadata-accessor'; -type KeysToRemove = keyof ApiPropertyOptions | '$ref' | 'properties' | 'enumName' | 'enumSchema' | 'selfRequired'; -export declare class SwaggerTypesMapper { - private readonly keysToRemove; - mapParamTypes(parameters: Array): (Partial | Partial | { - schema: { - type: string; - items: any; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; - }; - } | { - schema: import("lodash").Dictionary; - description?: string; - required?: boolean; - deprecated?: boolean; - allowEmptyValue?: boolean; - style?: import("../interfaces/open-api-spec.interface").ParameterStyle; - explode?: boolean; - allowReserved?: boolean; - examples?: Record; - example?: any; - content?: import("../interfaces/open-api-spec.interface").ContentObject; - } | { - schema: import("lodash").Dictionary; - name?: string | number | object; - type?: import("@nestjs/common").Type; - in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; - isArray?: boolean; - items?: SchemaObject; - required?: boolean; - enum?: unknown[]; - enumName?: string; - enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; - selfRequired?: boolean; - })[]; - mapTypeToOpenAPIType(type: string | Function): string; - mapEnumArrayType(param: Record, keysToRemove: KeysToRemove[]): { - schema: { - type: string; - items: any; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; - }; - }; - mapArrayType(param: (ParamWithTypeMetadata & SchemaObject) | BaseParameterObject, keysToRemove: KeysToRemove[]): { - schema: { - type: string; - items: any; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; - }; - description?: string; - required?: boolean; - deprecated?: boolean; - allowEmptyValue?: boolean; - style?: import("../interfaces/open-api-spec.interface").ParameterStyle; - explode?: boolean; - allowReserved?: boolean; - examples?: Record; - example?: any; - content?: import("../interfaces/open-api-spec.interface").ContentObject; - } | { - schema: { - type: string; - items: any; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - required?: string[]; - enum?: any[]; - 'x-enumNames'?: string[]; - }; - name?: string | number | object; - type?: import("@nestjs/common").Type & string; - in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder"; - isArray?: boolean; - items?: SchemaObject | (SchemaObject & ReferenceObject); - required?: boolean & string[]; - enum?: unknown[] & any[]; - enumName?: string; - enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes; - selfRequired?: boolean; - nullable?: boolean; - discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject; - readOnly?: boolean; - writeOnly?: boolean; - xml?: import("../interfaces/open-api-spec.interface").XmlObject; - externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject; - example?: any; - examples?: any[] | Record; - deprecated?: boolean; - allOf?: (SchemaObject | ReferenceObject)[]; - oneOf?: (SchemaObject | ReferenceObject)[]; - anyOf?: (SchemaObject | ReferenceObject)[]; - not?: SchemaObject | ReferenceObject; - properties?: Record; - additionalProperties?: SchemaObject | ReferenceObject | boolean; - patternProperties?: SchemaObject | ReferenceObject | any; - description?: string; - format?: string; - default?: any; - title?: string; - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: boolean; - minimum?: number; - exclusiveMinimum?: boolean; - maxLength?: number; - minLength?: number; - pattern?: string; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxProperties?: number; - minProperties?: number; - 'x-enumNames'?: string[]; - }; - getSchemaOptionsKeys(): Array; - private getSchemaOptions; - private isEnumArrayType; - private hasSchemaDefinition; - private hasRawContentDefinition; - private omitParamKeys; -} -export {}; diff --git a/dist/services/swagger-types-mapper.js b/dist/services/swagger-types-mapper.js deleted file mode 100644 index 3eb2c2f2b..000000000 --- a/dist/services/swagger-types-mapper.js +++ /dev/null @@ -1,107 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SwaggerTypesMapper = void 0; -const lodash_1 = require("lodash"); -class SwaggerTypesMapper { - constructor() { - this.keysToRemove = [ - 'isArray', - 'enum', - 'enumName', - 'enumSchema', - '$ref', - 'selfRequired', - ...this.getSchemaOptionsKeys() - ]; - } - mapParamTypes(parameters) { - return parameters.map((param) => { - if (this.hasSchemaDefinition(param) || - this.hasRawContentDefinition(param)) { - if (Array.isArray(param.required) && 'schema' in param) { - param.schema.required = param.required; - delete param.required; - } - if ('selfRequired' in param) { - param.required = param.selfRequired; - } - return this.omitParamKeys(param); - } - const { type } = param; - const typeName = type && (0, lodash_1.isFunction)(type) - ? this.mapTypeToOpenAPIType(type.name) - : this.mapTypeToOpenAPIType(type); - const paramWithTypeMetadata = (0, lodash_1.omitBy)(Object.assign(Object.assign({}, param), { type: typeName }), lodash_1.isUndefined); - if (this.isEnumArrayType(paramWithTypeMetadata)) { - return this.mapEnumArrayType(paramWithTypeMetadata, this.keysToRemove); - } - else if (paramWithTypeMetadata.isArray) { - return this.mapArrayType(paramWithTypeMetadata, this.keysToRemove); - } - return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, this.keysToRemove)), { schema: (0, lodash_1.omitBy)(Object.assign(Object.assign(Object.assign({}, this.getSchemaOptions(param)), (param.schema || {})), { enum: paramWithTypeMetadata.enum, type: paramWithTypeMetadata.type, $ref: paramWithTypeMetadata.$ref }), lodash_1.isUndefined) }); - }); - } - mapTypeToOpenAPIType(type) { - if (!(type && type.charAt)) { - return; - } - return type.charAt(0).toLowerCase() + type.slice(1); - } - mapEnumArrayType(param, keysToRemove) { - return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, keysToRemove)), { schema: Object.assign(Object.assign({}, this.getSchemaOptions(param)), { type: 'array', items: param.items }) }); - } - mapArrayType(param, keysToRemove) { - const itemsModifierKeys = ['format', 'maximum', 'minimum', 'pattern']; - const items = param.items || - (0, lodash_1.omitBy)(Object.assign(Object.assign({}, (param.schema || {})), { enum: param.enum, type: this.mapTypeToOpenAPIType(param.type) }), lodash_1.isUndefined); - const modifierProperties = (0, lodash_1.pick)(param, itemsModifierKeys); - return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, keysToRemove)), { schema: Object.assign(Object.assign({}, (0, lodash_1.omit)(this.getSchemaOptions(param), [...itemsModifierKeys])), { type: 'array', items: (0, lodash_1.isString)(items.type) - ? Object.assign({ type: items.type }, modifierProperties) : Object.assign(Object.assign({}, items.type), modifierProperties) }) }); - } - getSchemaOptionsKeys() { - return [ - 'properties', - 'patternProperties', - 'additionalProperties', - 'minimum', - 'maximum', - 'maxProperties', - 'minItems', - 'minProperties', - 'maxItems', - 'minLength', - 'maxLength', - 'exclusiveMaximum', - 'exclusiveMinimum', - 'uniqueItems', - 'title', - 'format', - 'pattern', - 'nullable', - 'default', - 'example', - 'oneOf', - 'anyOf', - 'type', - 'items' - ]; - } - getSchemaOptions(param) { - const schemaKeys = this.getSchemaOptionsKeys(); - const optionsObject = schemaKeys.reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: param[key] })), {}); - return (0, lodash_1.omitBy)(optionsObject, lodash_1.isUndefined); - } - isEnumArrayType(param) { - return param.isArray && param.items && param.items.enum; - } - hasSchemaDefinition(param) { - return !!param.schema; - } - hasRawContentDefinition(param) { - return 'content' in param; - } - omitParamKeys(param) { - return (0, lodash_1.omit)(param, this.keysToRemove); - } -} -exports.SwaggerTypesMapper = SwaggerTypesMapper; diff --git a/dist/storages/global-parameters.storage.d.ts b/dist/storages/global-parameters.storage.d.ts deleted file mode 100644 index 5de3fbb24..000000000 --- a/dist/storages/global-parameters.storage.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ParameterObject } from '../interfaces/open-api-spec.interface'; -export declare class GlobalParametersStorageHost { - private parameters; - add(...parameters: ParameterObject[]): void; - getAll(): ParameterObject[]; - clear(): void; -} -export declare const GlobalParametersStorage: GlobalParametersStorageHost; diff --git a/dist/storages/global-parameters.storage.js b/dist/storages/global-parameters.storage.js deleted file mode 100644 index a8d7b0e6d..000000000 --- a/dist/storages/global-parameters.storage.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GlobalParametersStorage = exports.GlobalParametersStorageHost = void 0; -class GlobalParametersStorageHost { - constructor() { - this.parameters = new Array(); - } - add(...parameters) { - this.parameters.push(...parameters); - } - getAll() { - return this.parameters; - } - clear() { - this.parameters = []; - } -} -exports.GlobalParametersStorageHost = GlobalParametersStorageHost; -const globalRef = global; -exports.GlobalParametersStorage = globalRef.SwaggerGlobalParametersStorage || - (globalRef.SwaggerGlobalParametersStorage = - new GlobalParametersStorageHost()); diff --git a/dist/storages/global-responses.storage.d.ts b/dist/storages/global-responses.storage.d.ts deleted file mode 100644 index 64ac45dde..000000000 --- a/dist/storages/global-responses.storage.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiResponseOptions } from '../decorators'; -type GlobalResponesMap = Record>; -export declare class GlobalResponsesStorageHost { - private responses; - add(responses: GlobalResponesMap): void; - getAll(): GlobalResponesMap; - clear(): void; -} -export declare const GlobalResponsesStorage: GlobalResponsesStorageHost; -export {}; diff --git a/dist/storages/global-responses.storage.js b/dist/storages/global-responses.storage.js deleted file mode 100644 index 0468d933a..000000000 --- a/dist/storages/global-responses.storage.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GlobalResponsesStorage = exports.GlobalResponsesStorageHost = void 0; -class GlobalResponsesStorageHost { - constructor() { - this.responses = {}; - } - add(responses) { - this.responses = Object.assign(Object.assign({}, this.responses), responses); - } - getAll() { - return this.responses; - } - clear() { - this.responses = {}; - } -} -exports.GlobalResponsesStorageHost = GlobalResponsesStorageHost; -const globalRef = global; -exports.GlobalResponsesStorage = globalRef.SwaggerGlobalResponsesStorage || - (globalRef.SwaggerGlobalResponsesStorage = new GlobalResponsesStorageHost()); diff --git a/dist/swagger-explorer.d.ts b/dist/swagger-explorer.d.ts deleted file mode 100644 index 97e8a5745..000000000 --- a/dist/swagger-explorer.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Controller } from '@nestjs/common/interfaces'; -import { ApplicationConfig } from '@nestjs/core'; -import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { OperationIdFactory } from './interfaces'; -import { DenormalizedDoc } from './interfaces/denormalized-doc.interface'; -import { SchemaObject } from './interfaces/open-api-spec.interface'; -import { SchemaObjectFactory } from './services/schema-object-factory'; -export declare class SwaggerExplorer { - private readonly schemaObjectFactory; - private readonly options; - private readonly mimetypeContentWrapper; - private readonly metadataScanner; - private readonly schemas; - private operationIdFactory; - private routePathFactory?; - private linkNameFactory; - constructor(schemaObjectFactory: SchemaObjectFactory, options?: { - httpAdapterType?: string; - }); - exploreController(wrapper: InstanceWrapper, applicationConfig: ApplicationConfig, options: { - modulePath?: string; - globalPrefix?: string; - operationIdFactory?: OperationIdFactory; - linkNameFactory?: (controllerKey: string, methodKey: string, fieldKey: string) => string; - autoTagControllers?: boolean; - onlyIncludeDecoratedEndpoints?: boolean; - }): DenormalizedDoc[]; - getSchemas(): Record; - private generateDenormalizedDocument; - private exploreGlobalMetadata; - private exploreRoutePathAndMethod; - private getOperationId; - private getRoutePathVersions; - private reflectControllerPath; - private validateRoutePath; - private mergeMetadata; - private deepMergeMetadata; - private mergeValues; - private migrateOperationSchema; - private registerExtraModels; - private getVersionMetadata; -} diff --git a/dist/swagger-explorer.js b/dist/swagger-explorer.js deleted file mode 100644 index 774130a08..000000000 --- a/dist/swagger-explorer.js +++ /dev/null @@ -1,319 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SwaggerExplorer = void 0; -const common_1 = require("@nestjs/common"); -const constants_1 = require("@nestjs/common/constants"); -const interfaces_1 = require("@nestjs/common/interfaces"); -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -const core_1 = require("@nestjs/core"); -const legacy_route_converter_1 = require("@nestjs/core/router/legacy-route-converter"); -const route_path_factory_1 = require("@nestjs/core/router/route-path-factory"); -const lodash_1 = require("lodash"); -const path_to_regexp_1 = require("path-to-regexp"); -const constants_2 = require("./constants"); -const api_callbacks_explorer_1 = require("./explorers/api-callbacks.explorer"); -const api_exclude_controller_explorer_1 = require("./explorers/api-exclude-controller.explorer"); -const api_exclude_endpoint_explorer_1 = require("./explorers/api-exclude-endpoint.explorer"); -const api_include_endpoint_explorer_1 = require("./explorers/api-include-endpoint.explorer"); -const api_extra_models_explorer_1 = require("./explorers/api-extra-models.explorer"); -const api_headers_explorer_1 = require("./explorers/api-headers.explorer"); -const api_operation_explorer_1 = require("./explorers/api-operation.explorer"); -const api_parameters_explorer_1 = require("./explorers/api-parameters.explorer"); -const api_response_explorer_1 = require("./explorers/api-response.explorer"); -const api_security_explorer_1 = require("./explorers/api-security.explorer"); -const api_use_tags_explorer_1 = require("./explorers/api-use-tags.explorer"); -const mimetype_content_wrapper_1 = require("./services/mimetype-content-wrapper"); -const is_body_parameter_util_1 = require("./utils/is-body-parameter.util"); -const merge_and_uniq_util_1 = require("./utils/merge-and-uniq.util"); -class SwaggerExplorer { - constructor(schemaObjectFactory, options = {}) { - this.schemaObjectFactory = schemaObjectFactory; - this.options = options; - this.mimetypeContentWrapper = new mimetype_content_wrapper_1.MimetypeContentWrapper(); - this.metadataScanner = new core_1.MetadataScanner(); - this.schemas = {}; - this.operationIdFactory = (controllerKey, methodKey, version) => version - ? controllerKey - ? `${controllerKey}_${methodKey}_${version}` - : `${methodKey}_${version}` - : controllerKey - ? `${controllerKey}_${methodKey}` - : methodKey; - this.linkNameFactory = (controllerKey, methodKey, fieldKey) => controllerKey - ? `${controllerKey}_${methodKey}_from_${fieldKey}` - : `${methodKey}_from_${fieldKey}`; - } - exploreController(wrapper, applicationConfig, options) { - const { operationIdFactory, linkNameFactory } = options; - this.routePathFactory = new route_path_factory_1.RoutePathFactory(applicationConfig); - if (operationIdFactory) { - this.operationIdFactory = operationIdFactory; - } - if (linkNameFactory) { - this.linkNameFactory = linkNameFactory; - } - const { instance, metatype } = wrapper; - const prototype = Object.getPrototypeOf(instance); - const documentResolvers = { - root: [ - this.exploreRoutePathAndMethod, - api_operation_explorer_1.exploreApiOperationMetadata, - api_parameters_explorer_1.exploreApiParametersMetadata.bind(null, this.schemas) - ], - security: [api_security_explorer_1.exploreApiSecurityMetadata], - tags: [api_use_tags_explorer_1.exploreApiTagsMetadata], - callbacks: [api_callbacks_explorer_1.exploreApiCallbacksMetadata], - responses: [ - api_response_explorer_1.exploreApiResponseMetadata.bind(null, this.schemas, { - operationId: this.operationIdFactory, - linkName: this.linkNameFactory - }) - ] - }; - return this.generateDenormalizedDocument(metatype, prototype, instance, documentResolvers, applicationConfig, options); - } - getSchemas() { - return this.schemas; - } - generateDenormalizedDocument(metatype, prototype, instance, documentResolvers, applicationConfig, options) { - const self = this; - const excludeController = (0, api_exclude_controller_explorer_1.exploreApiExcludeControllerMetadata)(metatype); - if (excludeController) { - return []; - } - const globalMetadata = this.exploreGlobalMetadata(metatype, { - autoTagControllers: options.autoTagControllers - }); - const ctrlExtraModels = (0, api_extra_models_explorer_1.exploreGlobalApiExtraModelsMetadata)(metatype); - this.registerExtraModels(ctrlExtraModels); - const denormalizedPaths = this.metadataScanner.scanFromPrototype(instance, prototype, (name) => { - const targetCallback = prototype[name]; - const includeEndpoint = (0, api_include_endpoint_explorer_1.exploreApiIncludeEndpointMetadata)(instance, prototype, targetCallback); - if (options.onlyIncludeDecoratedEndpoints && !includeEndpoint) { - return; - } - const excludeEndpoint = (0, api_exclude_endpoint_explorer_1.exploreApiExcludeEndpointMetadata)(instance, prototype, targetCallback); - if (excludeEndpoint && excludeEndpoint.disable) { - return; - } - const ctrlExtraModels = (0, api_extra_models_explorer_1.exploreApiExtraModelsMetadata)(instance, prototype, targetCallback); - this.registerExtraModels(ctrlExtraModels); - const methodMetadata = (0, lodash_1.mapValues)(documentResolvers, (explorers) => explorers.reduce((metadata, fn) => { - const exploredMetadata = fn.call(self, instance, prototype, targetCallback, metatype, options.globalPrefix, options.modulePath, applicationConfig, options.autoTagControllers); - if (!exploredMetadata) { - return metadata; - } - if (!(0, lodash_1.isArray)(exploredMetadata)) { - if (Array.isArray(metadata)) { - return metadata.map((item) => (Object.assign(Object.assign({}, item), exploredMetadata))); - } - return Object.assign(Object.assign({}, metadata), exploredMetadata); - } - return (0, lodash_1.isArray)(metadata) - ? [...metadata, ...exploredMetadata] - : exploredMetadata; - }, {})); - if (Array.isArray(methodMetadata.root)) { - return methodMetadata.root.map((endpointMetadata) => { - endpointMetadata = (0, lodash_1.cloneDeep)(Object.assign(Object.assign({}, methodMetadata), { root: endpointMetadata })); - const mergedMethodMetadata = this.mergeMetadata(globalMetadata, (0, lodash_1.omitBy)(endpointMetadata, lodash_1.isEmpty)); - return this.migrateOperationSchema(Object.assign(Object.assign({ responses: {} }, (0, lodash_1.omit)(globalMetadata, 'chunks')), mergedMethodMetadata), prototype, targetCallback); - }); - } - const mergedMethodMetadata = this.mergeMetadata(globalMetadata, (0, lodash_1.omitBy)(methodMetadata, lodash_1.isEmpty)); - return [ - this.migrateOperationSchema(Object.assign(Object.assign({ responses: {} }, (0, lodash_1.omit)(globalMetadata, 'chunks')), mergedMethodMetadata), prototype, targetCallback) - ]; - }); - return (0, lodash_1.flatten)(denormalizedPaths).filter((path) => { var _a; return (_a = path.root) === null || _a === void 0 ? void 0 : _a.path; }); - } - exploreGlobalMetadata(metatype, options) { - const globalExplorers = [ - (0, api_use_tags_explorer_1.exploreGlobalApiTagsMetadata)(options.autoTagControllers), - api_security_explorer_1.exploreGlobalApiSecurityMetadata, - api_response_explorer_1.exploreGlobalApiResponseMetadata.bind(null, this.schemas), - api_headers_explorer_1.exploreGlobalApiHeaderMetadata - ]; - const globalMetadata = globalExplorers - .map((explorer) => explorer.call(explorer, metatype)) - .filter((val) => !(0, shared_utils_1.isUndefined)(val)) - .reduce((curr, next) => { - if (next.depth) { - return Object.assign(Object.assign({}, curr), { chunks: (curr.chunks || []).concat(next) }); - } - return Object.assign(Object.assign({}, curr), next); - }, {}); - return globalMetadata; - } - exploreRoutePathAndMethod(instance, prototype, method, metatype, globalPrefix, modulePath, applicationConfig) { - const methodPath = Reflect.getMetadata(constants_1.PATH_METADATA, method); - if ((0, shared_utils_1.isUndefined)(methodPath)) { - return undefined; - } - const requestMethod = Reflect.getMetadata(constants_1.METHOD_METADATA, method); - const methodVersion = Reflect.getMetadata(constants_1.VERSION_METADATA, method); - const versioningOptions = applicationConfig.getVersioning(); - const controllerVersion = this.getVersionMetadata(metatype, versioningOptions); - const versionOrVersions = methodVersion !== null && methodVersion !== void 0 ? methodVersion : controllerVersion; - const versions = this.getRoutePathVersions(versionOrVersions, versioningOptions); - const allRoutePaths = this.routePathFactory.create({ - methodPath, - methodVersion, - modulePath, - globalPrefix, - controllerVersion, - ctrlPath: this.reflectControllerPath(metatype), - versioningOptions: applicationConfig.getVersioning() - }, requestMethod); - return (0, lodash_1.flatten)(allRoutePaths.map((routePath, index) => { - const fullPath = this.validateRoutePath(routePath); - const apiExtension = Reflect.getMetadata(constants_2.DECORATORS.API_EXTENSION, method); - if (requestMethod === common_1.RequestMethod.ALL) { - const validMethods = [ - 'get', - 'post', - 'put', - 'delete', - 'patch', - 'options', - 'head', - 'search' - ]; - return validMethods.map((requestMethod) => (Object.assign({ method: requestMethod, path: fullPath === '' ? '/' : fullPath, operationId: `${this.getOperationId(instance, method.name)}_${requestMethod.toLowerCase()}` }, apiExtension))); - } - const pathVersion = versions.find((v) => fullPath.includes(`/${v}/`) || fullPath.endsWith(`/${v}`)); - const isAlias = allRoutePaths.length > 1 && allRoutePaths.length !== versions.length; - const methodKey = isAlias ? `${method.name}[${index}]` : method.name; - return Object.assign({ method: common_1.RequestMethod[requestMethod].toLowerCase(), path: fullPath === '' ? '/' : fullPath, operationId: this.getOperationId(instance, methodKey, pathVersion) }, apiExtension); - })); - } - getOperationId(instance, methodKey, version) { - var _a; - return this.operationIdFactory(((_a = instance.constructor) === null || _a === void 0 ? void 0 : _a.name) || '', methodKey, version); - } - getRoutePathVersions(versionValue, versioningOptions) { - let versions = []; - if (!versionValue || (versioningOptions === null || versioningOptions === void 0 ? void 0 : versioningOptions.type) !== common_1.VersioningType.URI) { - return versions; - } - if (Array.isArray(versionValue)) { - versions = versionValue.filter((v) => v !== interfaces_1.VERSION_NEUTRAL); - } - else if (versionValue !== interfaces_1.VERSION_NEUTRAL) { - versions = [versionValue]; - } - const prefix = this.routePathFactory.getVersionPrefix(versioningOptions); - versions = versions.map((v) => `${prefix}${v}`); - return versions; - } - reflectControllerPath(metatype) { - return Reflect.getMetadata(constants_1.PATH_METADATA, metatype); - } - validateRoutePath(path) { - if ((0, shared_utils_1.isUndefined)(path)) { - return ''; - } - if (Array.isArray(path)) { - path = (0, lodash_1.head)(path); - } - let pathWithParams = ''; - try { - let normalizedPath = legacy_route_converter_1.LegacyRouteConverter.tryConvert(path, { - logs: this.options.httpAdapterType !== 'fastify' - }); - normalizedPath = normalizedPath.replace(/::/g, '\\:'); - normalizedPath = normalizedPath.replace(/\[:\]/g, '\\:'); - normalizedPath = normalizedPath.replace(/\(\^([^)]+)\)/g, ''); - const { tokens } = (0, path_to_regexp_1.parse)(normalizedPath); - for (const item of tokens) { - if (item.type === 'text') { - pathWithParams += item.value; - } - else if (item.type === 'param') { - pathWithParams += `{${item.name}}`; - } - else if (item.type === 'wildcard') { - pathWithParams += `{${item.name}}`; - } - else if (item.type === 'group') { - pathWithParams += item.tokens.reduce((acc, item) => acc + - (item.type === 'text' - ? item.value - : `{${item.name}}`), ''); - } - } - } - catch (err) { - if (err instanceof TypeError) { - legacy_route_converter_1.LegacyRouteConverter.printError(path); - } - throw err; - } - return pathWithParams === '/' ? '' : (0, shared_utils_1.addLeadingSlash)(pathWithParams); - } - mergeMetadata(globalMetadata, methodMetadata) { - if (methodMetadata.root && !methodMetadata.root.parameters) { - methodMetadata.root.parameters = []; - } - const deepMerge = (metadata) => (value, key) => { - if (!metadata[key]) { - return value; - } - const globalValue = metadata[key]; - if (metadata.depth) { - return this.deepMergeMetadata(globalValue, value, metadata.depth); - } - return this.mergeValues(globalValue, value); - }; - if (globalMetadata.chunks) { - const { chunks } = globalMetadata; - chunks.forEach((chunk) => { - methodMetadata = (0, lodash_1.mapValues)(methodMetadata, deepMerge(chunk)); - }); - } - return (0, lodash_1.mapValues)(methodMetadata, deepMerge(globalMetadata)); - } - deepMergeMetadata(globalValue, methodValue, maxDepth, currentDepthLevel = 0) { - if (currentDepthLevel === maxDepth) { - return this.mergeValues(globalValue, methodValue); - } - return (0, lodash_1.mapValues)(methodValue, (value, key) => { - if (key in globalValue) { - return this.deepMergeMetadata(globalValue[key], methodValue[key], maxDepth, currentDepthLevel + 1); - } - return value; - }); - } - mergeValues(globalValue, methodValue) { - if (!(0, lodash_1.isArray)(globalValue)) { - return Object.assign(Object.assign({}, globalValue), methodValue); - } - return [...globalValue, ...methodValue]; - } - migrateOperationSchema(document, prototype, method) { - const parametersObject = (0, lodash_1.get)(document, 'root.parameters'); - const requestBodyIndex = (parametersObject || []).findIndex(is_body_parameter_util_1.isBodyParameter); - if (requestBodyIndex < 0) { - return document; - } - const requestBody = parametersObject[requestBodyIndex]; - parametersObject.splice(requestBodyIndex, 1); - const classConsumes = Reflect.getMetadata(constants_2.DECORATORS.API_CONSUMES, prototype); - const methodConsumes = Reflect.getMetadata(constants_2.DECORATORS.API_CONSUMES, method); - let consumes = (0, merge_and_uniq_util_1.mergeAndUniq)(classConsumes, methodConsumes); - consumes = (0, lodash_1.isEmpty)(consumes) ? ['application/json'] : consumes; - const keysToRemove = ['schema', 'in', 'name', 'examples']; - document.root.requestBody = Object.assign(Object.assign({}, (0, lodash_1.omit)(requestBody, keysToRemove)), this.mimetypeContentWrapper.wrap(consumes, (0, lodash_1.pick)(requestBody, ['schema', 'examples']))); - return document; - } - registerExtraModels(extraModels) { - extraModels.forEach((item) => this.schemaObjectFactory.exploreModelSchema(item, this.schemas)); - } - getVersionMetadata(metatype, versioningOptions) { - var _a; - if ((versioningOptions === null || versioningOptions === void 0 ? void 0 : versioningOptions.type) === common_1.VersioningType.URI) { - return ((_a = Reflect.getMetadata(constants_1.VERSION_METADATA, metatype)) !== null && _a !== void 0 ? _a : versioningOptions.defaultVersion); - } - } -} -exports.SwaggerExplorer = SwaggerExplorer; diff --git a/dist/swagger-module.d.ts b/dist/swagger-module.d.ts deleted file mode 100644 index 2831fec8b..000000000 --- a/dist/swagger-module.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { INestApplication } from '@nestjs/common'; -import { HttpServer } from '@nestjs/common/interfaces/http/http-server.interface'; -import { OpenAPIObject, SwaggerCustomOptions, SwaggerDocumentOptions } from './interfaces'; -export declare class SwaggerModule { - private static readonly metadataLoader; - static createDocument(app: INestApplication, config: Omit, options?: SwaggerDocumentOptions): OpenAPIObject; - static loadPluginMetadata(metadataFn: () => Promise>): Promise; - protected static serveStatic(finalPath: string, app: INestApplication, customStaticPath?: string): void; - protected static serveDocuments(finalPath: string, urlLastSubdirectory: string, httpAdapter: HttpServer, documentOrFactory: OpenAPIObject | (() => OpenAPIObject), options: { - ui: boolean; - raw: boolean | Array<'json' | 'yaml'>; - jsonDocumentUrl: string; - yamlDocumentUrl: string; - swaggerOptions: SwaggerCustomOptions; - }): void; - protected static serveSwaggerUi(finalPath: string, urlLastSubdirectory: string, httpAdapter: HttpServer, getBuiltDocument: () => OpenAPIObject, swaggerOptions: SwaggerCustomOptions): void; - protected static serveDefinitions(httpAdapter: HttpServer, getBuiltDocument: () => OpenAPIObject, options: { - jsonDocumentUrl: string; - yamlDocumentUrl: string; - swaggerOptions: SwaggerCustomOptions; - }, serveOptions: { - serveJson: boolean; - serveYaml: boolean; - }): void; - static setup(path: string, app: INestApplication, documentOrFactory: OpenAPIObject | (() => OpenAPIObject), options?: SwaggerCustomOptions): void; -} diff --git a/dist/swagger-module.js b/dist/swagger-module.js deleted file mode 100644 index 9dbd21ccc..000000000 --- a/dist/swagger-module.js +++ /dev/null @@ -1,196 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SwaggerModule = void 0; -const common_1 = require("@nestjs/common"); -const jsyaml = require("js-yaml"); -const metadata_loader_1 = require("./plugin/metadata-loader"); -const swagger_scanner_1 = require("./swagger-scanner"); -const swagger_ui_1 = require("./swagger-ui"); -const assign_two_levels_deep_1 = require("./utils/assign-two-levels-deep"); -const get_global_prefix_1 = require("./utils/get-global-prefix"); -const normalize_rel_path_1 = require("./utils/normalize-rel-path"); -const resolve_path_util_1 = require("./utils/resolve-path.util"); -const validate_global_prefix_util_1 = require("./utils/validate-global-prefix.util"); -const validate_path_util_1 = require("./utils/validate-path.util"); -class SwaggerModule { - static createDocument(app, config, options = {}) { - const swaggerScanner = new swagger_scanner_1.SwaggerScanner(); - const document = swaggerScanner.scanApplication(app, options); - document.components = (0, assign_two_levels_deep_1.assignTwoLevelsDeep)({}, config.components, document.components); - return Object.assign(Object.assign({ openapi: '3.0.0', paths: {} }, config), document); - } - static loadPluginMetadata(metadataFn) { - return __awaiter(this, void 0, void 0, function* () { - const metadata = yield metadataFn(); - return this.metadataLoader.load(metadata); - }); - } - static serveStatic(finalPath, app, customStaticPath) { - const httpAdapter = app.getHttpAdapter(); - const swaggerAssetsPath = customStaticPath - ? (0, resolve_path_util_1.resolvePath)(customStaticPath) - : (0, swagger_ui_1.getSwaggerAssetsAbsoluteFSPath)(); - if (httpAdapter && httpAdapter.getType() === 'fastify') { - app.useStaticAssets({ - root: swaggerAssetsPath, - prefix: finalPath, - decorateReply: false - }); - } - else { - app.useStaticAssets(swaggerAssetsPath, { - prefix: finalPath - }); - } - } - static serveDocuments(finalPath, urlLastSubdirectory, httpAdapter, documentOrFactory, options) { - let document; - const getBuiltDocument = () => { - if (!document) { - document = - typeof documentOrFactory === 'function' - ? documentOrFactory() - : documentOrFactory; - } - return document; - }; - if (options.ui) { - this.serveSwaggerUi(finalPath, urlLastSubdirectory, httpAdapter, getBuiltDocument, options.swaggerOptions); - } - if (options.raw === true || - (Array.isArray(options.raw) && options.raw.length > 0)) { - const serveJson = options.raw === true || options.raw.includes('json'); - const serveYaml = options.raw === true || options.raw.includes('yaml'); - this.serveDefinitions(httpAdapter, getBuiltDocument, options, { - serveJson, - serveYaml - }); - } - } - static serveSwaggerUi(finalPath, urlLastSubdirectory, httpAdapter, getBuiltDocument, swaggerOptions) { - const baseUrlForSwaggerUI = (0, normalize_rel_path_1.normalizeRelPath)(`./${urlLastSubdirectory}/`); - let swaggerUiHtml; - let swaggerUiInitJS; - httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(`${finalPath}/swagger-ui-init.js`), (req, res) => { - res.type('application/javascript'); - const document = getBuiltDocument(); - if (swaggerOptions.patchDocumentOnRequest) { - const documentToSerialize = swaggerOptions.patchDocumentOnRequest(req, res, document); - const swaggerInitJsPerRequest = (0, swagger_ui_1.buildSwaggerInitJS)(documentToSerialize, swaggerOptions); - return res.send(swaggerInitJsPerRequest); - } - if (!swaggerUiInitJS) { - swaggerUiInitJS = (0, swagger_ui_1.buildSwaggerInitJS)(document, swaggerOptions); - } - res.send(swaggerUiInitJS); - }); - try { - httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(`${finalPath}/${urlLastSubdirectory}/swagger-ui-init.js`), (req, res) => { - res.type('application/javascript'); - const document = getBuiltDocument(); - if (swaggerOptions.patchDocumentOnRequest) { - const documentToSerialize = swaggerOptions.patchDocumentOnRequest(req, res, document); - const swaggerInitJsPerRequest = (0, swagger_ui_1.buildSwaggerInitJS)(documentToSerialize, swaggerOptions); - return res.send(swaggerInitJsPerRequest); - } - if (!swaggerUiInitJS) { - swaggerUiInitJS = (0, swagger_ui_1.buildSwaggerInitJS)(document, swaggerOptions); - } - res.send(swaggerUiInitJS); - }); - } - catch (_a) { - } - function serveSwaggerHtml(_, res) { - res.type('text/html'); - if (!swaggerUiHtml) { - swaggerUiHtml = (0, swagger_ui_1.buildSwaggerHTML)(baseUrlForSwaggerUI, swaggerOptions); - } - res.send(swaggerUiHtml); - } - httpAdapter.get(finalPath, serveSwaggerHtml); - httpAdapter.get(`${finalPath}/index.html`, serveSwaggerHtml); - httpAdapter.get(`${finalPath}/LICENSE`, () => { - throw new common_1.NotFoundException(); - }); - try { - httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(`${finalPath}/`), serveSwaggerHtml); - } - catch (_b) { - } - } - static serveDefinitions(httpAdapter, getBuiltDocument, options, serveOptions) { - if (serveOptions.serveJson) { - httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(options.jsonDocumentUrl), (req, res) => { - res.type('application/json'); - const document = getBuiltDocument(); - const documentToSerialize = options.swaggerOptions - .patchDocumentOnRequest - ? options.swaggerOptions.patchDocumentOnRequest(req, res, document) - : document; - res.send(JSON.stringify(documentToSerialize)); - }); - } - if (serveOptions.serveYaml) { - httpAdapter.get((0, normalize_rel_path_1.normalizeRelPath)(options.yamlDocumentUrl), (req, res) => { - res.type('text/yaml'); - const document = getBuiltDocument(); - const documentToSerialize = options.swaggerOptions - .patchDocumentOnRequest - ? options.swaggerOptions.patchDocumentOnRequest(req, res, document) - : document; - const yamlDocument = jsyaml.dump(documentToSerialize, { - skipInvalid: true, - noRefs: true - }); - res.send(yamlDocument); - }); - } - } - static setup(path, app, documentOrFactory, options) { - var _a, _b, _c; - const globalPrefix = (0, get_global_prefix_1.getGlobalPrefix)(app); - const finalPath = (0, validate_path_util_1.validatePath)((options === null || options === void 0 ? void 0 : options.useGlobalPrefix) && (0, validate_global_prefix_util_1.validateGlobalPrefix)(globalPrefix) - ? `${globalPrefix}${(0, validate_path_util_1.validatePath)(path)}` - : path); - const urlLastSubdirectory = finalPath.split('/').slice(-1).pop() || ''; - const validatedGlobalPrefix = (options === null || options === void 0 ? void 0 : options.useGlobalPrefix) && (0, validate_global_prefix_util_1.validateGlobalPrefix)(globalPrefix) - ? (0, validate_path_util_1.validatePath)(globalPrefix) - : ''; - const finalJSONDocumentPath = (options === null || options === void 0 ? void 0 : options.jsonDocumentUrl) - ? `${validatedGlobalPrefix}${(0, validate_path_util_1.validatePath)(options.jsonDocumentUrl)}` - : `${finalPath}-json`; - const finalYAMLDocumentPath = (options === null || options === void 0 ? void 0 : options.yamlDocumentUrl) - ? `${validatedGlobalPrefix}${(0, validate_path_util_1.validatePath)(options.yamlDocumentUrl)}` - : `${finalPath}-yaml`; - const ui = (_b = (_a = options === null || options === void 0 ? void 0 : options.ui) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.swaggerUiEnabled) !== null && _b !== void 0 ? _b : true; - const raw = (_c = options === null || options === void 0 ? void 0 : options.raw) !== null && _c !== void 0 ? _c : true; - const httpAdapter = app.getHttpAdapter(); - SwaggerModule.serveDocuments(finalPath, urlLastSubdirectory, httpAdapter, documentOrFactory, { - ui, - raw, - jsonDocumentUrl: finalJSONDocumentPath, - yamlDocumentUrl: finalYAMLDocumentPath, - swaggerOptions: options || {} - }); - if (ui) { - SwaggerModule.serveStatic(finalPath, app, options === null || options === void 0 ? void 0 : options.customSwaggerUiPath); - if (finalPath === `/${urlLastSubdirectory}`) { - return; - } - const serveStaticSlashEndingPath = `${finalPath}/${urlLastSubdirectory}`; - SwaggerModule.serveStatic(serveStaticSlashEndingPath, app); - } - } -} -exports.SwaggerModule = SwaggerModule; -SwaggerModule.metadataLoader = new metadata_loader_1.MetadataLoader(); diff --git a/dist/swagger-scanner.d.ts b/dist/swagger-scanner.d.ts deleted file mode 100644 index 87fa336c5..000000000 --- a/dist/swagger-scanner.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { INestApplication, InjectionToken } from '@nestjs/common'; -import { ApplicationConfig } from '@nestjs/core'; -import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { Module } from '@nestjs/core/injector/module'; -import { OpenAPIObject, OperationIdFactory, SwaggerDocumentOptions } from './interfaces'; -import { ModuleRoute } from './interfaces/module-route.interface'; -import { SchemaObject } from './interfaces/open-api-spec.interface'; -export declare class SwaggerScanner { - private readonly transformer; - private readonly schemaObjectFactory; - private explorer; - scanApplication(app: INestApplication, options: SwaggerDocumentOptions): Omit; - scanModuleControllers(controller: Map, applicationConfig: ApplicationConfig, options: { - modulePath: string | undefined; - globalPrefix: string | undefined; - operationIdFactory?: OperationIdFactory; - linkNameFactory?: (controllerKey: string, methodKey: string, fieldKey: string) => string; - autoTagControllers?: boolean; - onlyIncludeDecoratedEndpoints?: boolean; - }): ModuleRoute[]; - getModules(modulesContainer: Map, include: Function[]): Module[]; - addExtraModels(schemas: Record, extraModels: Function[]): void; - private getModulePathMetadata; - private initializeSwaggerExplorer; -} diff --git a/dist/swagger-scanner.js b/dist/swagger-scanner.js deleted file mode 100644 index da6d7ff8f..000000000 --- a/dist/swagger-scanner.js +++ /dev/null @@ -1,92 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SwaggerScanner = void 0; -const constants_1 = require("@nestjs/common/constants"); -const lodash_1 = require("lodash"); -const model_properties_accessor_1 = require("./services/model-properties-accessor"); -const schema_object_factory_1 = require("./services/schema-object-factory"); -const swagger_types_mapper_1 = require("./services/swagger-types-mapper"); -const swagger_explorer_1 = require("./swagger-explorer"); -const swagger_transformer_1 = require("./swagger-transformer"); -const get_global_prefix_1 = require("./utils/get-global-prefix"); -const strip_last_slash_util_1 = require("./utils/strip-last-slash.util"); -class SwaggerScanner { - constructor() { - this.transformer = new swagger_transformer_1.SwaggerTransformer(); - this.schemaObjectFactory = new schema_object_factory_1.SchemaObjectFactory(new model_properties_accessor_1.ModelPropertiesAccessor(), new swagger_types_mapper_1.SwaggerTypesMapper()); - } - scanApplication(app, options) { - const { deepScanRoutes, include: includedModules = [], extraModels = [], ignoreGlobalPrefix = false, operationIdFactory, linkNameFactory, autoTagControllers = true, onlyIncludeDecoratedEndpoints = false } = options; - const untypedApp = app; - const container = untypedApp.container; - const internalConfigRef = untypedApp.config; - const httpAdapterType = app.getHttpAdapter().getType(); - this.initializeSwaggerExplorer(httpAdapterType); - const modules = this.getModules(container.getModules(), includedModules); - const globalPrefix = !ignoreGlobalPrefix - ? (0, strip_last_slash_util_1.stripLastSlash)((0, get_global_prefix_1.getGlobalPrefix)(app)) - : ''; - const denormalizedPaths = modules.map(({ controllers, metatype, imports }) => { - let result = []; - if (deepScanRoutes) { - const isGlobal = (module) => !container.isGlobalModule(module); - Array.from(imports.values()) - .filter(isGlobal) - .forEach(({ metatype, controllers }) => { - const modulePath = this.getModulePathMetadata(container, metatype); - result = result.concat(this.scanModuleControllers(controllers, internalConfigRef, { - modulePath, - globalPrefix, - operationIdFactory, - linkNameFactory, - autoTagControllers, - onlyIncludeDecoratedEndpoints - })); - }); - } - const modulePath = this.getModulePathMetadata(container, metatype); - return result.concat(this.scanModuleControllers(controllers, internalConfigRef, { - modulePath, - globalPrefix, - operationIdFactory, - linkNameFactory, - autoTagControllers, - onlyIncludeDecoratedEndpoints - })); - }); - const schemas = this.explorer.getSchemas(); - this.addExtraModels(schemas, extraModels); - return Object.assign(Object.assign({}, this.transformer.normalizePaths((0, lodash_1.flatten)(denormalizedPaths))), { components: { - schemas: schemas - } }); - } - scanModuleControllers(controller, applicationConfig, options) { - const denormalizedArray = [...controller.values()].map((ctrl) => this.explorer.exploreController(ctrl, applicationConfig, options)); - return (0, lodash_1.flatten)(denormalizedArray); - } - getModules(modulesContainer, include) { - if (!include || (0, lodash_1.isEmpty)(include)) { - return [...modulesContainer.values()]; - } - return [...modulesContainer.values()].filter(({ metatype }) => include.some((item) => item === metatype)); - } - addExtraModels(schemas, extraModels) { - extraModels.forEach((item) => { - this.schemaObjectFactory.exploreModelSchema(item, schemas); - }); - } - getModulePathMetadata(container, metatype) { - const modulesContainer = container.getModules(); - const modulePath = Reflect.getMetadata(constants_1.MODULE_PATH + modulesContainer.applicationId, metatype); - return modulePath !== null && modulePath !== void 0 ? modulePath : Reflect.getMetadata(constants_1.MODULE_PATH, metatype); - } - initializeSwaggerExplorer(httpAdapterType) { - if (this.explorer) { - return; - } - this.explorer = new swagger_explorer_1.SwaggerExplorer(this.schemaObjectFactory, { - httpAdapterType - }); - } -} -exports.SwaggerScanner = SwaggerScanner; diff --git a/dist/swagger-transformer.d.ts b/dist/swagger-transformer.d.ts deleted file mode 100644 index 2703485d5..000000000 --- a/dist/swagger-transformer.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { OpenAPIObject } from './interfaces'; -export declare class SwaggerTransformer { - normalizePaths(denormalizedDoc: (Partial & Record<'root', any>)[]): Record<'paths', OpenAPIObject['paths']>; -} diff --git a/dist/swagger-transformer.js b/dist/swagger-transformer.js deleted file mode 100644 index 93098aae1..000000000 --- a/dist/swagger-transformer.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SwaggerTransformer = void 0; -const lodash_1 = require("lodash"); -const sort_object_lexicographically_1 = require("./utils/sort-object-lexicographically"); -class SwaggerTransformer { - normalizePaths(denormalizedDoc) { - const roots = (0, lodash_1.filter)(denormalizedDoc, (r) => r.root); - const groupedByPath = (0, lodash_1.groupBy)(roots, ({ root }) => root.path); - const paths = (0, lodash_1.mapValues)(groupedByPath, (routes) => { - const keyByMethod = (0, lodash_1.keyBy)(routes, ({ root }) => root.method); - return (0, lodash_1.mapValues)(keyByMethod, (route) => { - const mergedDefinition = Object.assign(Object.assign({}, (0, lodash_1.omit)(route, 'root')), (0, lodash_1.omit)(route.root, ['method', 'path'])); - return (0, sort_object_lexicographically_1.sortObjectLexicographically)(mergedDefinition); - }); - }); - return { - paths - }; - } -} -exports.SwaggerTransformer = SwaggerTransformer; diff --git a/dist/swagger-ui/constants.d.ts b/dist/swagger-ui/constants.d.ts deleted file mode 100644 index 5ef1a350b..000000000 --- a/dist/swagger-ui/constants.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const favIconHtml: string; -export declare const htmlTemplateString = "\n\n\n\n\n \n <% title %>\n swagger-ui.css\" >\n <% favIconString %>\n \n\n\n\n\n\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n\n \n \n \n\n \n \n \n\n \n\n\n
\n\n\n\n\n<% customJs %>\n<% customJsStr %>\n<% customCssUrl %>\n\n\n\n\n"; -export declare const jsTemplateString = "\nwindow.onload = function() {\n // Build a system\n let url = window.location.search.match(/url=([^&]+)/);\n if (url && url.length > 1) {\n url = decodeURIComponent(url[1]);\n } else {\n url = window.location.origin;\n }\n <% swaggerOptions %>\n url = options.swaggerUrl || url\n let urls = options.swaggerUrls\n let customOptions = options.customOptions\n let spec1 = options.swaggerDoc\n let swaggerOptions = {\n spec: spec1,\n url: url,\n urls: urls,\n dom_id: '#swagger-ui',\n deepLinking: true,\n presets: [\n SwaggerUIBundle.presets.apis,\n SwaggerUIStandalonePreset\n ],\n plugins: [\n SwaggerUIBundle.plugins.DownloadUrl\n ],\n layout: \"StandaloneLayout\"\n }\n for (let attrname in customOptions) {\n swaggerOptions[attrname] = customOptions[attrname];\n }\n let ui = SwaggerUIBundle(swaggerOptions)\n\n if (customOptions.initOAuth) {\n ui.initOAuth(customOptions.initOAuth)\n }\n\n if (customOptions.authAction) {\n ui.authActions.authorize(customOptions.authAction)\n }\n \n window.ui = ui\n}\n"; diff --git a/dist/swagger-ui/constants.js b/dist/swagger-ui/constants.js deleted file mode 100644 index 6f47648e2..000000000 --- a/dist/swagger-ui/constants.js +++ /dev/null @@ -1,132 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.jsTemplateString = exports.htmlTemplateString = exports.favIconHtml = void 0; -exports.favIconHtml = '' + - ''; -exports.htmlTemplateString = ` - - - - - - <% title %> - - <% favIconString %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -<% customJs %> -<% customJsStr %> -<% customCssUrl %> - - - - -`; -exports.jsTemplateString = ` -window.onload = function() { - // Build a system - let url = window.location.search.match(/url=([^&]+)/); - if (url && url.length > 1) { - url = decodeURIComponent(url[1]); - } else { - url = window.location.origin; - } - <% swaggerOptions %> - url = options.swaggerUrl || url - let urls = options.swaggerUrls - let customOptions = options.customOptions - let spec1 = options.swaggerDoc - let swaggerOptions = { - spec: spec1, - url: url, - urls: urls, - dom_id: '#swagger-ui', - deepLinking: true, - presets: [ - SwaggerUIBundle.presets.apis, - SwaggerUIStandalonePreset - ], - plugins: [ - SwaggerUIBundle.plugins.DownloadUrl - ], - layout: "StandaloneLayout" - } - for (let attrname in customOptions) { - swaggerOptions[attrname] = customOptions[attrname]; - } - let ui = SwaggerUIBundle(swaggerOptions) - - if (customOptions.initOAuth) { - ui.initOAuth(customOptions.initOAuth) - } - - if (customOptions.authAction) { - ui.authActions.authorize(customOptions.authAction) - } - - window.ui = ui -} -`; diff --git a/dist/swagger-ui/helpers.d.ts b/dist/swagger-ui/helpers.d.ts deleted file mode 100644 index e0d2bc09e..000000000 --- a/dist/swagger-ui/helpers.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { SwaggerUIInitOptions } from '../interfaces/swagger-ui-init-options.interface'; -export declare function buildJSInitOptions(initOptions: SwaggerUIInitOptions): string; diff --git a/dist/swagger-ui/helpers.js b/dist/swagger-ui/helpers.js deleted file mode 100644 index 40ab9fbfa..000000000 --- a/dist/swagger-ui/helpers.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.buildJSInitOptions = buildJSInitOptions; -function buildJSInitOptions(initOptions) { - const functionPlaceholder = '____FUNCTION_PLACEHOLDER____'; - const fns = []; - let json = JSON.stringify(initOptions, (key, value) => { - if (typeof value === 'function') { - fns.push(value); - return functionPlaceholder; - } - return value; - }, 2); - json = json.replace(new RegExp('"' + functionPlaceholder + '"', 'g'), () => fns.shift()); - return `let options = ${json};`; -} diff --git a/dist/swagger-ui/index.d.ts b/dist/swagger-ui/index.d.ts deleted file mode 100644 index 863a2abec..000000000 --- a/dist/swagger-ui/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './swagger-ui'; diff --git a/dist/swagger-ui/index.js b/dist/swagger-ui/index.js deleted file mode 100644 index f8d1886b9..000000000 --- a/dist/swagger-ui/index.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./swagger-ui"), exports); diff --git a/dist/swagger-ui/swagger-ui.d.ts b/dist/swagger-ui/swagger-ui.d.ts deleted file mode 100644 index 361b69b08..000000000 --- a/dist/swagger-ui/swagger-ui.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { OpenAPIObject, SwaggerCustomOptions } from '../interfaces'; -export declare function buildSwaggerInitJS(swaggerDoc: OpenAPIObject, customOptions?: SwaggerCustomOptions): string; -export declare function getSwaggerAssetsAbsoluteFSPath(): string; -export declare function buildSwaggerHTML(baseUrl: string, customOptions?: SwaggerCustomOptions): string; diff --git a/dist/swagger-ui/swagger-ui.js b/dist/swagger-ui/swagger-ui.js deleted file mode 100644 index 2b48f9b80..000000000 --- a/dist/swagger-ui/swagger-ui.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.buildSwaggerInitJS = buildSwaggerInitJS; -exports.getSwaggerAssetsAbsoluteFSPath = getSwaggerAssetsAbsoluteFSPath; -exports.buildSwaggerHTML = buildSwaggerHTML; -const constants_1 = require("./constants"); -const helpers_1 = require("./helpers"); -function buildSwaggerInitJS(swaggerDoc, customOptions = {}) { - const { swaggerOptions = {}, swaggerUrl } = customOptions; - const swaggerInitOptions = { - swaggerDoc, - swaggerUrl, - customOptions: swaggerOptions - }; - const jsInitOptions = (0, helpers_1.buildJSInitOptions)(swaggerInitOptions); - return constants_1.jsTemplateString.replace('<% swaggerOptions %>', jsInitOptions); -} -let swaggerAssetsAbsoluteFSPath; -function getSwaggerAssetsAbsoluteFSPath() { - if (!swaggerAssetsAbsoluteFSPath) { - swaggerAssetsAbsoluteFSPath = require('swagger-ui-dist/absolute-path.js')(); - } - return swaggerAssetsAbsoluteFSPath; -} -function toExternalScriptTag(url) { - return ``; -} -function toInlineScriptTag(jsCode) { - return ``; -} -function toExternalStylesheetTag(url) { - return ``; -} -function toTags(customCode, toScript) { - if (!customCode) { - return ''; - } - if (typeof customCode === 'string') { - return toScript(customCode); - } - else { - return customCode.map(toScript).join('\n'); - } -} -function buildSwaggerHTML(baseUrl, customOptions = {}) { - const { customCss = '', customJs = '', customJsStr = '', customfavIcon = false, customSiteTitle = 'Swagger UI', customCssUrl = '', explorer = false } = customOptions; - const favIconString = customfavIcon - ? `` - : constants_1.favIconHtml; - const explorerCss = explorer - ? '' - : '.swagger-ui .topbar .download-url-wrapper { display: none }'; - return constants_1.htmlTemplateString - .replace('<% customCss %>', customCss) - .replace('<% explorerCss %>', explorerCss) - .replace('<% favIconString %>', favIconString) - .replace(/<% baseUrl %>/g, baseUrl) - .replace('<% customJs %>', toTags(customJs, toExternalScriptTag)) - .replace('<% customJsStr %>', toTags(customJsStr, toInlineScriptTag)) - .replace('<% customCssUrl %>', toTags(customCssUrl, toExternalStylesheetTag)) - .replace('<% title %>', customSiteTitle); -} diff --git a/dist/type-helpers/index.d.ts b/dist/type-helpers/index.d.ts deleted file mode 100644 index dbd86ed6b..000000000 --- a/dist/type-helpers/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './intersection-type.helper'; -export * from './omit-type.helper'; -export * from './partial-type.helper'; -export * from './pick-type.helper'; diff --git a/dist/type-helpers/index.js b/dist/type-helpers/index.js deleted file mode 100644 index 3f056058e..000000000 --- a/dist/type-helpers/index.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./intersection-type.helper"), exports); -__exportStar(require("./omit-type.helper"), exports); -__exportStar(require("./partial-type.helper"), exports); -__exportStar(require("./pick-type.helper"), exports); diff --git a/dist/type-helpers/intersection-type.helper.d.ts b/dist/type-helpers/intersection-type.helper.d.ts deleted file mode 100644 index f6331b9e0..000000000 --- a/dist/type-helpers/intersection-type.helper.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Type } from '@nestjs/common'; -type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; -type ClassRefsToConstructors = { - [U in keyof T]: T[U] extends Type ? V : never; -}; -type Intersection = Type[number]>>; -export declare function IntersectionType(...classRefs: T): Intersection; -export {}; diff --git a/dist/type-helpers/intersection-type.helper.js b/dist/type-helpers/intersection-type.helper.js deleted file mode 100644 index ff7da273a..000000000 --- a/dist/type-helpers/intersection-type.helper.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IntersectionType = IntersectionType; -const mapped_types_1 = require("@nestjs/mapped-types"); -const constants_1 = require("../constants"); -const decorators_1 = require("../decorators"); -const metadata_loader_1 = require("../plugin/metadata-loader"); -const model_properties_accessor_1 = require("../services/model-properties-accessor"); -const mapped_types_utils_1 = require("./mapped-types.utils"); -const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); -function IntersectionType(...classRefs) { - class IntersectionClassType { - constructor() { - classRefs.forEach((classRef) => { - (0, mapped_types_1.inheritPropertyInitializers)(this, classRef); - }); - } - } - classRefs.forEach((classRef) => { - const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); - (0, mapped_types_1.inheritValidationMetadata)(classRef, IntersectionClassType); - (0, mapped_types_1.inheritTransformationMetadata)(classRef, IntersectionClassType); - function applyFields(fields) { - (0, mapped_types_utils_1.clonePluginMetadataFactory)(IntersectionClassType, classRef.prototype); - fields.forEach((propertyKey) => { - const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey); - const decoratorFactory = (0, decorators_1.ApiProperty)(metadata); - decoratorFactory(IntersectionClassType.prototype, propertyKey); - }); - } - applyFields(fields); - metadata_loader_1.MetadataLoader.addRefreshHook(() => { - const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); - applyFields(fields); - }); - }); - const intersectedNames = classRefs.reduce((prev, ref) => prev + ref.name, ''); - Object.defineProperty(IntersectionClassType, 'name', { - value: `Intersection${intersectedNames}` - }); - return IntersectionClassType; -} diff --git a/dist/type-helpers/mapped-types.utils.d.ts b/dist/type-helpers/mapped-types.utils.d.ts deleted file mode 100644 index cf5713cfa..000000000 --- a/dist/type-helpers/mapped-types.utils.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare function clonePluginMetadataFactory(target: Type, parent: Type, transformFn?: (metadata: Record) => Record): void; diff --git a/dist/type-helpers/mapped-types.utils.js b/dist/type-helpers/mapped-types.utils.js deleted file mode 100644 index c28844606..000000000 --- a/dist/type-helpers/mapped-types.utils.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.clonePluginMetadataFactory = clonePluginMetadataFactory; -const lodash_1 = require("lodash"); -const plugin_constants_1 = require("../plugin/plugin-constants"); -function clonePluginMetadataFactory(target, parent, transformFn = lodash_1.identity) { - let targetMetadata = {}; - do { - if (!parent.constructor) { - return; - } - if (!parent.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { - continue; - } - const parentMetadata = parent.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); - targetMetadata = Object.assign(Object.assign({}, parentMetadata), targetMetadata); - } while ((parent = Reflect.getPrototypeOf(parent)) && - parent !== Object.prototype && - parent); - targetMetadata = transformFn(targetMetadata); - if (target[plugin_constants_1.METADATA_FACTORY_NAME]) { - const originalFactory = target[plugin_constants_1.METADATA_FACTORY_NAME]; - target[plugin_constants_1.METADATA_FACTORY_NAME] = () => { - const originalMetadata = originalFactory(); - return Object.assign(Object.assign({}, originalMetadata), targetMetadata); - }; - } - else { - target[plugin_constants_1.METADATA_FACTORY_NAME] = () => targetMetadata; - } -} diff --git a/dist/type-helpers/omit-type.helper.d.ts b/dist/type-helpers/omit-type.helper.d.ts deleted file mode 100644 index dec224897..000000000 --- a/dist/type-helpers/omit-type.helper.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare function OmitType(classRef: Type, keys: readonly K[]): Type>; diff --git a/dist/type-helpers/omit-type.helper.js b/dist/type-helpers/omit-type.helper.js deleted file mode 100644 index c570ea7f2..000000000 --- a/dist/type-helpers/omit-type.helper.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OmitType = OmitType; -const mapped_types_1 = require("@nestjs/mapped-types"); -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const decorators_1 = require("../decorators"); -const metadata_loader_1 = require("../plugin/metadata-loader"); -const model_properties_accessor_1 = require("../services/model-properties-accessor"); -const mapped_types_utils_1 = require("./mapped-types.utils"); -const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); -function OmitType(classRef, keys) { - const fields = modelPropertiesAccessor - .getModelProperties(classRef.prototype) - .filter((item) => !keys.includes(item)); - const isInheritedPredicate = (propertyKey) => !keys.includes(propertyKey); - class OmitTypeClass { - constructor() { - (0, mapped_types_1.inheritPropertyInitializers)(this, classRef, isInheritedPredicate); - } - } - (0, mapped_types_1.inheritValidationMetadata)(classRef, OmitTypeClass, isInheritedPredicate); - (0, mapped_types_1.inheritTransformationMetadata)(classRef, OmitTypeClass, isInheritedPredicate); - function applyFields(fields) { - (0, mapped_types_utils_1.clonePluginMetadataFactory)(OmitTypeClass, classRef.prototype, (metadata) => (0, lodash_1.omit)(metadata, keys)); - fields.forEach((propertyKey) => { - const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey); - const decoratorFactory = (0, decorators_1.ApiProperty)(metadata); - decoratorFactory(OmitTypeClass.prototype, propertyKey); - }); - } - applyFields(fields); - metadata_loader_1.MetadataLoader.addRefreshHook(() => { - const fields = modelPropertiesAccessor - .getModelProperties(classRef.prototype) - .filter((item) => !keys.includes(item)); - applyFields(fields); - }); - return OmitTypeClass; -} diff --git a/dist/type-helpers/partial-type.helper.d.ts b/dist/type-helpers/partial-type.helper.d.ts deleted file mode 100644 index 2cdd8a462..000000000 --- a/dist/type-helpers/partial-type.helper.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare function PartialType(classRef: Type, options?: { - skipNullProperties?: boolean; -}): Type>; diff --git a/dist/type-helpers/partial-type.helper.js b/dist/type-helpers/partial-type.helper.js deleted file mode 100644 index c897cde75..000000000 --- a/dist/type-helpers/partial-type.helper.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PartialType = PartialType; -const mapped_types_1 = require("@nestjs/mapped-types"); -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const decorators_1 = require("../decorators"); -const metadata_loader_1 = require("../plugin/metadata-loader"); -const plugin_constants_1 = require("../plugin/plugin-constants"); -const model_properties_accessor_1 = require("../services/model-properties-accessor"); -const mapped_types_utils_1 = require("./mapped-types.utils"); -const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); -function PartialType(classRef, options = {}) { - const applyPartialDecoratorFn = options.skipNullProperties === false - ? mapped_types_1.applyValidateIfDefinedDecorator - : mapped_types_1.applyIsOptionalDecorator; - const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); - class PartialTypeClass { - constructor() { - (0, mapped_types_1.inheritPropertyInitializers)(this, classRef); - } - } - const keysWithValidationConstraints = (0, mapped_types_1.inheritValidationMetadata)(classRef, PartialTypeClass); - if (keysWithValidationConstraints) { - keysWithValidationConstraints - .filter((key) => !fields.includes(key)) - .forEach((key) => applyPartialDecoratorFn(PartialTypeClass, key)); - } - (0, mapped_types_1.inheritTransformationMetadata)(classRef, PartialTypeClass); - function applyFields(fields) { - (0, mapped_types_utils_1.clonePluginMetadataFactory)(PartialTypeClass, classRef.prototype, (metadata) => (0, lodash_1.mapValues)(metadata, (item) => (Object.assign(Object.assign({}, item), { required: false })))); - if (PartialTypeClass[plugin_constants_1.METADATA_FACTORY_NAME]) { - const pluginFields = Object.keys(PartialTypeClass[plugin_constants_1.METADATA_FACTORY_NAME]()); - pluginFields.forEach((key) => applyPartialDecoratorFn(PartialTypeClass, key)); - } - fields.forEach((key) => { - const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, key) || {}; - const decoratorFactory = (0, decorators_1.ApiProperty)(Object.assign(Object.assign({}, metadata), { required: false })); - decoratorFactory(PartialTypeClass.prototype, key); - applyPartialDecoratorFn(PartialTypeClass, key); - }); - } - applyFields(fields); - metadata_loader_1.MetadataLoader.addRefreshHook(() => { - const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); - applyFields(fields); - }); - return PartialTypeClass; -} diff --git a/dist/type-helpers/pick-type.helper.d.ts b/dist/type-helpers/pick-type.helper.d.ts deleted file mode 100644 index dbba78e8b..000000000 --- a/dist/type-helpers/pick-type.helper.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare function PickType(classRef: Type, keys: readonly K[]): Type>; diff --git a/dist/type-helpers/pick-type.helper.js b/dist/type-helpers/pick-type.helper.js deleted file mode 100644 index d56188a49..000000000 --- a/dist/type-helpers/pick-type.helper.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PickType = PickType; -const mapped_types_1 = require("@nestjs/mapped-types"); -const lodash_1 = require("lodash"); -const constants_1 = require("../constants"); -const decorators_1 = require("../decorators"); -const metadata_loader_1 = require("../plugin/metadata-loader"); -const model_properties_accessor_1 = require("../services/model-properties-accessor"); -const mapped_types_utils_1 = require("./mapped-types.utils"); -const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); -function PickType(classRef, keys) { - const fields = modelPropertiesAccessor - .getModelProperties(classRef.prototype) - .filter((item) => keys.includes(item)); - const isInheritedPredicate = (propertyKey) => keys.includes(propertyKey); - class PickTypeClass { - constructor() { - (0, mapped_types_1.inheritPropertyInitializers)(this, classRef, isInheritedPredicate); - } - } - (0, mapped_types_1.inheritValidationMetadata)(classRef, PickTypeClass, isInheritedPredicate); - (0, mapped_types_1.inheritTransformationMetadata)(classRef, PickTypeClass, isInheritedPredicate); - function applyFields(fields) { - (0, mapped_types_utils_1.clonePluginMetadataFactory)(PickTypeClass, classRef.prototype, (metadata) => (0, lodash_1.pick)(metadata, keys)); - fields.forEach((propertyKey) => { - const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey); - const decoratorFactory = (0, decorators_1.ApiProperty)(metadata); - decoratorFactory(PickTypeClass.prototype, propertyKey); - }); - } - applyFields(fields); - metadata_loader_1.MetadataLoader.addRefreshHook(() => { - const fields = modelPropertiesAccessor - .getModelProperties(classRef.prototype) - .filter((item) => keys.includes(item)); - applyFields(fields); - }); - return PickTypeClass; -} diff --git a/dist/types/swagger-enum.type.d.ts b/dist/types/swagger-enum.type.d.ts deleted file mode 100644 index 5a12633f4..000000000 --- a/dist/types/swagger-enum.type.d.ts +++ /dev/null @@ -1 +0,0 @@ -export type SwaggerEnumType = string[] | number[] | (string | number)[] | Record; diff --git a/dist/types/swagger-enum.type.js b/dist/types/swagger-enum.type.js deleted file mode 100644 index c8ad2e549..000000000 --- a/dist/types/swagger-enum.type.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/assign-two-levels-deep.d.ts b/dist/utils/assign-two-levels-deep.d.ts deleted file mode 100644 index 22756a01c..000000000 --- a/dist/utils/assign-two-levels-deep.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function assignTwoLevelsDeep(_dest: TObject, ...args: T[]): TObject & T; diff --git a/dist/utils/assign-two-levels-deep.js b/dist/utils/assign-two-levels-deep.js deleted file mode 100644 index ffa1b91f3..000000000 --- a/dist/utils/assign-two-levels-deep.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.assignTwoLevelsDeep = assignTwoLevelsDeep; -function assignTwoLevelsDeep(_dest, ...args) { - const dest = _dest; - for (const arg of args) { - for (const [key, value] of Object.entries(arg !== null && arg !== void 0 ? arg : {})) { - dest[key] = Object.assign(Object.assign({}, dest[key]), value); - } - } - return dest; -} diff --git a/dist/utils/enum.utils.d.ts b/dist/utils/enum.utils.d.ts deleted file mode 100644 index bf1057ac0..000000000 --- a/dist/utils/enum.utils.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; -export declare function getEnumValues(enumType: SwaggerEnumType | (() => SwaggerEnumType)): string[] | number[]; -export declare function getEnumType(values: (string | number)[]): 'string' | 'number'; -export declare function addEnumArraySchema(paramDefinition: Partial>, decoratorOptions: Partial>): void; -export declare function addEnumSchema(paramDefinition: Partial>, decoratorOptions: Partial>): void; -export declare const isEnumArray: >>(obj: Record) => obj is T; -export declare const isEnumDefined: >>(obj: Record) => obj is T; -export declare const isEnumMetadata: (metadata: SchemaObjectMetadata) => any; diff --git a/dist/utils/enum.utils.js b/dist/utils/enum.utils.js deleted file mode 100644 index 6c20dc98b..000000000 --- a/dist/utils/enum.utils.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isEnumMetadata = exports.isEnumDefined = exports.isEnumArray = void 0; -exports.getEnumValues = getEnumValues; -exports.getEnumType = getEnumType; -exports.addEnumArraySchema = addEnumArraySchema; -exports.addEnumSchema = addEnumSchema; -const lodash_1 = require("lodash"); -function getEnumValues(enumType) { - if (typeof enumType === 'function') { - return getEnumValues(enumType()); - } - if (Array.isArray(enumType)) { - return enumType; - } - if (typeof enumType !== 'object') { - return []; - } - const numericValues = Object.values(enumType) - .filter((value) => typeof value === 'number') - .map((value) => value.toString()); - return Object.keys(enumType) - .filter((key) => !numericValues.includes(key)) - .map((key) => enumType[key]); -} -function getEnumType(values) { - const hasString = values.filter(lodash_1.isString).length > 0; - return hasString ? 'string' : 'number'; -} -function addEnumArraySchema(paramDefinition, decoratorOptions) { - const paramSchema = paramDefinition.schema || {}; - paramDefinition.schema = paramSchema; - paramSchema.type = 'array'; - delete paramDefinition.isArray; - const enumValues = getEnumValues(decoratorOptions.enum); - paramSchema.items = { - type: getEnumType(enumValues), - enum: enumValues - }; - if (decoratorOptions.enumName) { - paramDefinition.enumName = decoratorOptions.enumName; - } - if (decoratorOptions.enumSchema) { - paramDefinition.enumSchema = decoratorOptions.enumSchema; - } -} -function addEnumSchema(paramDefinition, decoratorOptions) { - const paramSchema = paramDefinition.schema || {}; - const enumValues = getEnumValues(decoratorOptions.enum); - paramDefinition.schema = paramSchema; - paramSchema.enum = enumValues; - paramSchema.type = getEnumType(enumValues); - if (decoratorOptions.enumName) { - paramDefinition.enumName = decoratorOptions.enumName; - } - if (decoratorOptions.enumSchema) { - paramDefinition.enumSchema = decoratorOptions.enumSchema; - } -} -const isEnumArray = (obj) => obj.isArray && obj.enum; -exports.isEnumArray = isEnumArray; -const isEnumDefined = (obj) => obj.enum; -exports.isEnumDefined = isEnumDefined; -const isEnumMetadata = (metadata) => { var _a; return metadata.enum || (metadata.isArray && ((_a = metadata.items) === null || _a === void 0 ? void 0 : _a['enum'])); }; -exports.isEnumMetadata = isEnumMetadata; diff --git a/dist/utils/extend-metadata.util.d.ts b/dist/utils/extend-metadata.util.d.ts deleted file mode 100644 index e88c198e5..000000000 --- a/dist/utils/extend-metadata.util.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import 'reflect-metadata'; -export declare function extendMetadata[] = any[]>(metadata: T, metakey: string, target: object): any; diff --git a/dist/utils/extend-metadata.util.js b/dist/utils/extend-metadata.util.js deleted file mode 100644 index 24386ffc2..000000000 --- a/dist/utils/extend-metadata.util.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.extendMetadata = extendMetadata; -require("reflect-metadata"); -function extendMetadata(metadata, metakey, target) { - const existingMetadata = Reflect.getMetadata(metakey, target); - if (!existingMetadata) { - return metadata; - } - return existingMetadata.concat(metadata); -} diff --git a/dist/utils/get-global-prefix.d.ts b/dist/utils/get-global-prefix.d.ts deleted file mode 100644 index 77cdd5367..000000000 --- a/dist/utils/get-global-prefix.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { INestApplication } from '@nestjs/common'; -export declare function getGlobalPrefix(app: INestApplication): string; diff --git a/dist/utils/get-global-prefix.js b/dist/utils/get-global-prefix.js deleted file mode 100644 index b06b2e211..000000000 --- a/dist/utils/get-global-prefix.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getGlobalPrefix = getGlobalPrefix; -function getGlobalPrefix(app) { - const internalConfigRef = app.config; - return (internalConfigRef && internalConfigRef.getGlobalPrefix()) || ''; -} diff --git a/dist/utils/get-schema-path.util.d.ts b/dist/utils/get-schema-path.util.d.ts deleted file mode 100644 index a755c75a4..000000000 --- a/dist/utils/get-schema-path.util.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function getSchemaPath(model: string | Function): string; -export declare function refs(...models: Function[]): { - $ref: string; -}[]; diff --git a/dist/utils/get-schema-path.util.js b/dist/utils/get-schema-path.util.js deleted file mode 100644 index af99666f7..000000000 --- a/dist/utils/get-schema-path.util.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getSchemaPath = getSchemaPath; -exports.refs = refs; -const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); -const constants_1 = require("../constants"); -function getSchemaPath(model) { - const modelName = (0, shared_utils_1.isString)(model) ? model : getSchemaNameByClass(model); - return `#/components/schemas/${modelName}`; -} -function getSchemaNameByClass(target) { - var _a; - if (!target || typeof target !== 'function') { - return ''; - } - const customSchema = Reflect.getOwnMetadata(constants_1.DECORATORS.API_SCHEMA, target); - if (!customSchema || customSchema.length === 0) { - return target.name; - } - return (_a = customSchema[customSchema.length - 1].name) !== null && _a !== void 0 ? _a : target.name; -} -function refs(...models) { - return models.map((item) => ({ - $ref: getSchemaPath(item.name) - })); -} diff --git a/dist/utils/index.d.ts b/dist/utils/index.d.ts deleted file mode 100644 index eda441c67..000000000 --- a/dist/utils/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './get-schema-path.util'; diff --git a/dist/utils/index.js b/dist/utils/index.js deleted file mode 100644 index a7ea8c90d..000000000 --- a/dist/utils/index.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./get-schema-path.util"), exports); diff --git a/dist/utils/is-body-parameter.util.d.ts b/dist/utils/is-body-parameter.util.d.ts deleted file mode 100644 index 095a799ee..000000000 --- a/dist/utils/is-body-parameter.util.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { ParamWithTypeMetadata } from '../services/parameter-metadata-accessor'; -export declare function isBodyParameter(param: ParamWithTypeMetadata): boolean; diff --git a/dist/utils/is-body-parameter.util.js b/dist/utils/is-body-parameter.util.js deleted file mode 100644 index d28e4b8d8..000000000 --- a/dist/utils/is-body-parameter.util.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isBodyParameter = isBodyParameter; -function isBodyParameter(param) { - return param.in === 'body'; -} diff --git a/dist/utils/is-built-in-type.util.d.ts b/dist/utils/is-built-in-type.util.d.ts deleted file mode 100644 index bf565f611..000000000 --- a/dist/utils/is-built-in-type.util.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare function isBuiltInType(type: Type | Function | string): boolean; diff --git a/dist/utils/is-built-in-type.util.js b/dist/utils/is-built-in-type.util.js deleted file mode 100644 index 6df4b0233..000000000 --- a/dist/utils/is-built-in-type.util.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isBuiltInType = isBuiltInType; -const lodash_1 = require("lodash"); -const constants_1 = require("../services/constants"); -function isBuiltInType(type) { - return (0, lodash_1.isFunction)(type) && constants_1.BUILT_IN_TYPES.some((item) => item === type); -} diff --git a/dist/utils/is-date-ctor.util.d.ts b/dist/utils/is-date-ctor.util.d.ts deleted file mode 100644 index 3c37683d3..000000000 --- a/dist/utils/is-date-ctor.util.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Type } from '@nestjs/common'; -export declare function isDateCtor(type: Type | Function | string): boolean; diff --git a/dist/utils/is-date-ctor.util.js b/dist/utils/is-date-ctor.util.js deleted file mode 100644 index b01b52df0..000000000 --- a/dist/utils/is-date-ctor.util.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isDateCtor = isDateCtor; -function isDateCtor(type) { - return type === Date; -} diff --git a/dist/utils/merge-and-uniq.util.d.ts b/dist/utils/merge-and-uniq.util.d.ts deleted file mode 100644 index 401377124..000000000 --- a/dist/utils/merge-and-uniq.util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function mergeAndUniq(a?: unknown, b?: unknown): T; diff --git a/dist/utils/merge-and-uniq.util.js b/dist/utils/merge-and-uniq.util.js deleted file mode 100644 index 2af6d0665..000000000 --- a/dist/utils/merge-and-uniq.util.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.mergeAndUniq = mergeAndUniq; -const lodash_1 = require("lodash"); -function mergeAndUniq(a = [], b = []) { - return (0, lodash_1.uniq)((0, lodash_1.merge)(a, b)); -} diff --git a/dist/utils/normalize-rel-path.d.ts b/dist/utils/normalize-rel-path.d.ts deleted file mode 100644 index 227895859..000000000 --- a/dist/utils/normalize-rel-path.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function normalizeRelPath(input: string): string; diff --git a/dist/utils/normalize-rel-path.js b/dist/utils/normalize-rel-path.js deleted file mode 100644 index c7f5f6083..000000000 --- a/dist/utils/normalize-rel-path.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.normalizeRelPath = normalizeRelPath; -function normalizeRelPath(input) { - const output = input.replace(/\/\/+/g, '/'); - return output; -} diff --git a/dist/utils/remove-undefined-keys.d.ts b/dist/utils/remove-undefined-keys.d.ts deleted file mode 100644 index 140ad84f4..000000000 --- a/dist/utils/remove-undefined-keys.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare function removeUndefinedKeys(obj: { - [x: string]: any; -}): { - [x: string]: any; -}; diff --git a/dist/utils/remove-undefined-keys.js b/dist/utils/remove-undefined-keys.js deleted file mode 100644 index c642ab634..000000000 --- a/dist/utils/remove-undefined-keys.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.removeUndefinedKeys = removeUndefinedKeys; -function removeUndefinedKeys(obj) { - Object.entries(obj).forEach(([key, value]) => { - if (value === undefined) { - delete obj[key]; - } - }); - return obj; -} diff --git a/dist/utils/resolve-path.util.d.ts b/dist/utils/resolve-path.util.d.ts deleted file mode 100644 index c771101b7..000000000 --- a/dist/utils/resolve-path.util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function resolvePath(path: string): string; diff --git a/dist/utils/resolve-path.util.js b/dist/utils/resolve-path.util.js deleted file mode 100644 index 91b547b35..000000000 --- a/dist/utils/resolve-path.util.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.resolvePath = resolvePath; -const pathLib = require("path"); -function resolvePath(path) { - return path ? pathLib.resolve(path) : path; -} diff --git a/dist/utils/reverse-object-keys.util.d.ts b/dist/utils/reverse-object-keys.util.d.ts deleted file mode 100644 index 90336d5ea..000000000 --- a/dist/utils/reverse-object-keys.util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function reverseObjectKeys(originalObject: Record): Record; diff --git a/dist/utils/reverse-object-keys.util.js b/dist/utils/reverse-object-keys.util.js deleted file mode 100644 index 80c02c146..000000000 --- a/dist/utils/reverse-object-keys.util.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.reverseObjectKeys = reverseObjectKeys; -function reverseObjectKeys(originalObject) { - const reversedObject = {}; - const keys = Object.keys(originalObject).reverse(); - for (const key of keys) { - reversedObject[key] = originalObject[key]; - } - return reversedObject; -} diff --git a/dist/utils/sort-object-lexicographically.d.ts b/dist/utils/sort-object-lexicographically.d.ts deleted file mode 100644 index 7c67a471b..000000000 --- a/dist/utils/sort-object-lexicographically.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare function sortObjectLexicographically(obj: { - [key: string]: any; -}): { - [key: string]: any; -}; diff --git a/dist/utils/sort-object-lexicographically.js b/dist/utils/sort-object-lexicographically.js deleted file mode 100644 index 08c2ce461..000000000 --- a/dist/utils/sort-object-lexicographically.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.sortObjectLexicographically = sortObjectLexicographically; -function sortObjectLexicographically(obj) { - const sortedKeys = Object.keys(obj).sort(); - const sortedObj = {}; - for (const key of sortedKeys) { - sortedObj[key] = obj[key]; - } - return sortedObj; -} diff --git a/dist/utils/strip-last-slash.util.d.ts b/dist/utils/strip-last-slash.util.d.ts deleted file mode 100644 index d40d325d6..000000000 --- a/dist/utils/strip-last-slash.util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function stripLastSlash(path: string): string; diff --git a/dist/utils/strip-last-slash.util.js b/dist/utils/strip-last-slash.util.js deleted file mode 100644 index 9082452e3..000000000 --- a/dist/utils/strip-last-slash.util.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.stripLastSlash = stripLastSlash; -function stripLastSlash(path) { - return path && path[path.length - 1] === '/' - ? path.slice(0, path.length - 1) - : path; -} diff --git a/dist/utils/validate-global-prefix.util.d.ts b/dist/utils/validate-global-prefix.util.d.ts deleted file mode 100644 index a8ad70d68..000000000 --- a/dist/utils/validate-global-prefix.util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const validateGlobalPrefix: (globalPrefix: string) => boolean; diff --git a/dist/utils/validate-global-prefix.util.js b/dist/utils/validate-global-prefix.util.js deleted file mode 100644 index 3b4987632..000000000 --- a/dist/utils/validate-global-prefix.util.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.validateGlobalPrefix = void 0; -const validateGlobalPrefix = (globalPrefix) => globalPrefix && !globalPrefix.match(/^(\/?)$/); -exports.validateGlobalPrefix = validateGlobalPrefix; diff --git a/dist/utils/validate-path.util.d.ts b/dist/utils/validate-path.util.d.ts deleted file mode 100644 index 475ba5bfc..000000000 --- a/dist/utils/validate-path.util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const validatePath: (inputPath: string) => string; diff --git a/dist/utils/validate-path.util.js b/dist/utils/validate-path.util.js deleted file mode 100644 index 5198b0f5a..000000000 --- a/dist/utils/validate-path.util.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.validatePath = void 0; -const validatePath = (inputPath) => inputPath.charAt(0) !== '/' ? '/' + inputPath : inputPath; -exports.validatePath = validatePath; From 82133db666aa4a625778eeef6fd2a8f5412e0aeb Mon Sep 17 00:00:00 2001 From: Tom Smeets Date: Mon, 27 Oct 2025 12:18:54 +0100 Subject: [PATCH 5/6] revert package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ec3a7032c..6daf6e555 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "@TomSpott/nestjs-swagger-fork", + "name": "@nestjs/swagger", "version": "11.2.1", "description": "Nest - modern, fast, powerful node.js web framework (@swagger)", "author": "Kamil Mysliwiec", "license": "MIT", - "repository": "https://github.com/TomSpott/swagger-fork", + "repository": "https://github.com/nestjs/swagger", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { From f558ee55a306e123e6a4260bcce50fb9df1db7a7 Mon Sep 17 00:00:00 2001 From: Tom Smeets Date: Mon, 27 Oct 2025 12:21:35 +0100 Subject: [PATCH 6/6] remove pnpm lock from remote --- pnpm-lock.yaml | 7846 ------------------------------------------------ 1 file changed, 7846 deletions(-) delete mode 100644 pnpm-lock.yaml diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 1656b1287..000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,7846 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@microsoft/tsdoc': - specifier: 0.15.1 - version: 0.15.1 - '@nestjs/mapped-types': - specifier: 2.1.0 - version: 2.1.0(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2) - js-yaml: - specifier: 4.1.0 - version: 4.1.0 - lodash: - specifier: 4.17.21 - version: 4.17.21 - path-to-regexp: - specifier: 8.3.0 - version: 8.3.0 - swagger-ui-dist: - specifier: 5.29.4 - version: 5.29.4 - devDependencies: - '@commitlint/cli': - specifier: 20.1.0 - version: 20.1.0(@types/node@22.18.12)(typescript@5.9.3) - '@commitlint/config-angular': - specifier: 20.0.0 - version: 20.0.0 - '@eslint/eslintrc': - specifier: 3.3.1 - version: 3.3.1 - '@eslint/js': - specifier: 9.38.0 - version: 9.38.0 - '@fastify/static': - specifier: 8.3.0 - version: 8.3.0 - '@nestjs/common': - specifier: 11.1.7 - version: 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': - specifier: 11.1.7 - version: 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/platform-express': - specifier: 11.1.7 - version: 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7) - '@nestjs/platform-fastify': - specifier: 11.1.7 - version: 11.1.7(@fastify/static@8.3.0)(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7) - '@types/jest': - specifier: 30.0.0 - version: 30.0.0 - '@types/js-yaml': - specifier: 4.0.9 - version: 4.0.9 - '@types/lodash': - specifier: 4.17.20 - version: 4.17.20 - '@types/node': - specifier: 22.18.12 - version: 22.18.12 - class-transformer: - specifier: 0.5.1 - version: 0.5.1 - class-validator: - specifier: 0.14.2 - version: 0.14.2 - eslint: - specifier: 9.38.0 - version: 9.38.0(jiti@2.6.1) - eslint-config-prettier: - specifier: 10.1.8 - version: 10.1.8(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-prettier: - specifier: 5.5.4 - version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2) - express: - specifier: 5.1.0 - version: 5.1.0 - fastify: - specifier: 5.6.1 - version: 5.6.1 - globals: - specifier: 16.4.0 - version: 16.4.0 - husky: - specifier: 9.1.7 - version: 9.1.7 - jest: - specifier: 30.2.0 - version: 30.2.0(@types/node@22.18.12) - lerna-changelog: - specifier: 2.2.0 - version: 2.2.0 - lint-staged: - specifier: 16.2.6 - version: 16.2.6 - openapi-types: - specifier: 12.1.3 - version: 12.1.3 - prettier: - specifier: 3.6.2 - version: 3.6.2 - prettier-v2: - specifier: npm:prettier@2.8.8 - version: prettier@2.8.8 - reflect-metadata: - specifier: 0.2.2 - version: 0.2.2 - release-it: - specifier: 19.0.5 - version: 19.0.5(@types/node@22.18.12) - supertest: - specifier: 7.1.4 - version: 7.1.4 - swagger-parser: - specifier: 10.0.3 - version: 10.0.3(openapi-types@12.1.3) - ts-jest: - specifier: 29.4.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.18.12))(typescript@5.9.3) - typescript: - specifier: 5.9.3 - version: 5.9.3 - typescript-eslint: - specifier: 8.46.2 - version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - -packages: - - '@apidevtools/json-schema-ref-parser@9.1.2': - resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==} - - '@apidevtools/openapi-schemas@2.1.0': - resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} - engines: {node: '>=10'} - - '@apidevtools/swagger-methods@3.0.2': - resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} - - '@apidevtools/swagger-parser@10.0.3': - resolution: {integrity: sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==} - peerDependencies: - openapi-types: '>=7' - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@borewit/text-codec@0.1.1': - resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} - - '@commitlint/cli@20.1.0': - resolution: {integrity: sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==} - engines: {node: '>=v18'} - hasBin: true - - '@commitlint/config-angular-type-enum@20.0.0': - resolution: {integrity: sha512-6HAMnXyUl3EUBgECjvfLzlghbkMfZx28YBPDry3pPWR0+xpzqSbUY19VIkmdetqYKeawFViudvkqD4VH93gKKg==} - engines: {node: '>=v18'} - - '@commitlint/config-angular@20.0.0': - resolution: {integrity: sha512-vH+mHsvZl94HQNduYv7ImTSX+D+nIyMV2VQZNQq9x0Kf5kRhl4iwdNS3nDxb3KEIdaSOXtXizzsyohRfi3Bvag==} - engines: {node: '>=v18'} - - '@commitlint/config-validator@20.0.0': - resolution: {integrity: sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==} - engines: {node: '>=v18'} - - '@commitlint/ensure@20.0.0': - resolution: {integrity: sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==} - engines: {node: '>=v18'} - - '@commitlint/execute-rule@20.0.0': - resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} - engines: {node: '>=v18'} - - '@commitlint/format@20.0.0': - resolution: {integrity: sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==} - engines: {node: '>=v18'} - - '@commitlint/is-ignored@20.0.0': - resolution: {integrity: sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==} - engines: {node: '>=v18'} - - '@commitlint/lint@20.0.0': - resolution: {integrity: sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==} - engines: {node: '>=v18'} - - '@commitlint/load@20.1.0': - resolution: {integrity: sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==} - engines: {node: '>=v18'} - - '@commitlint/message@20.0.0': - resolution: {integrity: sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==} - engines: {node: '>=v18'} - - '@commitlint/parse@20.0.0': - resolution: {integrity: sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==} - engines: {node: '>=v18'} - - '@commitlint/read@20.0.0': - resolution: {integrity: sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==} - engines: {node: '>=v18'} - - '@commitlint/resolve-extends@20.1.0': - resolution: {integrity: sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==} - engines: {node: '>=v18'} - - '@commitlint/rules@20.0.0': - resolution: {integrity: sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==} - engines: {node: '>=v18'} - - '@commitlint/to-lines@20.0.0': - resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} - engines: {node: '>=v18'} - - '@commitlint/top-level@20.0.0': - resolution: {integrity: sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==} - engines: {node: '>=v18'} - - '@commitlint/types@20.0.0': - resolution: {integrity: sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==} - engines: {node: '>=v18'} - - '@emnapi/core@1.6.0': - resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - 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.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.1': - resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.16.0': - resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.38.0': - resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@fastify/accept-negotiator@2.0.1': - resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} - - '@fastify/ajv-compiler@4.0.5': - resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==} - - '@fastify/cors@11.1.0': - resolution: {integrity: sha512-sUw8ed8wP2SouWZTIbA7V2OQtMNpLj2W6qJOYhNdcmINTu6gsxVYXjQiM9mdi8UUDlcoDDJ/W2syPo1WB2QjYA==} - - '@fastify/error@4.2.0': - resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==} - - '@fastify/fast-json-stringify-compiler@5.0.3': - resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==} - - '@fastify/formbody@8.0.2': - resolution: {integrity: sha512-84v5J2KrkXzjgBpYnaNRPqwgMsmY7ZDjuj0YVuMR3NXCJRCgKEZy/taSP1wUYGn0onfxJpLyRGDLa+NMaDJtnA==} - - '@fastify/forwarded@3.0.1': - resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==} - - '@fastify/merge-json-schemas@0.2.1': - resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} - - '@fastify/middie@9.0.3': - resolution: {integrity: sha512-7OYovKXp9UKYeVMcjcFLMcSpoMkmcZmfnG+eAvtdiatN35W7c+r9y1dRfpA+pfFVNuHGGqI3W+vDTmjvcfLcMA==} - - '@fastify/proxy-addr@5.1.0': - resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==} - - '@fastify/send@4.1.0': - resolution: {integrity: sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==} - - '@fastify/static@8.3.0': - resolution: {integrity: sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA==} - - '@gar/promisify@1.1.3': - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@inquirer/ansi@1.0.1': - resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} - engines: {node: '>=18'} - - '@inquirer/checkbox@4.3.0': - resolution: {integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/confirm@5.1.19': - resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.3.0': - resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/editor@4.2.21': - resolution: {integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/expand@4.0.21': - resolution: {integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.14': - resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} - engines: {node: '>=18'} - - '@inquirer/input@4.2.5': - resolution: {integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/number@3.0.21': - resolution: {integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/password@4.0.21': - resolution: {integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/prompts@7.9.0': - resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/rawlist@4.1.9': - resolution: {integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/search@3.2.0': - resolution: {integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/select@4.4.0': - resolution: {integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/type@3.0.9': - resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@30.2.0': - resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/core@30.2.0': - resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/diff-sequences@30.0.1': - resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/environment@30.2.0': - resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect-utils@30.2.0': - resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect@30.2.0': - resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/fake-timers@30.2.0': - resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/get-type@30.1.0': - resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/globals@30.2.0': - resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/pattern@30.0.1': - resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/reporters@30.2.0': - resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@30.0.5': - resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/snapshot-utils@30.2.0': - resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/source-map@30.0.1': - resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/test-result@30.2.0': - resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/test-sequencer@30.2.0': - resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/transform@30.2.0': - resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/types@30.2.0': - resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@jsdevtools/ono@7.1.3': - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - - '@lukeed/csprng@1.1.0': - resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} - engines: {node: '>=8'} - - '@lukeed/ms@2.0.2': - resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} - engines: {node: '>=8'} - - '@microsoft/tsdoc@0.15.1': - resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} - - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - - '@nestjs/common@11.1.7': - resolution: {integrity: sha512-lwlObwGgIlpXSXYOTpfzdCepUyWomz6bv9qzGzzvpgspUxkj0Uz0fUJcvD44V8Ps7QhKW3lZBoYbXrH25UZrbA==} - peerDependencies: - class-transformer: '>=0.4.1' - class-validator: '>=0.13.2' - reflect-metadata: ^0.1.12 || ^0.2.0 - rxjs: ^7.1.0 - peerDependenciesMeta: - class-transformer: - optional: true - class-validator: - optional: true - - '@nestjs/core@11.1.7': - resolution: {integrity: sha512-TyXFOwjhHv/goSgJ8i20K78jwTM0iSpk9GBcC2h3mf4MxNy+znI8m7nWjfoACjTkb89cTwDQetfTHtSfGLLaiA==} - engines: {node: '>= 20'} - peerDependencies: - '@nestjs/common': ^11.0.0 - '@nestjs/microservices': ^11.0.0 - '@nestjs/platform-express': ^11.0.0 - '@nestjs/websockets': ^11.0.0 - reflect-metadata: ^0.1.12 || ^0.2.0 - rxjs: ^7.1.0 - peerDependenciesMeta: - '@nestjs/microservices': - optional: true - '@nestjs/platform-express': - optional: true - '@nestjs/websockets': - optional: true - - '@nestjs/mapped-types@2.1.0': - resolution: {integrity: sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==} - peerDependencies: - '@nestjs/common': ^10.0.0 || ^11.0.0 - class-transformer: ^0.4.0 || ^0.5.0 - class-validator: ^0.13.0 || ^0.14.0 - reflect-metadata: ^0.1.12 || ^0.2.0 - peerDependenciesMeta: - class-transformer: - optional: true - class-validator: - optional: true - - '@nestjs/platform-express@11.1.7': - resolution: {integrity: sha512-5T+GLdvTiGPKB4/P4PM9ftKUKNHJy8ThEFhZA3vQnXVL7Vf0rDr07TfVTySVu+XTh85m1lpFVuyFM6u6wLNsRA==} - peerDependencies: - '@nestjs/common': ^11.0.0 - '@nestjs/core': ^11.0.0 - - '@nestjs/platform-fastify@11.1.7': - resolution: {integrity: sha512-JXWPWf3sStV/N/AXkUg3+SKOEbcwPCm7S9aPbVkc3oOnXUeMvSowmIzFJ6+TZeuoGMc+4X42ZzpR74P5vPzDKQ==} - peerDependencies: - '@fastify/static': ^8.0.0 - '@fastify/view': ^10.0.0 || ^11.0.0 - '@nestjs/common': ^11.0.0 - '@nestjs/core': ^11.0.0 - peerDependenciesMeta: - '@fastify/static': - optional: true - '@fastify/view': - optional: true - - '@noble/hashes@1.8.0': - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} - engines: {node: ^14.21.3 || >=16} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@nodeutils/defaults-deep@1.1.0': - resolution: {integrity: sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==} - - '@npmcli/fs@1.1.1': - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} - - '@npmcli/move-file@1.1.2': - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs - - '@nuxt/opencollective@0.4.1': - resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} - engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} - hasBin: true - - '@octokit/auth-token@6.0.0': - resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} - engines: {node: '>= 20'} - - '@octokit/core@7.0.5': - resolution: {integrity: sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==} - engines: {node: '>= 20'} - - '@octokit/endpoint@11.0.1': - resolution: {integrity: sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==} - engines: {node: '>= 20'} - - '@octokit/graphql@9.0.2': - resolution: {integrity: sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==} - engines: {node: '>= 20'} - - '@octokit/openapi-types@26.0.0': - resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - - '@octokit/plugin-paginate-rest@13.2.1': - resolution: {integrity: sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-request-log@6.0.0': - resolution: {integrity: sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-rest-endpoint-methods@16.1.1': - resolution: {integrity: sha512-VztDkhM0ketQYSh5Im3IcKWFZl7VIrrsCaHbDINkdYeiiAsJzjhS2xRFCSJgfN6VOcsoW4laMtsmf3HcNqIimg==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/request-error@7.0.1': - resolution: {integrity: sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==} - engines: {node: '>= 20'} - - '@octokit/request@10.0.5': - resolution: {integrity: sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==} - engines: {node: '>= 20'} - - '@octokit/rest@22.0.0': - resolution: {integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==} - engines: {node: '>= 20'} - - '@octokit/types@15.0.1': - resolution: {integrity: sha512-sdiirM93IYJ9ODDCBgmRPIboLbSkpLa5i+WLuXH8b8Atg+YMLAyLvDDhNWLV4OYd08tlvYfVm/dw88cqHWtw1Q==} - - '@paralleldrive/cuid2@2.2.2': - resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} - - '@phun-ky/typeof@2.0.3': - resolution: {integrity: sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==} - engines: {node: ^20.9.0 || >=22.0.0, npm: '>=10.8.2'} - - '@pinojs/redact@0.4.0': - resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@scarf/scarf@1.4.0': - resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} - - '@sinclair/typebox@0.34.41': - resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} - - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@13.0.5': - resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} - - '@tokenizer/inflate@0.2.7': - resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} - engines: {node: '>=18'} - - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - - '@types/conventional-commits-parser@5.0.2': - resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@30.0.0': - resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} - - '@types/js-yaml@4.0.9': - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} - - '@types/node@22.18.12': - resolution: {integrity: sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==} - - '@types/parse-path@7.1.0': - resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} - deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/validator@13.15.3': - resolution: {integrity: sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.34': - resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} - - '@typescript-eslint/eslint-plugin@8.46.2': - resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.46.2 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.46.2': - resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.46.2': - resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.46.2': - resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.46.2': - resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.46.2': - resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.46.2': - resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.46.2': - resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.46.2': - resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.46.2': - resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] - os: [win32] - - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - - abstract-logging@2.0.1: - resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} - - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-escapes@7.1.1: - resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} - engines: {node: '>=18'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - append-field@1.0.0: - resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - - 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'} - - avvio@9.1.0: - resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} - - babel-jest@30.2.0: - resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 || ^8.0.0-0 - - babel-plugin-istanbul@7.0.1: - resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} - engines: {node: '>=12'} - - babel-plugin-jest-hoist@30.2.0: - resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - - babel-preset-jest@30.2.0: - resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 || ^8.0.0-beta.1 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - baseline-browser-mapping@2.8.20: - resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} - hasBin: true - - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - - before-after-hook@4.0.0: - resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.27.0: - resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} - - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - c12@3.3.0: - resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - - cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - 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@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001751: - resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} - engines: {node: '>=8'} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - cjs-module-lexer@2.1.0: - resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} - - class-transformer@0.5.1: - resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} - - class-validator@0.14.2: - resolution: {integrity: sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==} - - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-highlight@2.1.11: - resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} - hasBin: true - - cli-spinners@3.3.0: - resolution: {integrity: sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==} - engines: {node: '>=18.20'} - - cli-truncate@5.1.1: - resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} - engines: {node: '>=20'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.3: - resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} - engines: {node: '>=20'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - - component-emitter@1.3.1: - resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concat-stream@2.0.0: - resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} - engines: {'0': node >= 6.0} - - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} - - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} - - cookiejar@2.1.4: - resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cosmiconfig-typescript-loader@6.2.0: - resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==} - engines: {node: '>=v18'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=9' - typescript: '>=5' - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} - - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - dedent@1.7.0: - resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - 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'} - - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} - engines: {node: '>=18'} - - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} - engines: {node: '>=18'} - - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - - delayed-stream@1.0.0: - 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'} - - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - dezalgo@1.0.4: - resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - - dotenv@17.2.3: - resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} - engines: {node: '>=12'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - 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.240: - resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-prettier@5.5.4: - resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.38.0: - resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - 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'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - eta@4.0.1: - resolution: {integrity: sha512-0h0oBEsF6qAJU7eu9ztvJoTo8D2PAq/4FvXVIQA1fek3WOTe6KPsVJycekG1+g1N6mfpblkheoGwaUhMtnlH4A==} - engines: {node: '>=20'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - 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'} - - exit-x@0.2.2: - resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} - engines: {node: '>= 0.8.0'} - - expect@30.2.0: - resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - - fast-content-type-parse@3.0.0: - resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} - - fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - - 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.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-json-stringify@6.1.1: - resolution: {integrity: sha512-DbgptncYEXZqDUOEl4krff4mUiVrTZZVI7BBrQR/T3BqMj/eM1flTC1Uk2uUoLcWCxjT95xKulV/Lc6hhOZsBQ==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-querystring@1.1.2: - resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} - - fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - - fastify-plugin@5.1.0: - resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} - - fastify@5.6.1: - resolution: {integrity: sha512-WjjlOciBF0K8pDUPZoGPhqhKrQJ02I8DKaDIfO51EL0kbSMwQFl85cRwhOvmSDWoukNOdTo27gLN549pLCcH7Q==} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - file-type@21.0.0: - resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} - engines: {node: '>=20'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - - find-my-way@9.3.0: - resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==} - engines: {node: '>=20'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} - engines: {node: '>= 6'} - - formidable@3.5.4: - resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} - engines: {node: '>=14.0.0'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - 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-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} - - giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} - hasBin: true - - git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} - engines: {node: '>=16'} - hasBin: true - - git-up@8.1.1: - resolution: {integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==} - - git-url-parse@16.1.0: - resolution: {integrity: sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==} - - 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@11.0.3: - resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} - engines: {node: 20 || >=22} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.4.0: - resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} - engines: {node: '>=18'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - 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'} - - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - - import-meta-resolve@4.2.0: - resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} - - 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'} - - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - inquirer@12.9.6: - resolution: {integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} - engines: {node: '>= 10'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-ssh@1.4.1: - resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} - - 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-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} - - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - issue-parser@7.0.1: - resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} - engines: {node: ^18.17 || >=20.6.1} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} - - 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.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} - - iterare@1.2.1: - resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} - engines: {node: '>=6'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} - engines: {node: 20 || >=22} - - jest-changed-files@30.2.0: - resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-circus@30.2.0: - resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-cli@30.2.0: - resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@30.2.0: - resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@types/node': '*' - esbuild-register: '>=3.4.0' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - esbuild-register: - optional: true - ts-node: - optional: true - - jest-diff@30.2.0: - resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-docblock@30.2.0: - resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-each@30.2.0: - resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-environment-node@30.2.0: - resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-haste-map@30.2.0: - resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-leak-detector@30.2.0: - resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-matcher-utils@30.2.0: - resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-message-util@30.2.0: - resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-mock@30.2.0: - resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@30.0.1: - resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-resolve-dependencies@30.2.0: - resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-resolve@30.2.0: - resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-runner@30.2.0: - resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-runtime@30.2.0: - resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-snapshot@30.2.0: - resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-util@30.2.0: - resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-validate@30.2.0: - resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-watcher@30.2.0: - resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-worker@30.2.0: - resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest@30.2.0: - resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-ref-resolver@3.0.0: - resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==} - - 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 - - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - lerna-changelog@2.2.0: - resolution: {integrity: sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ==} - engines: {node: 12.* || 14.* || >= 16} - hasBin: true - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - libphonenumber-js@1.12.24: - resolution: {integrity: sha512-l5IlyL9AONj4voSd7q9xkuQOL4u8Ty44puTic7J88CmdXkxfGsRfoVLXHCxppwehgpb/Chdb80FFehHqjN3ItQ==} - - light-my-request@6.6.0: - resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lint-staged@16.2.6: - resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} - engines: {node: '>=20.17'} - hasBin: true - - listr2@9.0.5: - resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} - engines: {node: '>=20.0.0'} - - load-esm@1.0.3: - resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==} - engines: {node: '>=13.2.0'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - 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.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.capitalize@4.2.1: - resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} - - lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@7.0.1: - resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} - engines: {node: '>=18'} - - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@11.2.2: - resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} - engines: {node: 20 || >=22} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - macos-release@3.4.0: - resolution: {integrity: sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - 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==} - - make-fetch-happen@9.1.0: - resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} - engines: {node: '>= 10'} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - 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'} - - meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.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'} - - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} - engines: {node: 20 || >=22} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - multer@2.0.2: - resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} - engines: {node: '>= 10.16.0'} - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nano-spawn@2.0.0: - resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} - engines: {node: '>=20.17'} - - napi-postinstall@0.3.4: - resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - - new-github-release-url@2.0.0: - resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.26: - resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} - - normalize-path@3.0.0: - 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} - - nypm@0.6.2: - resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - - 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'} - - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} - - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@9.0.0: - resolution: {integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==} - engines: {node: '>=20'} - - os-name@6.1.0: - resolution: {integrity: sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==} - engines: {node: '>=18'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-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'} - - p-locate@5.0.0: - 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@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-path@7.1.0: - resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} - - parse-url@9.2.0: - resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} - engines: {node: '>=14.13.0'} - - parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} - - parse5@5.1.1: - resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} - - parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-exists@4.0.0: - 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'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} - - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - perfect-debounce@2.0.0: - resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - - pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - - pino-std-serializers@7.0.0: - resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - - pino@9.14.0: - resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} - hasBin: true - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - 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'} - hasBin: true - - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - - pretty-format@30.2.0: - resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - process-warning@4.0.1: - resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} - - process-warning@5.0.0: - resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - protocols@2.0.2: - resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pure-rand@7.0.1: - resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@3.0.1: - resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} - engines: {node: '>= 0.10'} - - rc9@2.1.2: - resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} - - reflect-metadata@0.2.2: - resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - - release-it@19.0.5: - resolution: {integrity: sha512-bYlUKC0TQroBKi8jQUeoxLHql4d9Fx/2EQLHPKUobXTNSiTS2WY8vlgdHZRhRjVEMyAWwyadJVKfFZnRJuRn4Q==} - engines: {node: ^20.12.0 || >=22.0.0} - hasBin: true - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - 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'} - - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - - ret@0.5.0: - resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} - engines: {node: '>=10'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - - run-applescript@7.1.0: - resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} - engines: {node: '>=18'} - - run-async@4.0.6: - resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-regex2@5.0.0: - resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - secure-json-parse@4.1.0: - resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@6.2.1: - resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} - engines: {node: '>= 10'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - string-width@4.2.3: - 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-width@8.1.0: - resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} - engines: {node: '>=20'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - 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-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - strtok3@10.3.4: - resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} - engines: {node: '>=18'} - - superagent@10.2.3: - resolution: {integrity: sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==} - engines: {node: '>=14.18.0'} - - supertest@7.1.4: - resolution: {integrity: sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==} - engines: {node: '>=14.18.0'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - swagger-parser@10.0.3: - resolution: {integrity: sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==} - engines: {node: '>=10'} - - swagger-ui-dist@5.29.4: - resolution: {integrity: sha512-gJFDz/gyLOCQtWwAgqs6Rk78z9ONnqTnlW11gimG9nLap8drKa3AJBKpzIQMIjl5PD2Ix+Tn+mc/tfoT2tgsng==} - - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} - engines: {node: ^14.18.0 || >=16.0.0} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toad-cache@3.7.0: - resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} - engines: {node: '>=12'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - token-types@6.1.1: - resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} - engines: {node: '>=14.16'} - - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-jest@29.4.5: - resolution: {integrity: sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 || ^30.0.0 - '@jest/types': ^29.0.0 || ^30.0.0 - babel-jest: ^29.0.0 || ^30.0.0 - esbuild: '*' - jest: ^29.0.0 || ^30.0.0 - jest-util: ^29.0.0 || ^30.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - jest-util: - optional: true - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - - typescript-eslint@8.46.2: - resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - 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@2.0.2: - resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} - engines: {node: '>=8'} - - uint8array-extras@1.5.0: - resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} - engines: {node: '>=18'} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - undici@6.21.3: - resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} - engines: {node: '>=18.17'} - - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - - unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} - - unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} - - universal-user-agent@7.0.3: - resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - - update-browserslist-db@1.1.4: - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - - validator@13.15.15: - resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} - engines: {node: '>= 0.10'} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wildcard-match@5.1.4: - resolution: {integrity: sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==} - - windows-release@6.1.0: - resolution: {integrity: sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==} - engines: {node: '>=18'} - - 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==} - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} - engines: {node: '>=12.20'} - - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} - engines: {node: '>=18'} - - z-schema@5.0.5: - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} - engines: {node: '>=8.0.0'} - hasBin: true - -snapshots: - - '@apidevtools/json-schema-ref-parser@9.1.2': - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - call-me-maybe: 1.0.2 - js-yaml: 4.1.0 - - '@apidevtools/openapi-schemas@2.1.0': {} - - '@apidevtools/swagger-methods@3.0.2': {} - - '@apidevtools/swagger-parser@10.0.3(openapi-types@12.1.3)': - dependencies: - '@apidevtools/json-schema-ref-parser': 9.1.2 - '@apidevtools/openapi-schemas': 2.1.0 - '@apidevtools/swagger-methods': 3.0.2 - '@jsdevtools/ono': 7.1.3 - call-me-maybe: 1.0.2 - openapi-types: 12.1.3 - z-schema: 5.0.5 - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.28.5': {} - - '@babel/core@7.28.5': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.5': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.28.5 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.27.0 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.27.1': {} - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.28.4': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - - '@babel/parser@7.28.5': - dependencies: - '@babel/types': 7.28.5 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - - '@babel/traverse@7.28.5': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.5': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@bcoe/v8-coverage@0.2.3': {} - - '@borewit/text-codec@0.1.1': {} - - '@commitlint/cli@20.1.0(@types/node@22.18.12)(typescript@5.9.3)': - dependencies: - '@commitlint/format': 20.0.0 - '@commitlint/lint': 20.0.0 - '@commitlint/load': 20.1.0(@types/node@22.18.12)(typescript@5.9.3) - '@commitlint/read': 20.0.0 - '@commitlint/types': 20.0.0 - tinyexec: 1.0.1 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/config-angular-type-enum@20.0.0': {} - - '@commitlint/config-angular@20.0.0': - dependencies: - '@commitlint/config-angular-type-enum': 20.0.0 - - '@commitlint/config-validator@20.0.0': - dependencies: - '@commitlint/types': 20.0.0 - ajv: 8.17.1 - - '@commitlint/ensure@20.0.0': - dependencies: - '@commitlint/types': 20.0.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - - '@commitlint/execute-rule@20.0.0': {} - - '@commitlint/format@20.0.0': - dependencies: - '@commitlint/types': 20.0.0 - chalk: 5.6.2 - - '@commitlint/is-ignored@20.0.0': - dependencies: - '@commitlint/types': 20.0.0 - semver: 7.7.3 - - '@commitlint/lint@20.0.0': - dependencies: - '@commitlint/is-ignored': 20.0.0 - '@commitlint/parse': 20.0.0 - '@commitlint/rules': 20.0.0 - '@commitlint/types': 20.0.0 - - '@commitlint/load@20.1.0(@types/node@22.18.12)(typescript@5.9.3)': - dependencies: - '@commitlint/config-validator': 20.0.0 - '@commitlint/execute-rule': 20.0.0 - '@commitlint/resolve-extends': 20.1.0 - '@commitlint/types': 20.0.0 - chalk: 5.6.2 - cosmiconfig: 9.0.0(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.2.0(@types/node@22.18.12)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/message@20.0.0': {} - - '@commitlint/parse@20.0.0': - dependencies: - '@commitlint/types': 20.0.0 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 - - '@commitlint/read@20.0.0': - dependencies: - '@commitlint/top-level': 20.0.0 - '@commitlint/types': 20.0.0 - git-raw-commits: 4.0.0 - minimist: 1.2.8 - tinyexec: 1.0.1 - - '@commitlint/resolve-extends@20.1.0': - dependencies: - '@commitlint/config-validator': 20.0.0 - '@commitlint/types': 20.0.0 - global-directory: 4.0.1 - import-meta-resolve: 4.2.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - - '@commitlint/rules@20.0.0': - dependencies: - '@commitlint/ensure': 20.0.0 - '@commitlint/message': 20.0.0 - '@commitlint/to-lines': 20.0.0 - '@commitlint/types': 20.0.0 - - '@commitlint/to-lines@20.0.0': {} - - '@commitlint/top-level@20.0.0': - dependencies: - find-up: 7.0.0 - - '@commitlint/types@20.0.0': - dependencies: - '@types/conventional-commits-parser': 5.0.2 - chalk: 5.6.2 - - '@emnapi/core@1.6.0': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.6.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': - dependencies: - eslint: 9.38.0(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.21.1': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.1': - dependencies: - '@eslint/core': 0.16.0 - - '@eslint/core@0.16.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.38.0': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.0': - dependencies: - '@eslint/core': 0.16.0 - levn: 0.4.1 - - '@fastify/accept-negotiator@2.0.1': {} - - '@fastify/ajv-compiler@4.0.5': - dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - fast-uri: 3.1.0 - - '@fastify/cors@11.1.0': - dependencies: - fastify-plugin: 5.1.0 - toad-cache: 3.7.0 - - '@fastify/error@4.2.0': {} - - '@fastify/fast-json-stringify-compiler@5.0.3': - dependencies: - fast-json-stringify: 6.1.1 - - '@fastify/formbody@8.0.2': - dependencies: - fast-querystring: 1.1.2 - fastify-plugin: 5.1.0 - - '@fastify/forwarded@3.0.1': {} - - '@fastify/merge-json-schemas@0.2.1': - dependencies: - dequal: 2.0.3 - - '@fastify/middie@9.0.3': - dependencies: - '@fastify/error': 4.2.0 - fastify-plugin: 5.1.0 - path-to-regexp: 8.3.0 - reusify: 1.1.0 - - '@fastify/proxy-addr@5.1.0': - dependencies: - '@fastify/forwarded': 3.0.1 - ipaddr.js: 2.2.0 - - '@fastify/send@4.1.0': - dependencies: - '@lukeed/ms': 2.0.2 - escape-html: 1.0.3 - fast-decode-uri-component: 1.0.1 - http-errors: 2.0.0 - mime: 3.0.0 - - '@fastify/static@8.3.0': - dependencies: - '@fastify/accept-negotiator': 2.0.1 - '@fastify/send': 4.1.0 - content-disposition: 0.5.4 - fastify-plugin: 5.1.0 - fastq: 1.19.1 - glob: 11.0.3 - - '@gar/promisify@1.1.3': {} - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@inquirer/ansi@1.0.1': {} - - '@inquirer/checkbox@4.3.0(@types/node@22.18.12)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.12) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/confirm@5.1.19(@types/node@22.18.12)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/core@10.3.0(@types/node@22.18.12)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.12) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/editor@4.2.21(@types/node@22.18.12)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/external-editor': 1.0.2(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/expand@4.0.21(@types/node@22.18.12)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/external-editor@1.0.2(@types/node@22.18.12)': - dependencies: - chardet: 2.1.0 - iconv-lite: 0.7.0 - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/figures@1.0.14': {} - - '@inquirer/input@4.2.5(@types/node@22.18.12)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/number@3.0.21(@types/node@22.18.12)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/password@4.0.21(@types/node@22.18.12)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/prompts@7.9.0(@types/node@22.18.12)': - dependencies: - '@inquirer/checkbox': 4.3.0(@types/node@22.18.12) - '@inquirer/confirm': 5.1.19(@types/node@22.18.12) - '@inquirer/editor': 4.2.21(@types/node@22.18.12) - '@inquirer/expand': 4.0.21(@types/node@22.18.12) - '@inquirer/input': 4.2.5(@types/node@22.18.12) - '@inquirer/number': 3.0.21(@types/node@22.18.12) - '@inquirer/password': 4.0.21(@types/node@22.18.12) - '@inquirer/rawlist': 4.1.9(@types/node@22.18.12) - '@inquirer/search': 3.2.0(@types/node@22.18.12) - '@inquirer/select': 4.4.0(@types/node@22.18.12) - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/rawlist@4.1.9(@types/node@22.18.12)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/search@3.2.0(@types/node@22.18.12)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.12) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/select@4.4.0(@types/node@22.18.12)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.12) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.12 - - '@inquirer/type@3.0.9(@types/node@22.18.12)': - optionalDependencies: - '@types/node': 22.18.12 - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@30.2.0': - dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - chalk: 4.1.2 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - slash: 3.0.0 - - '@jest/core@30.2.0': - dependencies: - '@jest/console': 30.2.0 - '@jest/pattern': 30.0.1 - '@jest/reporters': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 4.3.1 - exit-x: 0.2.2 - graceful-fs: 4.2.11 - jest-changed-files: 30.2.0 - jest-config: 30.2.0(@types/node@22.18.12) - jest-haste-map: 30.2.0 - jest-message-util: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-resolve-dependencies: 30.2.0 - jest-runner: 30.2.0 - jest-runtime: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - jest-watcher: 30.2.0 - micromatch: 4.0.8 - pretty-format: 30.2.0 - slash: 3.0.0 - transitivePeerDependencies: - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - - '@jest/diff-sequences@30.0.1': {} - - '@jest/environment@30.2.0': - dependencies: - '@jest/fake-timers': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - jest-mock: 30.2.0 - - '@jest/expect-utils@30.2.0': - dependencies: - '@jest/get-type': 30.1.0 - - '@jest/expect@30.2.0': - dependencies: - expect: 30.2.0 - jest-snapshot: 30.2.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@30.2.0': - dependencies: - '@jest/types': 30.2.0 - '@sinonjs/fake-timers': 13.0.5 - '@types/node': 22.18.12 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-util: 30.2.0 - - '@jest/get-type@30.1.0': {} - - '@jest/globals@30.2.0': - dependencies: - '@jest/environment': 30.2.0 - '@jest/expect': 30.2.0 - '@jest/types': 30.2.0 - jest-mock: 30.2.0 - transitivePeerDependencies: - - supports-color - - '@jest/pattern@30.0.1': - dependencies: - '@types/node': 22.18.12 - jest-regex-util: 30.0.1 - - '@jest/reporters@30.2.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 22.18.12 - chalk: 4.1.2 - collect-v8-coverage: 1.0.3 - exit-x: 0.2.2 - glob: 10.4.5 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.2.0 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - jest-worker: 30.2.0 - slash: 3.0.0 - string-length: 4.0.2 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@30.0.5': - dependencies: - '@sinclair/typebox': 0.34.41 - - '@jest/snapshot-utils@30.2.0': - dependencies: - '@jest/types': 30.2.0 - chalk: 4.1.2 - graceful-fs: 4.2.11 - natural-compare: 1.4.0 - - '@jest/source-map@30.0.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@30.2.0': - dependencies: - '@jest/console': 30.2.0 - '@jest/types': 30.2.0 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.3 - - '@jest/test-sequencer@30.2.0': - dependencies: - '@jest/test-result': 30.2.0 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - slash: 3.0.0 - - '@jest/transform@30.2.0': - dependencies: - '@babel/core': 7.28.5 - '@jest/types': 30.2.0 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 7.0.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-regex-util: 30.0.1 - jest-util: 30.2.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 5.0.1 - transitivePeerDependencies: - - supports-color - - '@jest/types@30.2.0': - dependencies: - '@jest/pattern': 30.0.1 - '@jest/schemas': 30.0.5 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.18.12 - '@types/yargs': 17.0.34 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@jsdevtools/ono@7.1.3': {} - - '@lukeed/csprng@1.1.0': {} - - '@lukeed/ms@2.0.2': {} - - '@microsoft/tsdoc@0.15.1': {} - - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2)': - dependencies: - file-type: 21.0.0 - iterare: 1.2.1 - load-esm: 1.0.3 - reflect-metadata: 0.2.2 - rxjs: 7.8.2 - tslib: 2.8.1 - uid: 2.0.2 - optionalDependencies: - class-transformer: 0.5.1 - class-validator: 0.14.2 - transitivePeerDependencies: - - supports-color - - '@nestjs/core@11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2)': - dependencies: - '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nuxt/opencollective': 0.4.1 - fast-safe-stringify: 2.1.1 - iterare: 1.2.1 - path-to-regexp: 8.3.0 - reflect-metadata: 0.2.2 - rxjs: 7.8.2 - tslib: 2.8.1 - uid: 2.0.2 - optionalDependencies: - '@nestjs/platform-express': 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7) - - '@nestjs/mapped-types@2.1.0(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)': - dependencies: - '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) - reflect-metadata: 0.2.2 - optionalDependencies: - class-transformer: 0.5.1 - class-validator: 0.14.2 - - '@nestjs/platform-express@11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7)': - dependencies: - '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2) - cors: 2.8.5 - express: 5.1.0 - multer: 2.0.2 - path-to-regexp: 8.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@nestjs/platform-fastify@11.1.7(@fastify/static@8.3.0)(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.7)': - dependencies: - '@fastify/cors': 11.1.0 - '@fastify/formbody': 8.0.2 - '@fastify/middie': 9.0.3 - '@nestjs/common': 11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.7(@nestjs/common@11.1.7(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.7)(reflect-metadata@0.2.2)(rxjs@7.8.2) - fast-querystring: 1.1.2 - fastify: 5.6.1 - light-my-request: 6.6.0 - path-to-regexp: 8.3.0 - tslib: 2.8.1 - optionalDependencies: - '@fastify/static': 8.3.0 - - '@noble/hashes@1.8.0': {} - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@nodeutils/defaults-deep@1.1.0': - dependencies: - lodash: 4.17.21 - - '@npmcli/fs@1.1.1': - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.7.3 - - '@npmcli/move-file@1.1.2': - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - - '@nuxt/opencollective@0.4.1': - dependencies: - consola: 3.4.2 - - '@octokit/auth-token@6.0.0': {} - - '@octokit/core@7.0.5': - dependencies: - '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.2 - '@octokit/request': 10.0.5 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.1 - before-after-hook: 4.0.0 - universal-user-agent: 7.0.3 - - '@octokit/endpoint@11.0.1': - dependencies: - '@octokit/types': 15.0.1 - universal-user-agent: 7.0.3 - - '@octokit/graphql@9.0.2': - dependencies: - '@octokit/request': 10.0.5 - '@octokit/types': 15.0.1 - universal-user-agent: 7.0.3 - - '@octokit/openapi-types@26.0.0': {} - - '@octokit/plugin-paginate-rest@13.2.1(@octokit/core@7.0.5)': - dependencies: - '@octokit/core': 7.0.5 - '@octokit/types': 15.0.1 - - '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.5)': - dependencies: - '@octokit/core': 7.0.5 - - '@octokit/plugin-rest-endpoint-methods@16.1.1(@octokit/core@7.0.5)': - dependencies: - '@octokit/core': 7.0.5 - '@octokit/types': 15.0.1 - - '@octokit/request-error@7.0.1': - dependencies: - '@octokit/types': 15.0.1 - - '@octokit/request@10.0.5': - dependencies: - '@octokit/endpoint': 11.0.1 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.1 - fast-content-type-parse: 3.0.0 - universal-user-agent: 7.0.3 - - '@octokit/rest@22.0.0': - dependencies: - '@octokit/core': 7.0.5 - '@octokit/plugin-paginate-rest': 13.2.1(@octokit/core@7.0.5) - '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.5) - '@octokit/plugin-rest-endpoint-methods': 16.1.1(@octokit/core@7.0.5) - - '@octokit/types@15.0.1': - dependencies: - '@octokit/openapi-types': 26.0.0 - - '@paralleldrive/cuid2@2.2.2': - dependencies: - '@noble/hashes': 1.8.0 - - '@phun-ky/typeof@2.0.3': {} - - '@pinojs/redact@0.4.0': {} - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/core@0.2.9': {} - - '@scarf/scarf@1.4.0': {} - - '@sinclair/typebox@0.34.41': {} - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@13.0.5': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@tokenizer/inflate@0.2.7': - dependencies: - debug: 4.4.3 - fflate: 0.8.2 - token-types: 6.1.1 - transitivePeerDependencies: - - supports-color - - '@tokenizer/token@0.3.0': {} - - '@tootallnate/once@1.1.2': {} - - '@tootallnate/quickjs-emscripten@0.23.0': {} - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.28.5 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.28.5 - - '@types/conventional-commits-parser@5.0.2': - dependencies: - '@types/node': 22.18.12 - - '@types/estree@1.0.8': {} - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@30.0.0': - dependencies: - expect: 30.2.0 - pretty-format: 30.2.0 - - '@types/js-yaml@4.0.9': {} - - '@types/json-schema@7.0.15': {} - - '@types/lodash@4.17.20': {} - - '@types/node@22.18.12': - dependencies: - undici-types: 6.21.0 - - '@types/parse-path@7.1.0': - dependencies: - parse-path: 7.1.0 - - '@types/stack-utils@2.0.3': {} - - '@types/validator@13.15.3': {} - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.34': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.2 - eslint: 9.38.0(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.2 - debug: 4.4.3 - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.46.2': - dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 - - '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.38.0(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.46.2': {} - - '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 - debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.46.2': - dependencies: - '@typescript-eslint/types': 8.46.2 - eslint-visitor-keys: 4.2.1 - - '@ungap/structured-clone@1.3.0': {} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true - - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - - abstract-logging@2.0.1: {} - - accepts@2.0.0: - dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - agent-base@6.0.2: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - agent-base@7.1.4: {} - - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 - - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - 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 - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-escapes@7.1.1: - dependencies: - environment: 1.1.0 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.3: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - append-field@1.0.0: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - array-ify@1.0.0: {} - - asap@2.0.6: {} - - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - - async-retry@1.3.3: - dependencies: - retry: 0.13.1 - - asynckit@0.4.0: {} - - atomic-sleep@1.0.0: {} - - avvio@9.1.0: - dependencies: - '@fastify/error': 4.2.0 - fastq: 1.19.1 - - babel-jest@30.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 7.0.1 - babel-preset-jest: 30.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@7.0.1: - dependencies: - '@babel/helper-plugin-utils': 7.27.1 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 6.0.3 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@30.2.0: - dependencies: - '@types/babel__core': 7.20.5 - - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) - - babel-preset-jest@30.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - babel-plugin-jest-hoist: 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) - - balanced-match@1.0.2: {} - - baseline-browser-mapping@2.8.20: {} - - basic-ftp@5.0.5: {} - - before-after-hook@4.0.0: {} - - body-parser@2.2.0: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.3 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.1 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.27.0: - dependencies: - baseline-browser-mapping: 2.8.20 - caniuse-lite: 1.0.30001751 - electron-to-chromium: 1.5.240 - node-releases: 2.0.26 - update-browserslist-db: 1.1.4(browserslist@4.27.0) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - buffer-from@1.1.2: {} - - bundle-name@4.1.0: - dependencies: - run-applescript: 7.1.0 - - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - - bytes@3.1.2: {} - - c12@3.3.0: - dependencies: - chokidar: 4.0.3 - confbox: 0.2.2 - defu: 6.1.4 - dotenv: 17.2.3 - exsolve: 1.0.7 - giget: 2.0.0 - jiti: 2.6.1 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 2.0.0 - pkg-types: 2.3.0 - rc9: 2.1.2 - - cacache@15.3.0: - dependencies: - '@npmcli/fs': 1.1.1 - '@npmcli/move-file': 1.1.2 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 7.2.3 - infer-owner: 1.0.4 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.2.1 - unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - call-me-maybe@1.0.2: {} - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001751: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.6.2: {} - - char-regex@1.0.2: {} - - chardet@2.1.0: {} - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - chownr@2.0.0: {} - - ci-info@4.3.1: {} - - citty@0.1.6: - dependencies: - consola: 3.4.2 - - cjs-module-lexer@2.1.0: {} - - class-transformer@0.5.1: {} - - class-validator@0.14.2: - dependencies: - '@types/validator': 13.15.3 - libphonenumber-js: 1.12.24 - validator: 13.15.15 - - clean-stack@2.2.0: {} - - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-highlight@2.1.11: - dependencies: - chalk: 4.1.2 - highlight.js: 10.7.3 - mz: 2.7.0 - parse5: 5.1.1 - parse5-htmlparser2-tree-adapter: 6.0.1 - yargs: 16.2.0 - - cli-spinners@3.3.0: {} - - cli-truncate@5.1.1: - dependencies: - slice-ansi: 7.1.2 - string-width: 8.1.0 - - cli-width@4.1.0: {} - - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - co@4.6.0: {} - - collect-v8-coverage@1.0.3: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - colorette@2.0.20: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@14.0.1: {} - - commander@9.5.0: - optional: true - - compare-func@2.0.0: - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - - component-emitter@1.3.1: {} - - concat-map@0.0.1: {} - - concat-stream@2.0.0: - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.2 - typedarray: 0.0.6 - - confbox@0.2.2: {} - - consola@3.4.2: {} - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - conventional-changelog-angular@7.0.0: - dependencies: - compare-func: 2.0.0 - - conventional-commits-parser@5.0.0: - dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 - - convert-source-map@2.0.0: {} - - cookie-signature@1.2.2: {} - - cookie@0.7.2: {} - - cookie@1.0.2: {} - - cookiejar@2.1.4: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig-typescript-loader@6.2.0(@types/node@22.18.12)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): - dependencies: - '@types/node': 22.18.12 - cosmiconfig: 9.0.0(typescript@5.9.3) - jiti: 2.6.1 - typescript: 5.9.3 - - cosmiconfig@9.0.0(typescript@5.9.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.3 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - dargs@8.1.0: {} - - data-uri-to-buffer@6.0.2: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - dedent@1.7.0: {} - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - default-browser-id@5.0.0: {} - - default-browser@5.2.1: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.0 - - define-lazy-prop@3.0.0: {} - - defu@6.1.4: {} - - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - - delayed-stream@1.0.0: {} - - depd@2.0.0: {} - - dequal@2.0.3: {} - - destr@2.0.5: {} - - detect-newline@3.1.0: {} - - dezalgo@1.0.4: - dependencies: - asap: 2.0.6 - wrappy: 1.0.2 - - dot-prop@5.3.0: - dependencies: - is-obj: 2.0.0 - - dotenv@17.2.3: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} - - ee-first@1.1.1: {} - - electron-to-chromium@1.5.240: {} - - emittery@0.13.1: {} - - emoji-regex@10.6.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encodeurl@2.0.0: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - env-paths@2.2.1: {} - - environment@1.1.0: {} - - err-code@2.0.3: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)): - dependencies: - eslint: 9.38.0(jiti@2.6.1) - - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2): - dependencies: - eslint: 9.38.0(jiti@2.6.1) - prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 - optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.38.0(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.1 - '@eslint/core': 0.16.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.38.0 - '@eslint/plugin-kit': 0.4.0 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - - 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: {} - - esutils@2.0.3: {} - - eta@4.0.1: {} - - etag@1.8.1: {} - - eventemitter3@5.0.1: {} - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - 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.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - - exit-x@0.2.2: {} - - expect@30.2.0: - dependencies: - '@jest/expect-utils': 30.2.0 - '@jest/get-type': 30.1.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-util: 30.2.0 - - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 - http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 - statuses: 2.0.2 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - exsolve@1.0.7: {} - - fast-content-type-parse@3.0.0: {} - - fast-decode-uri-component@1.0.1: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-glob@3.3.3: - 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 - - fast-json-stable-stringify@2.1.0: {} - - fast-json-stringify@6.1.1: - dependencies: - '@fastify/merge-json-schemas': 0.2.1 - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - fast-uri: 3.1.0 - json-schema-ref-resolver: 3.0.0 - rfdc: 1.4.1 - - fast-levenshtein@2.0.6: {} - - fast-querystring@1.1.2: - dependencies: - fast-decode-uri-component: 1.0.1 - - fast-safe-stringify@2.1.1: {} - - fast-uri@3.1.0: {} - - fastify-plugin@5.1.0: {} - - fastify@5.6.1: - dependencies: - '@fastify/ajv-compiler': 4.0.5 - '@fastify/error': 4.2.0 - '@fastify/fast-json-stringify-compiler': 5.0.3 - '@fastify/proxy-addr': 5.1.0 - abstract-logging: 2.0.1 - avvio: 9.1.0 - fast-json-stringify: 6.1.1 - find-my-way: 9.3.0 - light-my-request: 6.6.0 - pino: 9.14.0 - process-warning: 5.0.0 - rfdc: 1.4.1 - secure-json-parse: 4.1.0 - semver: 7.7.3 - toad-cache: 3.7.0 - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - fflate@0.8.2: {} - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - file-type@21.0.0: - dependencies: - '@tokenizer/inflate': 0.2.7 - strtok3: 10.3.4 - token-types: 6.1.1 - uint8array-extras: 1.5.0 - transitivePeerDependencies: - - supports-color - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@2.1.0: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - find-my-way@9.3.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-querystring: 1.1.2 - safe-regex2: 5.0.0 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flatted@3.3.3: {} - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@4.0.4: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - formidable@3.5.4: - dependencies: - '@paralleldrive/cuid2': 2.2.2 - dezalgo: 1.0.4 - once: 1.4.0 - - forwarded@0.2.0: {} - - fresh@2.0.0: {} - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-east-asian-width@1.4.0: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-package-type@0.1.0: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@6.0.1: {} - - get-stream@8.0.1: {} - - get-uri@6.0.5: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - giget@2.0.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.4 - node-fetch-native: 1.6.7 - nypm: 0.6.2 - pathe: 2.0.3 - - git-raw-commits@4.0.0: - dependencies: - dargs: 8.1.0 - meow: 12.1.1 - split2: 4.2.0 - - git-up@8.1.1: - dependencies: - is-ssh: 1.4.1 - parse-url: 9.2.0 - - git-url-parse@16.1.0: - dependencies: - git-up: 8.1.1 - - 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.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@11.0.3: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.0.3 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-directory@4.0.1: - dependencies: - ini: 4.1.1 - - globals@14.0.0: {} - - globals@16.4.0: {} - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-flag@4.0.0: {} - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - highlight.js@10.7.3: {} - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - html-escaper@2.0.2: {} - - http-cache-semantics@4.2.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@4.0.1: - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - human-signals@2.1.0: {} - - human-signals@5.0.0: {} - - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - - husky@9.1.7: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.7.0: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - import-meta-resolve@4.2.0: {} - - imurmurhash@0.1.4: {} - - indent-string@4.0.0: {} - - infer-owner@1.0.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ini@4.1.1: {} - - inquirer@12.9.6(@types/node@22.18.12): - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.12) - '@inquirer/prompts': 7.9.0(@types/node@22.18.12) - '@inquirer/type': 3.0.9(@types/node@22.18.12) - mute-stream: 2.0.0 - run-async: 4.0.6 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 22.18.12 - - ip-address@10.0.1: {} - - ipaddr.js@1.9.1: {} - - ipaddr.js@2.2.0: {} - - is-arrayish@0.2.1: {} - - is-docker@3.0.0: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.4.0 - - is-generator-fn@2.1.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-interactive@2.0.0: {} - - is-lambda@1.0.1: {} - - is-number@7.0.0: {} - - is-obj@2.0.0: {} - - is-promise@4.0.0: {} - - is-ssh@1.4.1: - dependencies: - protocols: 2.0.2 - - is-stream@2.0.1: {} - - is-stream@3.0.0: {} - - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - - is-unicode-supported@2.1.0: {} - - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - isexe@2.0.0: {} - - issue-parser@7.0.1: - dependencies: - lodash.capitalize: 4.2.1 - lodash.escaperegexp: 4.1.2 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.uniqby: 4.7.0 - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@6.0.3: - dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.7.3 - transitivePeerDependencies: - - supports-color - - 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.31 - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.2.0: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - iterare@1.2.1: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jackspeak@4.1.1: - dependencies: - '@isaacs/cliui': 8.0.2 - - jest-changed-files@30.2.0: - dependencies: - execa: 5.1.1 - jest-util: 30.2.0 - p-limit: 3.1.0 - - jest-circus@30.2.0: - dependencies: - '@jest/environment': 30.2.0 - '@jest/expect': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.7.0 - is-generator-fn: 2.1.0 - jest-each: 30.2.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-runtime: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 - p-limit: 3.1.0 - pretty-format: 30.2.0 - pure-rand: 7.0.1 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@30.2.0(@types/node@22.18.12): - dependencies: - '@jest/core': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - chalk: 4.1.2 - exit-x: 0.2.2 - import-local: 3.2.0 - jest-config: 30.2.0(@types/node@22.18.12) - jest-util: 30.2.0 - jest-validate: 30.2.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - - jest-config@30.2.0(@types/node@22.18.12): - dependencies: - '@babel/core': 7.28.5 - '@jest/get-type': 30.1.0 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - ci-info: 4.3.1 - deepmerge: 4.3.1 - glob: 10.4.5 - graceful-fs: 4.2.11 - jest-circus: 30.2.0 - jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-runner: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 30.2.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.18.12 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@30.2.0: - dependencies: - '@jest/diff-sequences': 30.0.1 - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - pretty-format: 30.2.0 - - jest-docblock@30.2.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - '@jest/types': 30.2.0 - chalk: 4.1.2 - jest-util: 30.2.0 - pretty-format: 30.2.0 - - jest-environment-node@30.2.0: - dependencies: - '@jest/environment': 30.2.0 - '@jest/fake-timers': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - jest-mock: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - - jest-haste-map@30.2.0: - dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 30.0.1 - jest-util: 30.2.0 - jest-worker: 30.2.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - pretty-format: 30.2.0 - - jest-matcher-utils@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - jest-diff: 30.2.0 - pretty-format: 30.2.0 - - jest-message-util@30.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - '@jest/types': 30.2.0 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 30.2.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@30.2.0: - dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - jest-util: 30.2.0 - - jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): - optionalDependencies: - jest-resolve: 30.2.0 - - jest-regex-util@30.0.1: {} - - jest-resolve-dependencies@30.2.0: - dependencies: - jest-regex-util: 30.0.1 - jest-snapshot: 30.2.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@30.2.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0) - jest-util: 30.2.0 - jest-validate: 30.2.0 - slash: 3.0.0 - unrs-resolver: 1.11.1 - - jest-runner@30.2.0: - dependencies: - '@jest/console': 30.2.0 - '@jest/environment': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - chalk: 4.1.2 - emittery: 0.13.1 - exit-x: 0.2.2 - graceful-fs: 4.2.11 - jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-haste-map: 30.2.0 - jest-leak-detector: 30.2.0 - jest-message-util: 30.2.0 - jest-resolve: 30.2.0 - jest-runtime: 30.2.0 - jest-util: 30.2.0 - jest-watcher: 30.2.0 - jest-worker: 30.2.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@30.2.0: - dependencies: - '@jest/environment': 30.2.0 - '@jest/fake-timers': 30.2.0 - '@jest/globals': 30.2.0 - '@jest/source-map': 30.0.1 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - chalk: 4.1.2 - cjs-module-lexer: 2.1.0 - collect-v8-coverage: 1.0.3 - glob: 10.4.5 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@30.2.0: - dependencies: - '@babel/core': 7.28.5 - '@babel/generator': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/types': 7.28.5 - '@jest/expect-utils': 30.2.0 - '@jest/get-type': 30.1.0 - '@jest/snapshot-utils': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - expect: 30.2.0 - graceful-fs: 4.2.11 - jest-diff: 30.2.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - pretty-format: 30.2.0 - semver: 7.7.3 - synckit: 0.11.11 - transitivePeerDependencies: - - supports-color - - jest-util@30.2.0: - dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - chalk: 4.1.2 - ci-info: 4.3.1 - graceful-fs: 4.2.11 - picomatch: 4.0.3 - - jest-validate@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - '@jest/types': 30.2.0 - camelcase: 6.3.0 - chalk: 4.1.2 - leven: 3.1.0 - pretty-format: 30.2.0 - - jest-watcher@30.2.0: - dependencies: - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.18.12 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 30.2.0 - string-length: 4.0.2 - - jest-worker@30.2.0: - dependencies: - '@types/node': 22.18.12 - '@ungap/structured-clone': 1.3.0 - jest-util: 30.2.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@30.2.0(@types/node@22.18.12): - dependencies: - '@jest/core': 30.2.0 - '@jest/types': 30.2.0 - import-local: 3.2.0 - jest-cli: 30.2.0(@types/node@22.18.12) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - - jiti@2.6.1: {} - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsesc@3.1.0: {} - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-ref-resolver@3.0.0: - dependencies: - dequal: 2.0.3 - - json-schema-traverse@0.4.1: {} - - json-schema-traverse@1.0.0: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@2.2.3: {} - - jsonparse@1.3.1: {} - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - lerna-changelog@2.2.0: - dependencies: - chalk: 4.1.2 - cli-highlight: 2.1.11 - execa: 5.1.1 - hosted-git-info: 4.1.0 - make-fetch-happen: 9.1.0 - p-map: 3.0.0 - progress: 2.0.3 - yargs: 17.7.2 - transitivePeerDependencies: - - bluebird - - supports-color - - leven@3.1.0: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - libphonenumber-js@1.12.24: {} - - light-my-request@6.6.0: - dependencies: - cookie: 1.0.2 - process-warning: 4.0.1 - set-cookie-parser: 2.7.1 - - lines-and-columns@1.2.4: {} - - lint-staged@16.2.6: - dependencies: - commander: 14.0.1 - listr2: 9.0.5 - micromatch: 4.0.8 - nano-spawn: 2.0.0 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.8.1 - - listr2@9.0.5: - dependencies: - cli-truncate: 5.1.1 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.2 - - load-esm@1.0.3: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - - lodash.camelcase@4.3.0: {} - - lodash.capitalize@4.2.1: {} - - lodash.escaperegexp@4.1.2: {} - - lodash.get@4.4.2: {} - - lodash.isequal@4.5.0: {} - - lodash.isplainobject@4.0.6: {} - - lodash.isstring@4.0.1: {} - - lodash.kebabcase@4.1.1: {} - - lodash.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} - - lodash.mergewith@4.6.2: {} - - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.uniq@4.5.0: {} - - lodash.uniqby@4.7.0: {} - - lodash.upperfirst@4.3.1: {} - - lodash@4.17.21: {} - - log-symbols@7.0.1: - dependencies: - is-unicode-supported: 2.1.0 - yoctocolors: 2.1.2 - - log-update@6.1.0: - dependencies: - ansi-escapes: 7.1.1 - cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 - - lru-cache@10.4.3: {} - - lru-cache@11.2.2: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lru-cache@7.18.3: {} - - macos-release@3.4.0: {} - - make-dir@4.0.0: - dependencies: - semver: 7.7.3 - - make-error@1.3.6: {} - - make-fetch-happen@9.1.0: - dependencies: - agentkeepalive: 4.6.0 - cacache: 15.3.0 - http-cache-semantics: 4.2.0 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 1.4.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.4 - promise-retry: 2.0.1 - socks-proxy-agent: 6.2.1 - ssri: 8.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - - math-intrinsics@1.1.0: {} - - media-typer@0.3.0: {} - - media-typer@1.1.0: {} - - meow@12.1.1: {} - - merge-descriptors@2.0.0: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - methods@1.1.2: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - - mime@2.6.0: {} - - mime@3.0.0: {} - - mimic-fn@2.1.0: {} - - mimic-fn@4.0.0: {} - - mimic-function@5.0.1: {} - - minimatch@10.0.3: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - - minipass-fetch@1.4.1: - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mkdirp@1.0.4: {} - - ms@2.1.3: {} - - multer@2.0.2: - dependencies: - append-field: 1.0.0 - busboy: 1.6.0 - concat-stream: 2.0.0 - mkdirp: 0.5.6 - object-assign: 4.1.1 - type-is: 1.6.18 - xtend: 4.0.2 - - mute-stream@2.0.0: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nano-spawn@2.0.0: {} - - napi-postinstall@0.3.4: {} - - natural-compare@1.4.0: {} - - negotiator@0.6.4: {} - - negotiator@1.0.0: {} - - neo-async@2.6.2: {} - - netmask@2.0.2: {} - - new-github-release-url@2.0.0: - dependencies: - type-fest: 2.19.0 - - node-fetch-native@1.6.7: {} - - node-int64@0.4.0: {} - - node-releases@2.0.26: {} - - 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 - - nypm@0.6.2: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - pathe: 2.0.3 - pkg-types: 2.3.0 - tinyexec: 1.0.1 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - ohash@2.0.11: {} - - 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 - - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - - open@10.2.0: - dependencies: - default-browser: 5.2.1 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - wsl-utils: 0.1.0 - - openapi-types@12.1.3: {} - - 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 - - ora@9.0.0: - dependencies: - chalk: 5.6.2 - cli-cursor: 5.0.0 - cli-spinners: 3.3.0 - is-interactive: 2.0.0 - is-unicode-supported: 2.1.0 - log-symbols: 7.0.1 - stdin-discarder: 0.2.2 - string-width: 8.1.0 - strip-ansi: 7.1.2 - - os-name@6.1.0: - dependencies: - macos-release: 3.4.0 - windows-release: 6.1.0 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.1 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - - p-map@3.0.0: - dependencies: - aggregate-error: 3.1.0 - - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - - p-try@2.2.0: {} - - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3 - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-path@7.1.0: - dependencies: - protocols: 2.0.2 - - parse-url@9.2.0: - dependencies: - '@types/parse-path': 7.1.0 - parse-path: 7.1.0 - - parse5-htmlparser2-tree-adapter@6.0.1: - dependencies: - parse5: 6.0.1 - - parse5@5.1.1: {} - - parse5@6.0.1: {} - - parseurl@1.3.3: {} - - path-exists@4.0.0: {} - - path-exists@5.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-scurry@2.0.0: - dependencies: - lru-cache: 11.2.2 - minipass: 7.1.2 - - path-to-regexp@8.3.0: {} - - pathe@2.0.3: {} - - perfect-debounce@2.0.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.3: {} - - pidtree@0.6.0: {} - - pino-abstract-transport@2.0.0: - dependencies: - split2: 4.2.0 - - pino-std-serializers@7.0.0: {} - - pino@9.14.0: - dependencies: - '@pinojs/redact': 0.4.0 - atomic-sleep: 1.0.0 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 - pino-std-serializers: 7.0.0 - process-warning: 5.0.0 - quick-format-unescaped: 4.0.4 - real-require: 0.2.0 - safe-stable-stringify: 2.5.0 - sonic-boom: 4.2.0 - thread-stream: 3.1.0 - - pirates@4.0.7: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - pkg-types@2.3.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@2.8.8: {} - - prettier@3.6.2: {} - - pretty-format@30.2.0: - dependencies: - '@jest/schemas': 30.0.5 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - process-warning@4.0.1: {} - - process-warning@5.0.0: {} - - progress@2.0.3: {} - - promise-inflight@1.0.1: {} - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - - protocols@2.0.2: {} - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - - punycode@2.3.1: {} - - pure-rand@7.0.1: {} - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - queue-microtask@1.2.3: {} - - quick-format-unescaped@4.0.4: {} - - range-parser@1.2.1: {} - - raw-body@3.0.1: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.7.0 - unpipe: 1.0.0 - - rc9@2.1.2: - dependencies: - defu: 6.1.4 - destr: 2.0.5 - - react-is@18.3.1: {} - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readdirp@4.1.2: {} - - real-require@0.2.0: {} - - reflect-metadata@0.2.2: {} - - release-it@19.0.5(@types/node@22.18.12): - dependencies: - '@nodeutils/defaults-deep': 1.1.0 - '@octokit/rest': 22.0.0 - '@phun-ky/typeof': 2.0.3 - async-retry: 1.3.3 - c12: 3.3.0 - ci-info: 4.3.1 - eta: 4.0.1 - git-url-parse: 16.1.0 - inquirer: 12.9.6(@types/node@22.18.12) - issue-parser: 7.0.1 - lodash.merge: 4.6.2 - mime-types: 3.0.1 - new-github-release-url: 2.0.0 - open: 10.2.0 - ora: 9.0.0 - os-name: 6.1.0 - proxy-agent: 6.5.0 - semver: 7.7.2 - tinyglobby: 0.2.15 - undici: 6.21.3 - url-join: 5.0.0 - wildcard-match: 5.1.4 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - '@types/node' - - magicast - - supports-color - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - - ret@0.5.0: {} - - retry@0.12.0: {} - - retry@0.13.1: {} - - reusify@1.1.0: {} - - rfdc@1.4.1: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - router@2.2.0: - dependencies: - debug: 4.4.3 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.3.0 - transitivePeerDependencies: - - supports-color - - run-applescript@7.1.0: {} - - run-async@4.0.6: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-buffer@5.2.1: {} - - safe-regex2@5.0.0: - dependencies: - ret: 0.5.0 - - safe-stable-stringify@2.5.0: {} - - safer-buffer@2.1.2: {} - - secure-json-parse@4.1.0: {} - - semver@6.3.1: {} - - semver@7.7.2: {} - - semver@7.7.3: {} - - send@1.2.0: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - - set-cookie-parser@2.7.1: {} - - setprototypeof@1.2.0: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - slash@3.0.0: {} - - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - smart-buffer@4.2.0: {} - - socks-proxy-agent@6.2.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.0.1 - smart-buffer: 4.2.0 - - sonic-boom@4.2.0: - dependencies: - atomic-sleep: 1.0.0 - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - split2@4.2.0: {} - - sprintf-js@1.0.3: {} - - ssri@8.0.1: - dependencies: - minipass: 3.3.6 - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - statuses@2.0.1: {} - - statuses@2.0.2: {} - - stdin-discarder@0.2.2: {} - - streamsearch@1.1.0: {} - - string-argv@0.3.2: {} - - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - 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.2 - - string-width@7.2.0: - dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string-width@8.1.0: - dependencies: - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-final-newline@3.0.0: {} - - strip-json-comments@3.1.1: {} - - strtok3@10.3.4: - dependencies: - '@tokenizer/token': 0.3.0 - - superagent@10.2.3: - dependencies: - component-emitter: 1.3.1 - cookiejar: 2.1.4 - debug: 4.4.3 - fast-safe-stringify: 2.1.1 - form-data: 4.0.4 - formidable: 3.5.4 - methods: 1.1.2 - mime: 2.6.0 - qs: 6.14.0 - transitivePeerDependencies: - - supports-color - - supertest@7.1.4: - dependencies: - methods: 1.1.2 - superagent: 10.2.3 - transitivePeerDependencies: - - supports-color - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - swagger-parser@10.0.3(openapi-types@12.1.3): - dependencies: - '@apidevtools/swagger-parser': 10.0.3(openapi-types@12.1.3) - transitivePeerDependencies: - - openapi-types - - swagger-ui-dist@5.29.4: - dependencies: - '@scarf/scarf': 1.4.0 - - synckit@0.11.11: - dependencies: - '@pkgr/core': 0.2.9 - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - - text-extensions@2.4.0: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - thread-stream@3.1.0: - dependencies: - real-require: 0.2.0 - - through@2.3.8: {} - - tinyexec@1.0.1: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tmpl@1.0.5: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toad-cache@3.7.0: {} - - toidentifier@1.0.1: {} - - token-types@6.1.1: - dependencies: - '@borewit/text-codec': 0.1.1 - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - - ts-api-utils@2.1.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.18.12))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 30.2.0(@types/node@22.18.12) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - jest-util: 30.2.0 - - tslib@2.8.1: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-detect@4.0.8: {} - - type-fest@0.21.3: {} - - type-fest@2.19.0: {} - - type-fest@4.41.0: {} - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.1 - - typedarray@0.0.6: {} - - typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - typescript@5.9.3: {} - - uglify-js@3.19.3: - optional: true - - uid@2.0.2: - dependencies: - '@lukeed/csprng': 1.1.0 - - uint8array-extras@1.5.0: {} - - undici-types@6.21.0: {} - - undici@6.21.3: {} - - unicorn-magic@0.1.0: {} - - unique-filename@1.1.1: - dependencies: - unique-slug: 2.0.2 - - unique-slug@2.0.2: - dependencies: - imurmurhash: 0.1.4 - - universal-user-agent@7.0.3: {} - - unpipe@1.0.0: {} - - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - - update-browserslist-db@1.1.4(browserslist@4.27.0): - dependencies: - browserslist: 4.27.0 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - url-join@5.0.0: {} - - util-deprecate@1.0.2: {} - - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - validator@13.15.15: {} - - vary@1.1.2: {} - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wildcard-match@5.1.4: {} - - windows-release@6.1.0: - dependencies: - execa: 8.0.1 - - word-wrap@1.2.5: {} - - wordwrap@1.0.0: {} - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - write-file-atomic@5.0.1: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - - wsl-utils@0.1.0: - dependencies: - is-wsl: 3.1.0 - - xtend@4.0.2: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yaml@2.8.1: {} - - yargs-parser@20.2.9: {} - - yargs-parser@21.1.1: {} - - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - 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 - - yocto-queue@0.1.0: {} - - yocto-queue@1.2.1: {} - - yoctocolors-cjs@2.1.3: {} - - yoctocolors@2.1.2: {} - - z-schema@5.0.5: - dependencies: - lodash.get: 4.4.2 - lodash.isequal: 4.5.0 - validator: 13.15.15 - optionalDependencies: - commander: 9.5.0