UNPKG

@pulzar/core

Version:

Next-generation Node.js framework for ultra-fast web applications with zero-reflection DI, GraphQL, WebSockets, events, and edge runtime support

61 lines 2.02 kB
export function createTransformPipe(options = {}) { const defaultOptions = { excludePaths: ["/health", "/ping", "/metrics"], }; const transformOptions = { ...defaultOptions, ...options }; return async (request, reply, payload) => { // Skip transformation for excluded paths if (transformOptions.excludePaths?.some((path) => request.url.startsWith(path))) { return payload; } let transformedData = payload; // Apply schema validation if provided if (transformOptions.schema) { try { transformedData = transformOptions.schema.parse(payload); } catch (error) { reply.code(500); return { error: "Response validation failed" }; } } // Apply custom transform if provided if (transformOptions.transform) { transformedData = transformOptions.transform(transformedData); } return transformedData; }; } // Common response transformers export const responseTransformers = { // Standard API response wrapper apiResponse: (data) => ({ success: true, data, timestamp: new Date().toISOString(), }), // Error response wrapper errorResponse: (error) => ({ success: false, error: error.message || "An error occurred", timestamp: new Date().toISOString(), }), // Pagination wrapper paginatedResponse: (data, page, limit, total) => ({ success: true, data, pagination: { page, limit, total, pages: Math.ceil(total / limit), }, timestamp: new Date().toISOString(), }), }; export function registerTransformPlugin(fastify, options = {}) { const transformHook = createTransformPipe(options); fastify.addHook("onSend", transformHook); } export const transformPipe = createTransformPipe(); //# sourceMappingURL=transform.pipe.js.map