UNPKG

@eggjs/controller-decorator

Version:

tegg controller decorator

106 lines 11.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.WebSocketFetchControllerMetaBuilder = 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 WebSocketFetchControllerMethodMetaBuilder_1 = require("./WebSocketFetchControllerMethodMetaBuilder"); class WebSocketFetchControllerMetaBuilder { constructor(clazz) { this.clazz = clazz; } buildMethods() { const methodNames = tegg_common_util_1.ObjectUtils.getProperties(this.clazz.prototype); const methods = []; let connectionMethod; let openMethod; let errorMethod; let closeMethod; for (const methodName of methodNames) { const builder = new WebSocketFetchControllerMethodMetaBuilder_1.WebSocketFetchControllerMethodMetaBuilder(this.clazz, methodName); const methodMeta = builder.build(); if (!methodMeta) { continue; } switch (methodMeta.methodType) { case tegg_types_1.WebSocketFetchMethodType.DATA: { methods.push(methodMeta); break; } case tegg_types_1.WebSocketFetchMethodType.CONNECTION: { this.assertSingleLifecycleMethod(connectionMethod, methodMeta.methodType); connectionMethod = methodMeta; break; } case tegg_types_1.WebSocketFetchMethodType.OPEN: { this.assertSingleLifecycleMethod(openMethod, methodMeta.methodType); openMethod = methodMeta; break; } case tegg_types_1.WebSocketFetchMethodType.ERROR: { this.assertSingleLifecycleMethod(errorMethod, methodMeta.methodType); errorMethod = methodMeta; break; } case tegg_types_1.WebSocketFetchMethodType.CLOSE: { this.assertSingleLifecycleMethod(closeMethod, methodMeta.methodType); closeMethod = methodMeta; break; } default: node_assert_1.default.fail('never arrive'); } } return { methods, connectionMethod, openMethod, errorMethod, closeMethod }; } assertSingleLifecycleMethod(methodMeta, methodType) { if (!methodMeta) { return; } const classDesc = tegg_metadata_1.ClassUtil.classDescription(this.clazz); throw new Error(`build websocket fetch controller ${classDesc} failed: duplicate ${methodType} lifecycle method`); } 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_FETCH, 'invalid controller type'); const webSocketPath = WebSocketInfoUtil_1.default.getWebSocketPath(this.clazz); (0, node_assert_1.default)(webSocketPath, `build websocket fetch controller ${tegg_metadata_1.ClassUtil.classDescription(this.clazz)} failed: path is required`); const middlewares = ControllerInfoUtil_1.default.getControllerMiddlewares(this.clazz); const { methods, connectionMethod, openMethod, errorMethod, closeMethod } = this.buildMethods(); (0, node_assert_1.default)(methods.length === 1, 'websocket fetch controller must have exactly one @WebSocketFetchMethod'); 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.WebSocketFetchControllerMeta(clazzName, protoName, controllerName, webSocketPath, middlewares, methods, hosts, connectionMethod, openMethod, errorMethod, closeMethod, 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 WebSocketFetchControllerMetaBuilder(clazz); } } exports.WebSocketFetchControllerMetaBuilder = WebSocketFetchControllerMetaBuilder; ControllerMetaBuilderFactory_1.ControllerMetaBuilderFactory.registerControllerMetaBuilder(tegg_types_1.ControllerType.WEBSOCKET_FETCH, WebSocketFetchControllerMetaBuilder.create); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViU29ja2V0RmV0Y2hDb250cm9sbGVyTWV0YUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW1wbC93ZWJzb2NrZXQtZmV0Y2gvV2ViU29ja2V0RmV0Y2hDb250cm9sbGVyTWV0YUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOERBQWlDO0FBQ2pDLDBEQUFzRDtBQUN0RCw4REFBc0Q7QUFDdEQsd0RBQWlEO0FBRWpELGtEQUE2RTtBQUM3RSw2RkFBMEY7QUFDMUYsdUNBQXFGO0FBQ3JGLHVGQUErRDtBQUMvRCw4RUFBMkU7QUFDM0Usa0ZBQStFO0FBQy9FLHFGQUE2RDtBQUM3RCwyR0FBd0c7QUFFeEcsTUFBYSxtQ0FBbUM7SUFHOUMsWUFBWSxLQUF3QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLFdBQVcsR0FBRyw4QkFBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sT0FBTyxHQUErQixFQUFFLENBQUM7UUFDL0MsSUFBSSxnQkFBc0QsQ0FBQztRQUMzRCxJQUFJLFVBQWdELENBQUM7UUFDckQsSUFBSSxXQUFpRCxDQUFDO1FBQ3RELElBQUksV0FBaUQsQ0FBQztRQUV0RCxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUkscUZBQXlDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN0RixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixTQUFTO1lBQ1gsQ0FBQztZQUNELFFBQVEsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixLQUFLLHFDQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLHFDQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzFFLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztvQkFDOUIsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUsscUNBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3BFLFVBQVUsR0FBRyxVQUFVLENBQUM7b0JBQ3hCLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLHFDQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNyRSxXQUFXLEdBQUcsVUFBVSxDQUFDO29CQUN6QixNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyxxQ0FBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDckUsV0FBVyxHQUFHLFVBQVUsQ0FBQztvQkFDekIsTUFBTTtnQkFDUixDQUFDO2dCQUNEO29CQUNFLHFCQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxVQUFnRCxFQUFFLFVBQW9DO1FBQ3hILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLHlCQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLFNBQVMsc0JBQXNCLFVBQVUsbUJBQW1CLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRUQsS0FBSztRQUNILHlDQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxjQUFjLEdBQUcsNEJBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLElBQUEscUJBQU0sRUFBQyxjQUFjLEtBQUssMkJBQWMsQ0FBQyxlQUFlLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUNyRixNQUFNLGFBQWEsR0FBRywyQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckUsSUFBQSxxQkFBTSxFQUFDLGFBQWEsRUFBRSxvQ0FBb0MseUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDN0gsTUFBTSxXQUFXLEdBQUcsNEJBQWtCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEcsSUFBQSxxQkFBTSxFQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLHdFQUF3RSxDQUFDLENBQUM7UUFDdkcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsTUFBTSxjQUFjLEdBQUcsNEJBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNyRixNQUFNLFFBQVEsR0FBRyw4QkFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsUUFBUyxDQUFDLElBQWMsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyw0QkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsNEJBQWtCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksb0NBQTRCLENBQy9DLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFDaEYsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsK0NBQXNCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEdBQUcseUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLFdBQVcsTUFBTSxDQUFDLElBQUksU0FBUyxRQUFRLG1CQUFtQixDQUFDLENBQUM7WUFDM0YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUF3QjtRQUNwQyxPQUFPLElBQUksbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNGO0FBN0ZELGtGQTZGQztBQUVELDJEQUE0QixDQUFDLDZCQUE2QixDQUFDLDJCQUFjLENBQUMsZUFBZSxFQUFFLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxDQUFDIn0=