@forestadmin/datasource-toolkit
Version:
52 lines • 5.25 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const comparison_1 = __importDefault(require("./transforms/comparison"));
const pattern_1 = __importDefault(require("./transforms/pattern"));
const time_1 = __importDefault(require("./transforms/time"));
class ConditionTreeEquivalent {
static getEquivalentTree(leaf, operators, columnType, timezone) {
const { operator } = leaf;
const replacer = ConditionTreeEquivalent.getReplacer(operator, operators, columnType);
if (!replacer)
return leaf;
return replacer ? replacer(leaf, timezone, columnType === 'Dateonly') : null;
}
static hasEquivalentTree(operator, operators, columnType) {
return Boolean(ConditionTreeEquivalent.getReplacer(operator, operators, columnType));
}
/** Find a way to replace an operator by recursively exploring the transforms graph */
static getReplacer(op, filterOperators, columnType, visited = []) {
if (filterOperators?.has(op))
return leaf => leaf;
for (const alt of ConditionTreeEquivalent.getAlternatives(op) ?? []) {
const { replacer, dependsOn } = alt;
const valid = !alt.forTypes || alt.forTypes.includes(columnType);
if (valid && !visited.includes(alt)) {
const dependsReplacers = dependsOn.map(replacement => {
return this.getReplacer(replacement, filterOperators, columnType, [...visited, alt]);
});
if (dependsReplacers.every(r => !!r)) {
return (leaf, timezone, isDateOnly) => replacer(leaf, timezone, isDateOnly).replaceLeafs(subLeaf => dependsReplacers[dependsOn.indexOf(subLeaf.operator)](subLeaf, timezone, isDateOnly));
}
}
}
return null;
}
static getAlternatives(operator) {
// Init cache at first call to work around cyclic dependencies
if (!ConditionTreeEquivalent.alternatives) {
ConditionTreeEquivalent.alternatives = {
...(0, comparison_1.default)(),
...(0, pattern_1.default)(),
...(0, time_1.default)(),
};
}
return ConditionTreeEquivalent.alternatives[operator];
}
}
exports.default = ConditionTreeEquivalent;
ConditionTreeEquivalent.alternatives = null;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXZhbGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW50ZXJmYWNlcy9xdWVyeS9jb25kaXRpb24tdHJlZS9lcXVpdmFsZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLHlFQUF5RDtBQUN6RCxtRUFBcUQ7QUFDckQsNkRBQStDO0FBZS9DLE1BQXFCLHVCQUF1QjtJQUcxQyxNQUFNLENBQUMsaUJBQWlCLENBQ3RCLElBQXVCLEVBQ3ZCLFNBQXdCLEVBQ3hCLFVBQXNCLEVBQ3RCLFFBQWdCO1FBRWhCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFMUIsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdEYsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUzQixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FDdEIsUUFBa0IsRUFDbEIsU0FBd0IsRUFDeEIsVUFBc0I7UUFFdEIsT0FBTyxPQUFPLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsc0ZBQXNGO0lBQzlFLE1BQU0sQ0FBQyxXQUFXLENBQ3hCLEVBQVksRUFDWixlQUE4QixFQUM5QixVQUFzQixFQUN0QixVQUFxQixFQUFFO1FBRXZCLElBQUksZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBRWxELEtBQUssTUFBTSxHQUFHLElBQUksdUJBQXVCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBNEIsQ0FBQyxDQUFDO1lBRW5GLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDcEMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FDcEMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQzFELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDckYsQ0FBQztpQkFDTDthQUNGO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQWtCO1FBQy9DLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFO1lBQ3pDLHVCQUF1QixDQUFDLFlBQVksR0FBRztnQkFDckMsR0FBRyxJQUFBLG9CQUFrQixHQUFFO2dCQUN2QixHQUFHLElBQUEsaUJBQWlCLEdBQUU7Z0JBQ3RCLEdBQUcsSUFBQSxjQUFjLEdBQUU7YUFDcEIsQ0FBQztTQUNIO1FBRUQsT0FBTyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7QUFuRUgsMENBb0VDO0FBbkVnQixvQ0FBWSxHQUE2QyxJQUFJLENBQUMifQ==
;