UNPKG

node-web-mvc

Version:
70 lines (69 loc) 2.45 kB
"use strict"; /** * @module ElementType * @description 注解类范围枚举 */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.reflectAnnotationType = reflectAnnotationType; exports.checkAnnotation = checkAnnotation; const AnnotationElementTypeError_1 = __importDefault(require("../../../errors/AnnotationElementTypeError")); const Javascript_1 = __importDefault(require("../../../interface/Javascript")); var ElementType; (function (ElementType) { /** * 标识注解可以使用在 类上 */ ElementType["TYPE"] = "TYPE"; /** * 标识注解可以使用在 类函数上 */ ElementType["METHOD"] = "METHOD"; /** * 标识注解可以使用在函数参数 */ ElementType["PARAMETER"] = "PARAMETER"; /** * 标识注解可以使用在 class的属性上 */ ElementType["PROPERTY"] = "PROPERTY"; })(ElementType || (ElementType = {})); function isPropertyDescritpor(descriptor) { if (descriptor && typeof descriptor === 'object') { return 'get' in descriptor && 'set' in descriptor; } } function reflectAnnotationType(options) { if (!options || options.length < 0 || options.length > 3 || !options[0]) { return 'UNKNOW'; } const length = options.length; const [target, name, descriptor] = options; const clazz = length == 1 ? target : target === null || target === void 0 ? void 0 : target.constructor; const isClass = Javascript_1.default.isClass(clazz); if (!isClass) { // 如果不是作用在class上则直接判定为未知 return 'UNKNOW'; } if (length === 1) { return ElementType.TYPE; } else if (length === 3 && (descriptor === undefined || isPropertyDescritpor(descriptor))) { return ElementType.PROPERTY; } else if (length === 3) { const isNumber = typeof descriptor === 'number'; return isNumber ? ElementType.PARAMETER : ElementType.METHOD; } return 'UNKNOW'; } function checkAnnotation(types, options, name) { const elementType = reflectAnnotationType(options); if (types.length > 0 && types.indexOf(elementType) < 0) { throw new AnnotationElementTypeError_1.default(name, types, elementType); } return elementType; } exports.default = ElementType;