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()), }; } }), }; } }