@decorators/server
Version:
node decorators - decorators for express library
88 lines • 11.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KoaAdapter = void 0;
const Koa = require("koa");
const koaMount = require("koa-mount");
const KoaRouter = require("koa-router");
const koaStatic = require("koa-static");
const http_1 = require("../http");
class KoaAdapter {
constructor(app = new Koa()) {
this.app = app;
this.type = 'koa';
}
attachServer(server) {
this.server = server;
}
close() {
if (this.server.listening) {
this.server.close();
}
}
getParam(type, name, ctx) {
const req = ctx.request;
const res = ctx.response;
switch (type) {
case http_1.ParameterType.BODY: return () => { var _a; return name ? (_a = req['body']) === null || _a === void 0 ? void 0 : _a[name] : req['body']; };
case http_1.ParameterType.COOKIE: return () => { var _a; return name ? (_a = ctx.cookies) === null || _a === void 0 ? void 0 : _a.get(name) : this.getCookies(ctx); };
case http_1.ParameterType.HEADER: return () => { var _a; return name ? (_a = ctx.headers) === null || _a === void 0 ? void 0 : _a[name] : ctx.headers; };
case http_1.ParameterType.PARAM: return () => { var _a; return name ? (_a = ctx.params) === null || _a === void 0 ? void 0 : _a[name] : ctx.params; };
case http_1.ParameterType.QUERY: return () => { var _a; return name ? (_a = ctx.query) === null || _a === void 0 ? void 0 : _a[name] : ctx.query; };
case http_1.ParameterType.REQUEST: return () => req;
case http_1.ParameterType.RESPONSE: return () => res;
default: return () => req;
}
}
isHeadersSent(response) {
return response.headerSent;
}
listen() {
this.server.on('request', this.app.callback());
}
async render(response, template, message) {
try {
const html = await response.ctx.render(template, message);
return html;
}
catch (err) {
throw new Error(err.message);
}
}
reply(response, message, statusCode) {
const isJson = typeof message === 'object';
if (statusCode) {
response.ctx.status = statusCode;
}
if (isJson) {
this.setHeader(response, 'Content-Type', 'application/json');
}
response.ctx.body = message;
}
routes(routes) {
var _a;
const router = new KoaRouter();
for (const route of routes) {
(_a = router[route.type]) === null || _a === void 0 ? void 0 : _a.call(router, route.url.replace('*', '(.*)'), route.handler);
}
this.app.use(router.routes());
}
serveStatic(prefix, path, options) {
this.app.use(koaMount(prefix, koaStatic(path, options)));
}
setHeader(response, name, value) {
response.set(name, value);
}
use(...args) {
this.app.use.call(this.app, ...args);
}
getCookies(ctx) {
return ctx.headers.cookie
.split(';')
.reduce((acc, cookie) => {
const [name, value] = cookie.trim().split('=');
return { ...acc, [name]: value };
}, {});
}
}
exports.KoaAdapter = KoaAdapter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29hLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGxhdGZvcm1zL2tvYS9rb2EtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQkFBMkI7QUFDM0Isc0NBQXNDO0FBQ3RDLHdDQUF3QztBQUN4Qyx3Q0FBd0M7QUFHeEMsa0NBQThFO0FBRTlFLE1BQWEsVUFBVTtJQUlyQixZQUFtQixNQUFNLElBQUksR0FBRyxFQUFFO1FBQWYsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUhsQyxTQUFJLEdBQUcsS0FBSyxDQUFDO0lBR3lCLENBQUM7SUFFdkMsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQW1CLEVBQUUsSUFBWSxFQUFFLEdBQWdCO1FBQzFELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUV6QixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssb0JBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxXQUFDLE9BQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFBLEdBQUcsQ0FBQyxNQUFNLENBQUMsMENBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQSxFQUFBLENBQUM7WUFDL0UsS0FBSyxvQkFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLFdBQUMsT0FBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQUEsR0FBRyxDQUFDLE9B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QyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxPQUFpQjtRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxTQUFTLENBQUMsUUFBc0IsRUFBRSxJQUFZLEVBQUUsS0FBYTtRQUMzRCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQUcsSUFBVztRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVLENBQUMsR0FBZ0I7UUFDakMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU07YUFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QixNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFL0MsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztDQUNGO0FBL0ZELGdDQStGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEtvYSBmcm9tICdrb2EnO1xuaW1wb3J0ICogYXMga29hTW91bnQgZnJvbSAna29hLW1vdW50JztcbmltcG9ydCAqIGFzIEtvYVJvdXRlciBmcm9tICdrb2Etcm91dGVyJztcbmltcG9ydCAqIGFzIGtvYVN0YXRpYyBmcm9tICdrb2Etc3RhdGljJztcblxuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBZGFwdGVyUm91dGUsIEh0dHBBcHBsaWNhdGlvbkFkYXB0ZXIsIFBhcmFtZXRlclR5cGUgfSBmcm9tICcuLi9odHRwJztcblxuZXhwb3J0IGNsYXNzIEtvYUFkYXB0ZXIgaW1wbGVtZW50cyBIdHRwQXBwbGljYXRpb25BZGFwdGVyIHtcbiAgdHlwZSA9ICdrb2EnO1xuICBwcml2YXRlIHNlcnZlcjogU2VydmVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhcHAgPSBuZXcgS29hKCkpIHsgfVxuXG4gIGF0dGFjaFNlcnZlcihzZXJ2ZXI6IFNlcnZlcik6IHZvaWQge1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuc2VydmVyLmxpc3RlbmluZykge1xuICAgICAgdGhpcy5zZXJ2ZXIuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXJhbSh0eXBlOiBQYXJhbWV0ZXJUeXBlLCBuYW1lOiBzdHJpbmcsIGN0eDogS29hLkNvbnRleHQpIHtcbiAgICBjb25zdCByZXEgPSBjdHgucmVxdWVzdDtcbiAgICBjb25zdCByZXMgPSBjdHgucmVzcG9uc2U7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUGFyYW1ldGVyVHlwZS5CT0RZOiByZXR1cm4gKCkgPT4gbmFtZSA/IHJlcVsnYm9keSddPy5bbmFtZV0gOiByZXFbJ2JvZHknXTtcbiAgICAgIGNhc2UgUGFyYW1ldGVyVHlwZS5DT09LSUU6IHJldHVybiAoKSA9PiBuYW1lID8gY3R4LmNvb2tpZXM/LmdldChuYW1lKSA6IHRoaXMuZ2V0Q29va2llcyhjdHgpO1xuICAgICAgY2FzZSBQYXJhbWV0ZXJUeXBlLkhFQURFUjogcmV0dXJuICgpID0+IG5hbWUgPyBjdHguaGVhZGVycz8uW25hbWVdIDogY3R4LmhlYWRlcnM7XG4gICAgICBjYXNlIFBhcmFtZXRlclR5cGUuUEFSQU06IHJldHVybiAoKSA9PiBuYW1lID8gY3R4LnBhcmFtcz8uW25hbWVdIDogY3R4LnBhcmFtcztcbiAgICAgIGNhc2UgUGFyYW1ldGVyVHlwZS5RVUVSWTogcmV0dXJuICgpID0+IG5hbWUgPyBjdHgucXVlcnk/LltuYW1lXSA6IGN0eC5xdWVyeTtcbiAgICAgIGNhc2UgUGFyYW1ldGVyVHlwZS5SRVFVRVNUOiByZXR1cm4gKCkgPT4gcmVxO1xuICAgICAgY2FzZSBQYXJhbWV0ZXJUeXBlLlJFU1BPTlNFOiByZXR1cm4gKCkgPT4gcmVzO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICgpID0+IHJlcTtcbiAgICB9XG4gIH1cblxuICBpc0hlYWRlcnNTZW50KHJlc3BvbnNlOiBLb2EuUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuaGVhZGVyU2VudDtcbiAgfVxuXG4gIGxpc3RlbigpIHtcbiAgICB0aGlzLnNlcnZlci5vbigncmVxdWVzdCcsIHRoaXMuYXBwLmNhbGxiYWNrKCkpO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKHJlc3BvbnNlOiBLb2EuUmVzcG9uc2UsIHRlbXBsYXRlOiBzdHJpbmcsIG1lc3NhZ2U6IG9iamVjdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBodG1sID0gYXdhaXQgcmVzcG9uc2UuY3R4LnJlbmRlcih0ZW1wbGF0ZSwgbWVzc2FnZSk7XG5cbiAgICAgIHJldHVybiBodG1sIGFzIHVua25vd24gYXMgc3RyaW5nO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICByZXBseShyZXNwb25zZTogS29hLlJlc3BvbnNlLCBtZXNzYWdlOiB1bmtub3duLCBzdGF0dXNDb2RlPzogbnVtYmVyKSB7XG4gICAgY29uc3QgaXNKc29uID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnO1xuXG4gICAgaWYgKHN0YXR1c0NvZGUpIHtcbiAgICAgIHJlc3BvbnNlLmN0eC5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIH1cblxuICAgIGlmIChpc0pzb24pIHtcbiAgICAgIHRoaXMuc2V0SGVhZGVyKHJlc3BvbnNlLCAnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICB9XG5cbiAgICByZXNwb25zZS5jdHguYm9keSA9IG1lc3NhZ2U7XG4gIH1cblxuICByb3V0ZXMocm91dGVzOiBBZGFwdGVyUm91dGVbXSkge1xuICAgIGNvbnN0IHJvdXRlciA9IG5ldyBLb2FSb3V0ZXIoKTtcblxuICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICByb3V0ZXJbcm91dGUudHlwZV0/Lihyb3V0ZS51cmwucmVwbGFjZSgnKicsICcoLiopJyksIHJvdXRlLmhhbmRsZXIpO1xuICAgIH1cblxuICAgIHRoaXMuYXBwLnVzZShyb3V0ZXIucm91dGVzKCkpO1xuICB9XG5cbiAgc2VydmVTdGF0aWMocHJlZml4OiBzdHJpbmcsIHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHVua25vd24pIHtcbiAgICB0aGlzLmFwcC51c2Uoa29hTW91bnQocHJlZml4LCBrb2FTdGF0aWMocGF0aCwgb3B0aW9ucykpKTtcbiAgfVxuXG4gIHNldEhlYWRlcihyZXNwb25zZTogS29hLlJlc3BvbnNlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXNwb25zZS5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgdXNlKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgdGhpcy5hcHAudXNlLmNhbGwodGhpcy5hcHAsIC4uLmFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb29raWVzKGN0eDogS29hLkNvbnRleHQpIHtcbiAgICByZXR1cm4gY3R4LmhlYWRlcnMuY29va2llXG4gICAgICAuc3BsaXQoJzsnKVxuICAgICAgLnJlZHVjZSgoYWNjLCBjb29raWUpID0+IHtcbiAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IGNvb2tpZS50cmltKCkuc3BsaXQoJz0nKTtcblxuICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgIH0sIHt9KTtcbiAgfVxufVxuIl19