UNPKG

@qualifyze/airtable-formulator

Version:
51 lines 1.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createGroup = exports.computeGroupValue = exports.isGroupNode = exports.isGroupType = exports.groupTypes = void 0; const node_1 = require("./node"); const enclosed_1 = require("./enclosed"); exports.groupTypes = [ "group", "argumentList", "enclosedExpression", "functionCall", "operation", "modifier", ]; function isGroupType(type) { return exports.groupTypes.includes(type); } exports.isGroupType = isGroupType; function isGroupNode(node, checkType = isGroupType, checkMember = node_1.isNode) { const { members } = node; return (checkType(node.type) && Array.isArray(members) && members.every(checkMember)); } exports.isGroupNode = isGroupNode; function createGap(a, b = a, filler = " ") { const bStart = (0, enclosed_1.isEnclosedNode)(b) ? b.opener.start : b.start; const aEnd = (0, enclosed_1.isEnclosedNode)(a) ? a.closer.end : a.end; const gap = bStart - aEnd; return gap > 0 ? filler.repeat(gap) : ""; } function renderNode(node) { if ((0, enclosed_1.isEnclosedNode)(node)) { return renderNode(node.opener) + node.value + renderNode(node.closer); } return node.value; } function computeGroupValue(members) { return members .map((node, i) => `${renderNode(node)}${createGap(node, members[i + 1])}`) .join(""); } exports.computeGroupValue = computeGroupValue; function createGroup(type, nodes) { return { type, start: nodes[0]?.start ?? 0, end: nodes[nodes.length - 1]?.end ?? 0, value: computeGroupValue(nodes), members: nodes, }; } exports.createGroup = createGroup; //# sourceMappingURL=group.js.map