@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
JavaScript
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