????

Your IP : 52.15.123.168


Current Path : C:/inetpub/vhost/invest.gdtsolutions.vn/api/node_modules/@dataui/crud/lib/crud/
Upload File :
Current File : C:/inetpub/vhost/invest.gdtsolutions.vn/api/node_modules/@dataui/crud/lib/crud/swagger.helper.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ApiProperty = exports.Swagger = exports.swaggerPkgJson = exports.swaggerConst = exports.swagger = void 0;
const common_1 = require("@nestjs/common");
const crud_request_1 = require("@dataui/crud-request");
const crud_util_1 = require("@dataui/crud-util");
const util_1 = require("../util");
const reflection_helper_1 = require("./reflection.helper");
const pluralize = require('pluralize');
exports.swagger = util_1.safeRequire('@nestjs/swagger', () => require('@nestjs/swagger'));
exports.swaggerConst = util_1.safeRequire('@nestjs/swagger/dist/constants', () => require('@nestjs/swagger/dist/constants'));
exports.swaggerPkgJson = util_1.safeRequire('@nestjs/swagger/package.json', () => require('@nestjs/swagger/package.json'));
class Swagger {
    static operationsMap(modelName) {
        return {
            getManyBase: `Retrieve multiple ${pluralize(modelName)}`,
            getOneBase: `Retrieve a single ${modelName}`,
            createManyBase: `Create multiple ${pluralize(modelName)}`,
            createOneBase: `Create a single ${modelName}`,
            updateOneBase: `Update a single ${modelName}`,
            replaceOneBase: `Replace a single ${modelName}`,
            deleteOneBase: `Delete a single ${modelName}`,
            recoverOneBase: `Recover one ${modelName}`,
        };
    }
    static setOperation(metadata, func) {
        if (exports.swaggerConst) {
            reflection_helper_1.R.set(exports.swaggerConst.DECORATORS.API_OPERATION, metadata, func);
        }
    }
    static setParams(metadata, func) {
        if (exports.swaggerConst) {
            reflection_helper_1.R.set(exports.swaggerConst.DECORATORS.API_PARAMETERS, metadata, func);
        }
    }
    static setExtraModels(swaggerModels) {
        if (exports.swaggerConst) {
            const meta = Swagger.getExtraModels(swaggerModels.get);
            const models = [
                ...meta,
                ...crud_util_1.objKeys(swaggerModels)
                    .map((name) => swaggerModels[name])
                    .filter((one) => one && one.name !== swaggerModels.get.name),
            ];
            reflection_helper_1.R.set(exports.swaggerConst.DECORATORS.API_EXTRA_MODELS, models, swaggerModels.get);
        }
    }
    static setResponseOk(metadata, func) {
        if (exports.swaggerConst) {
            reflection_helper_1.R.set(exports.swaggerConst.DECORATORS.API_RESPONSE, metadata, func);
        }
    }
    static getOperation(func) {
        return exports.swaggerConst ? reflection_helper_1.R.get(exports.swaggerConst.DECORATORS.API_OPERATION, func) || {} : {};
    }
    static getParams(func) {
        return exports.swaggerConst ? reflection_helper_1.R.get(exports.swaggerConst.DECORATORS.API_PARAMETERS, func) || [] : [];
    }
    static getExtraModels(target) {
        return exports.swaggerConst
            ? reflection_helper_1.R.get(exports.swaggerConst.DECORATORS.API_EXTRA_MODELS, target) || []
            : [];
    }
    static getResponseOk(func) {
        return exports.swaggerConst ? reflection_helper_1.R.get(exports.swaggerConst.DECORATORS.API_RESPONSE, func) || {} : {};
    }
    static createResponseMeta(name, options, swaggerModels) {
        if (exports.swagger) {
            const { routes, query } = options;
            const oldVersion = Swagger.getSwaggerVersion() < 4;
            switch (name) {
                case 'getOneBase':
                    return {
                        [common_1.HttpStatus.OK]: {
                            description: 'Get one base response',
                            type: swaggerModels.get,
                        },
                    };
                case 'getManyBase':
                    if (oldVersion) {
                        return {
                            [common_1.HttpStatus.OK]: {
                                type: swaggerModels.getMany,
                            },
                        };
                    }
                    return {
                        [common_1.HttpStatus.OK]: query.alwaysPaginate
                            ? {
                                description: 'Get paginated response',
                                type: swaggerModels.getMany,
                            }
                            : {
                                description: 'Get many base response',
                                schema: {
                                    oneOf: [
                                        { $ref: exports.swagger.getSchemaPath(swaggerModels.getMany.name) },
                                        {
                                            type: 'array',
                                            items: { $ref: exports.swagger.getSchemaPath(swaggerModels.get.name) },
                                        },
                                    ],
                                },
                            },
                    };
                case 'createOneBase':
                    if (oldVersion) {
                        return {
                            [common_1.HttpStatus.OK]: {
                                type: swaggerModels.create,
                            },
                        };
                    }
                    return {
                        [common_1.HttpStatus.CREATED]: {
                            description: 'Get create one base response',
                            schema: { $ref: exports.swagger.getSchemaPath(swaggerModels.create.name) },
                        },
                    };
                case 'createManyBase':
                    if (oldVersion) {
                        return {
                            [common_1.HttpStatus.OK]: {
                                type: swaggerModels.create,
                                isArray: true,
                            },
                        };
                    }
                    return {
                        [common_1.HttpStatus.CREATED]: swaggerModels.createMany
                            ? {
                                description: 'Get create many base response',
                                schema: { $ref: exports.swagger.getSchemaPath(swaggerModels.createMany.name) },
                            }
                            : {
                                description: 'Get create many base response',
                                schema: {
                                    type: 'array',
                                    items: { $ref: exports.swagger.getSchemaPath(swaggerModels.create.name) },
                                },
                            },
                    };
                case 'deleteOneBase':
                    if (oldVersion) {
                        return {
                            [common_1.HttpStatus.OK]: routes.deleteOneBase.returnDeleted
                                ? {
                                    type: swaggerModels.delete,
                                }
                                : {},
                        };
                    }
                    return {
                        [common_1.HttpStatus.OK]: routes.deleteOneBase.returnDeleted
                            ? {
                                description: 'Delete one base response',
                                schema: { $ref: exports.swagger.getSchemaPath(swaggerModels.delete.name) },
                            }
                            : {
                                description: 'Delete one base response',
                            },
                    };
                case 'recoverOneBase':
                    if (oldVersion) {
                        return {
                            [common_1.HttpStatus.OK]: routes.recoverOneBase.returnRecovered
                                ? {
                                    type: swaggerModels.delete,
                                }
                                : {},
                        };
                    }
                    return {
                        [common_1.HttpStatus.OK]: routes.recoverOneBase.returnRecovered
                            ? {
                                description: 'Recover one base response',
                                schema: { $ref: exports.swagger.getSchemaPath(swaggerModels.recover.name) },
                            }
                            : {
                                description: 'Recover one base response',
                            },
                    };
                default:
                    const dto = swaggerModels[name.split('OneBase')[0]];
                    if (oldVersion) {
                        return {
                            [common_1.HttpStatus.OK]: {
                                type: dto,
                            },
                        };
                    }
                    return {
                        [common_1.HttpStatus.OK]: {
                            description: 'Response',
                            schema: { $ref: exports.swagger.getSchemaPath(dto.name) },
                        },
                    };
            }
        }
        else {
            return {};
        }
    }
    static createPathParamsMeta(options) {
        return exports.swaggerConst
            ? crud_util_1.objKeys(options).map((param) => ({
                name: param,
                required: true,
                in: 'path',
                type: options[param].type === 'number' ? Number : String,
                enum: options[param].enum ? Object.values(options[param].enum) : undefined,
            }))
            : [];
    }
    static createQueryParamsMeta(name, options) {
        if (!exports.swaggerConst) {
            return [];
        }
        const { delim: d, delimStr: coma, fields, search, filter, or, join, sort, limit, offset, page, cache, includeDeleted, } = Swagger.getQueryParamsNames();
        const oldVersion = Swagger.getSwaggerVersion() < 4;
        const docsLink = (a) => `<a href="https://github.com/nestjsx/crud/wiki/Requests#${a}" target="_blank">Docs</a>`;
        const fieldsMetaBase = {
            name: fields,
            description: `Selects resource fields. ${docsLink('select')}`,
            required: false,
            in: 'query',
        };
        const fieldsMeta = oldVersion
            ? {
                ...fieldsMetaBase,
                type: 'array',
                items: {
                    type: 'string',
                },
                collectionFormat: 'csv',
            }
            : {
                ...fieldsMetaBase,
                schema: {
                    type: 'array',
                    items: {
                        type: 'string',
                    },
                },
                style: 'form',
                explode: false,
            };
        const searchMetaBase = {
            name: search,
            description: `Adds search condition. ${docsLink('search')}`,
            required: false,
            in: 'query',
        };
        const searchMeta = oldVersion
            ? { ...searchMetaBase, type: 'string' }
            : { ...searchMetaBase, schema: { type: 'string' } };
        const filterMetaBase = {
            name: filter,
            description: `Adds filter condition. ${docsLink('filter')}`,
            required: false,
            in: 'query',
        };
        const filterMeta = oldVersion
            ? {
                ...filterMetaBase,
                items: {
                    type: 'string',
                },
                type: 'array',
                collectionFormat: 'multi',
            }
            : {
                ...filterMetaBase,
                schema: {
                    type: 'array',
                    items: {
                        type: 'string',
                    },
                },
                style: 'form',
                explode: true,
            };
        const orMetaBase = {
            name: or,
            description: `Adds OR condition. ${docsLink('or')}`,
            required: false,
            in: 'query',
        };
        const orMeta = oldVersion
            ? {
                ...orMetaBase,
                items: {
                    type: 'string',
                },
                type: 'array',
                collectionFormat: 'multi',
            }
            : {
                ...orMetaBase,
                schema: {
                    type: 'array',
                    items: {
                        type: 'string',
                    },
                },
                style: 'form',
                explode: true,
            };
        const sortMetaBase = {
            name: sort,
            description: `Adds sort by field. ${docsLink('sort')}`,
            required: false,
            in: 'query',
        };
        const sortMeta = oldVersion
            ? {
                ...sortMetaBase,
                items: {
                    type: 'string',
                },
                type: 'array',
                collectionFormat: 'multi',
            }
            : {
                ...sortMetaBase,
                schema: {
                    type: 'array',
                    items: {
                        type: 'string',
                    },
                },
                style: 'form',
                explode: true,
            };
        const joinMetaBase = {
            name: join,
            description: `Adds relational resources. ${docsLink('join')}`,
            required: false,
            in: 'query',
        };
        const joinMeta = oldVersion
            ? {
                ...joinMetaBase,
                items: {
                    type: 'string',
                },
                type: 'array',
                collectionFormat: 'multi',
            }
            : {
                ...joinMetaBase,
                schema: {
                    type: 'array',
                    items: {
                        type: 'string',
                    },
                },
                style: 'form',
                explode: true,
            };
        const limitMetaBase = {
            name: limit,
            description: `Limit amount of resources. ${docsLink('limit')}`,
            required: false,
            in: 'query',
        };
        const limitMeta = oldVersion
            ? { ...limitMetaBase, type: 'integer' }
            : { ...limitMetaBase, schema: { type: 'integer' } };
        const offsetMetaBase = {
            name: offset,
            description: `Offset amount of resources. ${docsLink('offset')}`,
            required: false,
            in: 'query',
        };
        const offsetMeta = oldVersion
            ? { ...offsetMetaBase, type: 'integer' }
            : { ...offsetMetaBase, schema: { type: 'integer' } };
        const pageMetaBase = {
            name: page,
            description: `Page portion of resources. ${docsLink('page')}`,
            required: false,
            in: 'query',
        };
        const pageMeta = oldVersion
            ? { ...pageMetaBase, type: 'integer' }
            : { ...pageMetaBase, schema: { type: 'integer' } };
        const cacheMetaBase = {
            name: cache,
            description: `Reset cache (if was enabled). ${docsLink('cache')}`,
            required: false,
            in: 'query',
        };
        const cacheMeta = oldVersion
            ? {
                ...cacheMetaBase,
                type: 'integer',
                minimum: 0,
                maximum: 1,
            }
            : { ...cacheMetaBase, schema: { type: 'integer', minimum: 0, maximum: 1 } };
        const includeDeletedMetaBase = {
            name: includeDeleted,
            description: `Include deleted. ${docsLink('includeDeleted')}`,
            required: false,
            in: 'query',
        };
        const includeDeletedMeta = oldVersion
            ? {
                ...includeDeletedMetaBase,
                type: 'integer',
                minimum: 0,
                maximum: 1,
            }
            : {
                ...includeDeletedMetaBase,
                schema: { type: 'integer', minimum: 0, maximum: 1 },
            };
        switch (name) {
            case 'getManyBase':
                return options.query.softDelete
                    ? [
                        fieldsMeta,
                        searchMeta,
                        filterMeta,
                        orMeta,
                        sortMeta,
                        joinMeta,
                        limitMeta,
                        offsetMeta,
                        pageMeta,
                        cacheMeta,
                        includeDeletedMeta,
                    ]
                    : [
                        fieldsMeta,
                        searchMeta,
                        filterMeta,
                        orMeta,
                        sortMeta,
                        joinMeta,
                        limitMeta,
                        offsetMeta,
                        pageMeta,
                        cacheMeta,
                    ];
            case 'getOneBase':
                return options.query.softDelete
                    ? [fieldsMeta, joinMeta, cacheMeta, includeDeletedMeta]
                    : [fieldsMeta, joinMeta, cacheMeta];
            default:
                return [];
        }
    }
    static getQueryParamsNames() {
        const qbOptions = crud_request_1.RequestQueryBuilder.getOptions();
        const name = (n) => {
            const selected = qbOptions.paramNamesMap[n];
            return crud_util_1.isString(selected) ? selected : selected[0];
        };
        return {
            delim: qbOptions.delim,
            delimStr: qbOptions.delimStr,
            fields: name('fields'),
            search: name('search'),
            filter: name('filter'),
            or: name('or'),
            join: name('join'),
            sort: name('sort'),
            limit: name('limit'),
            offset: name('offset'),
            page: name('page'),
            cache: name('cache'),
            includeDeleted: name('includeDeleted'),
        };
    }
    static getSwaggerVersion() {
        return exports.swaggerPkgJson
            ? parseInt(exports.swaggerPkgJson.version[0], 10)
            : 3;
    }
}
exports.Swagger = Swagger;
function ApiProperty(options) {
    return (target, propertyKey) => {
        if (exports.swagger) {
            const ApiPropertyDecorator = exports.swagger.ApiProperty || exports.swagger.ApiModelProperty;
            ApiPropertyDecorator(options)(target, propertyKey);
        }
    };
}
exports.ApiProperty = ApiProperty;
//# sourceMappingURL=swagger.helper.js.map