55 lines
1003 B
JavaScript
55 lines
1003 B
JavaScript
import {fromJSON as behaviorItemFromJSON} from './registry';
|
|
|
|
export class Traversal {
|
|
|
|
static type() {
|
|
return 'traversal';
|
|
}
|
|
|
|
constructor() {
|
|
this.steps = [];
|
|
}
|
|
|
|
fromJSON(json) {
|
|
this.steps = json.steps.map((step) => {
|
|
switch (step.type) {
|
|
case 'key':
|
|
return step;
|
|
case 'invoke':
|
|
return {
|
|
type: 'invoke',
|
|
args: step.args.map((arg) => behaviorItemFromJSON(arg)),
|
|
};
|
|
}
|
|
});
|
|
return this;
|
|
}
|
|
|
|
get(context) {
|
|
return this.traverse(context);
|
|
}
|
|
|
|
traverse(context) {
|
|
if (context) {
|
|
return context.traverse(this.steps);
|
|
}
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
type: 'traversal',
|
|
steps: this.steps.map((step) => {
|
|
switch (step.type) {
|
|
case 'key':
|
|
return step;
|
|
case 'invoke':
|
|
return {
|
|
type: 'invoke',
|
|
args: step.args.map((arg) => arg.toJSON()),
|
|
};
|
|
}
|
|
}),
|
|
};
|
|
}
|
|
}
|