UNPKG

@eggjs/controller-decorator

Version:

tegg controller decorator

106 lines 12.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebSocketControllerMethodMetaBuilder = void 0; const node_path_1 = __importDefault(require("node:path")); const tegg_metadata_1 = require("@eggjs/tegg-metadata"); const tegg_types_1 = require("@eggjs/tegg-types"); const model_1 = require("../../model"); const MethodValidator_1 = require("../../util/validator/MethodValidator"); const MethodInfoUtil_1 = __importDefault(require("../../util/MethodInfoUtil")); const HTTPPriorityUtil_1 = require("../../util/HTTPPriorityUtil"); const WebSocketInfoUtil_1 = __importDefault(require("../../util/WebSocketInfoUtil")); class WebSocketControllerMethodMetaBuilder { constructor(clazz, methodName) { this.clazz = clazz; this.methodName = methodName; } checkParamDecorators() { const method = this.clazz.prototype[this.methodName]; const functionLength = method.length; const paramIndexList = WebSocketInfoUtil_1.default.getCompatibleParamIndexList(this.clazz, this.methodName); const contextIndex = MethodInfoUtil_1.default.getMethodContextIndex(this.clazz, this.methodName); const hasAnnotationParamCount = typeof contextIndex === 'undefined' ? paramIndexList.length : paramIndexList.length + 1; const maxParamCount = Math.max(functionLength, hasAnnotationParamCount); for (let i = 0; i < maxParamCount; ++i) { if (i === contextIndex) { continue; } const paramType = WebSocketInfoUtil_1.default.getCompatibleMethodParamType(i, this.clazz, this.methodName); if (!paramType) { const classDesc = tegg_metadata_1.ClassUtil.classDescription(this.clazz); throw new Error(`${classDesc}:${this.methodName} param ${i} has no websocket param type, Please add @HTTPParam, @HTTPQuery, @HTTPQueries, @HTTPHeaders, @Request, @WebSocketSocket, @WebSocketStream or @Context`); } } } buildParamType(webSocketPath) { this.checkParamDecorators(); const paramTypeMap = new Map(); const paramIndexList = WebSocketInfoUtil_1.default.getCompatibleParamIndexList(this.clazz, this.methodName); for (const paramIndex of paramIndexList) { const paramType = WebSocketInfoUtil_1.default.getCompatibleMethodParamType(paramIndex, this.clazz, this.methodName); if (this.isFetchOnlyParamType(paramType)) { const classDesc = tegg_metadata_1.ClassUtil.classDescription(this.clazz); throw new Error(`${classDesc}:${this.methodName} param ${paramIndex} is websocket fetch only`); } const paramName = WebSocketInfoUtil_1.default.getCompatibleMethodParamName(paramIndex, this.clazz, this.methodName); const paramMeta = model_1.WebSocketParamMetaUtil.createParam(paramType, paramName); try { paramMeta.validate(webSocketPath); } catch (e) { const classDesc = tegg_metadata_1.ClassUtil.classDescription(this.clazz); e.message = `build websocket controller ${classDesc} method ${this.methodName} param ${paramName} failed: ${e.message}`; throw e; } paramTypeMap.set(paramIndex, paramMeta); } return paramTypeMap; } isFetchOnlyParamType(paramType) { return paramType === tegg_types_1.WebSocketParamType.DATA || paramType === tegg_types_1.WebSocketParamType.CLOSE || paramType === tegg_types_1.WebSocketParamType.ERROR || paramType === tegg_types_1.WebSocketParamType.CLOSE_CODE || paramType === tegg_types_1.WebSocketParamType.CLOSE_REASON; } getPriority() { const priority = WebSocketInfoUtil_1.default.getWebSocketMethodPriority(this.clazz, this.methodName); if (priority !== undefined) { return priority; } const controllerPath = WebSocketInfoUtil_1.default.getWebSocketPath(this.clazz); const methodPath = WebSocketInfoUtil_1.default.getWebSocketMethodPath(this.clazz, this.methodName); const realPath = controllerPath ? node_path_1.default.posix.join(controllerPath, methodPath) : methodPath; const defaultPriority = HTTPPriorityUtil_1.HTTPPriorityUtil.calcPathPriority(realPath); if (defaultPriority > HTTPPriorityUtil_1.HTTPPriorityUtil.DEFAULT_PRIORITY) { throw new Error(`path ${realPath} is too long, should set priority manually`); } return defaultPriority; } build() { MethodValidator_1.MethodValidator.validate(this.clazz, this.methodName); const controllerType = MethodInfoUtil_1.default.getMethodControllerType(this.clazz, this.methodName); if (!controllerType) { return undefined; } const parentPath = WebSocketInfoUtil_1.default.getWebSocketPath(this.clazz); const webSocketPath = WebSocketInfoUtil_1.default.getWebSocketMethodPath(this.clazz, this.methodName); const contextIndex = MethodInfoUtil_1.default.getMethodContextIndex(this.clazz, this.methodName); const middlewares = MethodInfoUtil_1.default.getMethodMiddlewares(this.clazz, this.methodName); const hosts = MethodInfoUtil_1.default.getMethodHosts(this.clazz, this.methodName); const realPath = parentPath ? node_path_1.default.posix.join(parentPath, webSocketPath) : webSocketPath; const paramTypeMap = this.buildParamType(realPath); const priority = this.getPriority(); const timeout = MethodInfoUtil_1.default.getMethodTimeout(this.clazz, this.methodName); return new model_1.WebSocketMethodMeta(this.methodName, webSocketPath, middlewares, contextIndex, paramTypeMap, priority, hosts, timeout); } } exports.WebSocketControllerMethodMetaBuilder = WebSocketControllerMethodMetaBuilder; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViU29ja2V0Q29udHJvbGxlck1ldGhvZE1ldGFCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGwvd2Vic29ja2V0L1dlYlNvY2tldENvbnRyb2xsZXJNZXRob2RNZXRhQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBNkI7QUFDN0Isd0RBQWlEO0FBQ2pELGtEQUF1RDtBQUV2RCx1Q0FBOEY7QUFDOUYsMEVBQXVFO0FBQ3ZFLCtFQUF1RDtBQUN2RCxrRUFBK0Q7QUFDL0QscUZBQTZEO0FBRTdELE1BQWEsb0NBQW9DO0lBSS9DLFlBQVksS0FBd0IsRUFBRSxVQUFrQjtRQUN0RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLDJCQUFpQixDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sWUFBWSxHQUFHLHdCQUFjLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkYsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLFlBQVksS0FBSyxXQUFXO1lBQ2pFLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTTtZQUN2QixDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVB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