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) {
|
|
|
|
if ('object' === typeof value && 'traversal' === value.type) {
|
|
|
|
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);
|
|
|
|
}),
|
|
|
|
};
|
|
|
|
}
|