UNPKG

@qualifyze/airtable-formulator

Version:
33 lines 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.separateNodes = void 0; const primitives_1 = require("./primitives"); /** * Creates a reducer that runs a reducer on each 'argumentSeparator' delimited set of nodes. * @param reduceNodes */ function separateNodes(reduceNodes) { // Using named function here as it makes debugging easier return function separateNodes([...nodes]) { const separators = nodes.filter(primitives_1.isArgumentSeparator); const index = separators.reduce((previousIndex, separator) => { const separatorIndex = nodes.indexOf(separator); const nodesBefore = nodes.slice(previousIndex, separatorIndex); if (nodesBefore.length === 0) { throw new Error((0, primitives_1.createNodeErrorMessage)(separator, `Expected at least one node before separator, but got none`)); } const replacementNodes = reduceNodes(nodesBefore); nodes.splice(previousIndex, nodesBefore.length, ...replacementNodes); // With the splice, the index of the separator has potentially. return nodes.indexOf(separator) + 1; }, 0); const nodesAfter = nodes.slice(index); if (nodesAfter.length === 0 && separators.length > 0) { throw new Error((0, primitives_1.createNodeErrorMessage)(separators[separators.length - 1], `expected at least one node after separator, but got ${nodesAfter.length}`)); } nodes.splice(index, nodesAfter.length, ...reduceNodes(nodesAfter)); return nodes; }; } exports.separateNodes = separateNodes; //# sourceMappingURL=separate-nodes.js.map