Socket
Socket
Sign inDemoInstall

@nestjs/swagger

Package Overview
Dependencies
Maintainers
2
Versions
206
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nestjs/swagger - npm Package Compare versions

Comparing version 6.1.0 to 6.1.1

2

dist/plugin/utils/plugin-utils.d.ts
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": {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc