@nestjs/swagger
Advanced tools
Comparing version 6.4.0-next.1 to 6.4.0-next.2
import { OperationObject } from '../interfaces/open-api-spec.interface'; | ||
export type ApiOperationOptions = Partial<OperationObject>; | ||
export declare function ApiOperation(options: ApiOperationOptions): MethodDecorator; | ||
export declare function ApiOperation(options: ApiOperationOptions, { overrideExisting }?: { | ||
overrideExisting: boolean; | ||
}): MethodDecorator; |
@@ -10,5 +10,5 @@ "use strict"; | ||
}; | ||
function ApiOperation(options) { | ||
return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_OPERATION, (0, lodash_1.pickBy)(Object.assign(Object.assign({}, defaultOperationOptions), options), (0, lodash_1.negate)(lodash_1.isUndefined))); | ||
function ApiOperation(options, { overrideExisting } = { overrideExisting: true }) { | ||
return (0, helpers_1.createMethodDecorator)(constants_1.DECORATORS.API_OPERATION, (0, lodash_1.pickBy)(Object.assign(Object.assign({}, defaultOperationOptions), options), (0, lodash_1.negate)(lodash_1.isUndefined)), { overrideExisting }); | ||
} | ||
exports.ApiOperation = ApiOperation; |
import { Type } from '@nestjs/common'; | ||
import { ResponseObject, SchemaObject, ReferenceObject } from '../interfaces/open-api-spec.interface'; | ||
import { ReferenceObject, ResponseObject, SchemaObject } from '../interfaces/open-api-spec.interface'; | ||
export interface ApiResponseMetadata extends Omit<ResponseObject, 'description'> { | ||
@@ -15,3 +15,5 @@ status?: number | 'default' | '1XX' | '2XX' | '3XX' | '4XX' | '5XX'; | ||
export type ApiResponseOptions = ApiResponseMetadata | ApiResponseSchemaHost; | ||
export declare function ApiResponse(options: ApiResponseOptions): MethodDecorator & ClassDecorator; | ||
export declare function ApiResponse(options: ApiResponseOptions, { overrideExisting }?: { | ||
overrideExisting: boolean; | ||
}): MethodDecorator & ClassDecorator; | ||
export declare const ApiOkResponse: (options?: ApiResponseOptions) => MethodDecorator & ClassDecorator; | ||
@@ -18,0 +20,0 @@ export declare const ApiCreatedResponse: (options?: ApiResponseOptions) => MethodDecorator & ClassDecorator; |
@@ -8,3 +8,3 @@ "use strict"; | ||
const helpers_1 = require("./helpers"); | ||
function ApiResponse(options) { | ||
function ApiResponse(options, { overrideExisting } = { overrideExisting: true }) { | ||
const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(options.type, options.isArray); | ||
@@ -19,7 +19,13 @@ options.type = type; | ||
if (descriptor) { | ||
const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, descriptor.value) || {}; | ||
const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, descriptor.value); | ||
if (responses && !overrideExisting) { | ||
return descriptor; | ||
} | ||
Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), descriptor.value); | ||
return descriptor; | ||
} | ||
const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, target) || {}; | ||
const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, target); | ||
if (responses && !overrideExisting) { | ||
return descriptor; | ||
} | ||
Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), target); | ||
@@ -26,0 +32,0 @@ return target; |
@@ -1,2 +0,4 @@ | ||
export declare function createMethodDecorator<T = any>(metakey: string, metadata: T): MethodDecorator; | ||
export declare function createMethodDecorator<T = any>(metakey: string, metadata: T, { overrideExisting }?: { | ||
overrideExisting: boolean; | ||
}): MethodDecorator; | ||
export declare function createClassDecorator<T extends Array<any> = any>(metakey: string, metadata?: T): ClassDecorator; | ||
@@ -3,0 +5,0 @@ export declare function createPropertyDecorator<T extends Record<string, any> = any>(metakey: string, metadata: T, overrideExisting?: boolean): PropertyDecorator; |
@@ -7,4 +7,12 @@ "use strict"; | ||
const plugin_constants_1 = require("../plugin/plugin-constants"); | ||
function createMethodDecorator(metakey, metadata) { | ||
function createMethodDecorator(metakey, metadata, { overrideExisting } = { overrideExisting: true }) { | ||
return (target, key, descriptor) => { | ||
if (typeof metadata === 'object') { | ||
const prevValue = Reflect.getMetadata(metakey, descriptor.value); | ||
if (prevValue && !overrideExisting) { | ||
return descriptor; | ||
} | ||
Reflect.defineMetadata(metakey, Object.assign(Object.assign({}, prevValue), metadata), descriptor.value); | ||
return descriptor; | ||
} | ||
Reflect.defineMetadata(metakey, metadata, descriptor.value); | ||
@@ -11,0 +19,0 @@ return descriptor; |
@@ -5,3 +5,39 @@ "use strict"; | ||
const constants_1 = require("../constants"); | ||
const exploreApiOperationMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_OPERATION, method); | ||
const api_operation_decorator_1 = require("../decorators/api-operation.decorator"); | ||
const plugin_constants_1 = require("../plugin/plugin-constants"); | ||
const exploreApiOperationMetadata = (instance, prototype, method) => { | ||
applyMetadataFactory(prototype); | ||
return Reflect.getMetadata(constants_1.DECORATORS.API_OPERATION, method); | ||
}; | ||
exports.exploreApiOperationMetadata = exploreApiOperationMetadata; | ||
function applyMetadataFactory(prototype) { | ||
const classPrototype = prototype; | ||
do { | ||
if (!prototype.constructor) { | ||
return; | ||
} | ||
if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { | ||
continue; | ||
} | ||
const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); | ||
const methodKeys = Object.keys(metadata); | ||
methodKeys.forEach((key) => { | ||
const operationMeta = {}; | ||
const { summary, deprecated, tags } = metadata[key]; | ||
applyIfNotNil(operationMeta, 'summary', summary); | ||
applyIfNotNil(operationMeta, 'deprecated', deprecated); | ||
applyIfNotNil(operationMeta, 'tags', tags); | ||
if (Object.keys(operationMeta).length === 0) { | ||
return; | ||
} | ||
(0, api_operation_decorator_1.ApiOperation)(metadata[key], { overrideExisting: false })(classPrototype, key, Object.getOwnPropertyDescriptor(classPrototype, key)); | ||
}); | ||
} while ((prototype = Reflect.getPrototypeOf(prototype)) && | ||
prototype !== Object.prototype && | ||
prototype); | ||
} | ||
function applyIfNotNil(target, key, value) { | ||
if (value !== undefined && value !== null) { | ||
target[key] = value; | ||
} | ||
} |
"use strict"; | ||
var __rest = (this && this.__rest) || function (s, e) { | ||
var t = {}; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) | ||
t[p] = s[p]; | ||
if (s != null && typeof Object.getOwnPropertySymbols === "function") | ||
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { | ||
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) | ||
t[p[i]] = s[p[i]]; | ||
} | ||
return t; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -9,2 +20,4 @@ exports.exploreApiResponseMetadata = exports.exploreGlobalApiResponseMetadata = void 0; | ||
const constants_2 = require("../constants"); | ||
const decorators_1 = require("../decorators"); | ||
const plugin_constants_1 = require("../plugin/plugin-constants"); | ||
const response_object_factory_1 = require("../services/response-object-factory"); | ||
@@ -24,2 +37,3 @@ const merge_and_uniq_util_1 = require("../utils/merge-and-uniq.util"); | ||
const exploreApiResponseMetadata = (schemas, instance, prototype, method) => { | ||
applyMetadataFactory(prototype); | ||
const responses = Reflect.getMetadata(constants_2.DECORATORS.API_RESPONSE, method); | ||
@@ -58,1 +72,26 @@ if (responses) { | ||
}; | ||
function applyMetadataFactory(prototype) { | ||
const classPrototype = prototype; | ||
do { | ||
if (!prototype.constructor) { | ||
return; | ||
} | ||
if (!prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME]) { | ||
continue; | ||
} | ||
const metadata = prototype.constructor[plugin_constants_1.METADATA_FACTORY_NAME](); | ||
const methodKeys = Object.keys(metadata); | ||
methodKeys.forEach((key) => { | ||
const _a = metadata[key], { summary, deprecated, tags } = _a, meta = __rest(_a, ["summary", "deprecated", "tags"]); | ||
if (Object.keys(meta).length === 0) { | ||
return; | ||
} | ||
if (meta.status === undefined) { | ||
meta.status = getStatusCode(classPrototype[key]); | ||
} | ||
(0, decorators_1.ApiResponse)(meta, { overrideExisting: false })(classPrototype, key, Object.getOwnPropertyDescriptor(classPrototype, key)); | ||
}); | ||
} while ((prototype = Reflect.getPrototypeOf(prototype)) && | ||
prototype !== Object.prototype && | ||
prototype); | ||
} |
@@ -57,1 +57,5 @@ export declare function ApiProperty(): () => void; | ||
export declare function getSchemaPath(): () => string; | ||
export declare function before(): () => string; | ||
export declare function ReadonlyVisitor(): { | ||
new (): {}; | ||
}; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.DocumentBuilder = exports.ApiExtension = exports.ApiTags = exports.ApiSecurity = exports.ApiDefaultResponse = exports.ApiUnsupportedMediaTypeResponse = exports.ApiUnprocessableEntityResponse = exports.ApiServiceUnavailableResponse = exports.ApiRequestTimeoutResponse = exports.ApiPayloadTooLargeResponse = exports.ApiPreconditionFailedResponse = exports.ApiNotImplementedResponse = exports.ApiNotAcceptableResponse = exports.ApiMethodNotAllowedResponse = exports.ApiGoneResponse = exports.ApiGatewayTimeoutResponse = exports.ApiForbiddenResponse = exports.ApiConflictResponse = exports.ApiBadGatewayResponse = exports.ApiInternalServerErrorResponse = exports.ApiNotFoundResponse = exports.ApiTooManyRequestsResponse = exports.ApiUnauthorizedResponse = exports.ApiBadRequestResponse = exports.ApiFoundResponse = exports.ApiMovedPermanentlyResponse = exports.ApiNoContentResponse = exports.ApiAcceptedResponse = exports.ApiCreatedResponse = exports.ApiOkResponse = exports.ApiResponse = exports.ApiQuery = exports.ApiProduces = exports.ApiParam = exports.ApiOperation = exports.ApiOAuth2 = exports.ApiHideProperty = exports.ApiHeaders = exports.ApiHeader = exports.ApiExtraModels = exports.ApiExcludeController = exports.ApiExcludeEndpoint = exports.ApiCookieAuth = exports.ApiConsumes = exports.ApiBody = exports.ApiBearerAuth = exports.ApiBasicAuth = exports.ApiResponseProperty = exports.ApiPropertyOptional = exports.ApiProperty = void 0; | ||
exports.getSchemaPath = exports.PickType = exports.PartialType = exports.OmitType = exports.IntersectionType = exports.SwaggerModule = void 0; | ||
exports.ReadonlyVisitor = exports.before = exports.getSchemaPath = exports.PickType = exports.PartialType = exports.OmitType = exports.IntersectionType = exports.SwaggerModule = void 0; | ||
function ApiProperty() { | ||
@@ -229,1 +229,10 @@ return () => { }; | ||
exports.getSchemaPath = getSchemaPath; | ||
function before() { | ||
return () => ''; | ||
} | ||
exports.before = before; | ||
function ReadonlyVisitor() { | ||
return class { | ||
}; | ||
} | ||
exports.ReadonlyVisitor = ReadonlyVisitor; |
@@ -5,4 +5,5 @@ import 'reflect-metadata'; | ||
export * from './interfaces'; | ||
export * from './plugin'; | ||
export * from './swagger-module'; | ||
export * from './type-helpers'; | ||
export * from './utils'; |
@@ -21,4 +21,5 @@ "use strict"; | ||
__exportStar(require("./interfaces"), exports); | ||
__exportStar(require("./plugin"), exports); | ||
__exportStar(require("./swagger-module"), exports); | ||
__exportStar(require("./type-helpers"), exports); | ||
__exportStar(require("./utils"), exports); |
@@ -7,2 +7,3 @@ export interface SwaggerDocumentOptions { | ||
operationIdFactory?: (controllerKey: string, methodKey: string) => string; | ||
metadata?: Record<string, any>; | ||
} |
@@ -117,3 +117,15 @@ "use strict"; | ||
const methodKey = node.name.getText(); | ||
metadata[methodKey] = objectLiteralExpr; | ||
if (metadata[methodKey]) { | ||
const existingObjectLiteralExpr = metadata[methodKey]; | ||
const existingProperties = existingObjectLiteralExpr.properties; | ||
const updatedProperties = factory.createNodeArray([ | ||
...existingProperties, | ||
...(0, lodash_1.compact)(properties) | ||
]); | ||
const updatedObjectLiteralExpr = factory.createObjectLiteralExpression(updatedProperties); | ||
metadata[methodKey] = updatedObjectLiteralExpr; | ||
} | ||
else { | ||
metadata[methodKey] = objectLiteralExpr; | ||
} | ||
if (apiOperationDecorator) { | ||
@@ -142,6 +154,9 @@ const expr = apiOperationDecorator.expression; | ||
if (existingExprOrUndefined) { | ||
factory.updateObjectLiteralExpression(objectLiteralExpr, [ | ||
...existingExprOrUndefined.properties, | ||
...objectLiteralExpr.properties | ||
const existingProperties = existingExprOrUndefined.properties; | ||
const updatedProperties = factory.createNodeArray([ | ||
...existingProperties, | ||
...(0, lodash_1.compact)(properties) | ||
]); | ||
const updatedObjectLiteralExpr = factory.createObjectLiteralExpression(updatedProperties); | ||
metadata[methodKey] = updatedObjectLiteralExpr; | ||
} | ||
@@ -148,0 +163,0 @@ else { |
@@ -5,2 +5,3 @@ import * as ts from 'typescript'; | ||
private readonly options; | ||
readonly key = "@nestjs/swagger"; | ||
private readonly modelClassVisitor; | ||
@@ -7,0 +8,0 @@ private readonly controllerClassVisitor; |
@@ -12,4 +12,9 @@ "use strict"; | ||
this.options = options; | ||
this.key = '@nestjs/swagger'; | ||
this.modelClassVisitor = new model_class_visitor_1.ModelClassVisitor(); | ||
this.controllerClassVisitor = new controller_class_visitor_1.ControllerClassVisitor(); | ||
options.readonly = true; | ||
if (!options.pathToSource) { | ||
throw new Error(`"pathToSource" must be defined in plugin options`); | ||
} | ||
} | ||
@@ -16,0 +21,0 @@ visit(program, sf) { |
@@ -1,1 +0,1 @@ | ||
export declare const BUILT_IN_TYPES: (ArrayConstructor | ObjectConstructor | StringConstructor | NumberConstructor | BooleanConstructor)[]; | ||
export declare const BUILT_IN_TYPES: (ArrayConstructor | ObjectConstructor | StringConstructor | BooleanConstructor | NumberConstructor)[]; |
import { INestApplication } from '@nestjs/common'; | ||
import { OpenAPIObject, SwaggerCustomOptions, SwaggerDocumentOptions } from './interfaces'; | ||
export declare class SwaggerModule { | ||
private static readonly metadataLoader; | ||
static createDocument(app: INestApplication, config: Omit<OpenAPIObject, 'paths'>, options?: SwaggerDocumentOptions): OpenAPIObject; | ||
@@ -5,0 +6,0 @@ private static serveStatic; |
@@ -5,2 +5,3 @@ "use strict"; | ||
const jsyaml = require("js-yaml"); | ||
const metadata_loader_1 = require("./plugin/metadata-loader"); | ||
const swagger_scanner_1 = require("./swagger-scanner"); | ||
@@ -10,7 +11,10 @@ const swagger_ui_1 = require("./swagger-ui"); | ||
const get_global_prefix_1 = require("./utils/get-global-prefix"); | ||
const validate_path_util_1 = require("./utils/validate-path.util"); | ||
const normalize_rel_path_1 = require("./utils/normalize-rel-path"); | ||
const validate_global_prefix_util_1 = require("./utils/validate-global-prefix.util"); | ||
const validate_path_util_1 = require("./utils/validate-path.util"); | ||
class SwaggerModule { | ||
static createDocument(app, config, options = {}) { | ||
if (options.metadata) { | ||
this.metadataLoader.load(options.metadata); | ||
} | ||
const swaggerScanner = new swagger_scanner_1.SwaggerScanner(); | ||
@@ -104,2 +108,3 @@ const document = swaggerScanner.scanApplication(app, options); | ||
} | ||
SwaggerModule.metadataLoader = new metadata_loader_1.MetadataLoader(); | ||
exports.SwaggerModule = SwaggerModule; |
{ | ||
"name": "@nestjs/swagger", | ||
"version": "6.4.0-next.1", | ||
"version": "6.4.0-next.2", | ||
"description": "Nest - modern, fast, powerful node.js web framework (@swagger)", | ||
@@ -5,0 +5,0 @@ "author": "Kamil Mysliwiec", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
295685
232
6030
3