UNPKG

@qualifyze/airtable-formulator

Version:
40 lines 1.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.reduceFieldReferences = exports.isFieldReference = void 0; const primitives_1 = require("./primitives"); const fieldReferenceType = "fieldReference"; function isFieldReferenceType(type) { return type === fieldReferenceType; } function isFieldReference(node) { return isFieldReferenceType(node.type); } exports.isFieldReference = isFieldReference; function createFieldReference(node) { if (!(0, primitives_1.isReference)(node)) { // Sanity check throw new Error((0, primitives_1.createNodeErrorMessage)(node, `expected reference type, but got ${node.type}`, "Internal")); } return { ...node, type: fieldReferenceType, }; } function isValidNeighbour(node) { return (0, primitives_1.isOperator)(node) || (0, primitives_1.isArgumentSeparator)(node); } const reduceFieldReferences = ([...nodes]) => { const meaningfulNodes = (0, primitives_1.filterMeaningfulNodes)(nodes); const references = meaningfulNodes.filter(primitives_1.isReference); // A field reference can only be adjacent to operators or argument separators const applicableReferences = new WeakSet(references.filter((reference) => { const index = meaningfulNodes.indexOf(reference); const previous = meaningfulNodes[index - 1]; const next = meaningfulNodes[index + 1]; return ((!previous || isValidNeighbour(previous)) && (!next || isValidNeighbour(next))); })); return nodes.map((node) => applicableReferences.has(node) ? createFieldReference(node) : node); }; exports.reduceFieldReferences = reduceFieldReferences; //# sourceMappingURL=field-reference.js.map