UNPKG

@schoenbergerb/logical-expression-parser

Version:

Logical expression parser and evaluates result, suitable for permissions management

40 lines 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExpressionParser = void 0; const make_ast_1 = require("./make-ast"); const node_evaluator_1 = require("./node-evaluator"); const polish_1 = require("./polish"); const token_type_1 = require("./token-type"); const tokenizer_1 = require("./tokenizer"); class ExpressionParser { literalCheck = (item, entities) => entities.includes(item); tokens; constructor(tokens, litCheck) { this.tokens = new Map([ [token_type_1.Token.PARENTHESES_OPEN, '('], [token_type_1.Token.PARENTHESES_CLOSE, ')'], [token_type_1.Token.OPERATOR_NOT, '!'], [token_type_1.Token.OPERATOR_AND, '&'], [token_type_1.Token.OPERATOR_OR, '/'], [token_type_1.Token.LITERAL, 'LITERAL'], [token_type_1.Token.END, 'END'], [token_type_1.Token.LEAF, 'LEAF'], [token_type_1.Token.ATOMIC, 'ATOMIC'], ]); for (const [t, v] of tokens) { this.tokens.set(t, v); } if (litCheck) { this.literalCheck = litCheck; } } evaluate = (expression, entities) => { const tokenized = (0, tokenizer_1.Tokenizer)(expression, this.tokens); const polish = (0, polish_1.PolishNotation)(tokenized, this.tokens); const gen = (0, polish_1.PolishGenerator)(polish); const ast = (0, make_ast_1.make)(gen); return (0, node_evaluator_1.nodeEvaluator)(ast, this.literalCheck, entities); }; } exports.ExpressionParser = ExpressionParser; //# sourceMappingURL=expression.parser.js.map