@nestjs/swagger
Advanced tools
Comparing version 6.1.0 to 6.1.1
import * as ts from 'typescript'; | ||
export declare function getDecoratorOrUndefinedByNames(names: string[], decorators: ts.NodeArray<ts.Decorator>): ts.Decorator | undefined; | ||
export declare function getDecoratorOrUndefinedByNames(names: string[], decorators: ts.NodeArray<ts.Decorator>, factory: ts.NodeFactory): ts.Decorator | undefined; | ||
export declare function getTypeReferenceAsString(type: ts.Type, typeChecker: ts.TypeChecker): string; | ||
@@ -4,0 +4,0 @@ export declare function isPromiseOrObservable(type: string): boolean; |
@@ -8,4 +8,4 @@ "use strict"; | ||
const ast_utils_1 = require("./ast-utils"); | ||
function getDecoratorOrUndefinedByNames(names, decorators) { | ||
return (decorators || ts.createNodeArray()).find((item) => { | ||
function getDecoratorOrUndefinedByNames(names, decorators, factory) { | ||
return (decorators || factory.createNodeArray()).find((item) => { | ||
try { | ||
@@ -12,0 +12,0 @@ const decoratorName = (0, ast_utils_1.getDecoratorName)(item); |
import * as ts from 'typescript'; | ||
export declare class AbstractFileVisitor { | ||
updateImports(sourceFile: ts.SourceFile, factory: ts.NodeFactory | undefined): ts.SourceFile; | ||
updateImports(sourceFile: ts.SourceFile, factory: ts.NodeFactory | undefined, program: ts.Program): ts.SourceFile; | ||
} |
"use strict"; | ||
var _a; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -6,6 +7,5 @@ exports.AbstractFileVisitor = void 0; | ||
const plugin_constants_1 = require("../plugin-constants"); | ||
const [major, minor] = (_a = ts.versionMajorMinor) === null || _a === void 0 ? void 0 : _a.split('.').map((x) => +x); | ||
class AbstractFileVisitor { | ||
updateImports(sourceFile, factory) { | ||
var _a; | ||
const [major, minor] = (_a = ts.versionMajorMinor) === null || _a === void 0 ? void 0 : _a.split('.').map((x) => +x); | ||
updateImports(sourceFile, factory, program) { | ||
if (!factory) { | ||
@@ -20,11 +20,26 @@ const importEqualsDeclaration = major == 4 && minor >= 2 | ||
} | ||
const importEqualsDeclaration = major == 4 && minor >= 2 | ||
? factory.createImportEqualsDeclaration(undefined, undefined, false, plugin_constants_1.OPENAPI_NAMESPACE, factory.createExternalModuleReference(factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME))) | ||
const importEqualsDeclaration = major >= 4 && minor >= 2 | ||
? minor >= 8 | ||
? factory.createImportEqualsDeclaration(undefined, false, factory.createIdentifier(plugin_constants_1.OPENAPI_NAMESPACE), factory.createExternalModuleReference(factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME))) | ||
: factory.createImportEqualsDeclaration(undefined, undefined, false, plugin_constants_1.OPENAPI_NAMESPACE, factory.createExternalModuleReference(factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME))) | ||
: factory.createImportEqualsDeclaration(undefined, undefined, plugin_constants_1.OPENAPI_NAMESPACE, factory.createExternalModuleReference(factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME))); | ||
return factory.updateSourceFile(sourceFile, [ | ||
importEqualsDeclaration, | ||
...sourceFile.statements | ||
]); | ||
const compilerOptions = program.getCompilerOptions(); | ||
if (compilerOptions.module >= ts.ModuleKind.ES2015 && | ||
compilerOptions.module <= ts.ModuleKind.ESNext) { | ||
const importAsDeclaration = (minor >= 8 && major >= 4) || major >= 5 | ||
? factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier(plugin_constants_1.OPENAPI_NAMESPACE))), factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME), undefined) | ||
: factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamespaceImport(factory.createIdentifier(plugin_constants_1.OPENAPI_NAMESPACE))), factory.createStringLiteral(plugin_constants_1.OPENAPI_PACKAGE_NAME), undefined); | ||
return factory.updateSourceFile(sourceFile, [ | ||
importAsDeclaration, | ||
...sourceFile.statements | ||
]); | ||
} | ||
else { | ||
return factory.updateSourceFile(sourceFile, [ | ||
importEqualsDeclaration, | ||
...sourceFile.statements | ||
]); | ||
} | ||
} | ||
} | ||
exports.AbstractFileVisitor = AbstractFileVisitor; |
"use strict"; | ||
var _a; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -11,6 +12,8 @@ exports.ControllerClassVisitor = void 0; | ||
const abstract_visitor_1 = require("./abstract.visitor"); | ||
const [tsVersionMajor, tsVersionMinor] = (_a = ts.versionMajorMinor) === null || _a === void 0 ? void 0 : _a.split('.').map((x) => +x); | ||
const isInUpdatedAstContext = tsVersionMinor >= 8 || tsVersionMajor > 4; | ||
class ControllerClassVisitor extends abstract_visitor_1.AbstractFileVisitor { | ||
visit(sourceFile, ctx, program, options) { | ||
const typeChecker = program.getTypeChecker(); | ||
sourceFile = this.updateImports(sourceFile, ctx.factory); | ||
sourceFile = this.updateImports(sourceFile, ctx.factory, program); | ||
const visitNode = (node) => { | ||
@@ -30,11 +33,17 @@ if (ts.isMethodDeclaration(node)) { | ||
addDecoratorToNode(factory, compilerNode, typeChecker, options, hostFilename, sourceFile) { | ||
if (!compilerNode.decorators) { | ||
const decorators = ts.canHaveDecorators | ||
? ts.getDecorators(compilerNode) | ||
: compilerNode.decorators; | ||
if (!decorators) { | ||
return compilerNode; | ||
} | ||
const apiOperationDecoratorsArray = this.createApiOperationDecorator(factory, compilerNode, compilerNode.decorators, options, sourceFile, typeChecker); | ||
const apiOperationDecoratorsArray = this.createApiOperationDecorator(factory, compilerNode, decorators, options, sourceFile, typeChecker); | ||
const removeExistingApiOperationDecorator = apiOperationDecoratorsArray.length > 0; | ||
const existingDecorators = removeExistingApiOperationDecorator | ||
? compilerNode.decorators.filter((item) => (0, ast_utils_1.getDecoratorName)(item) !== decorators_1.ApiOperation.name) | ||
: compilerNode.decorators; | ||
return factory.updateMethodDeclaration(compilerNode, [ | ||
? decorators.filter((item) => (0, ast_utils_1.getDecoratorName)(item) !== decorators_1.ApiOperation.name) | ||
: decorators; | ||
const modifiers = isInUpdatedAstContext | ||
? ts.getModifiers(compilerNode) | ||
: compilerNode.modifiers; | ||
const updatedDecorators = [ | ||
...apiOperationDecoratorsArray, | ||
@@ -45,3 +54,6 @@ ...existingDecorators, | ||
])) | ||
], compilerNode.modifiers, compilerNode.asteriskToken, compilerNode.name, compilerNode.questionToken, compilerNode.typeParameters, compilerNode.parameters, compilerNode.type, compilerNode.body); | ||
]; | ||
return isInUpdatedAstContext | ||
? factory.updateMethodDeclaration(compilerNode, [...updatedDecorators, ...modifiers], compilerNode.asteriskToken, compilerNode.name, compilerNode.questionToken, compilerNode.typeParameters, compilerNode.parameters, compilerNode.type, compilerNode.body) | ||
: factory.updateMethodDeclaration(compilerNode, updatedDecorators, modifiers, compilerNode.asteriskToken, compilerNode.name, compilerNode.questionToken, compilerNode.typeParameters, compilerNode.parameters, compilerNode.type, compilerNode.body); | ||
} | ||
@@ -53,3 +65,3 @@ createApiOperationDecorator(factory, node, nodeArray, options, sourceFile, typeChecker) { | ||
const keyToGenerate = options.controllerKeyOfComment; | ||
const apiOperationDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decorators_1.ApiOperation.name], nodeArray); | ||
const apiOperationDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decorators_1.ApiOperation.name], nodeArray, factory); | ||
const apiOperationExpr = apiOperationDecorator && | ||
@@ -119,4 +131,6 @@ (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(apiOperationDecorator)); | ||
getStatusCodeIdentifier(factory, node) { | ||
const decorators = node.decorators; | ||
const httpCodeDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['HttpCode'], decorators); | ||
const decorators = ts.canHaveDecorators | ||
? ts.getDecorators(node) | ||
: node.decorators; | ||
const httpCodeDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['HttpCode'], decorators, factory); | ||
if (httpCodeDecorator) { | ||
@@ -128,3 +142,3 @@ const argument = (0, lodash_1.head)((0, ast_utils_1.getDecoratorArguments)(httpCodeDecorator)); | ||
} | ||
const postDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['Post'], decorators); | ||
const postDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)(['Post'], decorators, factory); | ||
if (postDecorator) { | ||
@@ -131,0 +145,0 @@ return factory.createIdentifier('201'); |
import * as ts from 'typescript'; | ||
import { PropertyAssignment } from 'typescript'; | ||
import { PluginOptions } from '../merge-options'; | ||
import { AbstractFileVisitor } from './abstract.visitor'; | ||
import { PropertyAssignment } from 'typescript'; | ||
declare type ClassMetadata = Record<string, ts.ObjectLiteralExpression>; | ||
export declare class ModelClassVisitor extends AbstractFileVisitor { | ||
visit(sourceFile: ts.SourceFile, ctx: ts.TransformationContext, program: ts.Program, options: PluginOptions): ts.SourceFile; | ||
addMetadataFactory(factory: ts.NodeFactory, node: ts.ClassDeclaration, classMetadata: ClassMetadata): ts.ClassDeclaration; | ||
addMetadataFactory(factory: ts.NodeFactory, node: ts.ClassDeclaration, classMetadata: ClassMetadata): any; | ||
inspectPropertyDeclaration(factory: ts.NodeFactory, compilerNode: ts.PropertyDeclaration, typeChecker: ts.TypeChecker, options: PluginOptions, hostFilename: string, sourceFile: ts.SourceFile, metadata: ClassMetadata): void; | ||
@@ -10,0 +10,0 @@ createDecoratorObjectLiteralExpr(factory: ts.NodeFactory, node: ts.PropertyDeclaration | ts.PropertySignature, typeChecker: ts.TypeChecker, existingProperties?: ts.NodeArray<ts.PropertyAssignment>, options?: PluginOptions, hostFilename?: string, sourceFile?: ts.SourceFile): ts.ObjectLiteralExpression; |
"use strict"; | ||
var _a; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -6,2 +7,3 @@ exports.ModelClassVisitor = void 0; | ||
const ts = require("typescript"); | ||
const typescript_1 = require("typescript"); | ||
const decorators_1 = require("../../decorators"); | ||
@@ -12,10 +14,14 @@ const plugin_constants_1 = require("../plugin-constants"); | ||
const abstract_visitor_1 = require("./abstract.visitor"); | ||
const [tsVersionMajor, tsVersionMinor] = (_a = ts.versionMajorMinor) === null || _a === void 0 ? void 0 : _a.split('.').map((x) => +x); | ||
const isInUpdatedAstContext = tsVersionMinor >= 8 || tsVersionMajor > 4; | ||
class ModelClassVisitor extends abstract_visitor_1.AbstractFileVisitor { | ||
visit(sourceFile, ctx, program, options) { | ||
const typeChecker = program.getTypeChecker(); | ||
sourceFile = this.updateImports(sourceFile, ctx.factory); | ||
sourceFile = this.updateImports(sourceFile, ctx.factory, program); | ||
const propertyNodeVisitorFactory = (metadata) => (node) => { | ||
if (ts.isPropertyDeclaration(node)) { | ||
const decorators = node.decorators; | ||
const hidePropertyDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decorators_1.ApiHideProperty.name], decorators); | ||
const decorators = ts.canHaveDecorators | ||
? ts.getDecorators(node) | ||
: node.decorators; | ||
const hidePropertyDecorator = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decorators_1.ApiHideProperty.name], decorators, typescript_1.factory); | ||
if (hidePropertyDecorator) { | ||
@@ -49,4 +55,8 @@ return node; | ||
const returnValue = factory.createObjectLiteralExpression(Object.keys(classMetadata).map((key) => factory.createPropertyAssignment(factory.createIdentifier(key), classMetadata[key]))); | ||
const method = factory.createMethodDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.StaticKeyword)], undefined, factory.createIdentifier(plugin_constants_1.METADATA_FACTORY_NAME), undefined, undefined, [], undefined, factory.createBlock([factory.createReturnStatement(returnValue)], true)); | ||
return factory.updateClassDeclaration(node, node.decorators, node.modifiers, node.name, node.typeParameters, node.heritageClauses, [...node.members, method]); | ||
const method = isInUpdatedAstContext | ||
? factory.createMethodDeclaration([factory.createModifier(ts.SyntaxKind.StaticKeyword)], undefined, factory.createIdentifier(plugin_constants_1.METADATA_FACTORY_NAME), undefined, undefined, [], undefined, factory.createBlock([factory.createReturnStatement(returnValue)], true)) | ||
: factory.createMethodDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.StaticKeyword)], undefined, factory.createIdentifier(plugin_constants_1.METADATA_FACTORY_NAME), undefined, undefined, [], undefined, factory.createBlock([factory.createReturnStatement(returnValue)], true)); | ||
return isInUpdatedAstContext | ||
? factory.updateClassDeclaration(node, node.modifiers, node.name, node.typeParameters, node.heritageClauses, [...node.members, method]) | ||
: factory.updateClassDeclaration(node, node.decorators, node.modifiers, node.name, node.typeParameters, node.heritageClauses, [...node.members, method]); | ||
} | ||
@@ -176,3 +186,5 @@ inspectPropertyDeclaration(factory, compilerNode, typeChecker, options, hostFilename, sourceFile, metadata) { | ||
const assignments = []; | ||
const decorators = node.decorators; | ||
const decorators = ts.canHaveDecorators | ||
? ts.getDecorators(node) | ||
: node.decorators; | ||
this.addPropertyByValidationDecorator(factory, 'IsIn', 'enum', decorators, assignments); | ||
@@ -220,3 +232,3 @@ this.addPropertyByValidationDecorator(factory, 'Min', 'minimum', decorators, assignments); | ||
addPropertiesByValidationDecorator(factory, decoratorName, decorators, assignments, addPropertyAssignments) { | ||
const decoratorRef = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decoratorName], decorators); | ||
const decoratorRef = (0, plugin_utils_1.getDecoratorOrUndefinedByNames)([decoratorName], decorators, factory); | ||
if (!decoratorRef) { | ||
@@ -223,0 +235,0 @@ return; |
@@ -20,5 +20,6 @@ "use strict"; | ||
const httpAdapter = app.getHttpAdapter(); | ||
const swaggerAssetsAbsoluteFSPath = (0, swagger_ui_1.getSwaggerAssetsAbsoluteFSPath)(); | ||
if (httpAdapter && httpAdapter.getType() === 'fastify') { | ||
app.useStaticAssets({ | ||
root: swagger_ui_1.swaggerAssetsAbsoluteFSPath, | ||
root: swaggerAssetsAbsoluteFSPath, | ||
prefix: finalPath, | ||
@@ -29,3 +30,3 @@ decorateReply: false | ||
else { | ||
app.useStaticAssets(swagger_ui_1.swaggerAssetsAbsoluteFSPath, { prefix: finalPath }); | ||
app.useStaticAssets(swaggerAssetsAbsoluteFSPath, { prefix: finalPath }); | ||
} | ||
@@ -32,0 +33,0 @@ } |
import { OpenAPIObject, SwaggerCustomOptions } from '../interfaces'; | ||
export declare function buildSwaggerInitJS(swaggerDoc: OpenAPIObject, customOptions?: SwaggerCustomOptions): string; | ||
export declare const swaggerAssetsAbsoluteFSPath: any; | ||
export declare function getSwaggerAssetsAbsoluteFSPath(): string; | ||
export declare function buildSwaggerHTML(baseUrl: string, swaggerDoc: OpenAPIObject, customOptions?: SwaggerCustomOptions): string; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.buildSwaggerHTML = exports.swaggerAssetsAbsoluteFSPath = exports.buildSwaggerInitJS = void 0; | ||
const swaggerUi = require("swagger-ui-dist"); | ||
exports.buildSwaggerHTML = exports.getSwaggerAssetsAbsoluteFSPath = exports.buildSwaggerInitJS = void 0; | ||
const constants_1 = require("./constants"); | ||
@@ -18,3 +17,11 @@ const helpers_1 = require("./helpers"); | ||
exports.buildSwaggerInitJS = buildSwaggerInitJS; | ||
exports.swaggerAssetsAbsoluteFSPath = swaggerUi.getAbsoluteFSPath(); | ||
let swaggerAssetsAbsoluteFSPath; | ||
function getSwaggerAssetsAbsoluteFSPath() { | ||
if (!swaggerAssetsAbsoluteFSPath) { | ||
const swaggerUi = require('swagger-ui-dist'); | ||
swaggerAssetsAbsoluteFSPath = swaggerUi.getAbsoluteFSPath(); | ||
} | ||
return swaggerAssetsAbsoluteFSPath; | ||
} | ||
exports.getSwaggerAssetsAbsoluteFSPath = getSwaggerAssetsAbsoluteFSPath; | ||
function buildSwaggerHTML(baseUrl, swaggerDoc, customOptions = {}) { | ||
@@ -21,0 +28,0 @@ const { customCss = '', customJs = '', customJsStr = '', customfavIcon = false, customSiteTitle = 'Swagger UI', customCssUrl = '', explorer = false } = customOptions; |
{ | ||
"name": "@nestjs/swagger", | ||
"version": "6.1.0", | ||
"version": "6.1.1", | ||
"description": "Nest - modern, fast, powerful node.js web framework (@swagger)", | ||
@@ -34,4 +34,4 @@ "author": "Kamil Mysliwiec", | ||
"devDependencies": { | ||
"@commitlint/cli": "17.0.3", | ||
"@commitlint/config-angular": "17.0.3", | ||
"@commitlint/cli": "17.1.2", | ||
"@commitlint/config-angular": "17.1.0", | ||
"@fastify/static": "6.5.0", | ||
@@ -42,11 +42,11 @@ "@nestjs/common": "9.0.11", | ||
"@nestjs/platform-fastify": "9.0.11", | ||
"@types/jest": "28.1.8", | ||
"@types/jest": "29.0.0", | ||
"@types/js-yaml": "4.0.5", | ||
"@types/lodash": "4.14.184", | ||
"@types/node": "17.0.35", | ||
"@typescript-eslint/eslint-plugin": "5.35.1", | ||
"@typescript-eslint/parser": "5.35.1", | ||
"@typescript-eslint/eslint-plugin": "5.36.1", | ||
"@typescript-eslint/parser": "5.36.1", | ||
"class-transformer": "0.5.1", | ||
"class-validator": "0.13.2", | ||
"eslint": "8.22.0", | ||
"eslint": "8.23.0", | ||
"eslint-config-prettier": "8.5.0", | ||
@@ -56,12 +56,12 @@ "eslint-plugin-import": "2.26.0", | ||
"husky": "8.0.1", | ||
"jest": "29.0.0", | ||
"jest": "29.0.1", | ||
"lint-staged": "13.0.3", | ||
"openapi-types": "12.0.0", | ||
"openapi-types": "12.0.2", | ||
"prettier": "2.7.1", | ||
"reflect-metadata": "0.1.13", | ||
"release-it": "15.4.0", | ||
"release-it": "15.4.1", | ||
"supertest": "6.2.4", | ||
"swagger-parser": "10.0.3", | ||
"ts-jest": "28.0.8", | ||
"typescript": "4.7.4" | ||
"typescript": "4.8.2" | ||
}, | ||
@@ -68,0 +68,0 @@ "peerDependencies": { |
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
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
278133
5595