Files
bigcapital/packages/server/src/api/middleware/JSONResponseTransformer.ts
2023-02-03 11:57:50 +02:00

38 lines
1023 B
TypeScript

import { snakeCase } from 'lodash';
import { mapKeysDeep } from 'utils';
/**
* Express middleware for intercepting and transforming json responses
*
* @param {function} [condition] - takes the req and res and returns a boolean indicating whether to run the transform on this response
* @param {function} transform - takes an object passed to res.json and returns a replacement object
* @return {function} the middleware
*/
export function JSONResponseTransformer(transform: Function) {
const replaceJson = (res) => {
var origJson = res.json;
res.json = function (val) {
const json = JSON.parse(JSON.stringify(val));
return origJson.call(res, transform(json));
};
};
return function (req, res, next) {
replaceJson(res);
next();
};
}
/**
* Transformes the given response keys to snake case.
* @param response
* @returns
*/
export const snakecaseResponseTransformer = (response) => {
return mapKeysDeep(response, (value, key) => {
return snakeCase(key);
});
};