avocado-old/packages/behavior/builders.js
2019-05-28 16:50:56 -05:00

53 lines
964 B
JavaScript

export function buildTraversal(path, value) {
const traversal = {
type: 'traversal',
steps: path.map((key) => {
return {
type: 'key',
key: key,
};
}),
};
if ('undefined' !== typeof value) {
traversal.value = buildValue(value);
}
return traversal;
}
export function buildInvoke (path, args = []) {
const traversal = buildTraversal(path);
traversal.steps.push({
type: 'invoke',
args: args.map((arg) => {
return buildValue(arg);
}),
});
return traversal;
}
export function buildValue(value) {
if (
'object' === typeof value
&& (
'traversal' === value.type
|| 'condition' === value.type
)
) {
return value;
}
return {
type: 'literal',
value,
};
}
export function buildCondition(operator, operands) {
return {
type: 'condition',
operator,
operands: operands.map((operand) => {
return buildValue(operand);
}),
};
}