From 84cbc2e56f0510043f7dbe1474e3612af47bacae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 1 May 2026 11:12:49 +0200 Subject: [PATCH 1/6] chore: migrate to esm --- e2e/api-spec.json | 240 +++++++++++++++++- index.ts | 1 - lib/decorators/api-basic.decorator.ts | 2 +- lib/decorators/api-bearer.decorator.ts | 2 +- lib/decorators/api-body.decorator.ts | 11 +- lib/decorators/api-callbacks.decorator.ts | 6 +- lib/decorators/api-consumes.decorator.ts | 4 +- lib/decorators/api-cookie.decorator.ts | 2 +- .../api-default-getter.decorator.ts | 2 +- .../api-exclude-controller.decorator.ts | 4 +- .../api-exclude-endpoint.decorator.ts | 4 +- lib/decorators/api-extension.decorator.ts | 9 +- lib/decorators/api-extra-models.decorator.ts | 2 +- lib/decorators/api-header.decorator.ts | 13 +- .../api-include-endpoint.decorator.ts | 4 +- lib/decorators/api-link.decorator.ts | 2 +- lib/decorators/api-oauth2.decorator.ts | 2 +- lib/decorators/api-operation.decorator.ts | 9 +- lib/decorators/api-param.decorator.ts | 13 +- lib/decorators/api-produces.decorator.ts | 4 +- lib/decorators/api-property.decorator.ts | 10 +- lib/decorators/api-query.decorator.ts | 13 +- lib/decorators/api-response.decorator.ts | 9 +- lib/decorators/api-schema.decorator.ts | 6 +- lib/decorators/api-security.decorator.ts | 9 +- lib/decorators/api-use-tags.decorator.ts | 6 +- lib/decorators/helpers.ts | 11 +- lib/decorators/index.ts | 50 ++-- lib/document-builder.ts | 15 +- lib/explorers/api-callbacks.explorer.ts | 6 +- lib/explorers/api-consumes.explorer.ts | 2 +- .../api-exclude-controller.explorer.ts | 2 +- .../api-exclude-endpoint.explorer.ts | 2 +- lib/explorers/api-extra-models.explorer.ts | 2 +- lib/explorers/api-headers.explorer.ts | 2 +- .../api-include-endpoint.explorer.ts | 2 +- lib/explorers/api-operation.explorer.ts | 6 +- lib/explorers/api-parameters.explorer.ts | 19 +- lib/explorers/api-produces.explorer.ts | 2 +- lib/explorers/api-response.explorer.ts | 21 +- lib/explorers/api-security.explorer.ts | 2 +- lib/explorers/api-use-tags.explorer.ts | 2 +- lib/fixtures/document.base.ts | 2 +- lib/index.ts | 12 +- lib/interfaces/denormalized-doc.interface.ts | 2 +- .../enum-schema-attributes.interface.ts | 2 +- lib/interfaces/index.ts | 6 +- lib/interfaces/module-route.interface.ts | 2 +- .../schema-object-metadata.interface.ts | 4 +- .../swagger-custom-options.interface.ts | 4 +- .../swagger-ui-init-options.interface.ts | 4 +- lib/plugin/compiler-plugin.ts | 10 +- lib/plugin/index.ts | 4 +- lib/plugin/merge-options.ts | 4 +- lib/plugin/metadata-loader.ts | 2 +- lib/plugin/utils/ast-utils.ts | 2 +- lib/plugin/utils/plugin-utils.ts | 7 +- .../type-reference-to-identifier.util.ts | 6 +- lib/plugin/visitors/abstract.visitor.ts | 2 +- .../visitors/controller-class.visitor.ts | 17 +- lib/plugin/visitors/model-class.visitor.ts | 23 +- lib/plugin/visitors/readonly.visitor.ts | 8 +- lib/services/mimetype-content-wrapper.ts | 4 +- lib/services/model-properties-accessor.ts | 8 +- lib/services/parameter-metadata-accessor.ts | 13 +- lib/services/parameters-metadata-mapper.ts | 13 +- lib/services/response-object-factory.ts | 21 +- lib/services/response-object-mapper.ts | 9 +- lib/services/schema-object-factory.ts | 35 +-- lib/services/swagger-types-mapper.ts | 9 +- lib/storages/global-parameters.storage.ts | 2 +- lib/storages/global-responses.storage.ts | 2 +- lib/swagger-explorer.ts | 57 +++-- lib/swagger-module.ts | 22 +- lib/swagger-scanner.ts | 31 +-- lib/swagger-transformer.ts | 7 +- lib/swagger-ui/helpers.ts | 2 +- lib/swagger-ui/index.ts | 2 +- lib/swagger-ui/swagger-ui.ts | 9 +- lib/type-helpers/deep-partial-type.helper.ts | 15 +- lib/type-helpers/index.ts | 10 +- lib/type-helpers/intersection-type.helper.ts | 10 +- lib/type-helpers/mapped-types.utils.ts | 5 +- lib/type-helpers/omit-type.helper.ts | 15 +- lib/type-helpers/partial-type.helper.ts | 15 +- lib/type-helpers/pick-type.helper.ts | 15 +- lib/utils/enum.utils.ts | 9 +- lib/utils/generate-schema.util.ts | 8 +- lib/utils/get-schema-path.util.ts | 6 +- lib/utils/index.ts | 4 +- lib/utils/is-body-parameter.util.ts | 2 +- lib/utils/is-built-in-type.util.ts | 5 +- lib/utils/merge-and-uniq.util.ts | 3 +- lib/utils/strip-dynamic-defaults.util.ts | 2 +- package.json | 3 +- plugin.js | 10 - plugin.ts | 1 - .../readonly-visitor-project-refs.spec.ts | 5 +- test/plugin/readonly-visitor.spec.ts | 4 +- tsconfig.build.json | 5 +- vitest.config.mts | 1 + 101 files changed, 659 insertions(+), 398 deletions(-) delete mode 100644 index.ts delete mode 100644 plugin.js delete mode 100644 plugin.ts diff --git a/e2e/api-spec.json b/e2e/api-spec.json index dd7d397fb..7f8a6725f 100644 --- a/e2e/api-spec.json +++ b/e2e/api-spec.json @@ -1504,6 +1504,7 @@ "required": false, "schema": { "type": "string", + "example": "test", "default": "test" } }, @@ -1804,6 +1805,228 @@ "from-controller": true } } + }, + "/api/cats/scalar-with-example": { + "get": { + "operationId": "CatsController_scalarWithExample", + "parameters": [ + { + "name": "header", + "in": "header", + "description": "Test", + "required": false, + "schema": { + "type": "string", + "example": "test", + "default": "test" + } + }, + { + "name": "x-tenant-id", + "in": "header", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "number" + }, + "example": 42 + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorDto" + } + } + } + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "key2": [], + "key1": [] + }, + { + "bearer": [] + }, + { + "basic": [] + } + ], + "tags": [ + "cats" + ], + "x-foo": { + "from-controller": true + } + } + }, + "/api/cats/scalar-with-examples": { + "get": { + "operationId": "CatsController_scalarWithExamples", + "parameters": [ + { + "name": "header", + "in": "header", + "description": "Test", + "required": false, + "schema": { + "type": "string", + "example": "test", + "default": "test" + } + }, + { + "name": "x-tenant-id", + "in": "header", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "number" + }, + "examples": { + "adult": { + "value": 5, + "summary": "Adult cat age" + }, + "kitten": { + "value": 1, + "summary": "Kitten age" + } + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorDto" + } + } + } + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "key2": [], + "key1": [] + }, + { + "bearer": [] + }, + { + "basic": [] + } + ], + "tags": [ + "cats" + ], + "x-foo": { + "from-controller": true + } + } + }, + "/api/cats/array-of-scalar-with-example": { + "get": { + "operationId": "CatsController_arrayOfScalarWithExample", + "parameters": [ + { + "name": "header", + "in": "header", + "description": "Test", + "required": false, + "schema": { + "type": "string", + "example": "test", + "default": "test" + } + }, + { + "name": "x-tenant-id", + "in": "header", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "Mau", + "Persian" + ] + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorDto" + } + } + } + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "key2": [], + "key1": [] + }, + { + "bearer": [] + }, + { + "basic": [] + } + ], + "tags": [ + "cats" + ], + "x-foo": { + "from-controller": true + } + } } }, "info": { @@ -2009,7 +2232,7 @@ "B", "C" ], - "type": "object", + "type": "string", "description": "Enum with description" }, "enum": { @@ -2210,6 +2433,20 @@ ], "description": "Array of values that uses \"oneOf\"" }, + "enumNamedWithOneOf": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/components/schemas/LettersEnum" + } + ], + "description": "Enum named reference combined with oneOf combinators" + }, "kittenIds": { "type": "array", "items": { @@ -2246,6 +2483,7 @@ "enumArr", "enumWithRef", "oneOfExample", + "enumNamedWithOneOf", "kittenIds" ] }, diff --git a/index.ts b/index.ts deleted file mode 100644 index 5703fb5fd..000000000 --- a/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist'; diff --git a/lib/decorators/api-basic.decorator.ts b/lib/decorators/api-basic.decorator.ts index 9fd782776..99285ad6e 100644 --- a/lib/decorators/api-basic.decorator.ts +++ b/lib/decorators/api-basic.decorator.ts @@ -1,4 +1,4 @@ -import { ApiSecurity } from './api-security.decorator'; +import { ApiSecurity } from './api-security.decorator.js'; /** * @publicApi diff --git a/lib/decorators/api-bearer.decorator.ts b/lib/decorators/api-bearer.decorator.ts index dd78bc2f6..63266ea41 100644 --- a/lib/decorators/api-bearer.decorator.ts +++ b/lib/decorators/api-bearer.decorator.ts @@ -1,4 +1,4 @@ -import { ApiSecurity } from './api-security.decorator'; +import { ApiSecurity } from './api-security.decorator.js'; /** * @publicApi diff --git a/lib/decorators/api-body.decorator.ts b/lib/decorators/api-body.decorator.ts index e61df747c..882436242 100644 --- a/lib/decorators/api-body.decorator.ts +++ b/lib/decorators/api-body.decorator.ts @@ -1,20 +1,21 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; -import { omit } from 'lodash'; +const { omit } = lodash; import { EncodingObject, ExamplesObject, ReferenceObject, RequestBodyObject, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; +} from '../interfaces/open-api-spec.interface.js'; +import { SwaggerEnumType } from '../types/swagger-enum.type.js'; import { addEnumArraySchema, addEnumSchema, isEnumArray, isEnumDefined -} from '../utils/enum.utils'; -import { createParamDecorator, getTypeIsArrayTuple } from './helpers'; +} from '../utils/enum.utils.js'; +import { createParamDecorator, getTypeIsArrayTuple } from './helpers.js'; type RequestBodyOptions = Omit; diff --git a/lib/decorators/api-callbacks.decorator.ts b/lib/decorators/api-callbacks.decorator.ts index 9da3f1d48..d7cf8bcdd 100644 --- a/lib/decorators/api-callbacks.decorator.ts +++ b/lib/decorators/api-callbacks.decorator.ts @@ -1,6 +1,6 @@ -import { DECORATORS } from '../constants'; -import { createMixedDecorator } from './helpers'; -import { CallBackObject } from '../interfaces/callback-object.interface'; +import { DECORATORS } from '../constants.js'; +import { createMixedDecorator } from './helpers.js'; +import { CallBackObject } from '../interfaces/callback-object.interface.js'; /** * @publicApi diff --git a/lib/decorators/api-consumes.decorator.ts b/lib/decorators/api-consumes.decorator.ts index acc62e9a5..2af134f02 100644 --- a/lib/decorators/api-consumes.decorator.ts +++ b/lib/decorators/api-consumes.decorator.ts @@ -1,5 +1,5 @@ -import { DECORATORS } from '../constants'; -import { createMixedDecorator } from './helpers'; +import { DECORATORS } from '../constants.js'; +import { createMixedDecorator } from './helpers.js'; /** * @publicApi diff --git a/lib/decorators/api-cookie.decorator.ts b/lib/decorators/api-cookie.decorator.ts index e31eb1052..8e6566d7c 100644 --- a/lib/decorators/api-cookie.decorator.ts +++ b/lib/decorators/api-cookie.decorator.ts @@ -1,4 +1,4 @@ -import { ApiSecurity } from './api-security.decorator'; +import { ApiSecurity } from './api-security.decorator.js'; /** * @publicApi diff --git a/lib/decorators/api-default-getter.decorator.ts b/lib/decorators/api-default-getter.decorator.ts index 01ff15703..37b6d08dc 100644 --- a/lib/decorators/api-default-getter.decorator.ts +++ b/lib/decorators/api-default-getter.decorator.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; /** * Set the default getter for the given type to the decorated method diff --git a/lib/decorators/api-exclude-controller.decorator.ts b/lib/decorators/api-exclude-controller.decorator.ts index 20de96de8..c9a94d9a7 100644 --- a/lib/decorators/api-exclude-controller.decorator.ts +++ b/lib/decorators/api-exclude-controller.decorator.ts @@ -1,5 +1,5 @@ -import { DECORATORS } from '../constants'; -import { createClassDecorator } from './helpers'; +import { DECORATORS } from '../constants.js'; +import { createClassDecorator } from './helpers.js'; /** * @publicApi diff --git a/lib/decorators/api-exclude-endpoint.decorator.ts b/lib/decorators/api-exclude-endpoint.decorator.ts index 54c22c48e..9a939a12e 100644 --- a/lib/decorators/api-exclude-endpoint.decorator.ts +++ b/lib/decorators/api-exclude-endpoint.decorator.ts @@ -1,5 +1,5 @@ -import { DECORATORS } from '../constants'; -import { createMethodDecorator } from './helpers'; +import { DECORATORS } from '../constants.js'; +import { createMethodDecorator } from './helpers.js'; /** * @publicApi diff --git a/lib/decorators/api-extension.decorator.ts b/lib/decorators/api-extension.decorator.ts index 1172c9af4..6ed88ec61 100644 --- a/lib/decorators/api-extension.decorator.ts +++ b/lib/decorators/api-extension.decorator.ts @@ -1,7 +1,8 @@ -import { METHOD_METADATA } from '@nestjs/common/constants'; -import { DECORATORS } from '../constants'; -import { clone, merge } from 'lodash'; -import { isConstructor } from '@nestjs/common/utils/shared.utils'; +import lodash from 'lodash'; +import { METHOD_METADATA } from '@nestjs/common/constants.js'; +import { DECORATORS } from '../constants.js'; +const { clone, merge } = lodash; +import { isConstructor } from '@nestjs/common/utils/shared.utils.js'; function applyExtension(target: any, key: string, value: any): void { const extensions = diff --git a/lib/decorators/api-extra-models.decorator.ts b/lib/decorators/api-extra-models.decorator.ts index e835c8795..2d9e91791 100644 --- a/lib/decorators/api-extra-models.decorator.ts +++ b/lib/decorators/api-extra-models.decorator.ts @@ -1,4 +1,4 @@ -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; /** * @publicApi diff --git a/lib/decorators/api-header.decorator.ts b/lib/decorators/api-header.decorator.ts index cf9b51329..76d0d4550 100644 --- a/lib/decorators/api-header.decorator.ts +++ b/lib/decorators/api-header.decorator.ts @@ -1,12 +1,13 @@ -import { isNil, isUndefined, negate, pickBy } from 'lodash'; -import { DECORATORS } from '../constants'; +import lodash from 'lodash'; +const { isNil, isUndefined, negate, pickBy } = lodash; +import { DECORATORS } from '../constants.js'; import { ParameterLocation, ParameterObject -} from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; -import { getEnumType, getEnumValues } from '../utils/enum.utils'; -import { createClassDecorator, createParamDecorator } from './helpers'; +} from '../interfaces/open-api-spec.interface.js'; +import { SwaggerEnumType } from '../types/swagger-enum.type.js'; +import { getEnumType, getEnumValues } from '../utils/enum.utils.js'; +import { createClassDecorator, createParamDecorator } from './helpers.js'; export interface ApiHeaderOptions extends Omit { enum?: SwaggerEnumType; diff --git a/lib/decorators/api-include-endpoint.decorator.ts b/lib/decorators/api-include-endpoint.decorator.ts index e82d3cde6..2521b09e7 100644 --- a/lib/decorators/api-include-endpoint.decorator.ts +++ b/lib/decorators/api-include-endpoint.decorator.ts @@ -1,5 +1,5 @@ -import { DECORATORS } from '../constants'; -import { createMethodDecorator } from './helpers'; +import { DECORATORS } from '../constants.js'; +import { createMethodDecorator } from './helpers.js'; /** * @publicApi diff --git a/lib/decorators/api-link.decorator.ts b/lib/decorators/api-link.decorator.ts index ed883dfa6..15c8df20a 100644 --- a/lib/decorators/api-link.decorator.ts +++ b/lib/decorators/api-link.decorator.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export interface ApiLinkOptions { from: Type | Function; diff --git a/lib/decorators/api-oauth2.decorator.ts b/lib/decorators/api-oauth2.decorator.ts index f421736cf..356535e72 100644 --- a/lib/decorators/api-oauth2.decorator.ts +++ b/lib/decorators/api-oauth2.decorator.ts @@ -1,4 +1,4 @@ -import { ApiSecurity } from './api-security.decorator'; +import { ApiSecurity } from './api-security.decorator.js'; /** * @publicApi diff --git a/lib/decorators/api-operation.decorator.ts b/lib/decorators/api-operation.decorator.ts index bc08c4787..a6da90669 100644 --- a/lib/decorators/api-operation.decorator.ts +++ b/lib/decorators/api-operation.decorator.ts @@ -1,7 +1,8 @@ -import { isUndefined, negate, pickBy } from 'lodash'; -import { DECORATORS } from '../constants'; -import { OperationObject } from '../interfaces/open-api-spec.interface'; -import { createMethodDecorator } from './helpers'; +import lodash from 'lodash'; +const { isUndefined, negate, pickBy } = lodash; +import { DECORATORS } from '../constants.js'; +import { OperationObject } from '../interfaces/open-api-spec.interface.js'; +import { createMethodDecorator } from './helpers.js'; export type ApiOperationOptions = Partial; diff --git a/lib/decorators/api-param.decorator.ts b/lib/decorators/api-param.decorator.ts index 4e59a9c57..fa00ee870 100644 --- a/lib/decorators/api-param.decorator.ts +++ b/lib/decorators/api-param.decorator.ts @@ -1,13 +1,14 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; -import { isNil, omit, clone } from 'lodash'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +const { isNil, omit, clone } = lodash; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterObject, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; -import { addEnumSchema, isEnumDefined } from '../utils/enum.utils'; -import { createParamDecorator } from './helpers'; +} from '../interfaces/open-api-spec.interface.js'; +import { SwaggerEnumType } from '../types/swagger-enum.type.js'; +import { addEnumSchema, isEnumDefined } from '../utils/enum.utils.js'; +import { createParamDecorator } from './helpers.js'; type ParameterOptions = Omit; diff --git a/lib/decorators/api-produces.decorator.ts b/lib/decorators/api-produces.decorator.ts index 1be561ca2..53a1b872e 100644 --- a/lib/decorators/api-produces.decorator.ts +++ b/lib/decorators/api-produces.decorator.ts @@ -1,5 +1,5 @@ -import { DECORATORS } from '../constants'; -import { createMixedDecorator } from './helpers'; +import { DECORATORS } from '../constants.js'; +import { createMixedDecorator } from './helpers.js'; /** * @publicApi diff --git a/lib/decorators/api-property.decorator.ts b/lib/decorators/api-property.decorator.ts index 453bc0d45..ba1e69da0 100644 --- a/lib/decorators/api-property.decorator.ts +++ b/lib/decorators/api-property.decorator.ts @@ -1,12 +1,12 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +import { DECORATORS } from '../constants.js'; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { EnumAllowedTypes, SchemaObjectMetadata -} from '../interfaces/schema-object-metadata.interface'; -import { getEnumType, getEnumValues } from '../utils/enum.utils'; -import { createPropertyDecorator, getTypeIsArrayTuple } from './helpers'; +} from '../interfaces/schema-object-metadata.interface.js'; +import { getEnumType, getEnumValues } from '../utils/enum.utils.js'; +import { createPropertyDecorator, getTypeIsArrayTuple } from './helpers.js'; export type ApiPropertyCommonOptions = SchemaObjectMetadata & { 'x-enumNames'?: string[]; diff --git a/lib/decorators/api-query.decorator.ts b/lib/decorators/api-query.decorator.ts index f54a5011b..2bdbf7bc3 100644 --- a/lib/decorators/api-query.decorator.ts +++ b/lib/decorators/api-query.decorator.ts @@ -1,19 +1,20 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; -import { omit } from 'lodash'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +const { omit } = lodash; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterObject, ReferenceObject, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; +} from '../interfaces/open-api-spec.interface.js'; +import { SwaggerEnumType } from '../types/swagger-enum.type.js'; import { addEnumArraySchema, addEnumSchema, isEnumArray, isEnumDefined -} from '../utils/enum.utils'; -import { createParamDecorator, getTypeIsArrayTuple } from './helpers'; +} from '../utils/enum.utils.js'; +import { createParamDecorator, getTypeIsArrayTuple } from './helpers.js'; type ParameterOptions = Omit; diff --git a/lib/decorators/api-response.decorator.ts b/lib/decorators/api-response.decorator.ts index 9a900046f..05aa7ce29 100644 --- a/lib/decorators/api-response.decorator.ts +++ b/lib/decorators/api-response.decorator.ts @@ -1,12 +1,13 @@ +import lodash from 'lodash'; import { HttpStatus, Type } from '@nestjs/common'; -import { omit } from 'lodash'; -import { DECORATORS } from '../constants'; +const { omit } = lodash; +import { DECORATORS } from '../constants.js'; import { ReferenceObject, ResponseObject, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { getTypeIsArrayTuple } from './helpers'; +} from '../interfaces/open-api-spec.interface.js'; +import { getTypeIsArrayTuple } from './helpers.js'; type ApiResponseExampleValue = any; export interface ApiResponseExamples { diff --git a/lib/decorators/api-schema.decorator.ts b/lib/decorators/api-schema.decorator.ts index 051b186a6..02175ed4f 100644 --- a/lib/decorators/api-schema.decorator.ts +++ b/lib/decorators/api-schema.decorator.ts @@ -1,6 +1,6 @@ -import { DECORATORS } from '../constants'; -import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; -import { createClassDecorator } from './helpers'; +import { DECORATORS } from '../constants.js'; +import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface.js'; +import { createClassDecorator } from './helpers.js'; export interface ApiSchemaOptions extends Pick { /** diff --git a/lib/decorators/api-security.decorator.ts b/lib/decorators/api-security.decorator.ts index 01324256a..2ffbec587 100644 --- a/lib/decorators/api-security.decorator.ts +++ b/lib/decorators/api-security.decorator.ts @@ -1,7 +1,8 @@ -import { isString } from 'lodash'; -import { DECORATORS } from '../constants'; -import { SecurityRequirementObject } from '../interfaces/open-api-spec.interface'; -import { extendMetadata } from '../utils/extend-metadata.util'; +import lodash from 'lodash'; +const { isString } = lodash; +import { DECORATORS } from '../constants.js'; +import { SecurityRequirementObject } from '../interfaces/open-api-spec.interface.js'; +import { extendMetadata } from '../utils/extend-metadata.util.js'; /** * @publicApi diff --git a/lib/decorators/api-use-tags.decorator.ts b/lib/decorators/api-use-tags.decorator.ts index f0478e376..ae8dcc8a7 100644 --- a/lib/decorators/api-use-tags.decorator.ts +++ b/lib/decorators/api-use-tags.decorator.ts @@ -1,6 +1,6 @@ -import { DECORATORS } from '../constants'; -import { ApiTagOptions } from '../interfaces/open-api-spec.interface'; -import { createMixedDecorator } from './helpers'; +import { DECORATORS } from '../constants.js'; +import { ApiTagOptions } from '../interfaces/open-api-spec.interface.js'; +import { createMixedDecorator } from './helpers.js'; /** * @publicApi diff --git a/lib/decorators/helpers.ts b/lib/decorators/helpers.ts index 5276238a8..a2c593b1a 100644 --- a/lib/decorators/helpers.ts +++ b/lib/decorators/helpers.ts @@ -1,8 +1,9 @@ -import { METHOD_METADATA } from '@nestjs/common/constants'; -import { isConstructor } from '@nestjs/common/utils/shared.utils'; -import { isArray, isUndefined, negate, pickBy } from 'lodash'; -import { DECORATORS } from '../constants'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; +import lodash from 'lodash'; +import { METHOD_METADATA } from '@nestjs/common/constants.js'; +import { isConstructor } from '@nestjs/common/utils/shared.utils.js'; +const { isArray, isUndefined, negate, pickBy } = lodash; +import { DECORATORS } from '../constants.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; export function createMethodDecorator( metakey: string, diff --git a/lib/decorators/index.ts b/lib/decorators/index.ts index 15c7630d7..4d282f6af 100644 --- a/lib/decorators/index.ts +++ b/lib/decorators/index.ts @@ -1,30 +1,30 @@ -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 * from './api-basic.decorator.js'; +export * from './api-bearer.decorator.js'; +export * from './api-body.decorator.js'; +export * from './api-consumes.decorator.js'; +export * from './api-cookie.decorator.js'; +export * from './api-default-getter.decorator.js'; +export * from './api-exclude-endpoint.decorator.js'; +export * from './api-include-endpoint.decorator.js'; +export * from './api-exclude-controller.decorator.js'; +export * from './api-extra-models.decorator.js'; +export * from './api-header.decorator.js'; +export * from './api-hide-property.decorator.js'; +export * from './api-link.decorator.js'; +export * from './api-oauth2.decorator.js'; +export * from './api-operation.decorator.js'; +export * from './api-param.decorator.js'; +export * from './api-produces.decorator.js'; 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'; +} from './api-property.decorator.js'; +export * from './api-query.decorator.js'; +export * from './api-response.decorator.js'; +export * from './api-security.decorator.js'; +export * from './api-use-tags.decorator.js'; +export * from './api-callbacks.decorator.js'; +export * from './api-extension.decorator.js'; +export * from './api-schema.decorator.js'; diff --git a/lib/document-builder.ts b/lib/document-builder.ts index a09320f80..4ae6a9c5c 100644 --- a/lib/document-builder.ts +++ b/lib/document-builder.ts @@ -1,8 +1,9 @@ +import lodash from 'lodash'; import { Logger } from '@nestjs/common'; -import { clone, isString, isUndefined, negate, omit, pickBy } from 'lodash'; -import { ApiResponseOptions } from './decorators/api-response.decorator'; -import { buildDocumentBase } from './fixtures/document.base'; -import { OpenAPIObject } from './interfaces'; +const { clone, isString, isUndefined, negate, omit, pickBy } = lodash; +import { ApiResponseOptions } from './decorators/api-response.decorator.js'; +import { buildDocumentBase } from './fixtures/document.base.js'; +import { OpenAPIObject } from './interfaces/index.js'; import { ExtensionLocation, ExternalDocumentationObject, @@ -11,9 +12,9 @@ import { SecuritySchemeObject, ServerVariableObject, TagObject -} from './interfaces/open-api-spec.interface'; -import { GlobalParametersStorage } from './storages/global-parameters.storage'; -import { GlobalResponsesStorage } from './storages/global-responses.storage'; +} from './interfaces/open-api-spec.interface.js'; +import { GlobalParametersStorage } from './storages/global-parameters.storage.js'; +import { GlobalResponsesStorage } from './storages/global-responses.storage.js'; /** * @publicApi diff --git a/lib/explorers/api-callbacks.explorer.ts b/lib/explorers/api-callbacks.explorer.ts index 9e118e810..2c96f0e34 100644 --- a/lib/explorers/api-callbacks.explorer.ts +++ b/lib/explorers/api-callbacks.explorer.ts @@ -1,7 +1,7 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; -import { getSchemaPath } from '../utils'; -import { CallBackObject } from '../interfaces/callback-object.interface'; +import { DECORATORS } from '../constants.js'; +import { getSchemaPath } from '../utils/index.js'; +import { CallBackObject } from '../interfaces/callback-object.interface.js'; export const exploreApiCallbacksMetadata = ( instance: object, diff --git a/lib/explorers/api-consumes.explorer.ts b/lib/explorers/api-consumes.explorer.ts index 54d1cac69..21d7c7de8 100644 --- a/lib/explorers/api-consumes.explorer.ts +++ b/lib/explorers/api-consumes.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreGlobalApiConsumesMetadata = (metatype: Type) => { const consumes = Reflect.getMetadata(DECORATORS.API_CONSUMES, metatype); diff --git a/lib/explorers/api-exclude-controller.explorer.ts b/lib/explorers/api-exclude-controller.explorer.ts index 6ad785b3e..e0534ee8a 100644 --- a/lib/explorers/api-exclude-controller.explorer.ts +++ b/lib/explorers/api-exclude-controller.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreApiExcludeControllerMetadata = (metatype: Type) => Reflect.getMetadata(DECORATORS.API_EXCLUDE_CONTROLLER, metatype)?.[0] === diff --git a/lib/explorers/api-exclude-endpoint.explorer.ts b/lib/explorers/api-exclude-endpoint.explorer.ts index e46fe7a89..cefa7fcce 100644 --- a/lib/explorers/api-exclude-endpoint.explorer.ts +++ b/lib/explorers/api-exclude-endpoint.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreApiExcludeEndpointMetadata = ( instance: object, diff --git a/lib/explorers/api-extra-models.explorer.ts b/lib/explorers/api-extra-models.explorer.ts index e65577987..59f6d95e7 100644 --- a/lib/explorers/api-extra-models.explorer.ts +++ b/lib/explorers/api-extra-models.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreGlobalApiExtraModelsMetadata = ( metatype: Type diff --git a/lib/explorers/api-headers.explorer.ts b/lib/explorers/api-headers.explorer.ts index f91dc673c..9f63384d2 100644 --- a/lib/explorers/api-headers.explorer.ts +++ b/lib/explorers/api-headers.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreGlobalApiHeaderMetadata = (metatype: Type) => { const headers = Reflect.getMetadata(DECORATORS.API_HEADERS, metatype); diff --git a/lib/explorers/api-include-endpoint.explorer.ts b/lib/explorers/api-include-endpoint.explorer.ts index 3443983da..d398b7328 100644 --- a/lib/explorers/api-include-endpoint.explorer.ts +++ b/lib/explorers/api-include-endpoint.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreApiIncludeEndpointMetadata = ( instance: object, diff --git a/lib/explorers/api-operation.explorer.ts b/lib/explorers/api-operation.explorer.ts index 94c9d993f..47b128ee0 100644 --- a/lib/explorers/api-operation.explorer.ts +++ b/lib/explorers/api-operation.explorer.ts @@ -1,7 +1,7 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; -import { ApiOperation } from '../decorators/api-operation.decorator'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; +import { DECORATORS } from '../constants.js'; +import { ApiOperation } from '../decorators/api-operation.decorator.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; export const exploreApiOperationMetadata = ( instance: object, diff --git a/lib/explorers/api-parameters.explorer.ts b/lib/explorers/api-parameters.explorer.ts index b86ec5278..df1303579 100644 --- a/lib/explorers/api-parameters.explorer.ts +++ b/lib/explorers/api-parameters.explorer.ts @@ -1,16 +1,17 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; -import { assign, find, isNil, map, omitBy, some, unionWith } from 'lodash'; -import { DECORATORS } from '../constants'; -import { SchemaObject } from '../interfaces/open-api-spec.interface'; -import { ModelPropertiesAccessor } from '../services/model-properties-accessor'; +const { assign, find, isNil, map, omitBy, some, unionWith } = lodash; +import { DECORATORS } from '../constants.js'; +import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; +import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; import { ParameterMetadataAccessor, ParamWithTypeMetadata -} from '../services/parameter-metadata-accessor'; -import { ParametersMetadataMapper } from '../services/parameters-metadata-mapper'; -import { SchemaObjectFactory } from '../services/schema-object-factory'; -import { SwaggerTypesMapper } from '../services/swagger-types-mapper'; -import { GlobalParametersStorage } from '../storages/global-parameters.storage'; +} from '../services/parameter-metadata-accessor.js'; +import { ParametersMetadataMapper } from '../services/parameters-metadata-mapper.js'; +import { SchemaObjectFactory } from '../services/schema-object-factory.js'; +import { SwaggerTypesMapper } from '../services/swagger-types-mapper.js'; +import { GlobalParametersStorage } from '../storages/global-parameters.storage.js'; const parameterMetadataAccessor = new ParameterMetadataAccessor(); const modelPropertiesAccessor = new ModelPropertiesAccessor(); diff --git a/lib/explorers/api-produces.explorer.ts b/lib/explorers/api-produces.explorer.ts index f23506a36..e88b6b1c9 100644 --- a/lib/explorers/api-produces.explorer.ts +++ b/lib/explorers/api-produces.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreGlobalApiProducesMetadata = (metatype: Type) => { const produces = Reflect.getMetadata(DECORATORS.API_PRODUCES, metatype); diff --git a/lib/explorers/api-response.explorer.ts b/lib/explorers/api-response.explorer.ts index 1a029544b..3feb0fc53 100644 --- a/lib/explorers/api-response.explorer.ts +++ b/lib/explorers/api-response.explorer.ts @@ -1,17 +1,18 @@ +import lodash from 'lodash'; import { HttpStatus, RequestMethod, Type } from '@nestjs/common'; -import { HTTP_CODE_METADATA, METHOD_METADATA } from '@nestjs/common/constants'; -import { isEmpty } from '@nestjs/common/utils/shared.utils'; -import { get, mapValues, omit } from 'lodash'; -import { DECORATORS } from '../constants'; -import { ApiResponse, ApiResponseMetadata } from '../decorators'; -import { SchemaObject } from '../interfaces/open-api-spec.interface'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; +import { HTTP_CODE_METADATA, METHOD_METADATA } from '@nestjs/common/constants.js'; +import { isEmpty } from '@nestjs/common/utils/shared.utils.js'; +const { get, mapValues, omit } = lodash; +import { DECORATORS } from '../constants.js'; +import { ApiResponse, ApiResponseMetadata } from '../decorators/index.js'; +import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; import { FactoriesNeededByResponseFactory, ResponseObjectFactory -} from '../services/response-object-factory'; -import { GlobalResponsesStorage } from '../storages/global-responses.storage'; -import { mergeAndUniq } from '../utils/merge-and-uniq.util'; +} from '../services/response-object-factory.js'; +import { GlobalResponsesStorage } from '../storages/global-responses.storage.js'; +import { mergeAndUniq } from '../utils/merge-and-uniq.util.js'; const responseObjectFactory = new ResponseObjectFactory(); diff --git a/lib/explorers/api-security.explorer.ts b/lib/explorers/api-security.explorer.ts index 45673800d..2f412586c 100644 --- a/lib/explorers/api-security.explorer.ts +++ b/lib/explorers/api-security.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreGlobalApiSecurityMetadata = (metatype: Type) => { const security = Reflect.getMetadata(DECORATORS.API_SECURITY, metatype); diff --git a/lib/explorers/api-use-tags.explorer.ts b/lib/explorers/api-use-tags.explorer.ts index 52270ce94..72e478829 100644 --- a/lib/explorers/api-use-tags.explorer.ts +++ b/lib/explorers/api-use-tags.explorer.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { DECORATORS } from '../constants'; +import { DECORATORS } from '../constants.js'; export const exploreGlobalApiTagsMetadata = (autoTagControllers?: boolean) => (metatype: Type) => { diff --git a/lib/fixtures/document.base.ts b/lib/fixtures/document.base.ts index 5fd7ef853..d205bc420 100644 --- a/lib/fixtures/document.base.ts +++ b/lib/fixtures/document.base.ts @@ -1,4 +1,4 @@ -import { OpenAPIObject } from '../interfaces'; +import { OpenAPIObject } from '../interfaces/index.js'; export const buildDocumentBase = (): Omit => ({ openapi: '3.0.0', diff --git a/lib/index.ts b/lib/index.ts index 98e2c2653..a1bc6c5b9 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,7 +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'; +export * from './decorators/index.js'; +export * from './document-builder.js'; +export * from './interfaces/index.js'; +export * from './swagger-module.js'; +export * from './type-helpers/index.js'; +export * from './utils/index.js'; diff --git a/lib/interfaces/denormalized-doc.interface.ts b/lib/interfaces/denormalized-doc.interface.ts index d6f2907d3..34b5d2546 100644 --- a/lib/interfaces/denormalized-doc.interface.ts +++ b/lib/interfaces/denormalized-doc.interface.ts @@ -2,7 +2,7 @@ import { OpenAPIObject, OperationObject, ResponsesObject -} from './open-api-spec.interface'; +} from './open-api-spec.interface.js'; export interface DenormalizedDoc extends Partial { root?: { diff --git a/lib/interfaces/enum-schema-attributes.interface.ts b/lib/interfaces/enum-schema-attributes.interface.ts index b7132ed47..e88fa3b2a 100644 --- a/lib/interfaces/enum-schema-attributes.interface.ts +++ b/lib/interfaces/enum-schema-attributes.interface.ts @@ -1,4 +1,4 @@ -import { SchemaObject } from './open-api-spec.interface'; +import { SchemaObject } from './open-api-spec.interface.js'; export type EnumSchemaAttributes = Pick< SchemaObject, diff --git a/lib/interfaces/index.ts b/lib/interfaces/index.ts index 5371e9c9c..2c004d04d 100644 --- a/lib/interfaces/index.ts +++ b/lib/interfaces/index.ts @@ -1,3 +1,3 @@ -export { ApiTagOptions, OpenAPIObject } from './open-api-spec.interface'; -export * from './swagger-custom-options.interface'; -export * from './swagger-document-options.interface'; +export { ApiTagOptions, OpenAPIObject } from './open-api-spec.interface.js'; +export * from './swagger-custom-options.interface.js'; +export * from './swagger-document-options.interface.js'; diff --git a/lib/interfaces/module-route.interface.ts b/lib/interfaces/module-route.interface.ts index f2644a068..c4ed74343 100644 --- a/lib/interfaces/module-route.interface.ts +++ b/lib/interfaces/module-route.interface.ts @@ -1,4 +1,4 @@ -import { OpenAPIObject } from '.'; +import { OpenAPIObject } from './index.js'; export type ModuleRoute = Omit & Record<'root', any>; diff --git a/lib/interfaces/schema-object-metadata.interface.ts b/lib/interfaces/schema-object-metadata.interface.ts index 003976a1f..77e1d5471 100644 --- a/lib/interfaces/schema-object-metadata.interface.ts +++ b/lib/interfaces/schema-object-metadata.interface.ts @@ -1,6 +1,6 @@ import { Type } from '@nestjs/common'; -import { EnumSchemaAttributes } from './enum-schema-attributes.interface'; -import { ReferenceObject, SchemaObject } from './open-api-spec.interface'; +import { EnumSchemaAttributes } from './enum-schema-attributes.interface.js'; +import { ReferenceObject, SchemaObject } from './open-api-spec.interface.js'; export type EnumAllowedTypes = | any[] diff --git a/lib/interfaces/swagger-custom-options.interface.ts b/lib/interfaces/swagger-custom-options.interface.ts index 15006dbcc..28f6a1be6 100644 --- a/lib/interfaces/swagger-custom-options.interface.ts +++ b/lib/interfaces/swagger-custom-options.interface.ts @@ -1,5 +1,5 @@ -import { OpenAPIObject } from './open-api-spec.interface'; -import { SwaggerUiOptions } from './swagger-ui-options.interface'; +import { OpenAPIObject } from './open-api-spec.interface.js'; +import { SwaggerUiOptions } from './swagger-ui-options.interface.js'; /** * @publicApi diff --git a/lib/interfaces/swagger-ui-init-options.interface.ts b/lib/interfaces/swagger-ui-init-options.interface.ts index 695f03cc3..912925e61 100644 --- a/lib/interfaces/swagger-ui-init-options.interface.ts +++ b/lib/interfaces/swagger-ui-init-options.interface.ts @@ -1,5 +1,5 @@ -import { OpenAPIObject } from './open-api-spec.interface'; -import { SwaggerUiOptions } from './swagger-ui-options.interface'; +import { OpenAPIObject } from './open-api-spec.interface.js'; +import { SwaggerUiOptions } from './swagger-ui-options.interface.js'; /** * @publicApi diff --git a/lib/plugin/compiler-plugin.ts b/lib/plugin/compiler-plugin.ts index 3ed08e550..ca5bba5dd 100644 --- a/lib/plugin/compiler-plugin.ts +++ b/lib/plugin/compiler-plugin.ts @@ -1,9 +1,9 @@ import * as ts from 'typescript'; -import { mergePluginOptions } from './merge-options'; -import { pluginDebugLogger } from './plugin-debug-logger'; -import { isFilenameMatched } from './utils/is-filename-matched.util'; -import { ControllerClassVisitor } from './visitors/controller-class.visitor'; -import { ModelClassVisitor } from './visitors/model-class.visitor'; +import { mergePluginOptions } from './merge-options.js'; +import { pluginDebugLogger } from './plugin-debug-logger.js'; +import { isFilenameMatched } from './utils/is-filename-matched.util.js'; +import { ControllerClassVisitor } from './visitors/controller-class.visitor.js'; +import { ModelClassVisitor } from './visitors/model-class.visitor.js'; const modelClassVisitor = new ModelClassVisitor(); const controllerClassVisitor = new ControllerClassVisitor(); diff --git a/lib/plugin/index.ts b/lib/plugin/index.ts index f980bda5b..87a11b6bc 100644 --- a/lib/plugin/index.ts +++ b/lib/plugin/index.ts @@ -1,2 +1,2 @@ -export * from './compiler-plugin'; -export * from './visitors/readonly.visitor'; +export * from './compiler-plugin.js'; +export * from './visitors/readonly.visitor.js'; diff --git a/lib/plugin/merge-options.ts b/lib/plugin/merge-options.ts index d7c62c383..d1d513adc 100644 --- a/lib/plugin/merge-options.ts +++ b/lib/plugin/merge-options.ts @@ -1,5 +1,5 @@ -import { isString } from '@nestjs/common/utils/shared.utils'; -import { pluginDebugLogger } from './plugin-debug-logger'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; +import { pluginDebugLogger } from './plugin-debug-logger.js'; export interface PluginOptions { dtoFileNameSuffix?: string | string[]; diff --git a/lib/plugin/metadata-loader.ts b/lib/plugin/metadata-loader.ts index 786295729..f6bd40993 100644 --- a/lib/plugin/metadata-loader.ts +++ b/lib/plugin/metadata-loader.ts @@ -1,4 +1,4 @@ -import { METADATA_FACTORY_NAME } from './plugin-constants'; +import { METADATA_FACTORY_NAME } from './plugin-constants.js'; export class MetadataLoader { private static readonly refreshHooks = new Array<() => void>(); diff --git a/lib/plugin/utils/ast-utils.ts b/lib/plugin/utils/ast-utils.ts index cd86cc77b..ce8dc2458 100644 --- a/lib/plugin/utils/ast-utils.ts +++ b/lib/plugin/utils/ast-utils.ts @@ -23,7 +23,7 @@ import { TypeNode, UnionTypeNode } from 'typescript'; -import { isDynamicallyAdded } from './plugin-utils'; +import { isDynamicallyAdded } from './plugin-utils.js'; export function renderDocNode(docNode: DocNode) { let result: string = ''; diff --git a/lib/plugin/utils/plugin-utils.ts b/lib/plugin/utils/plugin-utils.ts index d085a9abc..730a73a2b 100644 --- a/lib/plugin/utils/plugin-utils.ts +++ b/lib/plugin/utils/plugin-utils.ts @@ -1,7 +1,8 @@ -import { head } from 'lodash'; +import lodash from 'lodash'; +const { head } = lodash; import { isAbsolute, posix } from 'path'; import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; +import { PluginOptions } from '../merge-options.js'; import { getDecoratorName, getText, @@ -16,7 +17,7 @@ import { isString, isStringLiteral, isStringMapping -} from './ast-utils'; +} from './ast-utils.js'; export function getDecoratorOrUndefinedByNames( names: string[], diff --git a/lib/plugin/utils/type-reference-to-identifier.util.ts b/lib/plugin/utils/type-reference-to-identifier.util.ts index 69886f34d..dd42cf429 100644 --- a/lib/plugin/utils/type-reference-to-identifier.util.ts +++ b/lib/plugin/utils/type-reference-to-identifier.util.ts @@ -1,12 +1,12 @@ import { posix } from 'path'; import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; -import { pluginDebugLogger } from '../plugin-debug-logger'; +import { PluginOptions } from '../merge-options.js'; +import { pluginDebugLogger } from '../plugin-debug-logger.js'; import { convertPath, getOutputExtension, replaceImportPath -} from './plugin-utils'; +} from './plugin-utils.js'; export function typeReferenceToIdentifier( typeReferenceDescriptor: { diff --git a/lib/plugin/visitors/abstract.visitor.ts b/lib/plugin/visitors/abstract.visitor.ts index b5ee3cec1..fd153d4a1 100644 --- a/lib/plugin/visitors/abstract.visitor.ts +++ b/lib/plugin/visitors/abstract.visitor.ts @@ -1,5 +1,5 @@ import * as ts from 'typescript'; -import { OPENAPI_NAMESPACE, OPENAPI_PACKAGE_NAME } from '../plugin-constants'; +import { OPENAPI_NAMESPACE, OPENAPI_PACKAGE_NAME } from '../plugin-constants.js'; const [major, minor] = ts.versionMajorMinor.split('.').map((x) => +x); diff --git a/lib/plugin/visitors/controller-class.visitor.ts b/lib/plugin/visitors/controller-class.visitor.ts index 7ebdb1bdc..fd0318fcc 100644 --- a/lib/plugin/visitors/controller-class.visitor.ts +++ b/lib/plugin/visitors/controller-class.visitor.ts @@ -1,10 +1,11 @@ +import lodash from 'lodash'; import { HttpStatus } from '@nestjs/common'; -import { compact, head } from 'lodash'; +const { compact, head } = lodash; import { posix } from 'path'; import * as ts from 'typescript'; -import { ApiOperation, ApiQuery, ApiResponse } from '../../decorators'; -import { PluginOptions } from '../merge-options'; -import { OPENAPI_NAMESPACE } from '../plugin-constants'; +import { ApiOperation, ApiQuery, ApiResponse } from '../../decorators/index.js'; +import { PluginOptions } from '../merge-options.js'; +import { OPENAPI_NAMESPACE } from '../plugin-constants.js'; import { createLiteralFromAnyValue, getDecoratorArguments, @@ -12,7 +13,7 @@ import { getMainCommentOfNode, getTsDocErrorsOfNode, getTsDocTagsOfNode -} from '../utils/ast-utils'; +} from '../utils/ast-utils.js'; import { convertPath, getDecoratorOrUndefinedByNames, @@ -20,9 +21,9 @@ import { getTypeReferenceAsString, hasPropertyKey, normalizePackagePath -} from '../utils/plugin-utils'; -import { typeReferenceToIdentifier } from '../utils/type-reference-to-identifier.util'; -import { AbstractFileVisitor } from './abstract.visitor'; +} from '../utils/plugin-utils.js'; +import { typeReferenceToIdentifier } from '../utils/type-reference-to-identifier.util.js'; +import { AbstractFileVisitor } from './abstract.visitor.js'; type ClassMetadata = Record; diff --git a/lib/plugin/visitors/model-class.visitor.ts b/lib/plugin/visitors/model-class.visitor.ts index 740658895..394bab73c 100644 --- a/lib/plugin/visitors/model-class.visitor.ts +++ b/lib/plugin/visitors/model-class.visitor.ts @@ -1,15 +1,16 @@ -import { compact, flatten, head } from 'lodash'; +import lodash from 'lodash'; +const { compact, flatten, head } = lodash; import { posix } from 'path'; import * as ts from 'typescript'; import { factory, PropertyAssignment } from 'typescript'; -import { ApiHideProperty, ApiProperty } from '../../decorators'; +import { ApiHideProperty, ApiProperty } from '../../decorators/index.js'; import { decoratorsProperties, decoratorsPropertiesMappingType -} from '../../services/decorators-properties'; -import { PluginOptions } from '../merge-options'; -import { METADATA_FACTORY_NAME } from '../plugin-constants'; -import { pluginDebugLogger } from '../plugin-debug-logger'; +} from '../../services/decorators-properties.js'; +import { PluginOptions } from '../merge-options.js'; +import { METADATA_FACTORY_NAME } from '../plugin-constants.js'; +import { pluginDebugLogger } from '../plugin-debug-logger.js'; import { createBooleanLiteral, createLiteralFromAnyValue, @@ -19,7 +20,7 @@ import { getText, getTsDocTagsOfNode, isEnum -} from '../utils/ast-utils'; +} from '../utils/ast-utils.js'; import { canReferenceNode, convertPath, @@ -32,9 +33,9 @@ import { isAutoGeneratedEnumUnion, isAutoGeneratedTypeUnion, normalizePackagePath -} from '../utils/plugin-utils'; -import { typeReferenceToIdentifier } from '../utils/type-reference-to-identifier.util'; -import { AbstractFileVisitor } from './abstract.visitor'; +} from '../utils/plugin-utils.js'; +import { typeReferenceToIdentifier } from '../utils/type-reference-to-identifier.util.js'; +import { AbstractFileVisitor } from './abstract.visitor.js'; type ClassMetadata = Record; @@ -786,7 +787,7 @@ export class ModelClassVisitor extends AbstractFileVisitor { !hasPropertyKey('enumName', existingProperties) ) { const fullTypeName = typeReferenceDescriptor.typeName; - // getText() may return a fully-qualified name like `import("./file").EnumName`; + // getText() may return a fully-qualified name like `import("./file.js").EnumName`; // extract only the simple identifier after the last '.' const enumTypeName = fullTypeName.includes('.') ? fullTypeName.slice(fullTypeName.lastIndexOf('.') + 1) diff --git a/lib/plugin/visitors/readonly.visitor.ts b/lib/plugin/visitors/readonly.visitor.ts index beed617a5..ebdec94c9 100644 --- a/lib/plugin/visitors/readonly.visitor.ts +++ b/lib/plugin/visitors/readonly.visitor.ts @@ -1,8 +1,8 @@ import * as ts from 'typescript'; -import { PluginOptions, mergePluginOptions } from '../merge-options'; -import { isFilenameMatched } from '../utils/is-filename-matched.util'; -import { ControllerClassVisitor } from './controller-class.visitor'; -import { ModelClassVisitor } from './model-class.visitor'; +import { PluginOptions, mergePluginOptions } from '../merge-options.js'; +import { isFilenameMatched } from '../utils/is-filename-matched.util.js'; +import { ControllerClassVisitor } from './controller-class.visitor.js'; +import { ModelClassVisitor } from './model-class.visitor.js'; /** * Collects source file names from all transitively referenced TypeScript projects. diff --git a/lib/services/mimetype-content-wrapper.ts b/lib/services/mimetype-content-wrapper.ts index 51e6bed3a..da850fa32 100644 --- a/lib/services/mimetype-content-wrapper.ts +++ b/lib/services/mimetype-content-wrapper.ts @@ -1,5 +1,5 @@ -import { ContentObject } from '../interfaces/open-api-spec.interface'; -import { removeUndefinedKeys } from '../utils/remove-undefined-keys'; +import { ContentObject } from '../interfaces/open-api-spec.interface.js'; +import { removeUndefinedKeys } from '../utils/remove-undefined-keys.js'; export class MimetypeContentWrapper { wrap( diff --git a/lib/services/model-properties-accessor.ts b/lib/services/model-properties-accessor.ts index 013e0f545..d415a6ea6 100644 --- a/lib/services/model-properties-accessor.ts +++ b/lib/services/model-properties-accessor.ts @@ -1,9 +1,9 @@ import { Type } from '@nestjs/common'; -import { isFunction, isString } from '@nestjs/common/utils/shared.utils'; +import { isFunction, isString } from '@nestjs/common/utils/shared.utils.js'; import 'reflect-metadata'; -import { DECORATORS } from '../constants'; -import { createApiPropertyDecorator } from '../decorators/api-property.decorator'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; +import { DECORATORS } from '../constants.js'; +import { createApiPropertyDecorator } from '../decorators/api-property.decorator.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; export class ModelPropertiesAccessor { getModelProperties(prototype: Type): string[] { diff --git a/lib/services/parameter-metadata-accessor.ts b/lib/services/parameter-metadata-accessor.ts index ac51912dc..d9b3cb736 100644 --- a/lib/services/parameter-metadata-accessor.ts +++ b/lib/services/parameter-metadata-accessor.ts @@ -1,16 +1,17 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; import { PARAMTYPES_METADATA, ROUTE_ARGS_METADATA -} from '@nestjs/common/constants'; -import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum'; -import { isEmpty, mapValues, omitBy } from 'lodash'; -import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface'; +} from '@nestjs/common/constants.js'; +import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum.js'; +const { isEmpty, mapValues, omitBy } = lodash; +import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterLocation, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { reverseObjectKeys } from '../utils/reverse-object-keys.util'; +} from '../interfaces/open-api-spec.interface.js'; +import { reverseObjectKeys } from '../utils/reverse-object-keys.util.js'; interface ParamMetadata { index: number; diff --git a/lib/services/parameters-metadata-mapper.ts b/lib/services/parameters-metadata-mapper.ts index 9ffdd9468..0173cedc8 100644 --- a/lib/services/parameters-metadata-mapper.ts +++ b/lib/services/parameters-metadata-mapper.ts @@ -1,13 +1,14 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; -import { flatMap, identity } from 'lodash'; -import { DECORATORS } from '../constants'; -import { isBodyParameter } from '../utils/is-body-parameter.util'; -import { ModelPropertiesAccessor } from './model-properties-accessor'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; +const { flatMap, identity } = lodash; +import { DECORATORS } from '../constants.js'; +import { isBodyParameter } from '../utils/is-body-parameter.util.js'; +import { ModelPropertiesAccessor } from './model-properties-accessor.js'; import { ParamWithTypeMetadata, ParamsWithType -} from './parameter-metadata-accessor'; +} from './parameter-metadata-accessor.js'; export class ParametersMetadataMapper { constructor( diff --git a/lib/services/response-object-factory.ts b/lib/services/response-object-factory.ts index f2342d23e..77fa701db 100644 --- a/lib/services/response-object-factory.ts +++ b/lib/services/response-object-factory.ts @@ -1,20 +1,21 @@ -import { isEmpty, isFunction, omit, pick } from 'lodash'; -import { DECORATORS } from '../constants'; +import lodash from 'lodash'; +const { isEmpty, isFunction, omit, pick } = lodash; +import { DECORATORS } from '../constants.js'; import { ApiPropertyOptions, ApiResponseMetadata, ApiResponseSchemaHost -} from '../decorators'; +} from '../decorators/index.js'; import { LinksObject, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { isBuiltInType } from '../utils/is-built-in-type.util'; -import { MimetypeContentWrapper } from './mimetype-content-wrapper'; -import { ModelPropertiesAccessor } from './model-properties-accessor'; -import { ResponseObjectMapper } from './response-object-mapper'; -import { SchemaObjectFactory } from './schema-object-factory'; -import { SwaggerTypesMapper } from './swagger-types-mapper'; +} from '../interfaces/open-api-spec.interface.js'; +import { isBuiltInType } from '../utils/is-built-in-type.util.js'; +import { MimetypeContentWrapper } from './mimetype-content-wrapper.js'; +import { ModelPropertiesAccessor } from './model-properties-accessor.js'; +import { ResponseObjectMapper } from './response-object-mapper.js'; +import { SchemaObjectFactory } from './schema-object-factory.js'; +import { SwaggerTypesMapper } from './swagger-types-mapper.js'; export type FactoriesNeededByResponseFactory = { linkName: ( diff --git a/lib/services/response-object-mapper.ts b/lib/services/response-object-mapper.ts index 0db0f4bc7..b35bfbed5 100644 --- a/lib/services/response-object-mapper.ts +++ b/lib/services/response-object-mapper.ts @@ -1,7 +1,8 @@ -import { omit, pick } from 'lodash'; -import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators'; -import { getSchemaPath } from '../utils'; -import { MimetypeContentWrapper } from './mimetype-content-wrapper'; +import lodash from 'lodash'; +const { omit, pick } = lodash; +import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators/index.js'; +import { getSchemaPath } from '../utils/index.js'; +import { MimetypeContentWrapper } from './mimetype-content-wrapper.js'; export class ResponseObjectMapper { private readonly mimetypeContentWrapper = new MimetypeContentWrapper(); diff --git a/lib/services/schema-object-factory.ts b/lib/services/schema-object-factory.ts index f41920156..8a4ce52b6 100644 --- a/lib/services/schema-object-factory.ts +++ b/lib/services/schema-object-factory.ts @@ -1,6 +1,7 @@ +import lodash from 'lodash'; import { Logger, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; -import { +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; +const { flatten, isEqual, isFunction, @@ -10,31 +11,31 @@ import { omit, omitBy, pick -} from 'lodash'; -import { DECORATORS } from '../constants'; -import { ApiSchemaOptions } from '../decorators'; -import { getTypeIsArrayTuple } from '../decorators/helpers'; -import { exploreGlobalApiExtraModelsMetadata } from '../explorers/api-extra-models.explorer'; +} = lodash; +import { DECORATORS } from '../constants.js'; +import { ApiSchemaOptions } from '../decorators/index.js'; +import { getTypeIsArrayTuple } from '../decorators/helpers.js'; +import { exploreGlobalApiExtraModelsMetadata } from '../explorers/api-extra-models.explorer.js'; import { BaseParameterObject, ParameterObject, ReferenceObject, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; -import { getSchemaPath } from '../utils'; +} from '../interfaces/open-api-spec.interface.js'; +import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface.js'; +import { getSchemaPath } from '../utils/index.js'; import { getEnumType, getEnumValues, isEnumArray, isEnumMetadata -} from '../utils/enum.utils'; -import { isBodyParameter } from '../utils/is-body-parameter.util'; -import { isBuiltInType } from '../utils/is-built-in-type.util'; -import { isDateCtor } from '../utils/is-date-ctor.util'; -import { ModelPropertiesAccessor } from './model-properties-accessor'; -import { ParamWithTypeMetadata } from './parameter-metadata-accessor'; -import { SwaggerTypesMapper } from './swagger-types-mapper'; +} from '../utils/enum.utils.js'; +import { isBodyParameter } from '../utils/is-body-parameter.util.js'; +import { isBuiltInType } from '../utils/is-built-in-type.util.js'; +import { isDateCtor } from '../utils/is-date-ctor.util.js'; +import { ModelPropertiesAccessor } from './model-properties-accessor.js'; +import { ParamWithTypeMetadata } from './parameter-metadata-accessor.js'; +import { SwaggerTypesMapper } from './swagger-types-mapper.js'; export class SchemaObjectFactory { constructor( diff --git a/lib/services/swagger-types-mapper.ts b/lib/services/swagger-types-mapper.ts index 5ddecbe6e..aee1d88c1 100644 --- a/lib/services/swagger-types-mapper.ts +++ b/lib/services/swagger-types-mapper.ts @@ -1,11 +1,12 @@ -import { isFunction, isString, isUndefined, omit, omitBy, pick } from 'lodash'; -import { ApiPropertyOptions } from '../decorators'; +import lodash from 'lodash'; +const { isFunction, isString, isUndefined, omit, omitBy, pick } = lodash; +import { ApiPropertyOptions } from '../decorators/index.js'; import { BaseParameterObject, ReferenceObject, SchemaObject -} from '../interfaces/open-api-spec.interface'; -import { ParamWithTypeMetadata } from './parameter-metadata-accessor'; +} from '../interfaces/open-api-spec.interface.js'; +import { ParamWithTypeMetadata } from './parameter-metadata-accessor.js'; type KeysToRemove = | keyof ApiPropertyOptions diff --git a/lib/storages/global-parameters.storage.ts b/lib/storages/global-parameters.storage.ts index 135e54490..463663d27 100644 --- a/lib/storages/global-parameters.storage.ts +++ b/lib/storages/global-parameters.storage.ts @@ -1,4 +1,4 @@ -import { ParameterObject } from '../interfaces/open-api-spec.interface'; +import { ParameterObject } from '../interfaces/open-api-spec.interface.js'; export class GlobalParametersStorageHost { private parameters = new Array(); diff --git a/lib/storages/global-responses.storage.ts b/lib/storages/global-responses.storage.ts index 878b2c815..0b7fbee31 100644 --- a/lib/storages/global-responses.storage.ts +++ b/lib/storages/global-responses.storage.ts @@ -1,4 +1,4 @@ -import { ApiResponseOptions } from '../decorators'; +import { ApiResponseOptions } from '../decorators/index.js'; type GlobalResponesMap = Record>; diff --git a/lib/swagger-explorer.ts b/lib/swagger-explorer.ts index 2409f6a19..799add570 100644 --- a/lib/swagger-explorer.ts +++ b/lib/swagger-explorer.ts @@ -1,25 +1,26 @@ +import lodash from 'lodash'; import { RequestMethod, VersioningType } from '@nestjs/common'; import { METHOD_METADATA, PATH_METADATA, VERSION_METADATA -} from '@nestjs/common/constants'; +} from '@nestjs/common/constants.js'; import { Controller, Type, VERSION_NEUTRAL, VersioningOptions, VersionValue -} from '@nestjs/common/interfaces'; +} from '@nestjs/common/interfaces/index.js'; import { addLeadingSlash, isUndefined -} from '@nestjs/common/utils/shared.utils'; +} from '@nestjs/common/utils/shared.utils.js'; import { ApplicationConfig, MetadataScanner } from '@nestjs/core'; -import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { LegacyRouteConverter } from '@nestjs/core/router/legacy-route-converter'; -import { RoutePathFactory } from '@nestjs/core/router/route-path-factory'; -import { +import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; +import { LegacyRouteConverter } from '@nestjs/core/router/legacy-route-converter.js'; +import { RoutePathFactory } from '@nestjs/core/router/route-path-factory.js'; +const { cloneDeep, flatten, get, @@ -30,43 +31,43 @@ import { omit, omitBy, pick -} from 'lodash'; +} = lodash; import { parse, Wildcard } from 'path-to-regexp'; -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 { DECORATORS } from './constants.js'; +import { exploreApiCallbacksMetadata } from './explorers/api-callbacks.explorer.js'; +import { exploreApiExcludeControllerMetadata } from './explorers/api-exclude-controller.explorer.js'; +import { exploreApiExcludeEndpointMetadata } from './explorers/api-exclude-endpoint.explorer.js'; +import { exploreApiIncludeEndpointMetadata } from './explorers/api-include-endpoint.explorer.js'; import { exploreApiExtraModelsMetadata, exploreGlobalApiExtraModelsMetadata -} from './explorers/api-extra-models.explorer'; -import { exploreGlobalApiHeaderMetadata } from './explorers/api-headers.explorer'; -import { exploreApiOperationMetadata } from './explorers/api-operation.explorer'; -import { exploreApiParametersMetadata } from './explorers/api-parameters.explorer'; +} from './explorers/api-extra-models.explorer.js'; +import { exploreGlobalApiHeaderMetadata } from './explorers/api-headers.explorer.js'; +import { exploreApiOperationMetadata } from './explorers/api-operation.explorer.js'; +import { exploreApiParametersMetadata } from './explorers/api-parameters.explorer.js'; import { exploreApiResponseMetadata, exploreGlobalApiResponseMetadata -} from './explorers/api-response.explorer'; +} from './explorers/api-response.explorer.js'; import { exploreApiSecurityMetadata, exploreGlobalApiSecurityMetadata -} from './explorers/api-security.explorer'; +} from './explorers/api-security.explorer.js'; import { exploreApiTagsMetadata, exploreGlobalApiTagsMetadata -} from './explorers/api-use-tags.explorer'; -import { OperationIdFactory } from './interfaces'; -import { DenormalizedDocResolvers } from './interfaces/denormalized-doc-resolvers.interface'; -import { DenormalizedDoc } from './interfaces/denormalized-doc.interface'; +} from './explorers/api-use-tags.explorer.js'; +import { OperationIdFactory } from './interfaces/index.js'; +import { DenormalizedDocResolvers } from './interfaces/denormalized-doc-resolvers.interface.js'; +import { DenormalizedDoc } from './interfaces/denormalized-doc.interface.js'; import { OpenAPIObject, SchemaObject -} from './interfaces/open-api-spec.interface'; -import { MimetypeContentWrapper } from './services/mimetype-content-wrapper'; -import { SchemaObjectFactory } from './services/schema-object-factory'; -import { isBodyParameter } from './utils/is-body-parameter.util'; -import { mergeAndUniq } from './utils/merge-and-uniq.util'; +} from './interfaces/open-api-spec.interface.js'; +import { MimetypeContentWrapper } from './services/mimetype-content-wrapper.js'; +import { SchemaObjectFactory } from './services/schema-object-factory.js'; +import { isBodyParameter } from './utils/is-body-parameter.util.js'; +import { mergeAndUniq } from './utils/merge-and-uniq.util.js'; export class SwaggerExplorer { private readonly mimetypeContentWrapper = new MimetypeContentWrapper(); diff --git a/lib/swagger-module.ts b/lib/swagger-module.ts index 7e0b1cbb4..3311389a5 100644 --- a/lib/swagger-module.ts +++ b/lib/swagger-module.ts @@ -1,5 +1,5 @@ import { INestApplication, NotFoundException } from '@nestjs/common'; -import { HttpServer } from '@nestjs/common/interfaces/http/http-server.interface'; +import { HttpServer } from '@nestjs/common/interfaces/http/http-server.interface.js'; import { NestExpressApplication } from '@nestjs/platform-express'; import { NestFastifyApplication } from '@nestjs/platform-fastify'; import * as jsyaml from 'js-yaml'; @@ -7,20 +7,20 @@ import { OpenAPIObject, SwaggerCustomOptions, SwaggerDocumentOptions -} from './interfaces'; -import { MetadataLoader } from './plugin/metadata-loader'; -import { SwaggerScanner } from './swagger-scanner'; +} from './interfaces/index.js'; +import { MetadataLoader } from './plugin/metadata-loader.js'; +import { SwaggerScanner } from './swagger-scanner.js'; import { buildSwaggerHTML, buildSwaggerInitJS, getSwaggerAssetsAbsoluteFSPath -} from './swagger-ui'; -import { assignTwoLevelsDeep } from './utils/assign-two-levels-deep'; -import { getGlobalPrefix } from './utils/get-global-prefix'; -import { normalizeRelPath } from './utils/normalize-rel-path'; -import { resolvePath } from './utils/resolve-path.util'; -import { validateGlobalPrefix } from './utils/validate-global-prefix.util'; -import { validatePath } from './utils/validate-path.util'; +} from './swagger-ui/index.js'; +import { assignTwoLevelsDeep } from './utils/assign-two-levels-deep.js'; +import { getGlobalPrefix } from './utils/get-global-prefix.js'; +import { normalizeRelPath } from './utils/normalize-rel-path.js'; +import { resolvePath } from './utils/resolve-path.util.js'; +import { validateGlobalPrefix } from './utils/validate-global-prefix.util.js'; +import { validatePath } from './utils/validate-path.util.js'; /** * @publicApi diff --git a/lib/swagger-scanner.ts b/lib/swagger-scanner.ts index cc1621b57..58aeb31e5 100644 --- a/lib/swagger-scanner.ts +++ b/lib/swagger-scanner.ts @@ -1,27 +1,28 @@ +import lodash from 'lodash'; import { INestApplication, InjectionToken, Type } from '@nestjs/common'; -import { MODULE_PATH } from '@nestjs/common/constants'; +import { MODULE_PATH } from '@nestjs/common/constants.js'; import { ApplicationConfig, NestContainer } from '@nestjs/core'; -import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { Module } from '@nestjs/core/injector/module'; -import { flatten, isEmpty } from 'lodash'; +import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; +import { Module } from '@nestjs/core/injector/module.js'; +const { flatten, isEmpty } = lodash; import { OpenAPIObject, OperationIdFactory, SwaggerDocumentOptions -} from './interfaces'; -import { ModuleRoute } from './interfaces/module-route.interface'; +} from './interfaces/index.js'; +import { ModuleRoute } from './interfaces/module-route.interface.js'; import { ReferenceObject, SchemaObject -} from './interfaces/open-api-spec.interface'; -import { ModelPropertiesAccessor } from './services/model-properties-accessor'; -import { SchemaObjectFactory } from './services/schema-object-factory'; -import { SwaggerTypesMapper } from './services/swagger-types-mapper'; -import { SwaggerExplorer } from './swagger-explorer'; -import { SwaggerTransformer } from './swagger-transformer'; -import { getGlobalPrefix } from './utils/get-global-prefix'; -import { stripDynamicDefaults } from './utils/strip-dynamic-defaults.util'; -import { stripLastSlash } from './utils/strip-last-slash.util'; +} from './interfaces/open-api-spec.interface.js'; +import { ModelPropertiesAccessor } from './services/model-properties-accessor.js'; +import { SchemaObjectFactory } from './services/schema-object-factory.js'; +import { SwaggerTypesMapper } from './services/swagger-types-mapper.js'; +import { SwaggerExplorer } from './swagger-explorer.js'; +import { SwaggerTransformer } from './swagger-transformer.js'; +import { getGlobalPrefix } from './utils/get-global-prefix.js'; +import { stripDynamicDefaults } from './utils/strip-dynamic-defaults.util.js'; +import { stripLastSlash } from './utils/strip-last-slash.util.js'; export class SwaggerScanner { private readonly transformer = new SwaggerTransformer(); diff --git a/lib/swagger-transformer.ts b/lib/swagger-transformer.ts index aff7580db..f7317ffaf 100644 --- a/lib/swagger-transformer.ts +++ b/lib/swagger-transformer.ts @@ -1,6 +1,7 @@ -import { filter, groupBy, keyBy, mapValues, omit } from 'lodash'; -import { OpenAPIObject } from './interfaces'; -import { sortObjectLexicographically } from './utils/sort-object-lexicographically'; +import lodash from 'lodash'; +const { filter, groupBy, keyBy, mapValues, omit } = lodash; +import { OpenAPIObject } from './interfaces/index.js'; +import { sortObjectLexicographically } from './utils/sort-object-lexicographically.js'; export class SwaggerTransformer { public normalizePaths( diff --git a/lib/swagger-ui/helpers.ts b/lib/swagger-ui/helpers.ts index e59fb57dd..c9ad9f0bc 100644 --- a/lib/swagger-ui/helpers.ts +++ b/lib/swagger-ui/helpers.ts @@ -1,5 +1,5 @@ import { randomUUID } from 'crypto'; -import { SwaggerUIInitOptions } from '../interfaces/swagger-ui-init-options.interface'; +import { SwaggerUIInitOptions } from '../interfaces/swagger-ui-init-options.interface.js'; /** * Transforms options JS object into a string that can be inserted as 'variable' into JS file diff --git a/lib/swagger-ui/index.ts b/lib/swagger-ui/index.ts index 863a2abec..572c7913c 100644 --- a/lib/swagger-ui/index.ts +++ b/lib/swagger-ui/index.ts @@ -1 +1 @@ -export * from './swagger-ui'; +export * from './swagger-ui.js'; diff --git a/lib/swagger-ui/swagger-ui.ts b/lib/swagger-ui/swagger-ui.ts index c101d1359..4c7df5c2a 100644 --- a/lib/swagger-ui/swagger-ui.ts +++ b/lib/swagger-ui/swagger-ui.ts @@ -1,6 +1,9 @@ -import { OpenAPIObject, SwaggerCustomOptions } from '../interfaces'; -import { favIconHtml, htmlTemplateString, jsTemplateString } from './constants'; -import { buildJSInitOptions } from './helpers'; +import { OpenAPIObject, SwaggerCustomOptions } from '../interfaces/index.js'; +import { favIconHtml, htmlTemplateString, jsTemplateString } from './constants.js'; +import { buildJSInitOptions } from './helpers.js'; +import { createRequire } from 'node:module'; + +const require = createRequire(import.meta.url); /** * Used to create swagger ui initialization js file ( diff --git a/lib/type-helpers/deep-partial-type.helper.ts b/lib/type-helpers/deep-partial-type.helper.ts index 50f965472..5d6eaa1d2 100644 --- a/lib/type-helpers/deep-partial-type.helper.ts +++ b/lib/type-helpers/deep-partial-type.helper.ts @@ -1,3 +1,4 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; import { applyIsOptionalDecorator, @@ -6,13 +7,13 @@ import { inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -import { mapValues } from 'lodash'; -import { DECORATORS } from '../constants'; -import { ApiProperty } from '../decorators'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; -import { ModelPropertiesAccessor } from '../services/model-properties-accessor'; -import { clonePluginMetadataFactory } from './mapped-types.utils'; +const { mapValues } = lodash; +import { DECORATORS } from '../constants.js'; +import { ApiProperty } from '../decorators/index.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; +import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; +import { clonePluginMetadataFactory } from './mapped-types.utils.js'; const modelPropertiesAccessor = new ModelPropertiesAccessor(); diff --git a/lib/type-helpers/index.ts b/lib/type-helpers/index.ts index 65a653e52..e5bbcb7b2 100644 --- a/lib/type-helpers/index.ts +++ b/lib/type-helpers/index.ts @@ -1,5 +1,5 @@ -export * from './deep-partial-type.helper'; -export * from './intersection-type.helper'; -export * from './omit-type.helper'; -export * from './partial-type.helper'; -export * from './pick-type.helper'; +export * from './deep-partial-type.helper.js'; +export * from './intersection-type.helper.js'; +export * from './omit-type.helper.js'; +export * from './partial-type.helper.js'; +export * from './pick-type.helper.js'; diff --git a/lib/type-helpers/intersection-type.helper.ts b/lib/type-helpers/intersection-type.helper.ts index abbc81771..f4b951b61 100644 --- a/lib/type-helpers/intersection-type.helper.ts +++ b/lib/type-helpers/intersection-type.helper.ts @@ -4,11 +4,11 @@ import { inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -import { DECORATORS } from '../constants'; -import { ApiProperty } from '../decorators'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { ModelPropertiesAccessor } from '../services/model-properties-accessor'; -import { clonePluginMetadataFactory } from './mapped-types.utils'; +import { DECORATORS } from '../constants.js'; +import { ApiProperty } from '../decorators/index.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; +import { clonePluginMetadataFactory } from './mapped-types.utils.js'; const modelPropertiesAccessor = new ModelPropertiesAccessor(); diff --git a/lib/type-helpers/mapped-types.utils.ts b/lib/type-helpers/mapped-types.utils.ts index 60589e2d4..eb9863109 100644 --- a/lib/type-helpers/mapped-types.utils.ts +++ b/lib/type-helpers/mapped-types.utils.ts @@ -1,6 +1,7 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; -import { identity } from 'lodash'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; +const { identity } = lodash; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; export function clonePluginMetadataFactory( target: Type, diff --git a/lib/type-helpers/omit-type.helper.ts b/lib/type-helpers/omit-type.helper.ts index da903e754..7a341580d 100644 --- a/lib/type-helpers/omit-type.helper.ts +++ b/lib/type-helpers/omit-type.helper.ts @@ -1,16 +1,17 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -import { omit } from 'lodash'; -import { DECORATORS } from '../constants'; -import { ApiProperty } from '../decorators'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; -import { ModelPropertiesAccessor } from '../services/model-properties-accessor'; -import { clonePluginMetadataFactory } from './mapped-types.utils'; +const { omit } = lodash; +import { DECORATORS } from '../constants.js'; +import { ApiProperty } from '../decorators/index.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; +import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; +import { clonePluginMetadataFactory } from './mapped-types.utils.js'; const modelPropertiesAccessor = new ModelPropertiesAccessor(); diff --git a/lib/type-helpers/partial-type.helper.ts b/lib/type-helpers/partial-type.helper.ts index 24fdc786e..4025ebd53 100644 --- a/lib/type-helpers/partial-type.helper.ts +++ b/lib/type-helpers/partial-type.helper.ts @@ -1,3 +1,4 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; import { applyIsOptionalDecorator, @@ -6,13 +7,13 @@ import { inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -import { mapValues } from 'lodash'; -import { DECORATORS } from '../constants'; -import { ApiProperty } from '../decorators'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; -import { ModelPropertiesAccessor } from '../services/model-properties-accessor'; -import { clonePluginMetadataFactory } from './mapped-types.utils'; +const { mapValues } = lodash; +import { DECORATORS } from '../constants.js'; +import { ApiProperty } from '../decorators/index.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; +import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; +import { clonePluginMetadataFactory } from './mapped-types.utils.js'; const modelPropertiesAccessor = new ModelPropertiesAccessor(); diff --git a/lib/type-helpers/pick-type.helper.ts b/lib/type-helpers/pick-type.helper.ts index fdaa81176..831f7b3ed 100644 --- a/lib/type-helpers/pick-type.helper.ts +++ b/lib/type-helpers/pick-type.helper.ts @@ -1,16 +1,17 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -import { pick } from 'lodash'; -import { DECORATORS } from '../constants'; -import { ApiProperty } from '../decorators'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; -import { ModelPropertiesAccessor } from '../services/model-properties-accessor'; -import { clonePluginMetadataFactory } from './mapped-types.utils'; +const { pick } = lodash; +import { DECORATORS } from '../constants.js'; +import { ApiProperty } from '../decorators/index.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; +import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; +import { clonePluginMetadataFactory } from './mapped-types.utils.js'; const modelPropertiesAccessor = new ModelPropertiesAccessor(); diff --git a/lib/utils/enum.utils.ts b/lib/utils/enum.utils.ts index 88f3ee594..d75fa38ed 100644 --- a/lib/utils/enum.utils.ts +++ b/lib/utils/enum.utils.ts @@ -1,7 +1,8 @@ -import { isString } from 'lodash'; -import { SchemaObject } from '../interfaces/open-api-spec.interface'; -import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface'; -import { SwaggerEnumType } from '../types/swagger-enum.type'; +import lodash from 'lodash'; +const { isString } = lodash; +import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; +import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface.js'; +import { SwaggerEnumType } from '../types/swagger-enum.type.js'; export function getEnumValues( enumType: SwaggerEnumType | (() => SwaggerEnumType) diff --git a/lib/utils/generate-schema.util.ts b/lib/utils/generate-schema.util.ts index 1515e8070..060e60b97 100644 --- a/lib/utils/generate-schema.util.ts +++ b/lib/utils/generate-schema.util.ts @@ -1,8 +1,8 @@ import { Type } from '@nestjs/common'; -import { SchemaObject } from '../interfaces/open-api-spec.interface'; -import { ModelPropertiesAccessor } from '../services/model-properties-accessor'; -import { SchemaObjectFactory } from '../services/schema-object-factory'; -import { SwaggerTypesMapper } from '../services/swagger-types-mapper'; +import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; +import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; +import { SchemaObjectFactory } from '../services/schema-object-factory.js'; +import { SwaggerTypesMapper } from '../services/swagger-types-mapper.js'; /** * Generates an OpenAPI SchemaObject for the given class based on its diff --git a/lib/utils/get-schema-path.util.ts b/lib/utils/get-schema-path.util.ts index d418aacca..dbc3e31bb 100644 --- a/lib/utils/get-schema-path.util.ts +++ b/lib/utils/get-schema-path.util.ts @@ -1,6 +1,6 @@ -import { isString } from '@nestjs/common/utils/shared.utils'; -import { DECORATORS } from '../constants'; -import { ApiSchemaOptions } from '../decorators/api-schema.decorator'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; +import { DECORATORS } from '../constants.js'; +import { ApiSchemaOptions } from '../decorators/api-schema.decorator.js'; export function getSchemaPath(model: string | Function): string { const modelName = isString(model) ? model : getSchemaNameByClass(model); diff --git a/lib/utils/index.ts b/lib/utils/index.ts index 1cd35aa00..e896fe04e 100644 --- a/lib/utils/index.ts +++ b/lib/utils/index.ts @@ -1,2 +1,2 @@ -export * from './get-schema-path.util'; -export * from './generate-schema.util'; +export * from './get-schema-path.util.js'; +export * from './generate-schema.util.js'; diff --git a/lib/utils/is-body-parameter.util.ts b/lib/utils/is-body-parameter.util.ts index 87b3037ff..904ab1308 100644 --- a/lib/utils/is-body-parameter.util.ts +++ b/lib/utils/is-body-parameter.util.ts @@ -1,4 +1,4 @@ -import { ParamWithTypeMetadata } from '../services/parameter-metadata-accessor'; +import { ParamWithTypeMetadata } from '../services/parameter-metadata-accessor.js'; export function isBodyParameter(param: ParamWithTypeMetadata): boolean { return param.in === 'body'; diff --git a/lib/utils/is-built-in-type.util.ts b/lib/utils/is-built-in-type.util.ts index 183cc039d..91e155438 100644 --- a/lib/utils/is-built-in-type.util.ts +++ b/lib/utils/is-built-in-type.util.ts @@ -1,6 +1,7 @@ +import lodash from 'lodash'; import { Type } from '@nestjs/common'; -import { isFunction } from 'lodash'; -import { BUILT_IN_TYPES } from '../services/constants'; +const { isFunction } = lodash; +import { BUILT_IN_TYPES } from '../services/constants.js'; export function isBuiltInType( type: Type | Function | string diff --git a/lib/utils/merge-and-uniq.util.ts b/lib/utils/merge-and-uniq.util.ts index 0d50af6c8..1749a7a0d 100644 --- a/lib/utils/merge-and-uniq.util.ts +++ b/lib/utils/merge-and-uniq.util.ts @@ -1,4 +1,5 @@ -import { merge, uniq } from 'lodash'; +import lodash from 'lodash'; +const { merge, uniq } = lodash; export function mergeAndUniq(a: unknown = [], b: unknown = []): T { return uniq(merge(a, b) as any) as unknown as T; diff --git a/lib/utils/strip-dynamic-defaults.util.ts b/lib/utils/strip-dynamic-defaults.util.ts index f1f0cce67..d755cb4f2 100644 --- a/lib/utils/strip-dynamic-defaults.util.ts +++ b/lib/utils/strip-dynamic-defaults.util.ts @@ -1,4 +1,4 @@ -import { SchemaObject } from '../interfaces/open-api-spec.interface'; +import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; /** * Returns true when a default value is "dynamic" — i.e. it is a runtime diff --git a/package.json b/package.json index 9f0486a51..4962346ca 100644 --- a/package.json +++ b/package.json @@ -5,19 +5,18 @@ "author": "Kamil Mysliwiec", "license": "MIT", "repository": "https://github.com/nestjs/swagger", + "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", "exports": { ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js", - "require": "./dist/index.js", "default": "./dist/index.js" }, "./plugin": { "types": "./dist/plugin/index.d.ts", "import": "./dist/plugin/index.js", - "require": "./dist/plugin/index.js", "default": "./dist/plugin/index.js" }, "./package.json": "./package.json" diff --git a/plugin.js b/plugin.js deleted file mode 100644 index 04e83fd0f..000000000 --- a/plugin.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} -exports.__esModule = true; -const plugin = require('./dist/plugin'); -__export(plugin); - -/** Compatibility with ts-patch/ttypescript */ -exports.default = (program, options) => plugin.before(options, program); diff --git a/plugin.ts b/plugin.ts deleted file mode 100644 index 8870ad6b9..000000000 --- a/plugin.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './lib/plugin'; diff --git a/test/plugin/readonly-visitor-project-refs.spec.ts b/test/plugin/readonly-visitor-project-refs.spec.ts index bf463c64b..c20db805f 100644 --- a/test/plugin/readonly-visitor-project-refs.spec.ts +++ b/test/plugin/readonly-visitor-project-refs.spec.ts @@ -111,12 +111,9 @@ describe('ReadonlyVisitor with TypeScript project references', () => { 'tsconfig.json' ); - // Should not throw for a tsconfig without references - expect(() => ReadonlyVisitor.createTsProgram(plainTsconfig)).not.toThrow(); - const program = ReadonlyVisitor.createTsProgram(plainTsconfig); expect(program).toBeDefined(); - }); + }, 30000); it('should throw when tsconfig path does not exist', () => { const nonExistentPath = join( diff --git a/test/plugin/readonly-visitor.spec.ts b/test/plugin/readonly-visitor.spec.ts index f922ba388..47ad2bb88 100644 --- a/test/plugin/readonly-visitor.spec.ts +++ b/test/plugin/readonly-visitor.spec.ts @@ -70,7 +70,7 @@ describe('Readonly visitor', () => { // ); expect(result).toEqual(expectedOutput); - }); + }, 15000); it('should generate a serialized metadata esm', () => { const tsconfigPath = join( @@ -102,5 +102,5 @@ describe('Readonly visitor', () => { .replace(/\r/g, '\n'); expect(result).toEqual(expectedOutput); - }); + }, 15000); }); diff --git a/tsconfig.build.json b/tsconfig.build.json index 87f6c04bc..faf7b37cf 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,7 +1,10 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "module": "commonjs", + "module": "ES2022", + "moduleResolution": "Bundler", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, "declaration": true, "noImplicitAny": false, "removeComments": true, diff --git a/vitest.config.mts b/vitest.config.mts index 09ba35950..d54e4e838 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -5,6 +5,7 @@ export default defineConfig({ globals: true, root: './test', environment: 'node', + testTimeout: 30000, include: ['**/*.spec.ts'], }, }); From 27b855c629dd79c84e37fca34ce84d66073c7e92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 14 May 2026 13:45:45 +0200 Subject: [PATCH 2/6] chore: merge master --- lib/decorators/index.ts | 12 +++++------ lib/explorers/api-response.explorer.ts | 9 +++++--- lib/swagger-explorer.ts | 30 +++++++++++++------------- lib/swagger-scanner.ts | 4 ++-- lib/swagger-transformer.ts | 11 +++++----- package-lock.json | 28 +++++++++++++++++++----- 6 files changed, 58 insertions(+), 36 deletions(-) diff --git a/lib/decorators/index.ts b/lib/decorators/index.ts index 2bea2a49a..3e7126b7a 100644 --- a/lib/decorators/index.ts +++ b/lib/decorators/index.ts @@ -1,15 +1,17 @@ export * from './api-basic.decorator.js'; export * from './api-bearer.decorator.js'; export * from './api-body.decorator.js'; +export * from './api-callbacks.decorator.js'; export * from './api-consumes.decorator.js'; export * from './api-cookie.decorator.js'; export * from './api-default-getter.decorator.js'; -export * from './api-exclude-endpoint.decorator.js'; -export * from './api-include-endpoint.decorator.js'; export * from './api-exclude-controller.decorator.js'; +export * from './api-exclude-endpoint.decorator.js'; +export * from './api-extension.decorator.js'; export * from './api-extra-models.decorator.js'; export * from './api-header.decorator.js'; export * from './api-hide-property.decorator.js'; +export * from './api-include-endpoint.decorator.js'; export * from './api-link.decorator.js'; export * from './api-oauth2.decorator.js'; export * from './api-operation.decorator.js'; @@ -22,10 +24,8 @@ export { ApiResponseProperty } from './api-property.decorator.js'; export * from './api-query.decorator.js'; -export * from './api-webhook.decorator.js'; export * from './api-response.decorator.js'; +export * from './api-schema.decorator.js'; export * from './api-security.decorator.js'; export * from './api-use-tags.decorator.js'; -export * from './api-callbacks.decorator.js'; -export * from './api-extension.decorator.js'; -export * from './api-schema.decorator.js'; +export * from './api-webhook.decorator.js'; diff --git a/lib/explorers/api-response.explorer.ts b/lib/explorers/api-response.explorer.ts index 330aba82a..215e1851e 100644 --- a/lib/explorers/api-response.explorer.ts +++ b/lib/explorers/api-response.explorer.ts @@ -1,8 +1,10 @@ -import lodash from 'lodash'; import { HttpStatus, RequestMethod, Type } from '@nestjs/common'; -import { HTTP_CODE_METADATA, METHOD_METADATA } from '@nestjs/common/constants.js'; +import { + HTTP_CODE_METADATA, + METHOD_METADATA +} from '@nestjs/common/constants.js'; import { isEmpty } from '@nestjs/common/utils/shared.utils.js'; -const { get, mapValues, omit } = lodash; +import lodash from 'lodash'; import { DECORATORS } from '../constants.js'; import { ApiResponse, ApiResponseMetadata } from '../decorators/index.js'; import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; @@ -13,6 +15,7 @@ import { } from '../services/response-object-factory.js'; import { GlobalResponsesStorage } from '../storages/global-responses.storage.js'; import { mergeAndUniq } from '../utils/merge-and-uniq.util.js'; +const { get, mapValues, omit } = lodash; const responseObjectFactory = new ResponseObjectFactory(); diff --git a/lib/swagger-explorer.ts b/lib/swagger-explorer.ts index 939d2b118..77ee57697 100644 --- a/lib/swagger-explorer.ts +++ b/lib/swagger-explorer.ts @@ -1,4 +1,3 @@ -import lodash from 'lodash'; import { RequestMethod, VersioningType } from '@nestjs/common'; import { METHOD_METADATA, @@ -20,29 +19,18 @@ import { ApplicationConfig, MetadataScanner } from '@nestjs/core'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; import { LegacyRouteConverter } from '@nestjs/core/router/legacy-route-converter.js'; import { RoutePathFactory } from '@nestjs/core/router/route-path-factory.js'; -const { - cloneDeep, - flatten, - get, - head, - isArray, - isEmpty, - mapValues, - omit, - omitBy, - pick -} = lodash; +import lodash from 'lodash'; import { parse, Wildcard } from 'path-to-regexp'; import { DECORATORS } from './constants.js'; import { exploreApiCallbacksMetadata } from './explorers/api-callbacks.explorer.js'; import { exploreApiExcludeControllerMetadata } from './explorers/api-exclude-controller.explorer.js'; import { exploreApiExcludeEndpointMetadata } from './explorers/api-exclude-endpoint.explorer.js'; -import { exploreApiIncludeEndpointMetadata } from './explorers/api-include-endpoint.explorer.js'; import { exploreApiExtraModelsMetadata, exploreGlobalApiExtraModelsMetadata } from './explorers/api-extra-models.explorer.js'; import { exploreGlobalApiHeaderMetadata } from './explorers/api-headers.explorer.js'; +import { exploreApiIncludeEndpointMetadata } from './explorers/api-include-endpoint.explorer.js'; import { exploreApiOperationMetadata } from './explorers/api-operation.explorer.js'; import { exploreApiParametersMetadata } from './explorers/api-parameters.explorer.js'; import { @@ -57,9 +45,9 @@ import { exploreApiTagsMetadata, exploreGlobalApiTagsMetadata } from './explorers/api-use-tags.explorer.js'; -import { OperationIdFactory } from './interfaces/index.js'; import { DenormalizedDocResolvers } from './interfaces/denormalized-doc-resolvers.interface.js'; import { DenormalizedDoc } from './interfaces/denormalized-doc.interface.js'; +import { OperationIdFactory } from './interfaces/index.js'; import { OpenAPIObject, SchemaObject @@ -68,6 +56,18 @@ import { MimetypeContentWrapper } from './services/mimetype-content-wrapper.js'; import { SchemaObjectFactory } from './services/schema-object-factory.js'; import { isBodyParameter } from './utils/is-body-parameter.util.js'; import { mergeAndUniq } from './utils/merge-and-uniq.util.js'; +const { + cloneDeep, + flatten, + get, + head, + isArray, + isEmpty, + mapValues, + omit, + omitBy, + pick +} = lodash; export class SwaggerExplorer { private readonly mimetypeContentWrapper = new MimetypeContentWrapper(); diff --git a/lib/swagger-scanner.ts b/lib/swagger-scanner.ts index 927407ded..2257ea108 100644 --- a/lib/swagger-scanner.ts +++ b/lib/swagger-scanner.ts @@ -1,10 +1,9 @@ -import lodash from 'lodash'; import { INestApplication, InjectionToken, Type } from '@nestjs/common'; import { MODULE_PATH } from '@nestjs/common/constants.js'; import { ApplicationConfig, NestContainer } from '@nestjs/core'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; import { Module } from '@nestjs/core/injector/module.js'; -const { flatten, isEmpty } = lodash; +import lodash from 'lodash'; import { OpenAPIObject, OperationIdFactory, @@ -24,6 +23,7 @@ import { applyExampleMaxDepth } from './utils/apply-example-max-depth.util.js'; import { getGlobalPrefix } from './utils/get-global-prefix.js'; import { stripDynamicDefaults } from './utils/strip-dynamic-defaults.util.js'; import { stripLastSlash } from './utils/strip-last-slash.util.js'; +const { flatten, isEmpty } = lodash; export class SwaggerScanner { private readonly transformer = new SwaggerTransformer(); diff --git a/lib/swagger-transformer.ts b/lib/swagger-transformer.ts index 30418dc7d..1bb6dfdb0 100644 --- a/lib/swagger-transformer.ts +++ b/lib/swagger-transformer.ts @@ -1,17 +1,18 @@ import lodash from 'lodash'; -const { filter, groupBy, keyBy, mapValues, omit } = lodash; +import { DenormalizedDoc } from './interfaces/denormalized-doc.interface.js'; import { OpenAPIObject } from './interfaces/index.js'; import { sortObjectLexicographically } from './utils/sort-object-lexicographically.js'; -import { DenormalizedDoc } from './interfaces/denormalized-doc.interface.js'; +const { filter, groupBy, keyBy, mapValues, omit } = lodash; type DenormalizedDocWithRoot = DenormalizedDoc & { root: NonNullable; }; export class SwaggerTransformer { - public normalizePaths( - denormalizedDoc: DenormalizedDoc[] - ): Pick & { + public normalizePaths(denormalizedDoc: DenormalizedDoc[]): Pick< + OpenAPIObject, + 'paths' | 'webhooks' + > & { webhookPaths?: OpenAPIObject['paths']; } { const roots = denormalizedDoc.filter( diff --git a/package-lock.json b/package-lock.json index a175cedfc..c82ddaf6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -145,6 +145,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "dev": true, "license": "MIT", "funding": { "type": "github", @@ -1190,6 +1191,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1234,6 +1236,7 @@ "version": "11.1.21", "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.21.tgz", "integrity": "sha512-YV1HYDGsm2rnR0vrLKidtrG6jYX5yqiIjeur1j8++dKGqhhsJ6cjMs0RfQRSTUH7IjgDemA59/znQ8nRrE0D9g==", + "dev": true, "license": "MIT", "dependencies": { "file-type": "21.3.4", @@ -2280,6 +2283,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.4.3", @@ -2297,6 +2301,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true, "license": "MIT" }, "node_modules/@tootallnate/once": { @@ -2387,7 +2392,7 @@ "version": "13.15.10", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz", "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@vitest/expect": { @@ -3217,14 +3222,14 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/class-validator": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.15.1.tgz", "integrity": "sha512-LqoS80HBBSCVhz/3KloUly0ovokxpdOLR++Al3J3+dHXWt9sTKlKd4eYtoxhxyUjoe5+UcIM+5k9MIxyBWnRTw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/validator": "^13.15.3", @@ -3789,6 +3794,7 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4589,6 +4595,7 @@ "version": "21.3.4", "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "dev": true, "license": "MIT", "dependencies": { "@tokenizer/inflate": "^0.4.1", @@ -5158,6 +5165,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -5485,6 +5493,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "dev": true, "license": "ISC", "engines": { "node": ">=6" @@ -5587,7 +5596,7 @@ "version": "1.12.41", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.41.tgz", "integrity": "sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/light-my-request": { @@ -5988,6 +5997,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.3.tgz", "integrity": "sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==", + "dev": true, "funding": [ { "type": "github", @@ -6552,6 +6562,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/multer": { @@ -7714,6 +7725,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, "license": "Apache-2.0" }, "node_modules/release-it": { @@ -8026,6 +8038,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -8554,6 +8567,7 @@ "version": "10.3.5", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "dev": true, "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0" @@ -8827,6 +8841,7 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "dev": true, "license": "MIT", "dependencies": { "@borewit/text-codec": "^0.2.1", @@ -8845,6 +8860,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, "license": "0BSD" }, "node_modules/type-fest": { @@ -8900,6 +8916,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dev": true, "license": "MIT", "dependencies": { "@lukeed/csprng": "^1.0.0" @@ -8912,6 +8929,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -8995,7 +9013,7 @@ "version": "13.15.35", "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" From 358059f0b3823dde127e038a720834dea02f9b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 14 May 2026 14:02:39 +0200 Subject: [PATCH 3/6] chore(deps): migrate to es-toolkit --- lib/decorators/api-body.decorator.ts | 3 +-- lib/decorators/api-extension.decorator.ts | 3 +-- lib/decorators/api-header.decorator.ts | 3 +-- lib/decorators/api-operation.decorator.ts | 3 +-- lib/decorators/api-param.decorator.ts | 3 +-- lib/decorators/api-query.decorator.ts | 3 +-- lib/decorators/api-response.decorator.ts | 3 +-- lib/decorators/api-security.decorator.ts | 3 +-- lib/decorators/helpers.ts | 3 +-- lib/document-builder.ts | 10 +++++-- lib/explorers/api-parameters.explorer.ts | 11 ++++++-- lib/explorers/api-response.explorer.ts | 3 +-- lib/plugin/utils/plugin-utils.ts | 3 +-- .../visitors/controller-class.visitor.ts | 3 +-- lib/plugin/visitors/model-class.visitor.ts | 3 +-- lib/services/parameter-metadata-accessor.ts | 3 +-- lib/services/parameters-metadata-mapper.ts | 3 +-- lib/services/response-object-factory.ts | 3 +-- lib/services/response-object-mapper.ts | 3 +-- lib/services/schema-object-factory.ts | 9 +++---- lib/services/swagger-types-mapper.ts | 10 +++++-- lib/swagger-explorer.ts | 26 +++++++++---------- lib/swagger-scanner.ts | 3 +-- lib/swagger-transformer.ts | 3 +-- lib/type-helpers/deep-partial-type.helper.ts | 3 +-- lib/type-helpers/mapped-types.utils.ts | 3 +-- lib/type-helpers/omit-type.helper.ts | 3 +-- lib/type-helpers/partial-type.helper.ts | 3 +-- lib/type-helpers/pick-type.helper.ts | 3 +-- lib/utils/enum.utils.ts | 3 +-- lib/utils/is-built-in-type.util.ts | 3 +-- lib/utils/merge-and-uniq.util.ts | 3 +-- package-lock.json | 17 +----------- package.json | 3 +-- test/explorer/swagger-explorer.spec.ts | 2 +- 35 files changed, 71 insertions(+), 98 deletions(-) diff --git a/lib/decorators/api-body.decorator.ts b/lib/decorators/api-body.decorator.ts index 882436242..57fcda87b 100644 --- a/lib/decorators/api-body.decorator.ts +++ b/lib/decorators/api-body.decorator.ts @@ -1,6 +1,5 @@ -import lodash from 'lodash'; +import { omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; -const { omit } = lodash; import { EncodingObject, ExamplesObject, diff --git a/lib/decorators/api-extension.decorator.ts b/lib/decorators/api-extension.decorator.ts index 7c41ea41f..171592555 100644 --- a/lib/decorators/api-extension.decorator.ts +++ b/lib/decorators/api-extension.decorator.ts @@ -1,7 +1,6 @@ -import lodash from 'lodash'; +import { clone, merge } from 'es-toolkit/compat'; import { METHOD_METADATA } from '@nestjs/common/constants.js'; import { DECORATORS } from '../constants.js'; -const { clone, merge } = lodash; import { isConstructor } from '@nestjs/common/utils/shared.utils.js'; function applyExtension(target: any, key: string, value: any): void { diff --git a/lib/decorators/api-header.decorator.ts b/lib/decorators/api-header.decorator.ts index 76d0d4550..d9cd2d3ee 100644 --- a/lib/decorators/api-header.decorator.ts +++ b/lib/decorators/api-header.decorator.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { isNil, isUndefined, negate, pickBy } = lodash; +import { isNil, isUndefined, negate, pickBy } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ParameterLocation, diff --git a/lib/decorators/api-operation.decorator.ts b/lib/decorators/api-operation.decorator.ts index a6da90669..e90df9ba4 100644 --- a/lib/decorators/api-operation.decorator.ts +++ b/lib/decorators/api-operation.decorator.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { isUndefined, negate, pickBy } = lodash; +import { isUndefined, negate, pickBy } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { OperationObject } from '../interfaces/open-api-spec.interface.js'; import { createMethodDecorator } from './helpers.js'; diff --git a/lib/decorators/api-param.decorator.ts b/lib/decorators/api-param.decorator.ts index fa00ee870..2109e9f85 100644 --- a/lib/decorators/api-param.decorator.ts +++ b/lib/decorators/api-param.decorator.ts @@ -1,6 +1,5 @@ -import lodash from 'lodash'; +import { clone, isNil, omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; -const { isNil, omit, clone } = lodash; import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterObject, diff --git a/lib/decorators/api-query.decorator.ts b/lib/decorators/api-query.decorator.ts index 2bdbf7bc3..36fde7a15 100644 --- a/lib/decorators/api-query.decorator.ts +++ b/lib/decorators/api-query.decorator.ts @@ -1,6 +1,5 @@ -import lodash from 'lodash'; +import { omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; -const { omit } = lodash; import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterObject, diff --git a/lib/decorators/api-response.decorator.ts b/lib/decorators/api-response.decorator.ts index 296a3b94d..af2fb4b5a 100644 --- a/lib/decorators/api-response.decorator.ts +++ b/lib/decorators/api-response.decorator.ts @@ -1,6 +1,5 @@ -import lodash from 'lodash'; +import { omit } from 'es-toolkit/compat'; import { HttpStatus, Type } from '@nestjs/common'; -const { omit } = lodash; import { DECORATORS } from '../constants.js'; import { ReferenceObject, diff --git a/lib/decorators/api-security.decorator.ts b/lib/decorators/api-security.decorator.ts index 2ffbec587..041cab2ed 100644 --- a/lib/decorators/api-security.decorator.ts +++ b/lib/decorators/api-security.decorator.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { isString } = lodash; +import { isString } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { SecurityRequirementObject } from '../interfaces/open-api-spec.interface.js'; import { extendMetadata } from '../utils/extend-metadata.util.js'; diff --git a/lib/decorators/helpers.ts b/lib/decorators/helpers.ts index a2c593b1a..561904fcb 100644 --- a/lib/decorators/helpers.ts +++ b/lib/decorators/helpers.ts @@ -1,7 +1,6 @@ -import lodash from 'lodash'; +import { isArray, isUndefined, negate, pickBy } from 'es-toolkit/compat'; import { METHOD_METADATA } from '@nestjs/common/constants.js'; import { isConstructor } from '@nestjs/common/utils/shared.utils.js'; -const { isArray, isUndefined, negate, pickBy } = lodash; import { DECORATORS } from '../constants.js'; import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; diff --git a/lib/document-builder.ts b/lib/document-builder.ts index 4ae6a9c5c..3b6ed6901 100644 --- a/lib/document-builder.ts +++ b/lib/document-builder.ts @@ -1,6 +1,12 @@ -import lodash from 'lodash'; +import { + clone, + isString, + isUndefined, + negate, + omit, + pickBy +} from 'es-toolkit/compat'; import { Logger } from '@nestjs/common'; -const { clone, isString, isUndefined, negate, omit, pickBy } = lodash; import { ApiResponseOptions } from './decorators/api-response.decorator.js'; import { buildDocumentBase } from './fixtures/document.base.js'; import { OpenAPIObject } from './interfaces/index.js'; diff --git a/lib/explorers/api-parameters.explorer.ts b/lib/explorers/api-parameters.explorer.ts index df1303579..56f228564 100644 --- a/lib/explorers/api-parameters.explorer.ts +++ b/lib/explorers/api-parameters.explorer.ts @@ -1,6 +1,13 @@ -import lodash from 'lodash'; +import { + assign, + find, + isNil, + map, + omitBy, + some, + unionWith +} from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; -const { assign, find, isNil, map, omitBy, some, unionWith } = lodash; import { DECORATORS } from '../constants.js'; import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; diff --git a/lib/explorers/api-response.explorer.ts b/lib/explorers/api-response.explorer.ts index 215e1851e..144dc2511 100644 --- a/lib/explorers/api-response.explorer.ts +++ b/lib/explorers/api-response.explorer.ts @@ -3,8 +3,8 @@ import { HTTP_CODE_METADATA, METHOD_METADATA } from '@nestjs/common/constants.js'; +import { mapValues, omit } from 'es-toolkit/compat'; import { isEmpty } from '@nestjs/common/utils/shared.utils.js'; -import lodash from 'lodash'; import { DECORATORS } from '../constants.js'; import { ApiResponse, ApiResponseMetadata } from '../decorators/index.js'; import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; @@ -15,7 +15,6 @@ import { } from '../services/response-object-factory.js'; import { GlobalResponsesStorage } from '../storages/global-responses.storage.js'; import { mergeAndUniq } from '../utils/merge-and-uniq.util.js'; -const { get, mapValues, omit } = lodash; const responseObjectFactory = new ResponseObjectFactory(); diff --git a/lib/plugin/utils/plugin-utils.ts b/lib/plugin/utils/plugin-utils.ts index b91a2cec5..92e28d0b9 100644 --- a/lib/plugin/utils/plugin-utils.ts +++ b/lib/plugin/utils/plugin-utils.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { head } = lodash; +import { head } from 'es-toolkit/compat'; import { isAbsolute, posix } from 'path'; import * as ts from 'typescript'; import { PluginOptions } from '../merge-options.js'; diff --git a/lib/plugin/visitors/controller-class.visitor.ts b/lib/plugin/visitors/controller-class.visitor.ts index fd0318fcc..24f9319c1 100644 --- a/lib/plugin/visitors/controller-class.visitor.ts +++ b/lib/plugin/visitors/controller-class.visitor.ts @@ -1,6 +1,5 @@ -import lodash from 'lodash'; +import { compact, head } from 'es-toolkit/compat'; import { HttpStatus } from '@nestjs/common'; -const { compact, head } = lodash; import { posix } from 'path'; import * as ts from 'typescript'; import { ApiOperation, ApiQuery, ApiResponse } from '../../decorators/index.js'; diff --git a/lib/plugin/visitors/model-class.visitor.ts b/lib/plugin/visitors/model-class.visitor.ts index 394bab73c..2ff1acc7e 100644 --- a/lib/plugin/visitors/model-class.visitor.ts +++ b/lib/plugin/visitors/model-class.visitor.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { compact, flatten, head } = lodash; +import { compact, flatten, head } from 'es-toolkit/compat'; import { posix } from 'path'; import * as ts from 'typescript'; import { factory, PropertyAssignment } from 'typescript'; diff --git a/lib/services/parameter-metadata-accessor.ts b/lib/services/parameter-metadata-accessor.ts index d9b3cb736..d2e5e0ad1 100644 --- a/lib/services/parameter-metadata-accessor.ts +++ b/lib/services/parameter-metadata-accessor.ts @@ -1,11 +1,10 @@ -import lodash from 'lodash'; +import { isEmpty, mapValues, omitBy } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { PARAMTYPES_METADATA, ROUTE_ARGS_METADATA } from '@nestjs/common/constants.js'; import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum.js'; -const { isEmpty, mapValues, omitBy } = lodash; import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterLocation, diff --git a/lib/services/parameters-metadata-mapper.ts b/lib/services/parameters-metadata-mapper.ts index 0173cedc8..0b07b1c56 100644 --- a/lib/services/parameters-metadata-mapper.ts +++ b/lib/services/parameters-metadata-mapper.ts @@ -1,7 +1,6 @@ -import lodash from 'lodash'; +import { flatMap, identity } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { isFunction } from '@nestjs/common/utils/shared.utils.js'; -const { flatMap, identity } = lodash; import { DECORATORS } from '../constants.js'; import { isBodyParameter } from '../utils/is-body-parameter.util.js'; import { ModelPropertiesAccessor } from './model-properties-accessor.js'; diff --git a/lib/services/response-object-factory.ts b/lib/services/response-object-factory.ts index 028394c3f..a2f1172b0 100644 --- a/lib/services/response-object-factory.ts +++ b/lib/services/response-object-factory.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { isEmpty, isFunction, omit, pick } = lodash; +import { isEmpty, isFunction, omit, pick } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ApiPropertyOptions, diff --git a/lib/services/response-object-mapper.ts b/lib/services/response-object-mapper.ts index b35bfbed5..5f0c9fabf 100644 --- a/lib/services/response-object-mapper.ts +++ b/lib/services/response-object-mapper.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { omit, pick } = lodash; +import { omit, pick } from 'es-toolkit/compat'; import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators/index.js'; import { getSchemaPath } from '../utils/index.js'; import { MimetypeContentWrapper } from './mimetype-content-wrapper.js'; diff --git a/lib/services/schema-object-factory.ts b/lib/services/schema-object-factory.ts index 41a6fa24a..b75a3bf76 100644 --- a/lib/services/schema-object-factory.ts +++ b/lib/services/schema-object-factory.ts @@ -1,7 +1,4 @@ -import lodash from 'lodash'; -import { Logger, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; -const { +import { flatten, isEqual, isFunction, @@ -11,7 +8,9 @@ const { omit, omitBy, pick -} = lodash; +} from 'es-toolkit/compat'; +import { Logger, Type } from '@nestjs/common'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { DECORATORS } from '../constants.js'; import { ApiSchemaOptions } from '../decorators/index.js'; import { getTypeIsArrayTuple } from '../decorators/helpers.js'; diff --git a/lib/services/swagger-types-mapper.ts b/lib/services/swagger-types-mapper.ts index aee1d88c1..d2eb1520c 100644 --- a/lib/services/swagger-types-mapper.ts +++ b/lib/services/swagger-types-mapper.ts @@ -1,5 +1,11 @@ -import lodash from 'lodash'; -const { isFunction, isString, isUndefined, omit, omitBy, pick } = lodash; +import { + isFunction, + isString, + isUndefined, + omit, + omitBy, + pick +} from 'es-toolkit/compat'; import { ApiPropertyOptions } from '../decorators/index.js'; import { BaseParameterObject, diff --git a/lib/swagger-explorer.ts b/lib/swagger-explorer.ts index 77ee57697..ae6af750c 100644 --- a/lib/swagger-explorer.ts +++ b/lib/swagger-explorer.ts @@ -19,7 +19,18 @@ import { ApplicationConfig, MetadataScanner } from '@nestjs/core'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; import { LegacyRouteConverter } from '@nestjs/core/router/legacy-route-converter.js'; import { RoutePathFactory } from '@nestjs/core/router/route-path-factory.js'; -import lodash from 'lodash'; +import { + cloneDeep, + flatten, + get, + head, + isArray, + isEmpty, + mapValues, + omit, + omitBy, + pick +} from 'es-toolkit/compat'; import { parse, Wildcard } from 'path-to-regexp'; import { DECORATORS } from './constants.js'; import { exploreApiCallbacksMetadata } from './explorers/api-callbacks.explorer.js'; @@ -56,19 +67,6 @@ import { MimetypeContentWrapper } from './services/mimetype-content-wrapper.js'; import { SchemaObjectFactory } from './services/schema-object-factory.js'; import { isBodyParameter } from './utils/is-body-parameter.util.js'; import { mergeAndUniq } from './utils/merge-and-uniq.util.js'; -const { - cloneDeep, - flatten, - get, - head, - isArray, - isEmpty, - mapValues, - omit, - omitBy, - pick -} = lodash; - export class SwaggerExplorer { private readonly mimetypeContentWrapper = new MimetypeContentWrapper(); private readonly metadataScanner = new MetadataScanner(); diff --git a/lib/swagger-scanner.ts b/lib/swagger-scanner.ts index 2257ea108..79f318fcf 100644 --- a/lib/swagger-scanner.ts +++ b/lib/swagger-scanner.ts @@ -3,7 +3,7 @@ import { MODULE_PATH } from '@nestjs/common/constants.js'; import { ApplicationConfig, NestContainer } from '@nestjs/core'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; import { Module } from '@nestjs/core/injector/module.js'; -import lodash from 'lodash'; +import { flatten, isEmpty } from 'es-toolkit/compat'; import { OpenAPIObject, OperationIdFactory, @@ -23,7 +23,6 @@ import { applyExampleMaxDepth } from './utils/apply-example-max-depth.util.js'; import { getGlobalPrefix } from './utils/get-global-prefix.js'; import { stripDynamicDefaults } from './utils/strip-dynamic-defaults.util.js'; import { stripLastSlash } from './utils/strip-last-slash.util.js'; -const { flatten, isEmpty } = lodash; export class SwaggerScanner { private readonly transformer = new SwaggerTransformer(); diff --git a/lib/swagger-transformer.ts b/lib/swagger-transformer.ts index 1bb6dfdb0..ef199d41e 100644 --- a/lib/swagger-transformer.ts +++ b/lib/swagger-transformer.ts @@ -1,8 +1,7 @@ -import lodash from 'lodash'; +import { groupBy, keyBy, mapValues, omit } from 'es-toolkit/compat'; import { DenormalizedDoc } from './interfaces/denormalized-doc.interface.js'; import { OpenAPIObject } from './interfaces/index.js'; import { sortObjectLexicographically } from './utils/sort-object-lexicographically.js'; -const { filter, groupBy, keyBy, mapValues, omit } = lodash; type DenormalizedDocWithRoot = DenormalizedDoc & { root: NonNullable; diff --git a/lib/type-helpers/deep-partial-type.helper.ts b/lib/type-helpers/deep-partial-type.helper.ts index 5d6eaa1d2..f78663e9c 100644 --- a/lib/type-helpers/deep-partial-type.helper.ts +++ b/lib/type-helpers/deep-partial-type.helper.ts @@ -1,4 +1,4 @@ -import lodash from 'lodash'; +import { mapValues } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { applyIsOptionalDecorator, @@ -7,7 +7,6 @@ import { inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -const { mapValues } = lodash; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/type-helpers/mapped-types.utils.ts b/lib/type-helpers/mapped-types.utils.ts index eb9863109..b7c6aaf6e 100644 --- a/lib/type-helpers/mapped-types.utils.ts +++ b/lib/type-helpers/mapped-types.utils.ts @@ -1,6 +1,5 @@ -import lodash from 'lodash'; +import { identity } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; -const { identity } = lodash; import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; export function clonePluginMetadataFactory( diff --git a/lib/type-helpers/omit-type.helper.ts b/lib/type-helpers/omit-type.helper.ts index 7a341580d..c6ccd2ce6 100644 --- a/lib/type-helpers/omit-type.helper.ts +++ b/lib/type-helpers/omit-type.helper.ts @@ -1,11 +1,10 @@ -import lodash from 'lodash'; +import { omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -const { omit } = lodash; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/type-helpers/partial-type.helper.ts b/lib/type-helpers/partial-type.helper.ts index 4025ebd53..aa409709b 100644 --- a/lib/type-helpers/partial-type.helper.ts +++ b/lib/type-helpers/partial-type.helper.ts @@ -1,4 +1,4 @@ -import lodash from 'lodash'; +import { mapValues } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { applyIsOptionalDecorator, @@ -7,7 +7,6 @@ import { inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -const { mapValues } = lodash; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/type-helpers/pick-type.helper.ts b/lib/type-helpers/pick-type.helper.ts index 831f7b3ed..339a455f6 100644 --- a/lib/type-helpers/pick-type.helper.ts +++ b/lib/type-helpers/pick-type.helper.ts @@ -1,11 +1,10 @@ -import lodash from 'lodash'; +import { pick } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; -const { pick } = lodash; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/utils/enum.utils.ts b/lib/utils/enum.utils.ts index d75fa38ed..d9d336ca2 100644 --- a/lib/utils/enum.utils.ts +++ b/lib/utils/enum.utils.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { isString } = lodash; +import { isString } from 'es-toolkit/compat'; import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface.js'; import { SwaggerEnumType } from '../types/swagger-enum.type.js'; diff --git a/lib/utils/is-built-in-type.util.ts b/lib/utils/is-built-in-type.util.ts index 91e155438..6d2771b24 100644 --- a/lib/utils/is-built-in-type.util.ts +++ b/lib/utils/is-built-in-type.util.ts @@ -1,6 +1,5 @@ -import lodash from 'lodash'; +import { isFunction } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; -const { isFunction } = lodash; import { BUILT_IN_TYPES } from '../services/constants.js'; export function isBuiltInType( diff --git a/lib/utils/merge-and-uniq.util.ts b/lib/utils/merge-and-uniq.util.ts index 1749a7a0d..61263a3e1 100644 --- a/lib/utils/merge-and-uniq.util.ts +++ b/lib/utils/merge-and-uniq.util.ts @@ -1,5 +1,4 @@ -import lodash from 'lodash'; -const { merge, uniq } = lodash; +import { merge, uniq } from 'es-toolkit/compat'; export function mergeAndUniq(a: unknown = [], b: unknown = []): T { return uniq(merge(a, b) as any) as unknown as T; diff --git a/package-lock.json b/package-lock.json index c82ddaf6f..f293ea98e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,8 @@ "dependencies": { "@microsoft/tsdoc": "0.16.0", "@nestjs/mapped-types": "2.1.1", + "es-toolkit": "^1.46.1", "js-yaml": "4.1.1", - "lodash": "4.18.1", "path-to-regexp": "8.4.2", "swagger-ui-dist": "5.32.6" }, @@ -26,7 +26,6 @@ "@nestjs/platform-express": "11.1.21", "@nestjs/platform-fastify": "11.1.21", "@types/js-yaml": "4.0.9", - "@types/lodash": "4.17.24", "@types/node": "24.12.4", "class-transformer": "0.5.1", "class-validator": "0.15.1", @@ -2364,13 +2363,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { "version": "24.12.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", @@ -4180,7 +4172,6 @@ "version": "1.46.1", "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.1.tgz", "integrity": "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==", - "dev": true, "license": "MIT", "workspaces": [ "docs", @@ -6013,12 +6004,6 @@ "node": ">=13.2.0" } }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "license": "MIT" - }, "node_modules/lodash.capitalize": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", diff --git a/package.json b/package.json index 611acf146..d7020a290 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,8 @@ "dependencies": { "@microsoft/tsdoc": "0.16.0", "@nestjs/mapped-types": "2.1.1", + "es-toolkit": "1.46.1", "js-yaml": "4.1.1", - "lodash": "4.18.1", "path-to-regexp": "8.4.2", "swagger-ui-dist": "5.32.6" }, @@ -58,7 +58,6 @@ "@nestjs/platform-express": "11.1.21", "@nestjs/platform-fastify": "11.1.21", "@types/js-yaml": "4.0.9", - "@types/lodash": "4.17.24", "@types/node": "24.12.4", "class-transformer": "0.5.1", "class-validator": "0.15.1", diff --git a/test/explorer/swagger-explorer.spec.ts b/test/explorer/swagger-explorer.spec.ts index c5ebe4204..00f1f3be6 100644 --- a/test/explorer/swagger-explorer.spec.ts +++ b/test/explorer/swagger-explorer.spec.ts @@ -12,7 +12,7 @@ import { import { VERSION_NEUTRAL, VersionValue } from '@nestjs/common/interfaces'; import { ApplicationConfig } from '@nestjs/core'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { upperFirst } from 'lodash'; +import { upperFirst } from 'es-toolkit/compat'; import { ApiBadRequestResponse, ApiBody, From f7e69069433a390a3d5233214de3621edb939c27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 14 May 2026 14:03:30 +0200 Subject: [PATCH 4/6] chore: install next nestjs packages --- lib/decorators/api-body.decorator.ts | 2 +- lib/decorators/api-extension.decorator.ts | 4 +-- lib/decorators/api-param.decorator.ts | 2 +- lib/decorators/api-query.decorator.ts | 2 +- lib/decorators/api-response.decorator.ts | 4 +-- lib/decorators/helpers.ts | 2 +- lib/document-builder.ts | 2 +- lib/explorers/api-parameters.explorer.ts | 2 +- lib/explorers/api-response.explorer.ts | 2 +- .../visitors/controller-class.visitor.ts | 6 +++-- lib/services/parameter-metadata-accessor.ts | 2 +- lib/services/parameters-metadata-mapper.ts | 2 +- lib/services/response-object-mapper.ts | 5 +++- lib/services/schema-object-factory.ts | 26 ++++++++++++------- lib/type-helpers/deep-partial-type.helper.ts | 2 +- lib/type-helpers/mapped-types.utils.ts | 2 +- lib/type-helpers/omit-type.helper.ts | 2 +- lib/type-helpers/partial-type.helper.ts | 2 +- lib/type-helpers/pick-type.helper.ts | 2 +- lib/utils/enum.utils.ts | 3 +-- lib/utils/is-built-in-type.util.ts | 2 +- package-lock.json | 10 +++---- package.json | 8 +++--- 23 files changed, 54 insertions(+), 42 deletions(-) diff --git a/lib/decorators/api-body.decorator.ts b/lib/decorators/api-body.decorator.ts index 57fcda87b..69f52a6f5 100644 --- a/lib/decorators/api-body.decorator.ts +++ b/lib/decorators/api-body.decorator.ts @@ -1,5 +1,5 @@ -import { omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; +import { omit } from 'es-toolkit/compat'; import { EncodingObject, ExamplesObject, diff --git a/lib/decorators/api-extension.decorator.ts b/lib/decorators/api-extension.decorator.ts index 171592555..d85719e39 100644 --- a/lib/decorators/api-extension.decorator.ts +++ b/lib/decorators/api-extension.decorator.ts @@ -1,7 +1,7 @@ -import { clone, merge } from 'es-toolkit/compat'; import { METHOD_METADATA } from '@nestjs/common/constants.js'; -import { DECORATORS } from '../constants.js'; import { isConstructor } from '@nestjs/common/utils/shared.utils.js'; +import { clone } from 'es-toolkit/compat'; +import { DECORATORS } from '../constants.js'; function applyExtension(target: any, key: string, value: any): void { const extensions = diff --git a/lib/decorators/api-param.decorator.ts b/lib/decorators/api-param.decorator.ts index 2109e9f85..0096c1afc 100644 --- a/lib/decorators/api-param.decorator.ts +++ b/lib/decorators/api-param.decorator.ts @@ -1,5 +1,5 @@ -import { clone, isNil, omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; +import { clone, isNil, omit } from 'es-toolkit/compat'; import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterObject, diff --git a/lib/decorators/api-query.decorator.ts b/lib/decorators/api-query.decorator.ts index 36fde7a15..149f5d483 100644 --- a/lib/decorators/api-query.decorator.ts +++ b/lib/decorators/api-query.decorator.ts @@ -1,5 +1,5 @@ -import { omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; +import { omit } from 'es-toolkit/compat'; import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterObject, diff --git a/lib/decorators/api-response.decorator.ts b/lib/decorators/api-response.decorator.ts index af2fb4b5a..4855cf523 100644 --- a/lib/decorators/api-response.decorator.ts +++ b/lib/decorators/api-response.decorator.ts @@ -1,5 +1,5 @@ -import { omit } from 'es-toolkit/compat'; import { HttpStatus, Type } from '@nestjs/common'; +import { omit } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ReferenceObject, @@ -127,7 +127,7 @@ function mergeResponseEntry( const mergedExamples = existing.examples && incoming.examples ? { ...existing.examples, ...incoming.examples } - : incoming.examples ?? existing.examples; + : (incoming.examples ?? existing.examples); return { ...existing, diff --git a/lib/decorators/helpers.ts b/lib/decorators/helpers.ts index 561904fcb..df8e7bf1a 100644 --- a/lib/decorators/helpers.ts +++ b/lib/decorators/helpers.ts @@ -1,6 +1,6 @@ -import { isArray, isUndefined, negate, pickBy } from 'es-toolkit/compat'; import { METHOD_METADATA } from '@nestjs/common/constants.js'; import { isConstructor } from '@nestjs/common/utils/shared.utils.js'; +import { isArray, isUndefined, negate, pickBy } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; diff --git a/lib/document-builder.ts b/lib/document-builder.ts index 3b6ed6901..d7a6cd259 100644 --- a/lib/document-builder.ts +++ b/lib/document-builder.ts @@ -1,3 +1,4 @@ +import { Logger } from '@nestjs/common'; import { clone, isString, @@ -6,7 +7,6 @@ import { omit, pickBy } from 'es-toolkit/compat'; -import { Logger } from '@nestjs/common'; import { ApiResponseOptions } from './decorators/api-response.decorator.js'; import { buildDocumentBase } from './fixtures/document.base.js'; import { OpenAPIObject } from './interfaces/index.js'; diff --git a/lib/explorers/api-parameters.explorer.ts b/lib/explorers/api-parameters.explorer.ts index 56f228564..d94d6b483 100644 --- a/lib/explorers/api-parameters.explorer.ts +++ b/lib/explorers/api-parameters.explorer.ts @@ -1,3 +1,4 @@ +import { Type } from '@nestjs/common'; import { assign, find, @@ -7,7 +8,6 @@ import { some, unionWith } from 'es-toolkit/compat'; -import { Type } from '@nestjs/common'; import { DECORATORS } from '../constants.js'; import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; import { ModelPropertiesAccessor } from '../services/model-properties-accessor.js'; diff --git a/lib/explorers/api-response.explorer.ts b/lib/explorers/api-response.explorer.ts index 144dc2511..a46891195 100644 --- a/lib/explorers/api-response.explorer.ts +++ b/lib/explorers/api-response.explorer.ts @@ -3,8 +3,8 @@ import { HTTP_CODE_METADATA, METHOD_METADATA } from '@nestjs/common/constants.js'; -import { mapValues, omit } from 'es-toolkit/compat'; import { isEmpty } from '@nestjs/common/utils/shared.utils.js'; +import { mapValues, omit } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ApiResponse, ApiResponseMetadata } from '../decorators/index.js'; import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; diff --git a/lib/plugin/visitors/controller-class.visitor.ts b/lib/plugin/visitors/controller-class.visitor.ts index 24f9319c1..0f63b4c5c 100644 --- a/lib/plugin/visitors/controller-class.visitor.ts +++ b/lib/plugin/visitors/controller-class.visitor.ts @@ -1,5 +1,5 @@ -import { compact, head } from 'es-toolkit/compat'; import { HttpStatus } from '@nestjs/common'; +import { compact, head } from 'es-toolkit/compat'; import { posix } from 'path'; import * as ts from 'typescript'; import { ApiOperation, ApiQuery, ApiResponse } from '../../decorators/index.js'; @@ -280,7 +280,9 @@ export class ControllerClassVisitor extends AbstractFileVisitor { ]; const tags = getTsDocTagsOfNode(node, typeChecker); - const existingPropsArray = factory.createNodeArray(apiOperationExistingProps); + const existingPropsArray = factory.createNodeArray( + apiOperationExistingProps + ); const hasRemarksKey = hasPropertyKey('description', existingPropsArray); // Helper so we never unshift a key the user has already written in the // explicit @ApiOperation({...}) call; otherwise the generated object diff --git a/lib/services/parameter-metadata-accessor.ts b/lib/services/parameter-metadata-accessor.ts index d2e5e0ad1..7f50e8dc9 100644 --- a/lib/services/parameter-metadata-accessor.ts +++ b/lib/services/parameter-metadata-accessor.ts @@ -1,10 +1,10 @@ -import { isEmpty, mapValues, omitBy } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { PARAMTYPES_METADATA, ROUTE_ARGS_METADATA } from '@nestjs/common/constants.js'; import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum.js'; +import { isEmpty, mapValues, omitBy } from 'es-toolkit/compat'; import { EnumSchemaAttributes } from '../interfaces/enum-schema-attributes.interface.js'; import { ParameterLocation, diff --git a/lib/services/parameters-metadata-mapper.ts b/lib/services/parameters-metadata-mapper.ts index 0b07b1c56..3c9bbf4fd 100644 --- a/lib/services/parameters-metadata-mapper.ts +++ b/lib/services/parameters-metadata-mapper.ts @@ -1,6 +1,6 @@ -import { flatMap, identity } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { isFunction } from '@nestjs/common/utils/shared.utils.js'; +import { flatMap, identity } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { isBodyParameter } from '../utils/is-body-parameter.util.js'; import { ModelPropertiesAccessor } from './model-properties-accessor.js'; diff --git a/lib/services/response-object-mapper.ts b/lib/services/response-object-mapper.ts index 5f0c9fabf..81d53a6ab 100644 --- a/lib/services/response-object-mapper.ts +++ b/lib/services/response-object-mapper.ts @@ -1,5 +1,8 @@ import { omit, pick } from 'es-toolkit/compat'; -import { ApiResponseMetadata, ApiResponseSchemaHost } from '../decorators/index.js'; +import { + ApiResponseMetadata, + ApiResponseSchemaHost +} from '../decorators/index.js'; import { getSchemaPath } from '../utils/index.js'; import { MimetypeContentWrapper } from './mimetype-content-wrapper.js'; diff --git a/lib/services/schema-object-factory.ts b/lib/services/schema-object-factory.ts index b75a3bf76..08baaa864 100644 --- a/lib/services/schema-object-factory.ts +++ b/lib/services/schema-object-factory.ts @@ -1,3 +1,5 @@ +import { Logger, Type } from '@nestjs/common'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { flatten, isEqual, @@ -9,11 +11,9 @@ import { omitBy, pick } from 'es-toolkit/compat'; -import { Logger, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { DECORATORS } from '../constants.js'; -import { ApiSchemaOptions } from '../decorators/index.js'; import { getTypeIsArrayTuple } from '../decorators/helpers.js'; +import { ApiSchemaOptions } from '../decorators/index.js'; import { exploreGlobalApiExtraModelsMetadata } from '../explorers/api-extra-models.explorer.js'; import { BaseParameterObject, @@ -22,13 +22,13 @@ import { SchemaObject } from '../interfaces/open-api-spec.interface.js'; import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface.js'; -import { getSchemaPath } from '../utils/index.js'; import { getEnumType, getEnumValues, isEnumArray, isEnumMetadata } from '../utils/enum.utils.js'; +import { getSchemaPath } from '../utils/index.js'; import { isBodyParameter } from '../utils/is-body-parameter.util.js'; import { isBuiltInType } from '../utils/is-built-in-type.util.js'; import { isDateCtor } from '../utils/is-date-ctor.util.js'; @@ -155,7 +155,11 @@ export class SchemaObjectFactory { // keys next to $ref). Merge with any pre-existing allOf entries from // either the schema itself or the parameter rather than overwriting. if ('$ref' in existingSchema) { - const { $ref, allOf: existingAllOf, ...restSchema } = existingSchema; + const { + $ref, + allOf: existingAllOf, + ...restSchema + } = existingSchema; const { allOf: paramAllOf, ...restParamOptions } = schemaOptionsFromParam; const mergedAllOf = [ @@ -502,10 +506,14 @@ export class SchemaObjectFactory { ? { type: 'array', items: { $ref } } : { $ref }; - return omit( - { ...param, schema: newSchema }, - ['isArray', 'items', 'enumName', 'enum', 'x-enumNames', 'enumSchema'] - ); + return omit({ ...param, schema: newSchema }, [ + 'isArray', + 'items', + 'enumName', + 'enum', + 'x-enumNames', + 'enumSchema' + ]); } createEnumSchemaType( diff --git a/lib/type-helpers/deep-partial-type.helper.ts b/lib/type-helpers/deep-partial-type.helper.ts index f78663e9c..5bed78ebf 100644 --- a/lib/type-helpers/deep-partial-type.helper.ts +++ b/lib/type-helpers/deep-partial-type.helper.ts @@ -1,4 +1,3 @@ -import { mapValues } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { applyIsOptionalDecorator, @@ -7,6 +6,7 @@ import { inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; +import { mapValues } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/type-helpers/mapped-types.utils.ts b/lib/type-helpers/mapped-types.utils.ts index b7c6aaf6e..bd9599098 100644 --- a/lib/type-helpers/mapped-types.utils.ts +++ b/lib/type-helpers/mapped-types.utils.ts @@ -1,5 +1,5 @@ -import { identity } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; +import { identity } from 'es-toolkit/compat'; import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; export function clonePluginMetadataFactory( diff --git a/lib/type-helpers/omit-type.helper.ts b/lib/type-helpers/omit-type.helper.ts index c6ccd2ce6..505532a66 100644 --- a/lib/type-helpers/omit-type.helper.ts +++ b/lib/type-helpers/omit-type.helper.ts @@ -1,10 +1,10 @@ -import { omit } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; +import { omit } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/type-helpers/partial-type.helper.ts b/lib/type-helpers/partial-type.helper.ts index aa409709b..cc59c3bc6 100644 --- a/lib/type-helpers/partial-type.helper.ts +++ b/lib/type-helpers/partial-type.helper.ts @@ -1,4 +1,3 @@ -import { mapValues } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { applyIsOptionalDecorator, @@ -7,6 +6,7 @@ import { inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; +import { mapValues } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/type-helpers/pick-type.helper.ts b/lib/type-helpers/pick-type.helper.ts index 339a455f6..fc7886237 100644 --- a/lib/type-helpers/pick-type.helper.ts +++ b/lib/type-helpers/pick-type.helper.ts @@ -1,10 +1,10 @@ -import { pick } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata } from '@nestjs/mapped-types'; +import { pick } from 'es-toolkit/compat'; import { DECORATORS } from '../constants.js'; import { ApiProperty } from '../decorators/index.js'; import { MetadataLoader } from '../plugin/metadata-loader.js'; diff --git a/lib/utils/enum.utils.ts b/lib/utils/enum.utils.ts index d9d336ca2..61849e44d 100644 --- a/lib/utils/enum.utils.ts +++ b/lib/utils/enum.utils.ts @@ -44,8 +44,7 @@ export function getEnumType( if (hasString) { return 'string'; } - const hasBoolean = - values.filter((v) => typeof v === 'boolean').length > 0; + const hasBoolean = values.filter((v) => typeof v === 'boolean').length > 0; return hasBoolean ? 'boolean' : 'number'; } diff --git a/lib/utils/is-built-in-type.util.ts b/lib/utils/is-built-in-type.util.ts index 6d2771b24..58d7d9287 100644 --- a/lib/utils/is-built-in-type.util.ts +++ b/lib/utils/is-built-in-type.util.ts @@ -1,5 +1,5 @@ -import { isFunction } from 'es-toolkit/compat'; import { Type } from '@nestjs/common'; +import { isFunction } from 'es-toolkit/compat'; import { BUILT_IN_TYPES } from '../services/constants.js'; export function isBuiltInType( diff --git a/package-lock.json b/package-lock.json index f293ea98e..7c66ae5ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@microsoft/tsdoc": "0.16.0", "@nestjs/mapped-types": "2.1.1", - "es-toolkit": "^1.46.1", + "es-toolkit": "1.46.1", "js-yaml": "4.1.1", "path-to-regexp": "8.4.2", "swagger-ui-dist": "5.32.6" @@ -21,10 +21,10 @@ "@commitlint/config-angular": "21.0.1", "@fastify/compress": "^8.3.1", "@fastify/static": "9.1.3", - "@nestjs/common": "11.1.21", - "@nestjs/core": "11.1.21", - "@nestjs/platform-express": "11.1.21", - "@nestjs/platform-fastify": "11.1.21", + "@nestjs/common": "next", + "@nestjs/core": "next", + "@nestjs/platform-express": "next", + "@nestjs/platform-fastify": "next", "@types/js-yaml": "4.0.9", "@types/node": "24.12.4", "class-transformer": "0.5.1", diff --git a/package.json b/package.json index d7020a290..bd5bc1be6 100644 --- a/package.json +++ b/package.json @@ -53,10 +53,10 @@ "@commitlint/config-angular": "21.0.1", "@fastify/compress": "^8.3.1", "@fastify/static": "9.1.3", - "@nestjs/common": "11.1.21", - "@nestjs/core": "11.1.21", - "@nestjs/platform-express": "11.1.21", - "@nestjs/platform-fastify": "11.1.21", + "@nestjs/common": "next", + "@nestjs/core": "next", + "@nestjs/platform-express": "next", + "@nestjs/platform-fastify": "next", "@types/js-yaml": "4.0.9", "@types/node": "24.12.4", "class-transformer": "0.5.1", From 7f7041cee2b0ab2b0e520f892e64083f18ed8492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 14 May 2026 14:36:47 +0200 Subject: [PATCH 5/6] chore: migrate e2e tests --- e2e/express.e2e-spec.ts | 8 +- e2e/fastify.e2e-spec.ts | 8 +- e2e/manual-e2e.ts | 4 +- e2e/src/app.module.ts | 4 +- e2e/src/cats/cats.controller.ts | 14 +- e2e/src/cats/cats.module.ts | 4 +- e2e/src/cats/cats.service.ts | 4 +- e2e/src/cats/classes/cat.class.ts | 9 +- e2e/src/cats/dto/create-cat.dto.ts | 20 +- e2e/src/cats/dto/extra-model.dto.ts | 2 +- e2e/src/cats/dto/pagination-query.dto.ts | 2 +- e2e/src/cats/dto/tag.dto.ts | 2 +- e2e/src/common/dto/validation-error.dto.ts | 2 +- e2e/swagger-module-webhooks.e2e-spec.ts | 2 +- e2e/validate-schema.e2e-spec.ts | 60 +- lib/swagger-module.ts | 8 +- package-lock.json | 1068 ++++++++++---------- package.json | 6 +- test/explorer/swagger-explorer.spec.ts | 3 +- tsconfig.json | 1 - 20 files changed, 649 insertions(+), 582 deletions(-) diff --git a/e2e/express.e2e-spec.ts b/e2e/express.e2e-spec.ts index b07b6cbe9..323303fd1 100644 --- a/e2e/express.e2e-spec.ts +++ b/e2e/express.e2e-spec.ts @@ -5,10 +5,10 @@ import { } from '@nestjs/platform-express'; import path from 'path'; import request from 'supertest'; -import SwaggerParser from 'swagger-parser'; -import { DocumentBuilder, SwaggerModule } from '../lib'; -import { ApplicationModule } from './src/app.module'; -import { ExpressController } from './src/express.controller'; +import { DocumentBuilder, SwaggerModule } from '../lib/index.js'; +import { ApplicationModule } from './src/app.module.js'; +import { ExpressController } from './src/express.controller.js'; +import SwaggerParser = require('@apidevtools/swagger-parser'); describe('Express Swagger', () => { let app: NestExpressApplication; diff --git a/e2e/fastify.e2e-spec.ts b/e2e/fastify.e2e-spec.ts index dcaec21af..bbd41ae12 100644 --- a/e2e/fastify.e2e-spec.ts +++ b/e2e/fastify.e2e-spec.ts @@ -5,10 +5,10 @@ import { } from '@nestjs/platform-fastify'; import path from 'path'; import request from 'supertest'; -import SwaggerParser from 'swagger-parser'; -import { DocumentBuilder, SwaggerModule } from '../lib'; -import { ApplicationModule } from './src/app.module'; -import { FastifyController } from './src/fastify.controller'; +import { DocumentBuilder, SwaggerModule } from '../lib/index.js'; +import { ApplicationModule } from './src/app.module.js'; +import { FastifyController } from './src/fastify.controller.js'; +import SwaggerParser = require('@apidevtools/swagger-parser'); describe('Fastify Swagger', () => { let app: NestFastifyApplication; diff --git a/e2e/manual-e2e.ts b/e2e/manual-e2e.ts index 0e29c63d9..12451066e 100644 --- a/e2e/manual-e2e.ts +++ b/e2e/manual-e2e.ts @@ -9,8 +9,8 @@ import { NestFastifyApplication } from '@nestjs/platform-fastify'; import { join } from 'path'; -import { DocumentBuilder, SwaggerModule } from '../lib'; -import { ApplicationModule } from './src/app.module'; +import { DocumentBuilder, SwaggerModule } from '../lib/index.js'; +import { ApplicationModule } from './src/app.module.js'; const port = 4001; const host = 'localhost'; diff --git a/e2e/src/app.module.ts b/e2e/src/app.module.ts index c381134c9..3018e82bd 100644 --- a/e2e/src/app.module.ts +++ b/e2e/src/app.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { AppController } from './app.controller'; -import { CatsModule } from './cats/cats.module'; +import { AppController } from './app.controller.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [CatsModule], diff --git a/e2e/src/cats/cats.controller.ts b/e2e/src/cats/cats.controller.ts index 801086155..ca92bbe8e 100644 --- a/e2e/src/cats/cats.controller.ts +++ b/e2e/src/cats/cats.controller.ts @@ -22,13 +22,13 @@ import { ApiSecurity, ApiTags, getSchemaPath -} from '../../../lib'; -import { CatsService } from './cats.service'; -import { Cat } from './classes/cat.class'; -import { CreateCatDto } from './dto/create-cat.dto'; -import { LettersEnum, PaginationQuery } from './dto/pagination-query.dto'; -import { TagDto } from './dto/tag.dto'; -import { CatBreed } from './enums/cat-breed.enum'; +} from '../../../lib/index.js'; +import { CatsService } from './cats.service.js'; +import { Cat } from './classes/cat.class.js'; +import { CreateCatDto } from './dto/create-cat.dto.js'; +import { LettersEnum, PaginationQuery } from './dto/pagination-query.dto.js'; +import { TagDto } from './dto/tag.dto.js'; +import { CatBreed } from './enums/cat-breed.enum.js'; @ApiSecurity('basic') @ApiBearerAuth() diff --git a/e2e/src/cats/cats.module.ts b/e2e/src/cats/cats.module.ts index 0ffa85b67..3e21c3d66 100644 --- a/e2e/src/cats/cats.module.ts +++ b/e2e/src/cats/cats.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { CatsController } from './cats.controller'; -import { CatsService } from './cats.service'; +import { CatsController } from './cats.controller.js'; +import { CatsService } from './cats.service.js'; @Module({ controllers: [CatsController], diff --git a/e2e/src/cats/cats.service.ts b/e2e/src/cats/cats.service.ts index 4505f6724..0faa433f2 100644 --- a/e2e/src/cats/cats.service.ts +++ b/e2e/src/cats/cats.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { Cat } from './classes/cat.class'; -import { CreateCatDto } from './dto/create-cat.dto'; +import { Cat } from './classes/cat.class.js'; +import { CreateCatDto } from './dto/create-cat.dto.js'; @Injectable() export class CatsService { diff --git a/e2e/src/cats/classes/cat.class.ts b/e2e/src/cats/classes/cat.class.ts index 91cd58a82..65364fb76 100644 --- a/e2e/src/cats/classes/cat.class.ts +++ b/e2e/src/cats/classes/cat.class.ts @@ -1,5 +1,5 @@ -import { ApiExtension, ApiProperty } from '../../../../lib'; -import { LettersEnum } from '../dto/pagination-query.dto'; +import { ApiExtension, ApiProperty } from '../../../../lib/index.js'; +import { LettersEnum } from '../dto/pagination-query.dto.js'; @ApiExtension('x-schema-extension', { test: 'test' }) @ApiExtension('x-schema-extension-multiple', { test: 'test*2' }) @@ -102,10 +102,7 @@ export class Cat { @ApiProperty({ enum: LettersEnum, enumName: 'LettersEnum', - oneOf: [ - { type: 'string' }, - { type: 'number' } - ], + oneOf: [{ type: 'string' }, { type: 'number' }], description: 'Enum named reference combined with oneOf combinators' }) enumNamedWithOneOf?: LettersEnum | string | number; diff --git a/e2e/src/cats/dto/create-cat.dto.ts b/e2e/src/cats/dto/create-cat.dto.ts index a4251238a..9aaae884c 100644 --- a/e2e/src/cats/dto/create-cat.dto.ts +++ b/e2e/src/cats/dto/create-cat.dto.ts @@ -1,8 +1,12 @@ -import { ApiExtension, ApiExtraModels, ApiProperty } from '../../../../lib'; -import { XEnumTest } from '../enums/x-enum-test.enum'; -import { ExtraModelDto } from './extra-model.dto'; -import { LettersEnum } from './pagination-query.dto'; -import { TagDto } from './tag.dto'; +import { + ApiExtension, + ApiExtraModels, + ApiProperty +} from '../../../../lib/index.js'; +import { XEnumTest } from '../enums/x-enum-test.enum.js'; +import { ExtraModelDto } from './extra-model.dto.js'; +import { LettersEnum } from './pagination-query.dto.js'; +import { TagDto } from './tag.dto.js'; @ApiExtraModels(ExtraModelDto) @ApiExtension('x-tags', ['foo', 'bar']) @@ -96,7 +100,11 @@ export class CreateCatDto { @ApiProperty({ description: 'tag', required: false }) readonly tag: TagDto; - @ApiProperty({ description: 'nullable tag', nullable: true, type: () => TagDto }) + @ApiProperty({ + description: 'nullable tag', + nullable: true, + type: () => TagDto + }) readonly nullableTag: TagDto; nested: { diff --git a/e2e/src/cats/dto/extra-model.dto.ts b/e2e/src/cats/dto/extra-model.dto.ts index 66be96ce1..fe8a758cb 100644 --- a/e2e/src/cats/dto/extra-model.dto.ts +++ b/e2e/src/cats/dto/extra-model.dto.ts @@ -1,4 +1,4 @@ -import { ApiProperty, ApiSchema } from '../../../../lib'; +import { ApiProperty, ApiSchema } from '../../../../lib/index.js'; @ApiSchema({ name: 'ExtraModel', diff --git a/e2e/src/cats/dto/pagination-query.dto.ts b/e2e/src/cats/dto/pagination-query.dto.ts index b03164575..f50ff2318 100644 --- a/e2e/src/cats/dto/pagination-query.dto.ts +++ b/e2e/src/cats/dto/pagination-query.dto.ts @@ -1,4 +1,4 @@ -import { ApiProperty } from '../../../../lib'; +import { ApiProperty } from '../../../../lib/index.js'; export enum LettersEnum { A = 'A', diff --git a/e2e/src/cats/dto/tag.dto.ts b/e2e/src/cats/dto/tag.dto.ts index 3862bb962..9611ba793 100644 --- a/e2e/src/cats/dto/tag.dto.ts +++ b/e2e/src/cats/dto/tag.dto.ts @@ -1,4 +1,4 @@ -import { ApiProperty } from '../../../../lib'; +import { ApiProperty } from '../../../../lib/index.js'; export class TagDto { @ApiProperty({ description: 'name' }) diff --git a/e2e/src/common/dto/validation-error.dto.ts b/e2e/src/common/dto/validation-error.dto.ts index d2cac2ceb..37ae16bd1 100644 --- a/e2e/src/common/dto/validation-error.dto.ts +++ b/e2e/src/common/dto/validation-error.dto.ts @@ -1,4 +1,4 @@ -import { ApiProperty } from '../../../../lib'; +import { ApiProperty } from '../../../../lib/index.js'; export class ValidationErrorDto { @ApiProperty({ diff --git a/e2e/swagger-module-webhooks.e2e-spec.ts b/e2e/swagger-module-webhooks.e2e-spec.ts index 818040c81..45ff873a0 100644 --- a/e2e/swagger-module-webhooks.e2e-spec.ts +++ b/e2e/swagger-module-webhooks.e2e-spec.ts @@ -1,6 +1,6 @@ import { Controller, Module, Post } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; -import { ApiWebhook, DocumentBuilder, SwaggerModule } from '../lib'; +import { ApiWebhook, DocumentBuilder, SwaggerModule } from '../lib/index.js'; describe('SwaggerModule webhooks handling', () => { @Controller() diff --git a/e2e/validate-schema.e2e-spec.ts b/e2e/validate-schema.e2e-spec.ts index 2ed1df5a6..28a9a95e6 100644 --- a/e2e/validate-schema.e2e-spec.ts +++ b/e2e/validate-schema.e2e-spec.ts @@ -3,19 +3,32 @@ import { NestFactory } from '@nestjs/core'; import { writeFileSync } from 'fs'; import { OpenAPIV3 } from 'openapi-types'; import { join } from 'path'; -import SwaggerParser from 'swagger-parser'; import { DocumentBuilder, getSchemaPath, OpenAPIObject, SwaggerModule -} from '../lib'; -import { ParameterObject, SchemaObject } from '../lib/interfaces/open-api-spec.interface'; -import { ApplicationModule } from './src/app.module'; -import { Cat } from './src/cats/classes/cat.class'; -import { TagDto } from './src/cats/dto/tag.dto'; -import { ValidationErrorDto } from './src/common/dto/validation-error.dto'; -import { ExpressController } from './src/express.controller'; +} from '../lib/index.js'; +import { + ParameterObject, + ResponseObject, + SchemaObject +} from '../lib/interfaces/open-api-spec.interface.js'; +import { ApplicationModule } from './src/app.module.js'; +import { Cat } from './src/cats/classes/cat.class.js'; +import { TagDto } from './src/cats/dto/tag.dto.js'; +import { ValidationErrorDto } from './src/common/dto/validation-error.dto.js'; +import { ExpressController } from './src/express.controller.js'; +import SwaggerParser = require('@apidevtools/swagger-parser'); + +function asResponseObject( + response: ResponseObject | { $ref: string } | undefined +) { + if (!response || '$ref' in response) { + throw new Error('Expected an inlined response object'); + } + return response; +} describe('Validate OpenAPI schema', () => { let app: INestApplication; @@ -208,28 +221,33 @@ describe('Validate OpenAPI schema', () => { it('should preserve example/examples for built-in scalar response types', () => { const document = SwaggerModule.createDocument(app, options); - const scalarExample = - document.paths['/api/cats/scalar-with-example']['get']['responses']['200']; - expect(scalarExample.content['application/json'].example).toEqual(42); + const scalarExample = asResponseObject( + document.paths['/api/cats/scalar-with-example']['get']['responses']['200'] + ); + expect(scalarExample.content!['application/json'].example).toEqual(42); expect((scalarExample as any).example).toBeUndefined(); - const scalarExamples = - document.paths['/api/cats/scalar-with-examples']['get']['responses']['200']; - expect(scalarExamples.content['application/json'].examples).toEqual({ + const scalarExamples = asResponseObject( + document.paths['/api/cats/scalar-with-examples']['get']['responses'][ + '200' + ] + ); + expect(scalarExamples.content!['application/json'].examples).toEqual({ adult: { value: 5, summary: 'Adult cat age' }, kitten: { value: 1, summary: 'Kitten age' } }); expect((scalarExamples as any).examples).toBeUndefined(); - const arrayExample = + const arrayExample = asResponseObject( document.paths['/api/cats/array-of-scalar-with-example']['get'][ 'responses' - ]['200']; - expect(arrayExample.content['application/json'].schema).toEqual({ + ]['200'] + ); + expect(arrayExample.content!['application/json'].schema).toEqual({ type: 'array', items: { type: 'string' } }); - expect(arrayExample.content['application/json'].example).toEqual([ + expect(arrayExample.content!['application/json'].example).toEqual([ 'Mau', 'Persian' ]); @@ -428,9 +446,9 @@ describe('Validate OpenAPI schema', () => { const createCatOperation = document.paths['/api/cats']?.post; expect(createCatOperation?.tags).toBeDefined(); expect(Array.isArray(createCatOperation?.tags)).toBe(true); - expect(createCatOperation?.tags?.every((tag) => typeof tag === 'string')).toBe( - true - ); + expect( + createCatOperation?.tags?.every((tag) => typeof tag === 'string') + ).toBe(true); }); }); }); diff --git a/lib/swagger-module.ts b/lib/swagger-module.ts index 5021dcd53..76bf24ea4 100644 --- a/lib/swagger-module.ts +++ b/lib/swagger-module.ts @@ -1,8 +1,8 @@ import { INestApplication, NotFoundException } from '@nestjs/common'; import { HttpServer } from '@nestjs/common/interfaces/http/http-server.interface.js'; import { NestExpressApplication } from '@nestjs/platform-express'; -import { NestFastifyApplication } from '@nestjs/platform-fastify'; import * as jsyaml from 'js-yaml'; +import { createRequire } from 'node:module'; import { OpenAPIObject, SwaggerCustomOptions, @@ -23,6 +23,8 @@ import { resolvePath } from './utils/resolve-path.util.js'; import { validateGlobalPrefix } from './utils/validate-global-prefix.util.js'; import { validatePath } from './utils/validate-path.util.js'; +const require = createRequire(import.meta.url); + /** * @publicApi */ @@ -108,7 +110,9 @@ export class SwaggerModule { : getSwaggerAssetsAbsoluteFSPath(); if (httpAdapter && httpAdapter.getType() === 'fastify') { - (app as NestFastifyApplication).useStaticAssets({ + const fastifyStatic = require('@fastify/static'); + + httpAdapter.getInstance().register(fastifyStatic, { root: swaggerAssetsPath, prefix: finalPath, decorateReply: false diff --git a/package-lock.json b/package-lock.json index 7c66ae5ff..8d2d242e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "swagger-ui-dist": "5.32.6" }, "devDependencies": { + "@apidevtools/swagger-parser": "^10.0.3", "@commitlint/cli": "21.0.1", "@commitlint/config-angular": "21.0.1", "@fastify/compress": "^8.3.1", @@ -42,15 +43,14 @@ "release-it": "20.0.1", "rxjs": "7.8.2", "supertest": "7.2.2", - "swagger-parser": "10.0.3", "typescript": "6.0.3", "vite": "^8.0.8", "vitest": "4.1.6" }, "peerDependencies": { "@fastify/static": "^8.0.0 || ^9.0.0", - "@nestjs/common": "^11.0.1", - "@nestjs/core": "^11.0.1", + "@nestjs/common": "next", + "@nestjs/core": "next", "class-transformer": "*", "class-validator": "*", "reflect-metadata": "^0.1.12 || ^0.2.0" @@ -173,74 +173,6 @@ "node": ">=22.12.0" } }, - "node_modules/@commitlint/cli/node_modules/cliui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@commitlint/cli/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/cli/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/cli/node_modules/yargs": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", - "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^9.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "string-width": "^7.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^22.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, - "node_modules/@commitlint/cli/node_modules/yargs-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, "node_modules/@commitlint/config-angular": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-21.0.1.tgz", @@ -605,23 +537,6 @@ "readable-stream": "^4.5.2" } }, - "node_modules/@fastify/compress/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/@fastify/cors": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-11.2.0.tgz", @@ -826,14 +741,14 @@ } }, "node_modules/@inquirer/checkbox": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.4.tgz", - "integrity": "sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.5.tgz", + "integrity": "sha512-Jmf9tgBHIEK5SAOB7swYfStqmtkZb00xOTpSQmkoGEpdxOTpJi9RS0A8bkfDPHTTItZRJrRdZrEMu25wyj0VfQ==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" }, @@ -850,13 +765,13 @@ } }, "node_modules/@inquirer/confirm": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.12.tgz", - "integrity": "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.13.tgz", + "integrity": "sha512-wkGPC7yJ5WJk1DJ5SX7fzk+gfj4BM8cf5dDDi71B/551xHrdsZVRJOC0WyikXd0pEsb/9cLniuE4atbsMqmFkw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/type": "^4.0.5" }, "engines": { @@ -872,9 +787,9 @@ } }, "node_modules/@inquirer/core": { - "version": "11.1.9", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.9.tgz", - "integrity": "sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==", + "version": "11.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.10.tgz", + "integrity": "sha512-a4Q5BXHQAHa9eO202sTaFCHFYVB3x5fauDuThEAdZ9gfn76pSxiKU7wWcEH0N1O0XmQvNfQNU6QXpiRxmYQx+A==", "dev": true, "license": "MIT", "dependencies": { @@ -912,13 +827,13 @@ } }, "node_modules/@inquirer/editor": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.1.tgz", - "integrity": "sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.2.tgz", + "integrity": "sha512-Y3Nor7S/DhIPo+8Ym/dSY4efwKI4BsflKDwXh0jNeXJsSF3dteS/3Yf+z4wkibVZDvYMyCgknSTQlNahfunGHg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/external-editor": "^3.0.0", "@inquirer/type": "^4.0.5" }, @@ -935,13 +850,13 @@ } }, "node_modules/@inquirer/expand": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.13.tgz", - "integrity": "sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==", + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.14.tgz", + "integrity": "sha512-qyY9zcIX2eKYwaAUiQo9zORd61Lc3sXeM72fVbeHkYnDkqfr8/armcRbmVAIrExeJhI2puk+uomeKtWrpUVUmQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/type": "^4.0.5" }, "engines": { @@ -989,13 +904,13 @@ } }, "node_modules/@inquirer/input": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.12.tgz", - "integrity": "sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.13.tgz", + "integrity": "sha512-0l0jCHlJnXIV8CTxwQC0C+5Ziq8WP22edWgmciW2xYvoeoSck4v5FvCS1ctKdqLLR0dUo93uAHgWHywgBSoRyw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1011,13 +926,13 @@ } }, "node_modules/@inquirer/number": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.12.tgz", - "integrity": "sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==", + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.13.tgz", + "integrity": "sha512-WHmkYnnJAou5gx7RgcvAfUggnHNM1zWfoh0dFPl3dxVssuqt+dK5rIbaOYQXNyOegvFnopbKupjnhw2O8gANNg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1033,14 +948,14 @@ } }, "node_modules/@inquirer/password": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.12.tgz", - "integrity": "sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.13.tgz", + "integrity": "sha512-XDGu64ROHZjOOXLAANvJN7iIxWKhOSCG5VakrZ5kaScVR+snVJCFglD/hL3/677awtWcu4pXoWa280CDIYcBeg==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1086,13 +1001,13 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.8.tgz", - "integrity": "sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==", + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.9.tgz", + "integrity": "sha512-a1ErXEfgjfPYpyQ89dp+7n2IISjH9oQg3ygvF5adz8B7aHn4n2PjEgu1wpVTp69K3bj3lVLxP0qJ2b1clk1Whw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1108,13 +1023,13 @@ } }, "node_modules/@inquirer/search": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.8.tgz", - "integrity": "sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.9.tgz", + "integrity": "sha512-ZlbM28Q9lmLkFPNAIv+ZuY530n5Km8U1WW48oYEvDhe9yc2uL3m3t+JSdRUkQlk5fuIuskgiIVjcb7czFzQpuA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" }, @@ -1131,14 +1046,14 @@ } }, "node_modules/@inquirer/select": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.4.tgz", - "integrity": "sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.5.tgz", + "integrity": "sha512-6SRg6kHfK/sjLXOsuqNebuir+sjwrf/iWuRUnXgB2slzEewppI1WfzeS16XxDcOQmXBruMmmB9Cgrz7wsAxqMg==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.9", + "@inquirer/core": "^11.1.10", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" }, @@ -1232,9 +1147,9 @@ } }, "node_modules/@nestjs/common": { - "version": "11.1.21", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.21.tgz", - "integrity": "sha512-YV1HYDGsm2rnR0vrLKidtrG6jYX5yqiIjeur1j8++dKGqhhsJ6cjMs0RfQRSTUH7IjgDemA59/znQ8nRrE0D9g==", + "version": "12.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-12.0.0-alpha.4.tgz", + "integrity": "sha512-9ePyeB1QS5Q2YTXwQvWb/374BjQfIv6l9e3S0BuFeJ2+1v6P+sawuQbN3z2q81KUyydXun1XAQWccOPtxSByOg==", "dev": true, "license": "MIT", "dependencies": { @@ -1264,9 +1179,9 @@ } }, "node_modules/@nestjs/core": { - "version": "11.1.21", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.21.tgz", - "integrity": "sha512-fqo0BHgny3MOuAL8GSfG3ZUKFVVBaBQD/0iyibnwTONT5vPexjQxJzu+945iloVvBDmrnAaRWxC1gqCDEs/AXQ==", + "version": "12.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-12.0.0-alpha.4.tgz", + "integrity": "sha512-bgUAfKfFuqmFMxN/RDhU9RGfVn9tIImo9ixjXwRMSTY1RS7DofYodwCVlhgbq3NnrrhFzxTfGDVJ/I/IBB+idQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1326,9 +1241,9 @@ } }, "node_modules/@nestjs/platform-express": { - "version": "11.1.21", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.21.tgz", - "integrity": "sha512-lA3ViycOnz4Df3EstIKpuAVFhqxQixTnjAVk0M+LRyNBlGM6VSCaNJaAIrb9Pcry39T4hTHpNVbRqGLSvhL8gA==", + "version": "12.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-12.0.0-alpha.4.tgz", + "integrity": "sha512-k2ApPfdXB2Pg3dCVUqtF5r0qwS7lA51zXkaZR7T/7/ucTJup41cdTWietEinwjH+7YtYwzW26AhsNjal9QwhHA==", "dev": true, "license": "MIT", "dependencies": { @@ -1348,9 +1263,9 @@ } }, "node_modules/@nestjs/platform-fastify": { - "version": "11.1.21", - "resolved": "https://registry.npmjs.org/@nestjs/platform-fastify/-/platform-fastify-11.1.21.tgz", - "integrity": "sha512-yjeAd3bE6lsAVjemR5qvKyzGZ4K0OmptXhwnsI7n2WyEBwMzzl15vAkcydmsoLOpHXmAeORIl0rQmaAff1n+pA==", + "version": "12.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/@nestjs/platform-fastify/-/platform-fastify-12.0.0-alpha.4.tgz", + "integrity": "sha512-lgpBiB7kc5yqPnM+7WbdnsTNjXgSWlUA7JqCyabZbJMNjg6UkvvYswCsncA9tMGhV8RFjPwjQlhVLDEwFTcISg==", "dev": true, "license": "MIT", "dependencies": { @@ -1551,15 +1466,16 @@ } }, "node_modules/@octokit/request": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", - "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.9.tgz", + "integrity": "sha512-o8Bi3f608eyM+7BmBiUWxFsdjLb3/ym1cQek5LZOv9KkZcxRrHCPhhRzm6xjO6HVZ85ItD6+sTsjxo821SVa/A==", "dev": true, "license": "MIT", "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", + "content-type": "^2.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" @@ -1581,6 +1497,20 @@ "node": ">= 20" } }, + "node_modules/@octokit/request/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/@octokit/rest": { "version": "22.0.1", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.1.tgz", @@ -1608,9 +1538,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.129.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.129.0.tgz", - "integrity": "sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==", + "version": "0.130.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz", + "integrity": "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==", "dev": true, "license": "MIT", "funding": { @@ -1972,9 +1902,9 @@ "license": "MIT" }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0.tgz", - "integrity": "sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz", + "integrity": "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==", "cpu": [ "arm64" ], @@ -1989,9 +1919,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0.tgz", - "integrity": "sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==", "cpu": [ "arm64" ], @@ -2006,9 +1936,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0.tgz", - "integrity": "sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz", + "integrity": "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==", "cpu": [ "x64" ], @@ -2023,9 +1953,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0.tgz", - "integrity": "sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==", "cpu": [ "x64" ], @@ -2040,9 +1970,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0.tgz", - "integrity": "sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==", "cpu": [ "arm" ], @@ -2057,9 +1987,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0.tgz", - "integrity": "sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==", "cpu": [ "arm64" ], @@ -2074,9 +2004,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0.tgz", - "integrity": "sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==", "cpu": [ "arm64" ], @@ -2091,9 +2021,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0.tgz", - "integrity": "sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==", "cpu": [ "ppc64" ], @@ -2108,9 +2038,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0.tgz", - "integrity": "sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==", "cpu": [ "s390x" ], @@ -2125,9 +2055,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0.tgz", - "integrity": "sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==", "cpu": [ "x64" ], @@ -2142,9 +2072,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0.tgz", - "integrity": "sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==", "cpu": [ "x64" ], @@ -2159,9 +2089,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0.tgz", - "integrity": "sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz", + "integrity": "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==", "cpu": [ "arm64" ], @@ -2176,9 +2106,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0.tgz", - "integrity": "sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz", + "integrity": "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==", "cpu": [ "wasm32" ], @@ -2195,9 +2125,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0.tgz", - "integrity": "sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==", "cpu": [ "arm64" ], @@ -2212,9 +2142,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0.tgz", - "integrity": "sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==", "cpu": [ "x64" ], @@ -2229,9 +2159,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0.tgz", - "integrity": "sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, @@ -2343,9 +2273,9 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -2432,16 +2362,6 @@ } } }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/@vitest/pretty-format": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.6.tgz", @@ -2585,9 +2505,9 @@ } }, "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { @@ -2811,9 +2731,9 @@ "license": "MIT" }, "node_modules/basic-ftp": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz", - "integrity": "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", "dev": true, "license": "MIT", "engines": { @@ -2853,9 +2773,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -3002,9 +2922,9 @@ "license": "MIT" }, "node_modules/cacache/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3425,81 +3345,71 @@ } }, "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=12" + "node": ">=20" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "node": ">=18" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -3538,6 +3448,17 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -3582,6 +3503,21 @@ "typedarray": "^0.0.6" } }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/confbox": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", @@ -3940,9 +3876,9 @@ } }, "node_modules/dotenv": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", - "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4133,9 +4069,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, "license": "MIT" }, @@ -4241,6 +4177,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4418,9 +4364,9 @@ "license": "MIT" }, "node_modules/fast-json-stringify": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.3.0.tgz", - "integrity": "sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.4.0.tgz", + "integrity": "sha512-ibRCQ0GZKJIQ+P3Et1h0LhPgp3PMTYk0MH8O+kW3lNYsvmaQww5Nn3f1jf73Q0jR1Yz3a1CDP4/NZD3vOajWJQ==", "dev": true, "funding": [ { @@ -4477,9 +4423,9 @@ } }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { @@ -4785,9 +4731,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", - "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "dev": true, "license": "MIT", "engines": { @@ -5007,9 +4953,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "dev": true, "license": "MIT", "dependencies": { @@ -5257,9 +5203,9 @@ } }, "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, "license": "MIT", "engines": { @@ -5267,9 +5213,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", - "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", "dev": true, "license": "MIT", "engines": { @@ -5583,10 +5529,120 @@ "node": "12.* || 14.* || >= 16" } }, + "node_modules/lerna-changelog/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna-changelog/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/lerna-changelog/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna-changelog/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna-changelog/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna-changelog/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lerna-changelog/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/lerna-changelog/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/libphonenumber-js": { - "version": "1.12.41", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.41.tgz", - "integrity": "sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.13.1.tgz", + "integrity": "sha512-GEw0GLL7YUUA6nv21IsCvVjtI5Ejn84sjbdfQ9KxdbqEVOk1PZh7xejn01EEiniKw+dBeCfim+8MGeuvVuE2BA==", "dev": true, "license": "MIT" }, @@ -5953,37 +6009,6 @@ "node": ">=22.13.0" } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", - "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.3", - "string-width": "^8.2.0", - "strip-ansi": "^7.1.2" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/load-esm": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.3.tgz", @@ -6112,6 +6137,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", @@ -6129,6 +6161,42 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6640,9 +6708,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "dev": true, "funding": [ { @@ -6715,15 +6783,15 @@ } }, "node_modules/nypm": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", - "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.6.tgz", + "integrity": "sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q==", "dev": true, "license": "MIT", "dependencies": { - "citty": "^0.2.0", + "citty": "^0.2.2", "pathe": "^2.0.3", - "tinyexec": "^1.0.2" + "tinyexec": "^1.1.1" }, "bin": { "nypm": "dist/cli.mjs" @@ -7186,9 +7254,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.3.tgz", - "integrity": "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==", + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -7292,14 +7360,14 @@ "license": "MIT" }, "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", "dev": true, "license": "MIT", "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", + "confbox": "^0.2.4", + "exsolve": "^1.0.8", "pathe": "^2.0.3" } }, @@ -7600,6 +7668,21 @@ "stream-shift": "^1.0.2" } }, + "node_modules/pumpify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/qs": { "version": "6.15.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", @@ -7668,18 +7751,20 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/readdirp": { @@ -7761,14 +7846,17 @@ "node": "^20.19.0 || ^22.13.0 || >=24.0.0" } }, - "node_modules/release-it/node_modules/yargs-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "node_modules/release-it/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "node": ">=10" } }, "node_modules/require-directory": { @@ -7910,9 +7998,9 @@ "license": "MIT" }, "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7956,14 +8044,14 @@ } }, "node_modules/rolldown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0.tgz", - "integrity": "sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz", + "integrity": "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.129.0", - "@rolldown/pluginutils": "1.0.0" + "@oxc-project/types": "=0.130.0", + "@rolldown/pluginutils": "^1.0.0" }, "bin": { "rolldown": "bin/cli.mjs" @@ -7972,21 +8060,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0", - "@rolldown/binding-darwin-arm64": "1.0.0", - "@rolldown/binding-darwin-x64": "1.0.0", - "@rolldown/binding-freebsd-x64": "1.0.0", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0", - "@rolldown/binding-linux-arm64-gnu": "1.0.0", - "@rolldown/binding-linux-arm64-musl": "1.0.0", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0", - "@rolldown/binding-linux-s390x-gnu": "1.0.0", - "@rolldown/binding-linux-x64-gnu": "1.0.0", - "@rolldown/binding-linux-x64-musl": "1.0.0", - "@rolldown/binding-openharmony-arm64": "1.0.0", - "@rolldown/binding-wasm32-wasi": "1.0.0", - "@rolldown/binding-win32-arm64-msvc": "1.0.0", - "@rolldown/binding-win32-x64-msvc": "1.0.0" + "@rolldown/binding-android-arm64": "1.0.1", + "@rolldown/binding-darwin-arm64": "1.0.1", + "@rolldown/binding-darwin-x64": "1.0.1", + "@rolldown/binding-freebsd-x64": "1.0.1", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", + "@rolldown/binding-linux-arm64-gnu": "1.0.1", + "@rolldown/binding-linux-arm64-musl": "1.0.1", + "@rolldown/binding-linux-ppc64-gnu": "1.0.1", + "@rolldown/binding-linux-s390x-gnu": "1.0.1", + "@rolldown/binding-linux-x64-gnu": "1.0.1", + "@rolldown/binding-linux-x64-musl": "1.0.1", + "@rolldown/binding-openharmony-arm64": "1.0.1", + "@rolldown/binding-wasm32-wasi": "1.0.1", + "@rolldown/binding-win32-arm64-msvc": "1.0.1", + "@rolldown/binding-win32-x64-msvc": "1.0.1" } }, "node_modules/router": { @@ -8051,9 +8139,9 @@ "license": "MIT" }, "node_modules/safe-regex2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.0.tgz", - "integrity": "sha512-pNHAuBW7TrcleFHsxBr5QMi/Iyp0ENjUKz7GCcX1UO7cMh+NmVK6HxQckNL1tJp1XAJVjG6B8OKIPqodqj9rtw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.1.tgz", + "integrity": "sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==", "dev": true, "funding": [ { @@ -8108,9 +8196,9 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "dev": true, "license": "ISC", "bin": { @@ -8336,13 +8424,13 @@ } }, "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^10.0.1", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -8450,9 +8538,9 @@ } }, "node_modules/std-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", - "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", "dev": true, "license": "MIT" }, @@ -8506,9 +8594,9 @@ } }, "node_modules/string-width": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", - "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { @@ -8627,19 +8715,6 @@ "node": ">=8" } }, - "node_modules/swagger-parser": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", - "integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@apidevtools/swagger-parser": "10.0.3" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/swagger-ui-dist": { "version": "5.32.6", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.32.6.tgz", @@ -8702,18 +8777,25 @@ } }, "node_modules/thread-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz", - "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.1.0.tgz", + "integrity": "sha512-Bw6h2iBDt16v6iHLChBIoVYU8CBo9GPsW8TG7h1hRVhqKhIkH6N8qkxNSmiOZTKsCLPbtWG4ViWLkU6KeKXpig==", "dev": true, "license": "MIT", "dependencies": { - "real-require": "^0.2.0" + "real-require": "^1.0.0" }, "engines": { "node": ">=20" } }, + "node_modules/thread-stream/node_modules/real-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz", + "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==", + "dev": true, + "license": "MIT" + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -8862,18 +8944,36 @@ } }, "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "dev": true, "license": "MIT", "dependencies": { - "content-type": "^1.0.5", + "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/typedarray": { @@ -9015,16 +9115,16 @@ } }, "node_modules/vite": { - "version": "8.0.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.12.tgz", - "integrity": "sha512-w2dDofOWv2QB09ZITZBsvKTVAlYvPR4IAmrY/v0ir9KvLs0xybR7i48wxhM1/oyBWO34wPns+bPGw5ZrZqDpZg==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz", + "integrity": "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.14", - "rolldown": "1.0.0", + "rolldown": "1.0.1", "tinyglobby": "^0.2.16" }, "bin": { @@ -9269,18 +9369,18 @@ } }, "node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -9299,31 +9399,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -9376,9 +9451,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", - "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", "optional": true, @@ -9393,80 +9468,56 @@ } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "dev": true, "license": "ISC", "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/yargs/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "node": ">=18" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yoctocolors": { @@ -9502,17 +9553,6 @@ "optionalDependencies": { "commander": "^9.4.1" } - }, - "node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } } } } diff --git a/package.json b/package.json index bd5bc1be6..c180396cc 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "swagger-ui-dist": "5.32.6" }, "devDependencies": { + "@apidevtools/swagger-parser": "10.0.3", "@commitlint/cli": "21.0.1", "@commitlint/config-angular": "21.0.1", "@fastify/compress": "^8.3.1", @@ -74,15 +75,14 @@ "release-it": "20.0.1", "rxjs": "7.8.2", "supertest": "7.2.2", - "swagger-parser": "10.0.3", "typescript": "6.0.3", "vite": "^8.0.8", "vitest": "4.1.6" }, "peerDependencies": { "@fastify/static": "^8.0.0 || ^9.0.0", - "@nestjs/common": "^11.0.1", - "@nestjs/core": "^11.0.1", + "@nestjs/common": "next", + "@nestjs/core": "next", "class-transformer": "*", "class-validator": "*", "reflect-metadata": "^0.1.12 || ^0.2.0" diff --git a/test/explorer/swagger-explorer.spec.ts b/test/explorer/swagger-explorer.spec.ts index 00f1f3be6..eb3988a94 100644 --- a/test/explorer/swagger-explorer.spec.ts +++ b/test/explorer/swagger-explorer.spec.ts @@ -7,9 +7,10 @@ import { Post, Query, Version, + VERSION_NEUTRAL, VersioningType } from '@nestjs/common'; -import { VERSION_NEUTRAL, VersionValue } from '@nestjs/common/interfaces'; +import { VersionValue } from '@nestjs/common/internal'; import { ApplicationConfig } from '@nestjs/core'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; import { upperFirst } from 'es-toolkit/compat'; diff --git a/tsconfig.json b/tsconfig.json index f990f7f42..2329760da 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,6 @@ "target": "ES2021", "sourceMap": false, "outDir": "./dist", - "rootDir": "./lib", "skipLibCheck": true, "strictNullChecks": false, "types": ["vitest/globals"] From a8e2aad4d1e069fb2b5cc064f1a0b62e95632e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 14 May 2026 14:39:39 +0200 Subject: [PATCH 6/6] chore: fix tsconfig --- tsconfig.build.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tsconfig.build.json b/tsconfig.build.json index faf7b37cf..a142a2173 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -11,12 +11,14 @@ "noLib": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, - "target": "es6", + "target": "ES2021", + "lib": ["ES2021"], "sourceMap": false, "outDir": "./dist", "rootDir": "./lib", "skipLibCheck": true, - "strictNullChecks": false + "strictNullChecks": false, + "types": ["node"] }, "include": [ "lib/**/*"