@eggjs/controller-decorator
Version:
tegg controller decorator
65 lines • 6.83 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WebSocketControllerMetaBuilder = void 0;
const node_assert_1 = __importDefault(require("node:assert"));
const core_decorator_1 = require("@eggjs/core-decorator");
const tegg_common_util_1 = require("@eggjs/tegg-common-util");
const tegg_metadata_1 = require("@eggjs/tegg-metadata");
const tegg_types_1 = require("@eggjs/tegg-types");
const ControllerMetaBuilderFactory_1 = require("../../builder/ControllerMetaBuilderFactory");
const model_1 = require("../../model");
const ControllerInfoUtil_1 = __importDefault(require("../../util/ControllerInfoUtil"));
const ControllerMetadataUtil_1 = require("../../util/ControllerMetadataUtil");
const ControllerValidator_1 = require("../../util/validator/ControllerValidator");
const WebSocketInfoUtil_1 = __importDefault(require("../../util/WebSocketInfoUtil"));
const WebSocketControllerMethodMetaBuilder_1 = require("./WebSocketControllerMethodMetaBuilder");
class WebSocketControllerMetaBuilder {
constructor(clazz) {
this.clazz = clazz;
}
buildMethod() {
const methodNames = tegg_common_util_1.ObjectUtils.getProperties(this.clazz.prototype);
const methods = [];
for (const methodName of methodNames) {
const builder = new WebSocketControllerMethodMetaBuilder_1.WebSocketControllerMethodMetaBuilder(this.clazz, methodName);
const methodMeta = builder.build();
if (methodMeta) {
methods.push(methodMeta);
}
}
return methods;
}
build() {
ControllerValidator_1.ControllerValidator.validate(this.clazz);
const controllerType = ControllerInfoUtil_1.default.getControllerType(this.clazz);
(0, node_assert_1.default)(controllerType === tegg_types_1.ControllerType.WEBSOCKET, 'invalid controller type');
const webSocketPath = WebSocketInfoUtil_1.default.getWebSocketPath(this.clazz);
const middlewares = ControllerInfoUtil_1.default.getControllerMiddlewares(this.clazz);
const methods = this.buildMethod();
const clazzName = this.clazz.name;
const controllerName = ControllerInfoUtil_1.default.getControllerName(this.clazz) || clazzName;
const property = core_decorator_1.PrototypeUtil.getProperty(this.clazz);
const protoName = property.name;
const hosts = ControllerInfoUtil_1.default.getControllerHosts(this.clazz);
const timeout = ControllerInfoUtil_1.default.getControllerTimeout(this.clazz);
const metadata = new model_1.WebSocketControllerMeta(clazzName, protoName, controllerName, webSocketPath, middlewares, methods, hosts, timeout);
ControllerMetadataUtil_1.ControllerMetadataUtil.setControllerMetadata(this.clazz, metadata);
for (const method of metadata.methods) {
const realPath = metadata.getMethodRealPath(method);
if (!realPath.startsWith('/')) {
const desc = tegg_metadata_1.ClassUtil.classDescription(this.clazz);
throw new Error(`class ${desc} method ${method.name} path ${realPath} not start with /`);
}
}
return metadata;
}
static create(clazz) {
return new WebSocketControllerMetaBuilder(clazz);
}
}
exports.WebSocketControllerMetaBuilder = WebSocketControllerMetaBuilder;
ControllerMetaBuilderFactory_1.ControllerMetaBuilderFactory.registerControllerMetaBuilder(tegg_types_1.ControllerType.WEBSOCKET, WebSocketControllerMetaBuilder.create);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViU29ja2V0Q29udHJvbGxlck1ldGFCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGwvd2Vic29ja2V0L1dlYlNvY2tldENvbnRyb2xsZXJNZXRhQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4REFBaUM7QUFDakMsMERBQXNEO0FBQ3RELDhEQUFzRDtBQUN0RCx3REFBaUQ7QUFFakQsa0RBQW1EO0FBQ25ELDZGQUEwRjtBQUMxRix1Q0FBMkU7QUFDM0UsdUZBQStEO0FBQy9ELDhFQUEyRTtBQUMzRSxrRkFBK0U7QUFDL0UscUZBQTZEO0FBQzdELGlHQUE4RjtBQUU5RixNQUFhLDhCQUE4QjtJQUd6QyxZQUFZLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLDhCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQTBCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksMkVBQW9DLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUs7UUFDSCx5Q0FBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sY0FBYyxHQUFHLDRCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxJQUFBLHFCQUFNLEVBQUMsY0FBYyxLQUFLLDJCQUFjLENBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDL0UsTUFBTSxhQUFhLEdBQUcsMkJBQWlCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sV0FBVyxHQUFHLDRCQUFrQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsTUFBTSxjQUFjLEdBQUcsNEJBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNyRixNQUFNLFFBQVEsR0FBRyw4QkFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsUUFBUyxDQUFDLElBQWMsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyw0QkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsNEJBQWtCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksK0JBQXVCLENBQzFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RiwrQ0FBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksR0FBRyx5QkFBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksV0FBVyxNQUFNLENBQUMsSUFBSSxTQUFTLFFBQVEsbUJBQW1CLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQXdCO1FBQ3BDLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFqREQsd0VBaURDO0FBRUQsMkRBQTRCLENBQUMsNkJBQTZCLENBQUMsMkJBQWMsQ0FBQyxTQUFTLEVBQUUsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUMifQ==