UNPKG

@qualifyze/airtable-formulator

Version:
40 lines 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = void 0; const tokenize_1 = require("./tokenize"); const nodes_1 = require("./nodes"); function reduceGroups(reducer) { // Using named function here as it makes debugging easier function reduceGroups(nodes) { return nodes.map((node) => (0, nodes_1.isGroupNode)(node) ? { ...node, members: reduceNodes(node.members) } ?? node : node); } const reduceNodes = (0, nodes_1.composeReducers)(reduceGroups, reducer); return reduceNodes; } const reduceNodes = reduceGroups((0, nodes_1.separateNodes)((0, nodes_1.eagerlyRepeat)((0, nodes_1.composeReducers)(nodes_1.reduceEnclosedExpressions, nodes_1.reduceFieldReferences, nodes_1.reduceFunctionReferences, nodes_1.reduceModifiers, nodes_1.reduceOperations, nodes_1.reduceArgumentLists, nodes_1.reduceFunctionCalls)))); /** * Parses a formula string into an AST. * @experimental This function is experimental, potentially unstable and may change in future versions. * @param formula * @param options */ function parse(formula, { removeSpace = false } = {}) { const tokenGroup = (0, tokenize_1.tokenize)(formula); const nodes = reduceNodes(tokenGroup.members); const [expression = null, unexpectedNode] = (0, nodes_1.reduceSpaces)(nodes); if (unexpectedNode) { throw new Error((0, nodes_1.createNodeErrorMessage)(unexpectedNode, `Unexpected node ${unexpectedNode.type}`)); } if (expression !== null && !(0, nodes_1.isExpressionNode)(expression)) { throw new Error((0, nodes_1.createNodeErrorMessage)(expression, `Expected to find an expression, got ${expression.type} instead`)); } if (expression && removeSpace) { const [expressionWithoutSpaces] = reduceGroups(nodes_1.reduceSpaces)([expression]); return expressionWithoutSpaces; } return expression; } exports.parse = parse; //# sourceMappingURL=parse.js.map