UNPKG

rule-filter-validator

Version:

A object and scope validator based on structured rules

55 lines 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseFilter = void 0; /* eslint-disable @typescript-eslint/ban-ts-comment */ const lodash_es_1 = require("lodash-es"); const adjust_date_js_1 = require("./adjust-date.js"); const functions_js_1 = require("./functions.js"); const to_array_js_1 = require("./to-array.js"); const parseFilter = (filter, context = {}) => { return Object.entries(filter).reduce((result, [key, value]) => { if (['_or', '_and'].includes(key)) { // @ts-ignore result[key] = value.map((filter) => (0, exports.parseFilter)(filter, context)); } else if (['_in', '_nin', '_between', '_nbetween'].includes(key)) { // @ts-ignore result[key] = (0, to_array_js_1.toArray)(value).flatMap(value => parseFilterValue(value, context)); } else if (key.startsWith('_')) { // @ts-ignore result[key] = parseFilterValue(value, context); } else { // @ts-ignore result[key] = (0, exports.parseFilter)(value, context); } return result; }, {}); }; exports.parseFilter = parseFilter; function parseFilterValue(value, context) { if (value === 'true') return true; if (value === 'false') return false; if (value === 'null' || value === 'NULL') return null; if (typeof value === 'string' && value.startsWith('$')) return parseDynamicVariable(value, context); return value; } function parseDynamicVariable(value, context) { if (value.startsWith('$NOW')) { if (value.includes('(') && value.includes(')')) { const [matched, adjustment, functionName] = value.match(/\(([^)]+)\)(?:\.(\w+))?/); if (!adjustment) return new Date(); let date = (0, adjust_date_js_1.adjustDate)(new Date(), adjustment); return functionName ? functions_js_1.functions[functionName](date) : date; } return new Date(); } return (0, lodash_es_1.get)(context, value, value); } //# sourceMappingURL=parse-filter.js.map