@eggjs/controller-decorator
Version:
tegg controller decorator
106 lines • 12.1 kB
JavaScript
"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 , , , , , , or `);
}
}
}
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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