@dexpenses/rule-conditions
Version:
Condition engine and parser for Dexpenses rules
56 lines • 2.55 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const AndCondition_1 = require("./condition/bool/AndCondition");
const OrCondition_1 = require("./condition/bool/OrCondition");
const NotCondition_1 = require("./condition/bool/NotCondition");
const HeaderCondition_1 = require("./condition/HeaderCondition");
const AmountCondition_1 = require("./condition/AmountCondition");
const CurrencyCondition_1 = require("./condition/CurrencyCondition");
const DateCondition_1 = require("./condition/DateCondition");
const TimeCondition_1 = require("./condition/TimeCondition");
const PaymentMethodCondition_1 = require("./condition/PaymentMethodCondition");
const core_1 = require("@dexpenses/core");
const PlaceTypeCondition_1 = require("./condition/PlaceTypeCondition");
const PlaceTypeCategoryCondition_1 = require("./condition/PlaceTypeCategoryCondition");
function parseCondition(json) {
const entries = Object.entries(json);
if (entries.length === 0) {
throw new Error('Expected condition but got {}');
}
if (entries.length > 1) {
throw new Error('Condition can only have a single entry');
}
const [key, value] = entries[0];
switch (key) {
case '$and':
return new AndCondition_1.default(value.map(parseCondition));
case '$or':
return new OrCondition_1.default(value.map(parseCondition));
case '$not':
return new NotCondition_1.default(parseCondition(value));
case 'header':
const [searchString, caseSensitive] = value;
return new HeaderCondition_1.default(searchString, caseSensitive);
case 'amount':
const [aop, n] = value;
return new AmountCondition_1.default(aop, n);
case 'currency':
return new CurrencyCondition_1.default(value);
case 'paymentMethod':
return new PaymentMethodCondition_1.default(value);
case 'date':
const [dateField, dop, dn] = value;
return new DateCondition_1.default(dateField, dop, dn);
case 'time':
const [type, tn] = value;
return new TimeCondition_1.default(core_1.Time.parse(tn), type);
case 'placeType':
return new PlaceTypeCondition_1.default(value);
case 'placeTypeCategory':
return new PlaceTypeCategoryCondition_1.default(value);
default:
throw new Error('unknown key: ' + key);
}
}
exports.parseCondition = parseCondition;
//# sourceMappingURL=parse.js.map