UNPKG

@gati-framework/runtime

Version:

Gati runtime execution engine for running handler-based applications

84 lines 2.33 kB
/** * @module runtime/response * @description Response object factory for Gati framework */ /** * Create a Response object from ResponseOptions * * @param options - Response creation options * @returns Response object * * @example * ```typescript * const res = createResponse({ raw: serverResponse }); * res.status(200).json({ ok: true }); * ``` */ export function createResponse(options) { const { raw } = options; let sent = false; const response = { status(code) { raw.statusCode = code; return response; }, header(name, value) { raw.setHeader(name, value); return response; }, headers(headers) { for (const [name, value] of Object.entries(headers)) { raw.setHeader(name, value); } return response; }, json(data) { if (sent) { throw new Error('Response already sent'); } const body = JSON.stringify(data); raw.setHeader('Content-Type', 'application/json'); raw.setHeader('Content-Length', Buffer.byteLength(body)); raw.end(body); sent = true; }, text(data) { if (sent) { throw new Error('Response already sent'); } raw.setHeader('Content-Type', 'text/plain'); raw.setHeader('Content-Length', Buffer.byteLength(data)); raw.end(data); sent = true; }, send(data) { if (sent) { throw new Error('Response already sent'); } if (Buffer.isBuffer(data)) { raw.setHeader('Content-Length', data.length); } else { raw.setHeader('Content-Length', Buffer.byteLength(data)); } raw.end(data); sent = true; }, end() { if (sent) { throw new Error('Response already sent'); } raw.end(); sent = true; }, isSent() { return sent; }, get headersSent() { return raw.headersSent; }, raw, }; return response; } //# sourceMappingURL=response.js.map