avocado-old/packages/behavior/builders.js

53 lines
964 B
JavaScript
Raw Normal View History

2019-04-21 21:13:39 -05:00
export function buildTraversal(path, value) {
const traversal = {
type: 'traversal',
steps: path.map((key) => {
return {
type: 'key',
key: key,
};
}),
};
if ('undefined' !== typeof value) {
2019-04-21 21:22:56 -05:00
traversal.value = buildValue(value);
2019-04-21 21:13:39 -05:00
}
return traversal;
}
2019-04-21 21:36:14 -05:00
export function buildInvoke (path, args = []) {
2019-04-21 21:13:39 -05:00
const traversal = buildTraversal(path);
traversal.steps.push({
type: 'invoke',
args: args.map((arg) => {
2019-04-21 21:22:56 -05:00
return buildValue(arg);
2019-04-21 21:13:39 -05:00
}),
});
return traversal;
}
2019-04-21 21:22:56 -05:00
export function buildValue(value) {
2019-05-28 16:50:56 -05:00
if (
'object' === typeof value
&& (
'traversal' === value.type
|| 'condition' === value.type
)
) {
2019-04-21 21:22:56 -05:00
return value;
}
return {
type: 'literal',
value,
};
}
2019-04-21 21:33:01 -05:00
export function buildCondition(operator, operands) {
return {
type: 'condition',
operator,
operands: operands.map((operand) => {
return buildValue(operand);
}),
};
}