🚨 Active Supply Chain Attack:node-ipc Package Compromised.Learn More
Socket
Book a DemoSign in
Socket

@trigo/bool-expressions

Package Overview
Dependencies
Maintainers
3
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@trigo/bool-expressions - npm Package Compare versions

Comparing version
4.1.1
to
4.1.2
+1
-1
package.json
{
"name": "@trigo/bool-expressions",
"version": "4.1.1",
"version": "4.1.2",
"description": "Compiles, calculates and reduces boolean expressions",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var _a;
var utils_1 = require("../utils");
var language_1 = require("./language");
var tokenize_1 = require("./compiler/tokenize");
var structure_1 = require("./compiler/structure");
var execute_1 = require("./compiler/execute");
var operators = (_a = {
default: function () { return true; },
term: function () { return true; }
},
_a[language_1.operatorSymbols.not] = function () { return function (right) { return !right; }; },
_a[language_1.operatorSymbols.or] = function (left) { return function (right) { return left || right; }; },
_a[language_1.operatorSymbols.and] = function (left) { return function (right) { return left && right; }; },
_a[language_1.operatorSymbols.xOfy] = function (left) { return function (right) {
// eslint-disable-next-line no-unused-vars
var _a = left.match(language_1.xOfyPattern), x = _a[1], y = _a[2];
// as soon as x or more of the right operands are true, the function returns true
return right.filter(function (op2Element) { return op2Element; }).length >= x;
}; },
_a);
var isFulfilled = function (state, token) { return state.indexOf(token) >= 0; };
var booleanize = function (state) { return function (tokens) {
return tokens.map(function (token) { return (language_1.isReserved(token) ? token : isFulfilled(state, token)); });
}; };
/**
* Evaluates the result of a boolean expression without any variables
* in the form of "true OR false", "true AND true AND false" etc.
* @param {string[]} structuredExpression - the expression, preprocessed as a nested, tokenized array
* @returns {boolean} the result of the boolean expression
*/
exports.evaluate = function (structuredExpression) { return execute_1.default(operators)(structuredExpression); };
/**
* Calculates the result for a boolean expression
* in the form of "(a AND b) OR c"
* @param {string} expression - Boolean expression
* @param {string[]} state - List of variables which are "true"
* @returns {boolean} Result of the boolean expression
*/
var calculate = function (expression, state) {
return utils_1.pipe(tokenize_1.default, booleanize(state), structure_1.default, exports.evaluate)(expression);
};
exports.default = calculate;
//# sourceMappingURL=calculate.js.map
{"version":3,"file":"calculate.js","sourceRoot":"","sources":["../../src/calculate.ts"],"names":[],"mappings":";;;AAAA,kCAAgC;AAChC,uCAA+F;AAC/F,gDAA2C;AAC3C,kDAA6C;AAC7C,8CAAyC;AAEzC,IAAM,SAAS;QACX,OAAO,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QACnB,IAAI,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;;IAChB,GAAC,0BAAe,CAAC,GAAG,IAAG,cAAM,OAAA,UAAA,KAAK,IAAI,OAAA,CAAC,KAAK,EAAN,CAAM,EAAf,CAAe;IAC5C,GAAC,0BAAe,CAAC,EAAE,IAAG,UAAA,IAAI,IAAI,OAAA,UAAA,KAAK,IAAI,OAAA,IAAI,IAAI,KAAK,EAAb,CAAa,EAAtB,CAAsB;IACpD,GAAC,0BAAe,CAAC,GAAG,IAAG,UAAA,IAAI,IAAI,OAAA,UAAA,KAAK,IAAI,OAAA,IAAI,IAAI,KAAK,EAAb,CAAa,EAAtB,CAAsB;IACrD,GAAC,0BAAe,CAAC,IAAI,IAAG,UAAA,IAAI,IAAI,OAAA,UAAC,KAAK;QAClC,0CAA0C;QACpC,IAAA,uCAAkC,EAA/B,SAAC,EAAE,SAA4B,CAAC;QACzC,iFAAiF;QACjF,OAAO,KAAK,CAAC,MAAM,CAAC,UAAA,UAAU,IAAI,OAAA,UAAU,EAAV,CAAU,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC9D,CAAC,EAL+B,CAK/B;OACJ,CAAC;AAEF,IAAM,WAAW,GAAG,UAAC,KAAe,EAAE,KAAa,IAAc,OAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAzB,CAAyB,CAAC;AAE3F,IAAM,UAAU,GAAG,UAAC,KAAe,IAAK,OAAA,UAAC,MAAgB;IACrD,OAAA,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAvD,CAAuD,CAAC;AAA5E,CAA4E,EADxC,CACwC,CAAC;AAEjF;;;;;GAKG;AACU,QAAA,QAAQ,GAAG,UAAC,oBAA8B,IAAc,OAAA,iBAAO,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,EAAxC,CAAwC,CAAC;AAG9G;;;;;;GAMG;AACH,IAAM,SAAS,GAAG,UAAC,UAAkB,EAAE,KAAe;IAClD,OAAA,YAAI,CACA,kBAAQ,EACR,UAAU,CAAC,KAAK,CAAC,EACjB,mBAAS,EACT,gBAAQ,CACX,CAAC,UAAU,CAAC;AALb,CAKa,CAAC;AAElB,kBAAe,SAAS,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var language_1 = require("../language");
var __execute = function (operators) { return function __internalEvaluate(structuredExpression) {
// if the expression consists of only a value, we return it immediately
if (!Array.isArray(structuredExpression))
return structuredExpression;
if (structuredExpression.length === 0)
return operators.default();
var leftOperand = structuredExpression[0], operator = structuredExpression[1], rightOperand = structuredExpression.slice(2);
if (structuredExpression.length === 1) {
return Array.isArray(leftOperand) ? __internalEvaluate(leftOperand) : leftOperand;
}
// if we find a boolean, an augmented operand or an array where the operator should be,
// we have a operand list (e.g. X/Y operator), so we have to abort the fold and map all operands in the list
// to their evaluated value
return typeof operator === 'boolean' || language_1.isOperand(operator) || Array.isArray(operator) ?
structuredExpression.map(function (expr) { return __internalEvaluate(expr); }) :
operators[operator](__internalEvaluate([leftOperand]))(__internalEvaluate(rightOperand));
}; };
var execute = function (operators) { return function (structuredExpression) {
// evalute the term if the espression only has an operand
if (structuredExpression.length === 1 && language_1.isOperand(structuredExpression[0]))
return operators.term(structuredExpression[0]);
return __execute(operators)(structuredExpression);
}; };
exports.default = execute;
//# sourceMappingURL=execute.js.map
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/compiler/execute.ts"],"names":[],"mappings":";;AAAA,wCAAqD;AAErD,IAAM,SAAS,GAAG,UAAC,SAAsB,IAAK,OAAA,SAAS,kBAAkB,CAAC,oBAAoB;IAC1F,uEAAuE;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACtE,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;IAE3D,IAAA,qCAAW,EAAE,kCAAQ,EAAE,4CAAe,CAAyB;IACtE,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;KACrF;IAED,uFAAuF;IACvF,4GAA4G;IAC5G,2BAA2B;IAC3B,OAAO,OAAO,QAAQ,KAAK,SAAS,IAAI,oBAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpF,oBAAoB,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,kBAAkB,CAAC,IAAI,CAAC,EAAxB,CAAwB,CAAC,CAAC,CAAC;QAC5D,SAAS,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;AACjG,CAAC,EAhB6C,CAgB7C,CAAC;AAEF,IAAM,OAAO,GAAG,UAAC,SAAsB,IAAK,OAAA,UAAA,oBAAoB;IAC5D,yDAAyD;IACzD,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;AACtD,CAAC,EAJ2C,CAI3C,CAAC;AAEF,kBAAe,OAAO,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var utils_1 = require("../../utils");
var language_1 = require("../language");
var __structure = function (result, tokens) {
// once we are at the end of the token array or encounter a closing brace -> cut off
if (tokens.length === 0 || tokens[0] === ')') {
return result;
}
var currentToken = tokens[0];
// if we encounter an opening brace, we open a new recursion to get nesting
if (currentToken === '(') {
var nestedStruct = __structure([], tokens.slice(1));
result.push(nestedStruct);
var flatResult = utils_1.flatten(nestedStruct);
// we have to slice off the number of processed tokens + 2 braces per depth level
// X/Y have to be filtered out because we add them to the expression
var numAlreadyProcessedTokens = flatResult.result.filter(function (x) { return x !== language_1.operatorSymbols.xOfy && x !== '_'; }).length + (flatResult.allArrays.length * 2);
return __structure(result, tokens.slice(numAlreadyProcessedTokens));
}
if (currentToken === language_1.operatorSymbols.not) {
result.push('_');
}
result.push(currentToken);
// insert "x/y" token into structure so that every operator follows
// the <operand 1> <operator> <operand2> notation
if (language_1.isXofYexpression(currentToken)) {
result.push(language_1.operatorSymbols.xOfy);
}
return __structure(result, tokens.slice(1));
};
/**
* Transform a token array into a nested structure, based on bracing
* @param {string[]} tokens - the flat token array
* @returns {string[]} a nested token array, braces removed
*/
var structure = function (tokens) { return __structure([], tokens); };
exports.default = structure;
//# sourceMappingURL=structure.js.map
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/compiler/structure.ts"],"names":[],"mappings":";;AAAA,qCAAsC;AACtC,wCAAgE;AAEhE,IAAM,WAAW,GAAG,UAAC,MAAgB,EAAE,MAAgB;IACnD,oFAAoF;IACpF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC1C,OAAO,MAAM,CAAC;KACjB;IACD,IAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,2EAA2E;IAC3E,IAAI,YAAY,KAAK,GAAG,EAAE;QACtB,IAAM,YAAY,GAAG,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAM,UAAU,GAAG,eAAO,CAAC,YAAY,CAAC,CAAC;QACzC,iFAAiF;QACjF,oEAAoE;QACpE,IAAM,yBAAyB,GAC3B,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,0BAAe,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,EAAvC,CAAuC,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtH,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;KACvE;IAED,IAAI,YAAY,KAAK,0BAAe,CAAC,GAAG,EAAE;QACtC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpB;IACD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE1B,mEAAmE;IACnE,iDAAiD;IACjD,IAAI,2BAAgB,CAAC,YAAY,CAAC,EAAE;QAChC,MAAM,CAAC,IAAI,CAAC,0BAAe,CAAC,IAAI,CAAC,CAAC;KACrC;IACD,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF;;;;GAIG;AACH,IAAM,SAAS,GAAG,UAAC,MAAgB,IAAe,OAAA,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,EAAvB,CAAuB,CAAC;AAE1E,kBAAe,SAAS,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var isWhitespace = function (char) { return char === ' '; };
var isBraces = function (char) { return char === '(' || char === ')'; };
var isSeparator = function (char) { return isWhitespace(char) || isBraces(char); };
var __tokenize = function (result, current, str) {
if (!str || str.length === 0) {
if (current.length > 0)
result.push(current);
return result;
}
var currentChar = str[0];
if (isSeparator(currentChar)) {
if (current.length > 0)
result.push(current);
if (isBraces(currentChar))
result.push(currentChar);
return __tokenize(result, '', str.slice(1));
}
return __tokenize(result, current.concat(currentChar), str.slice(1));
};
/** Transforms an expression string into a flat token array
* @param {string} str - expression string
* @returns {string[]} tokenized string
*/
var tokenize = function (str) { return __tokenize([], '', str); };
exports.default = tokenize;
//# sourceMappingURL=tokenize.js.map
{"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../../src/compiler/tokenize.ts"],"names":[],"mappings":";;AAAA,IAAM,YAAY,GAAG,UAAC,IAAY,IAAc,OAAA,IAAI,KAAK,GAAG,EAAZ,CAAY,CAAC;AAC7D,IAAM,QAAQ,GAAG,UAAC,IAAY,IAAc,OAAA,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAA5B,CAA4B,CAAC;AACzE,IAAM,WAAW,GAAG,UAAC,IAAY,IAAc,OAAA,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAApC,CAAoC,CAAC;AAEpF,IAAM,UAAU,GAAG,UAAC,MAAgB,EAAE,OAAe,EAAE,GAAW;IAC9D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;KACjB;IACD,IAAM,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;QAC1B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,WAAW,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,OAAO,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C;IAED,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;;GAGG;AACH,IAAM,QAAQ,GAAG,UAAC,GAAY,IAAe,OAAA,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAvB,CAAuB,CAAC;AAErE,kBAAe,QAAQ,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var utils_1 = require("../utils");
var language_1 = require("./language");
var tokenize_1 = require("./compiler/tokenize");
var filterReservedSymbols = function (tokenArray) {
return tokenArray.filter(function (token) { return !language_1.isReserved(token); });
};
var deduplicate = function (array) {
return array.filter(function (token, pos) { return array.indexOf(token) === pos; });
};
var fetchVariables = function (expression) {
return utils_1.pipe(tokenize_1.default, filterReservedSymbols, deduplicate)(expression);
};
exports.default = fetchVariables;
//# sourceMappingURL=fetchVariables.js.map
{"version":3,"file":"fetchVariables.js","sourceRoot":"","sources":["../../src/fetchVariables.ts"],"names":[],"mappings":";;AAAA,kCAAgC;AAChC,uCAAwC;AACxC,gDAA2C;AAE3C,IAAM,qBAAqB,GAAG,UAAC,UAAoB;IAC/C,OAAO,UAAU,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,qBAAU,CAAC,KAAK,CAAC,EAAlB,CAAkB,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,UAAC,KAAe;IAChC,OAAO,KAAK,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAA5B,CAA4B,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,IAAM,cAAc,GAAG,UAAC,UAAkB;IACtC,OAAO,YAAI,CACP,kBAAQ,EACR,qBAAqB,EACrB,WAAW,CACd,CAAC,UAAU,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,kBAAe,cAAc,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var utils_1 = require("../utils");
function isOperand(obj) {
return obj.operand !== undefined;
}
exports.isOperand = isOperand;
exports.operatorSymbols = {
and: 'AND',
or: 'OR',
xOfy: 'X/Y',
not: 'NOT',
};
exports.operatorSymbolsRegEx = {
and: /^AND$/,
or: /^OR$/,
xOfy: /^X\/Y$/,
not: /^NOT$/,
};
exports.xOfyPattern = new RegExp('([0-9]+)/([0-9]+)');
exports.reservedSymbols = Object.values(exports.operatorSymbolsRegEx).concat([
exports.xOfyPattern,
'\\(',
'\\)',
]);
exports.isReserved = function (token) { return (typeof token === 'string' && !!exports.reservedSymbols.find(function (symbol) { return !!token.match(symbol); })); };
exports.isXofYexpression = utils_1.matches(exports.xOfyPattern);
//# sourceMappingURL=language.js.map
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/language.ts"],"names":[],"mappings":";;AAAA,kCAAmC;AAOnC,SAAgB,SAAS,CAAC,GAAQ;IAC9B,OAAiB,GAAI,CAAC,OAAO,KAAK,SAAS,CAAC;AAChD,CAAC;AAFD,8BAEC;AAQY,QAAA,eAAe,GAAG;IAC3B,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;CACb,CAAC;AAEW,QAAA,oBAAoB,GAAG;IAChC,GAAG,EAAE,OAAO;IACZ,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE,OAAO;CACf,CAAC;AAEW,QAAA,WAAW,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE9C,QAAA,eAAe,GACrB,MAAM,CAAC,MAAM,CAAC,4BAAoB,CAAC;IACtC,mBAAW;IACX,KAAK;IACL,KAAK;GACP;AACW,QAAA,UAAU,GAAG,UAAC,KAAa,IAAc,OAAA,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,uBAAe,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAArB,CAAqB,CAAC,CAAC,EAAtF,CAAsF,CAAC;AAEhI,QAAA,gBAAgB,GAAG,eAAO,CAAC,mBAAW,CAAC,CAAC"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var _a;
var utils_1 = require("../utils");
var language_1 = require("./language");
var structure_1 = require("./compiler/structure");
var tokenize_1 = require("./compiler/tokenize");
var execute_1 = require("./compiler/execute");
var isTrue = function (operand) { return (Array.isArray(operand) && operand.length === 0) || (operand && operand.value); };
var operators = (_a = {
default: function () { return []; },
term: function (operand) { return isTrue(operand) ? [] : operand; }
},
_a[language_1.operatorSymbols.not] = function () { return function (right) {
return (isTrue(right) ? [language_1.operatorSymbols.not, right] : []);
}; },
_a[language_1.operatorSymbols.or] = function (left) { return function (right) {
return (isTrue(left) || isTrue(right) ? [] : [left, language_1.operatorSymbols.or, right]);
}; },
_a[language_1.operatorSymbols.and] = function (left) { return function (right) {
if (isTrue(left) && isTrue(right))
return [];
if (isTrue(left))
return [right];
if (isTrue(right))
return [left];
return [left, language_1.operatorSymbols.and, right];
}; },
_a[language_1.operatorSymbols.xOfy] = function (left) { return function (right) {
var _a = left.match(language_1.xOfyPattern), x = _a[1], y = _a[2];
// first we check how many of the operands are already true
var numFulfilled = right.filter(function (op) { return isTrue(op); }).length;
// then we eliminate all true operands from the list and construct a list of their names
// so a updated expression with the current remaining requirements can be constructed
return numFulfilled >= x ?
[] : [x - numFulfilled + "/" + (y - numFulfilled)].concat(right.filter(function (op) { return !isTrue(op); }));
}; },
_a);
var isFulfilled = function (state, token) { return state.indexOf(token) >= 0; };
var augmentOperand = function (state, token) { return ({
value: isFulfilled(state, token),
operand: token,
}); };
var calculateTokens = function (state) { return function (tokens) {
return tokens.map(function (token) { return (language_1.isReserved(token) ? token : augmentOperand(state, token)); });
}; };
var reduceStructuredExpression = function (structuredExpression) { return execute_1.default(operators)(structuredExpression); };
var cleanReducedExpression = function (expression) {
return expression
.map(function (part) { return (Array.isArray(part) && part.length === 1 ? part[0] : part); })
.map(function (part) { return part.operand || part; });
};
var normalizeToArray = function (obj) { return (Array.isArray(obj) ? obj : [obj]); };
/** Reduces a boolean expression by eliminating all "true" operands and sub expressions
* @param {string} expression - the boolean expression string
* @param {string[]} state - all variables which are "true"
* @returns {string[]} A tokenized, structured (nested) array of expressions which have to be fulfilled to get a "true"
* result from the input expression
*/
var reduce = function (expression, state) {
return utils_1.pipe(tokenize_1.default, calculateTokens(state), structure_1.default, reduceStructuredExpression, normalizeToArray, utils_1.mapRecursive(cleanReducedExpression))(expression);
};
exports.default = reduce;
//# sourceMappingURL=reduce.js.map
{"version":3,"file":"reduce.js","sourceRoot":"","sources":["../../src/reduce.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var _a;
var utils_1 = require("../utils");
var language_1 = require("./language");
var tokenize_1 = require("./compiler/tokenize");
var structure_1 = require("./compiler/structure");
var execute_1 = require("./compiler/execute");
var hasLeftAndRightOperand = function (left, right) { return left && right; };
var operators = (_a = {
default: function () { return false; },
term: function () { return false; }
},
_a[language_1.operatorSymbols.or] = function (left) { return function (right) { return hasLeftAndRightOperand(left, right); }; },
_a[language_1.operatorSymbols.and] = function (left) { return function (right) { return hasLeftAndRightOperand(left, right); }; },
_a[language_1.operatorSymbols.not] = function () { return function (right) { return right; }; },
_a[language_1.operatorSymbols.xOfy] = function (left) { return function (right) {
var _a = left.match(language_1.xOfyPattern).map(function (x) { return Number.parseInt(x, 10); }), x = _a[1], y = _a[2];
if (!Number.isInteger(x) || !Number.isInteger(y))
return false;
return right.length > 0 && right.length === y && x > 0 && x <= y;
}; },
_a);
var innerValidate = function (structuredExpression) {
var result = execute_1.default(operators)(structuredExpression);
return result !== false && !Array.isArray(result);
};
var hasMatchingBraces = function (tokenArray) {
return tokenArray.filter(function (token) { return token === '('; }).length === tokenArray.filter(function (token) { return token === ')'; }).length;
};
var booleanize = function (tokens) {
return tokens.map(function (token) { return (language_1.isReserved(token) ? token : true); });
};
var validate = function (expression) {
var tokenizedExpression = tokenize_1.default(expression);
if (tokenizedExpression.length === 0)
return true;
return hasMatchingBraces(tokenizedExpression) &&
utils_1.pipe(booleanize, structure_1.default, innerValidate)(tokenizedExpression);
};
exports.default = validate;
//# sourceMappingURL=validate.js.map
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":";;;AAAA,kCAAgC;AAChC,uCAA+F;AAC/F,gDAA2C;AAC3C,kDAA6C;AAC7C,8CAAyC;AAEzC,IAAM,sBAAsB,GAAG,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,IAAI,IAAI,KAAK,EAAb,CAAa,CAAC;AAE9D,IAAM,SAAS;QACX,OAAO,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;QACpB,IAAI,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;;IACjB,GAAC,0BAAe,CAAC,EAAE,IAAG,UAAA,IAAI,IAAI,OAAA,UAAA,KAAK,IAAI,OAAA,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAnC,CAAmC,EAA5C,CAA4C;IAC1E,GAAC,0BAAe,CAAC,GAAG,IAAG,UAAA,IAAI,IAAI,OAAA,UAAA,KAAK,IAAI,OAAA,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAnC,CAAmC,EAA5C,CAA4C;IAC3E,GAAC,0BAAe,CAAC,GAAG,IAAG,cAAM,OAAA,UAAA,KAAK,IAAI,OAAA,KAAK,EAAL,CAAK,EAAd,CAAc;IAC3C,GAAC,0BAAe,CAAC,IAAI,IAAG,UAAA,IAAI,IAAI,OAAA,UAAA,KAAK;QAC3B,IAAA,4FAAmE,EAAhE,SAAC,EAAE,SAA6D,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/D,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,EAJ+B,CAI/B;OACJ,CAAC;AAEF,IAAM,aAAa,GAAG,UAAC,oBAA8B;IACjD,IAAM,MAAM,GAAG,iBAAO,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACxD,OAAO,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UAAC,UAAoB;IAC3C,OAAO,UAAU,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,KAAK,GAAG,EAAb,CAAa,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,KAAI,GAAG,EAAZ,CAAY,CAAC,CAAC,MAAM,CAAC;AAChH,CAAC,CAAC;AAEF,IAAM,UAAU,GAAG,UAAC,MAAgB;IAChC,OAAA,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAlC,CAAkC,CAAC;AAAvD,CAAuD,CAAC;AAE5D,IAAM,QAAQ,GAAG,UAAC,UAAkB;IAChC,IAAM,mBAAmB,GAAG,kBAAQ,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,iBAAiB,CAAC,mBAAmB,CAAC;QACzC,YAAI,CACA,UAAU,EACV,mBAAS,EACT,aAAa,CAChB,CAAC,mBAAmB,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC"}