@eggjs/controller-decorator
Version:
tegg controller decorator
67 lines • 7.12 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.HTTPControllerMetaBuilder = 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 HTTPInfoUtil_1 = __importDefault(require("../../util/HTTPInfoUtil"));
const ControllerValidator_1 = require("../../util/validator/ControllerValidator");
const HTTPControllerMethodMetaBuilder_1 = require("./HTTPControllerMethodMetaBuilder");
class HTTPControllerMetaBuilder {
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 HTTPControllerMethodMetaBuilder_1.HTTPControllerMethodMetaBuilder(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.HTTP, 'invalidate controller type');
const httpPath = HTTPInfoUtil_1.default.getHTTPPath(this.clazz);
const httpMiddlewares = 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 needAcl = ControllerInfoUtil_1.default.hasControllerAcl(this.clazz);
const aclCode = ControllerInfoUtil_1.default.getControllerAcl(this.clazz);
const hosts = ControllerInfoUtil_1.default.getControllerHosts(this.clazz);
const timeout = ControllerInfoUtil_1.default.getControllerTimeout(this.clazz);
const metadata = new model_1.HTTPControllerMeta(clazzName, protoName, controllerName, httpPath, httpMiddlewares, methods, needAcl, aclCode, 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 HTTPControllerMetaBuilder(clazz);
}
}
exports.HTTPControllerMetaBuilder = HTTPControllerMetaBuilder;
ControllerMetaBuilderFactory_1.ControllerMetaBuilderFactory.registerControllerMetaBuilder(tegg_types_1.ControllerType.HTTP, HTTPControllerMetaBuilder.create);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXJNZXRhQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBsL2h0dHAvSFRUUENvbnRyb2xsZXJNZXRhQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4REFBaUM7QUFDakMsMERBQXNEO0FBQ3RELDhEQUFzRDtBQUN0RCx3REFBaUQ7QUFFakQsa0RBQW1EO0FBQ25ELDZGQUEwRjtBQUMxRix1Q0FBaUU7QUFDakUsdUZBQStEO0FBQy9ELDhFQUEyRTtBQUMzRSwyRUFBbUQ7QUFDbkQsa0ZBQStFO0FBQy9FLHVGQUFvRjtBQUVwRixNQUFhLHlCQUF5QjtJQUdwQyxZQUFZLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLDhCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUNyQyxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksaUVBQStCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM1RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUs7UUFDSCx5Q0FBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sY0FBYyxHQUFHLDRCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxJQUFBLHFCQUFNLEVBQUMsY0FBYyxLQUFLLDJCQUFjLENBQUMsSUFBSSxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDN0UsTUFBTSxRQUFRLEdBQUcsc0JBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE1BQU0sZUFBZSxHQUFHLDRCQUFrQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsTUFBTSxjQUFjLEdBQUcsNEJBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNyRixNQUFNLFFBQVEsR0FBRyw4QkFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsUUFBUyxDQUFDLElBQWMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyw0QkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsNEJBQWtCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLDRCQUFrQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyw0QkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSwwQkFBa0IsQ0FDckMsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUcsK0NBQXNCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEdBQUcseUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLFdBQVcsTUFBTSxDQUFDLElBQUksU0FBUyxRQUFRLG1CQUFtQixDQUFDLENBQUM7WUFDM0YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUF3QjtRQUNwQyxPQUFPLElBQUkseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBbkRELDhEQW1EQztBQUVELDJEQUE0QixDQUFDLDZCQUE2QixDQUFDLDJCQUFjLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDIn0=