@trigo/bool-expressions
Advanced tools
+1
-1
| { | ||
| "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"} |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
105013
-19.77%27
-37.21%1151
-19.68%