UNPKG

nest-koa-adapter

Version:
232 lines 10.2 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.KoaAdapter = void 0; const core_1 = require("@nestjs/core"); const common_1 = require("@nestjs/common"); const koa_1 = __importDefault(require("koa")); const koa_router_1 = __importDefault(require("koa-router")); const koa_bodyparser_1 = __importDefault(require("koa-bodyparser")); const http = __importStar(require("http")); const https = __importStar(require("https")); const NestKoaMiddleware_1 = require("./NestKoaMiddleware"); const load_package_util_1 = require("@nestjs/common/utils/load-package.util"); const KoaCorsOptions_1 = require("./KoaCorsOptions"); const KoaReply_1 = require("./KoaReply"); class KoaAdapter extends core_1.AbstractHttpAdapter { constructor(instance = new koa_1.default()) { super(instance); } getRouter() { if (!this.router) { this.router = new koa_router_1.default(); this.getInstance().use(this.router.routes()); } return this.router; } delete(pathOrHandler, handler) { const [routePath, routeHandler] = this.getRouteAndHandler(pathOrHandler, handler); return this.getRouter().delete(routePath, this.createRouteHandler(routeHandler)); } get(pathOrHandler, handler) { const [routePath, routeHandler] = this.getRouteAndHandler(pathOrHandler, handler); return this.getRouter().get(routePath, this.createRouteHandler(routeHandler)); } head(pathOrHandler, handler) { const [routePath, routeHandler] = this.getRouteAndHandler(pathOrHandler, handler); return this.getRouter().head(routePath, this.createRouteHandler(routeHandler)); } options(pathOrHandler, handler) { const [routePath, routeHandler] = this.getRouteAndHandler(pathOrHandler, handler); return this.getRouter().options(routePath, this.createRouteHandler(routeHandler)); } patch(pathOrHandler, handler) { const [routePath, routeHandler] = this.getRouteAndHandler(pathOrHandler, handler); return this.getRouter().patch(routePath, this.createRouteHandler(routeHandler)); } post(pathOrHandler, handler) { const [routePath, routeHandler] = this.getRouteAndHandler(pathOrHandler, handler); return this.getRouter().post(routePath, this.createRouteHandler(routeHandler)); } put(pathOrHandler, handler) { const [routePath, routeHandler] = this.getRouteAndHandler(pathOrHandler, handler); return this.getRouter().put(routePath, this.createRouteHandler(routeHandler)); } createRouteHandler(routeHandler) { return (ctx, next) => { ctx.respond = false; routeHandler(ctx.request, ctx.response, next); }; } getRouteAndHandler(pathOrHandler, handler) { let path = pathOrHandler; if (typeof pathOrHandler === 'function') { handler = pathOrHandler; path = ''; } return [path, handler]; } close() { return new Promise((resolve) => this.httpServer.close(() => resolve())); } getType() { return 'koa'; } initHttpServer(options) { if (options === null || options === void 0 ? void 0 : options.httpsOptions) { this.httpServer = https.createServer(options.httpsOptions, this.getInstance().callback()); return; } this.httpServer = http.createServer(this.getInstance().callback()); } useStaticAssets(path, options) { const serveStaticMiddleware = (0, load_package_util_1.loadPackage)('koa-static', 'KoaAdapter.useStaticAssets()'); this.getInstance().use(serveStaticMiddleware(path, options)); } setViewEngine(options) { const viewsMiddleware = (0, load_package_util_1.loadPackage)('@ladjs/koa-views', 'KoaAdapter.setViewEngine()'); const _a = options, { viewsDir } = _a, viewsOptions = __rest(_a, ["viewsDir"]); this.getInstance().use(viewsMiddleware(viewsDir, Object.assign({ autoRender: false }, viewsOptions))); } getRequestHostname(request) { return request.hostname; } getRequestMethod(request) { return request.method; } getRequestUrl(request) { return request.url; } status(response, statusCode) { response.status = statusCode; } reply(response, body, statusCode) { return (0, KoaReply_1.koaReply)(response, body, statusCode); } render(response, view, options) { return __awaiter(this, void 0, void 0, function* () { const body = yield response.ctx.render(view, options); this.reply(response, body); }); } redirect(response, statusCode, url) { response.set('Location', url); return (0, KoaReply_1.koaReply)(response, null, statusCode); } setErrorHandler(handler, prefix) { this.getInstance().on('error', handler); } setNotFoundHandler(handler, prefix) { this.getInstance().use((0, NestKoaMiddleware_1.nestToKoaMiddleware)(handler)); } setHeader(response, name, value) { response.set(name, value); } registerParserMiddleware(prefix) { this.getRouter().use((0, koa_bodyparser_1.default)(), (ctx, next) => __awaiter(this, void 0, void 0, function* () { // This is because nest expects params in request object so we need to extend it Object.assign(ctx.request, { params: ctx.params }); yield next(); })); } enableCors(options) { const corsMiddleware = (0, load_package_util_1.loadPackage)('@koa/cors', 'KoaAdapter.enableCors()'); KoaCorsOptions_1.KoaCorsOptions.validateNestOptions(options); const koaCorsOptions = new KoaCorsOptions_1.KoaCorsOptions(options); if (koaCorsOptions) { koaCorsOptions.handleOptionsSuccessStatus(this.getInstance(), options); } this.getInstance().use(corsMiddleware(koaCorsOptions)); } createMiddlewareFactory(requestMethod) { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type return (path, middleware) => { const router = this.getRouter(); const routeMethodsMap = { [common_1.RequestMethod.ALL]: router.all, [common_1.RequestMethod.DELETE]: router.delete, [common_1.RequestMethod.GET]: router.get, [common_1.RequestMethod.HEAD]: router.head, [common_1.RequestMethod.OPTIONS]: router.options, [common_1.RequestMethod.PATCH]: router.patch, [common_1.RequestMethod.POST]: router.post, [common_1.RequestMethod.PUT]: router.put, [common_1.RequestMethod.SEARCH]: router.all, }; const routeMethod = (routeMethodsMap[requestMethod] || routeMethodsMap[common_1.RequestMethod.GET]).bind(this.router); return routeMethod(path, (ctx, next) => middleware(ctx.request, ctx.response, next)); }; } applyVersionFilter(handler, version, versioningOptions) { throw new Error('Versioning not yet supported in Koa'); } end(response, message) { response.res.end(message); } isHeadersSent(response) { return response.headerSent; } appendHeader(response, name, value) { response.set(name, value); } getHeader(response, name) { return response.get(name); } } exports.KoaAdapter = KoaAdapter; //# sourceMappingURL=KoaAdapter.js.map