gypsum
Version:
Simple and easy lightweight typescript server side framework on Node.js.
38 lines • 1.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const object_1 = require("tools-box/object");
const logger_1 = require("../misc/logger");
function filter(ctx, fields, source) {
const logger = new logger_1.Logger('filterHook');
let srcData;
logger.debug('fields passed', fields);
if (!fields || !fields.length)
ctx.next();
fields = Array.isArray(fields) ? fields : [fields];
logger.info('checking source data');
if (source === 'query' || source === 'body')
srcData = ctx[source];
else
srcData = ctx.response.data;
if (!srcData || typeof srcData !== 'object')
return ctx.next();
logger.info('source data check passed');
logger.info('checking filter method');
let method = 'pick';
if (fields[0].charAt(0) === '-') {
method = 'omit';
fields[0] = fields[0].slice(1);
}
logger.info(`method: ${method}`);
logger.info('filtering data');
if (Array.isArray(srcData))
for (let i = 0; i < srcData.length; i++)
srcData[i] = method === "omit" ? object_1.omit(srcData[i], fields) : object_1.pick(srcData[i], fields);
else
srcData = method === "omit" ? object_1.omit(srcData, fields) : object_1.pick(srcData, fields);
logger.info('done filtering');
logger.debug(`result data:`);
ctx.next();
}
exports.filter = filter;
//# sourceMappingURL=filter.js.map