@forestadmin/datasource-toolkit
Version:
135 lines • 10.7 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const base_1 = __importDefault(require("./base"));
const operators_1 = require("./operators");
const collection_1 = __importDefault(require("../../../../utils/collection"));
const record_1 = __importDefault(require("../../../../utils/record"));
const projection_1 = __importDefault(require("../../projection"));
const equivalence_1 = __importDefault(require("../equivalence"));
const factory_1 = __importDefault(require("../factory"));
class ConditionTreeLeaf extends base_1.default {
get projection() {
return new projection_1.default(this.field);
}
get useIntervalOperator() {
return operators_1.intervalOperators.includes(this.operator);
}
constructor(field, operator, value) {
super();
this.field = field;
this.operator = operator;
this.value = value;
}
forEachLeaf(handler) {
handler(this);
}
everyLeaf(handler) {
return handler(this);
}
someLeaf(handler) {
return handler(this);
}
inverse() {
if (operators_1.allOperators.includes(`Not${this.operator}`)) {
return this.override({ operator: `Not${this.operator}` });
}
if (this.operator.startsWith('Not')) {
return this.override({ operator: this.operator.substring(3) });
}
switch (this.operator) {
case 'Blank':
return this.override({ operator: 'Present' });
case 'Present':
return this.override({ operator: 'Blank' });
default:
throw new Error(`Operator '${this.operator}' cannot be inverted.`);
}
}
replaceLeafs(handler, bind) {
const result = handler.call(bind, this);
return result instanceof base_1.default ? result : factory_1.default.fromPlainObject(result);
}
async replaceLeafsAsync(handler, bind) {
const result = await handler.call(bind, this);
return result instanceof base_1.default ? result : factory_1.default.fromPlainObject(result);
}
match(record, collection, timezone) {
const fieldValue = record_1.default.getFieldValue(record, this.field);
const { columnType } = collection_1.default.getFieldSchema(collection, this.field);
const supported = [
...[
'In',
'Equal',
'LessThan',
'GreaterThan',
'LessThanOrEqual',
'GreaterThanOrEqual',
'Match',
'StartsWith',
'EndsWith',
],
...[
'LongerThan',
'ShorterThan',
'IncludesAll',
'IncludesNone',
'NotIn',
'NotEqual',
'NotContains',
],
];
switch (this.operator) {
case 'In':
return this.value?.includes(fieldValue);
case 'Equal':
return fieldValue == this.value; // eslint-disable-line eqeqeq
case 'LessThan':
return fieldValue < this.value;
case 'GreaterThan':
return fieldValue > this.value;
case 'LessThanOrEqual':
return fieldValue <= this.value;
case 'GreaterThanOrEqual':
return fieldValue >= this.value;
case 'Match':
return typeof fieldValue === 'string' && this.value.test(fieldValue);
case 'StartsWith':
return typeof fieldValue === 'string' && fieldValue.startsWith(this.value);
case 'EndsWith':
return typeof fieldValue === 'string' && fieldValue.endsWith(this.value);
case 'LongerThan':
return typeof fieldValue === 'string' ? fieldValue.length > this.value : false;
case 'ShorterThan':
return typeof fieldValue === 'string' ? fieldValue.length < this.value : false;
case 'IncludesAll':
return !!this.value?.every(v => fieldValue?.includes(v));
case 'IncludesNone':
return !this.value?.some(v => fieldValue?.includes(v));
case 'NotIn':
case 'NotEqual':
case 'NotContains':
case 'NotIContains':
return !this.inverse().match(record, collection, timezone);
default:
return equivalence_1.default.getEquivalentTree(this, new Set(supported), columnType, timezone).match(record, collection, timezone);
}
}
override(params) {
return factory_1.default.fromPlainObject({ ...this, ...params });
}
unnest() {
return super.unnest();
}
toPlainObject() {
return {
field: this.field,
operator: this.operator,
value: this.value,
};
}
}
exports.default = ConditionTreeLeaf;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9pbnRlcmZhY2VzL3F1ZXJ5L2NvbmRpdGlvbi10cmVlL25vZGVzL2xlYWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMkQ7QUFDM0QsMkNBQXdFO0FBQ3hFLDhFQUEyRDtBQUMzRCxzRUFBbUQ7QUFJbkQsa0VBQTBDO0FBQzFDLGlFQUFxRDtBQUNyRCx5REFBOEM7QUFVOUMsTUFBcUIsaUJBQWtCLFNBQVEsY0FBYTtJQUsxRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksb0JBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sNkJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUE4QyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELFlBQVksS0FBYSxFQUFFLFFBQWtCLEVBQUUsS0FBZTtRQUM1RCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBcUI7UUFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBbUI7UUFDM0IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFtQjtRQUMxQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksd0JBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFjLENBQUMsRUFBRTtZQUM1RCxPQUFP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