@qualifyze/airtable-formulator
Version:
Airtable Formula Manipulator
51 lines • 1.73 kB
JavaScript
;
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