yasui
Version:
Lightweight Express-based framework for REST and web APIs
54 lines • 4.66 kB
JavaScript
import { ReflectMetadata } from '../utils/reflect.js';
import { ErrorResourceSchema } from './error.resource.js';
import { getMetadata, defineMetadata } from './reflect.js';
import { resolveSchema } from './index.js';
export const ERROR_RESOURCE_SCHEMA_NAME = 'Error Response';
export function extractDecoratorUsage(def) {
if (typeof def === 'function') {
return 'Constructible';
}
else if (Array.isArray(def)) {
return 'Array';
}
else if ('$ref' in def) {
return 'RefSchema';
}
else if ('type' in def) {
return def.type === 'object' ? 'ObjectSchema' : 'PrimitiveSchema';
}
else if ('enum' in def) {
return 'Enum';
}
return 'Record';
}
export function mapTypeToSchema(type) {
switch (type) {
case String: return { type: 'string' };
case Number: return { type: 'number' };
case Boolean: return { type: 'boolean' };
case Date: return { type: 'string', format: 'date-time' };
case Array: return { type: 'array', items: { type: 'string' } };
case Object: return { type: 'object' };
default:
if (type.name && type.name !== 'Object') {
return { $ref: '' };
}
return { type: 'object' };
}
}
export function overloadCustomErrorDefinition(statusCode = 500, ErrorDataClass) {
const errorDataClassDefinition = getMetadata(ReflectMetadata.SWAGGER_SCHEMA_DEFINITION, ErrorDataClass.prototype);
const errorDataClassSchema = {};
for (const property in errorDataClassDefinition) {
errorDataClassSchema[property] = resolveSchema(errorDataClassDefinition[property]);
}
defineMetadata(ReflectMetadata.SWAGGER_SCHEMA_DEFINITION, {
...ErrorResourceSchema(statusCode).properties,
data: {
type: 'object',
properties: errorDataClassSchema,
}
}, ErrorDataClass.prototype);
return ErrorDataClass;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dhZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zd2FnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSTNDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGdCQUFnQixDQUFDO0FBWTNELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUEwQjtJQUM5RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO1NBQU0sSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztTQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDcEUsQ0FBQztTQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFjO0lBQzVDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN6QyxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxRCxLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ2hFLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN2QztZQUNFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxhQUF1QixHQUFHLEVBQzFCLGNBQWdDO0lBRWhDLE1BQU0sd0JBQXdCLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEgsTUFBTSxvQkFBb0IsR0FBa0MsRUFBRSxDQUFDO0lBRS9ELEtBQUssTUFBTSxRQUFRLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsY0FBYyxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsRUFBRTtRQUN4RCxHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVU7UUFDN0MsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsb0JBQW9CO1NBQ2pDO0tBQ0YsRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFN0IsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyJ9