UNPKG

@ffsm/napi

Version:

Napi - A framework using with Next.js for building APIs.

90 lines (89 loc) 3.04 kB
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; }; import { NextResponse } from "next/server"; import { NapiHttpCode, NapiHttpStatus, NapiMethod } from "./enums"; export class NapiJsonSchema { constructor() { } } const statuses = { [NapiMethod.GET]: { status: NapiHttpStatus.OK, statusText: NapiHttpCode.OK, }, [NapiMethod.POST]: { status: NapiHttpStatus.CREATED, statusText: NapiHttpCode.CREATED, }, [NapiMethod.PUT]: { status: NapiHttpStatus.OK, statusText: NapiHttpCode.OK, }, [NapiMethod.DELETE]: { status: NapiHttpStatus.OK, statusText: NapiHttpCode.OK, }, [NapiMethod.PATCH]: { status: NapiHttpStatus.OK, statusText: NapiHttpCode.OK, }, [NapiMethod.OPTIONS]: { status: NapiHttpStatus.OK, statusText: NapiHttpCode.OK, }, [NapiMethod.HEAD]: { status: NapiHttpStatus.OK, statusText: NapiHttpCode.OK, }, }; export class NapiResponse { constructor(controller, context, switchInstance) { this.controller = controller; this.context = context; this.switchInstance = switchInstance; } async getInit() { const router = this.context.getRouter(); const method = this.context.getMethod(); const headers = Object.assign({}, router.headers); const cookies = router.cookies; let rs = Object.assign(Object.assign({}, statuses[router.method]), { headers }); headers["set-cookie"] = cookies.map((_a) => { var { name, value } = _a, options = __rest(_a, ["name", "value"]); return router.cookie.serialize(name, value, options); }).join("; "); if (!method) { return rs; } const payload = this.controller.getResponse(method); if (!payload) { return rs; } const { status, statusText, headers: payloadHeaders } = payload; rs = Object.assign(rs, { status, statusText, }); if (typeof payloadHeaders === "function") { rs.headers = Object.assign(rs.headers, await payloadHeaders(this.switchInstance)); } else if (payloadHeaders instanceof Promise) { rs.headers = Object.assign(rs.headers, await payloadHeaders); } else if (typeof payloadHeaders === "object") { rs.headers = Object.assign(rs.headers, payloadHeaders); } return rs; } async send(data) { return NextResponse.json(data, await this.getInit()); } }