UNPKG

tspace-spear

Version:

tspace-spear is a lightweight, high-performance API framework for Node.js that leverages the native HTTP server and supports uWebSockets.js (C++) for maximum speed and efficiency.

188 lines 6.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Response = void 0; const const_1 = require("../const"); const utils_1 = require("../utils"); const Response = (req, res, { formatResponse, isUwebSocket }) => { const response = res; response.serveMedia = (filePath) => { return (0, utils_1.pipeStream)({ req, res, filePath, isUwebSocket }); }; //@ts-ignore response.status = (code) => { return { json: (data) => { if (!res.headersSent) res.writeHead(code, const_1.HEADER_CONTENT_TYPES['json']); return response.json(data); }, send: (message) => { if (!res.headersSent) res.writeHead(code, const_1.HEADER_CONTENT_TYPES['text']); return response.send(message); }, end: (message) => { if (!res.headersSent) res.writeHead(code, const_1.HEADER_CONTENT_TYPES['text']); return response.end(message); }, }; }; //@ts-ignore response.json = (results) => { if (res.writableEnded) return; if (typeof results === 'string') { if (!res.headersSent) { res.writeHead(200, const_1.HEADER_CONTENT_TYPES['text']); } return res.end(results); } if (!res.headersSent) { res.writeHead(200, const_1.HEADER_CONTENT_TYPES['json']); } if (results == null) { if (formatResponse != null) { return res.end(JSON.stringify(formatResponse(null, res.statusCode))); } return res.end(); } if (formatResponse != null) { return res.end(JSON.stringify(formatResponse({ ...results }, res.statusCode))); } return res.end(JSON.stringify(results)); }; response.send = (results) => { if (res.writableEnded) { return; } if (formatResponse != null) { return res.end(formatResponse(results, res.statusCode)); } return res.end(results); }; response.html = (results) => { if (res.writableEnded) return; res.writeHead(res.statusCode, const_1.HEADER_CONTENT_TYPES['html']); return res.end(results); }; response.error = (err) => { const statusCandidates = [ err?.response?.data?.code, err?.code, err?.status, err?.statusCode, err?.response?.data?.statusCode ]; let code = statusCandidates .map(v => Number(v)) .find(v => Number.isFinite(v) && v >= 400) ?? 500; const message = err?.response?.data?.errorMessage ?? err?.response?.data?.message ?? err?.message ?? `The request '${req.url}' resulted in a server error.`; response.status(code); const payload = { message }; if (formatResponse) { return res.end(JSON.stringify(formatResponse(payload, code))); } return res.end(JSON.stringify(payload)); }; //@ts-ignore response.ok = (results) => { return response.status(200).json(results); }; //@ts-ignore response.created = (results) => { return response.status(201).json(results); }; //@ts-ignore response.accepted = (results) => { return response.status(202).json(results); }; //@ts-ignore response.noContent = () => { return response.status(204).end(); }; //@ts-ignore response.badRequest = (message) => { message = message ?? `The request '${req.url}' resulted in a bad request. Please review the data and try again.`; return response.status(400).json({ message }); }; //@ts-ignore response.unauthorized = (message) => { message = message ?? `The request '${req.url}' is unauthorized. Please verify.`; return response.status(401).json({ message }); }; //@ts-ignore response.paymentRequired = (message) => { message = message ?? `The request '${req.url}' requires payment. Please proceed with payment.`; return response.status(402).json({ message }); }; //@ts-ignore response.forbidden = (message) => { message = message ?? `The request '${req.url}' is forbidden. Please check the permissions or access rights.`; return response.status(403).json({ message }); }; //@ts-ignore response.notFound = (message) => { message = message ?? `The request '${req.url}' was not found. Please re-check the your url again.`; return response.status(404).json({ message }); }; //@ts-ignore response.unprocessable = (message) => { message = message ?? `The request to '${req.url}' failed validation.`; return response.status(422).json({ message }); }; //@ts-ignore response.tooManyRequests = (message) => { message = message ?? `The request '${req.url}' is too many request. Please wait and try agian.`; return response.status(429).json({ message }); }; //@ts-ignore response.serverError = (message) => { message = message ?? `The request '${req.url}' resulted in a server error. Please investigate.`; return response.status(500).json({ message }); }; response.setCookies = (cookies) => { const cookieLists = []; for (const [key, v] of Object.entries(cookies)) { let str = `${key}=${typeof v === 'string' ? v : v.value}`; if (typeof v !== 'string') { if (v.sameSite) str += `; SameSite=${v.sameSite}`; str += `; Path=${v.path ?? '/'}`; if (v.domain) str += `; Domain=${v.domain}`; if (v.httpOnly) str += `; HttpOnly`; if (v.secure) str += `; Secure`; if (v.expires) { const maxAge = Math.floor((v.expires.getTime() - Date.now()) / 1000); str += `; Max-Age=${maxAge}`; } } cookieLists.push(str); } if (isUwebSocket) { for (const cookie of cookieLists) { res.setHeader('Set-Cookie', cookie); } return; } res.setHeader('Set-Cookie', cookieLists); }; response.setStatusCode = (code) => { if (!response.headersSent) { response.writeHead(code, const_1.HEADER_CONTENT_TYPES['json']); } return; }; return response; }; exports.Response = Response; //# sourceMappingURL=response.js.map