|
|
@ -110,28 +110,12 @@ async function run() { |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
console.log(avatarTraverserDefinition); |
|
|
|
/** |
|
|
|
|
|
|
|
* Instantiate the Traverser |
|
|
|
const graph = new InstanceGraph(avatarTraverserDefinition); |
|
|
|
*/ |
|
|
|
const aangNode = graph.getNodeFor(aang, "Bender"); |
|
|
|
const avatarTraverser = new Traverser<AvatarTraverserTypes>( |
|
|
|
const aangeChild = aangNode.child("friends"); |
|
|
|
avatarTraverserDefinition, |
|
|
|
|
|
|
|
); |
|
|
|
const parent = aangNode.parent("Person"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const aangChildren = aangNode.allChildren(); |
|
|
|
|
|
|
|
aangChildren.forEach((child) => { |
|
|
|
|
|
|
|
child.typeName === "Element"; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const aangParents = aangNode.allParents(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /**
|
|
|
|
|
|
|
|
// * Instantiate the Traverser
|
|
|
|
|
|
|
|
// */
|
|
|
|
|
|
|
|
// const avatarTraverser = new Traverser<AvatarTraverserTypes>(
|
|
|
|
|
|
|
|
// avatarTraverserDefinition,
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /**
|
|
|
|
// /**
|
|
|
|
// * Create a visitor
|
|
|
|
// * Create a visitor
|
|
|
@ -193,85 +177,85 @@ async function run() { |
|
|
|
// await avatarCountingVisitor.visit(aang, "Bender", countContext);
|
|
|
|
// await avatarCountingVisitor.visit(aang, "Bender", countContext);
|
|
|
|
// console.log(countContext.numberOfBenders);
|
|
|
|
// console.log(countContext.numberOfBenders);
|
|
|
|
|
|
|
|
|
|
|
|
// /**
|
|
|
|
/** |
|
|
|
// * Set up a transformer
|
|
|
|
* Set up a transformer |
|
|
|
// */
|
|
|
|
*/ |
|
|
|
// interface ActionablePerson {
|
|
|
|
interface ActionablePerson { |
|
|
|
// doAction(): void;
|
|
|
|
doAction(): void; |
|
|
|
// friends: ActionablePerson[];
|
|
|
|
friends: ActionablePerson[]; |
|
|
|
// }
|
|
|
|
} |
|
|
|
// const avatarTransformer = avatarTraverser.createTransformer<
|
|
|
|
const avatarTransformer = avatarTraverser.createTransformer< |
|
|
|
// {
|
|
|
|
{ |
|
|
|
// Element: {
|
|
|
|
Element: { |
|
|
|
// return: string;
|
|
|
|
return: string; |
|
|
|
// };
|
|
|
|
}; |
|
|
|
// Bender: {
|
|
|
|
Bender: { |
|
|
|
// return: ActionablePerson;
|
|
|
|
return: ActionablePerson; |
|
|
|
// properties: {
|
|
|
|
properties: { |
|
|
|
// element: string;
|
|
|
|
element: string; |
|
|
|
// };
|
|
|
|
}; |
|
|
|
// };
|
|
|
|
}; |
|
|
|
// NonBender: {
|
|
|
|
NonBender: { |
|
|
|
// return: ActionablePerson;
|
|
|
|
return: ActionablePerson; |
|
|
|
// };
|
|
|
|
}; |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// undefined
|
|
|
|
undefined |
|
|
|
// >({
|
|
|
|
>({ |
|
|
|
// Element: async (item) => {
|
|
|
|
Element: async (item) => { |
|
|
|
// return item.toUpperCase();
|
|
|
|
return item.toUpperCase(); |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// Bender: {
|
|
|
|
Bender: { |
|
|
|
// transformer: async (item, getTransformedChildren) => {
|
|
|
|
transformer: async (item, getTransformedChildren) => { |
|
|
|
// const transformedChildren = await getTransformedChildren();
|
|
|
|
const transformedChildren = await getTransformedChildren(); |
|
|
|
// return {
|
|
|
|
return { |
|
|
|
// doAction: () => {
|
|
|
|
doAction: () => { |
|
|
|
// console.log(`I can bend ${transformedChildren.element}`);
|
|
|
|
console.log(`I can bend ${transformedChildren.element}`); |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// friends: transformedChildren.friends,
|
|
|
|
friends: transformedChildren.friends, |
|
|
|
// };
|
|
|
|
}; |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// properties: {
|
|
|
|
properties: { |
|
|
|
// element: async (item, getTransformedChildren) => {
|
|
|
|
element: async (item, getTransformedChildren) => { |
|
|
|
// const transformedChildren = await getTransformedChildren();
|
|
|
|
const transformedChildren = await getTransformedChildren(); |
|
|
|
// return `the element of ${transformedChildren}`;
|
|
|
|
return `the element of ${transformedChildren}`; |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// NonBender: {
|
|
|
|
NonBender: { |
|
|
|
// transformer: async (item, getTransformedChildren) => {
|
|
|
|
transformer: async (item, getTransformedChildren) => { |
|
|
|
// const transformedChildren = await getTransformedChildren();
|
|
|
|
const transformedChildren = await getTransformedChildren(); |
|
|
|
// return {
|
|
|
|
return { |
|
|
|
// doAction: () => {
|
|
|
|
doAction: () => { |
|
|
|
// console.log(`I can't bend.`);
|
|
|
|
console.log(`I can't bend.`); |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// friends: transformedChildren.friends,
|
|
|
|
friends: transformedChildren.friends, |
|
|
|
// };
|
|
|
|
}; |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// Person: async (
|
|
|
|
Person: async ( |
|
|
|
// item,
|
|
|
|
item, |
|
|
|
// getTransformedChildren,
|
|
|
|
getTransformedChildren, |
|
|
|
// setReturnPointer,
|
|
|
|
setReturnPointer, |
|
|
|
// _context,
|
|
|
|
_context, |
|
|
|
// ) => {
|
|
|
|
) => { |
|
|
|
// const personToReturn: ActionablePerson = {} as ActionablePerson;
|
|
|
|
const personToReturn: ActionablePerson = {} as ActionablePerson; |
|
|
|
// setReturnPointer(personToReturn);
|
|
|
|
setReturnPointer(personToReturn); |
|
|
|
// const transformedChildren = await getTransformedChildren();
|
|
|
|
const transformedChildren = await getTransformedChildren(); |
|
|
|
// personToReturn.doAction = transformedChildren.doAction;
|
|
|
|
personToReturn.doAction = transformedChildren.doAction; |
|
|
|
// personToReturn.friends = transformedChildren.friends;
|
|
|
|
personToReturn.friends = transformedChildren.friends; |
|
|
|
// return personToReturn;
|
|
|
|
return personToReturn; |
|
|
|
// },
|
|
|
|
}, |
|
|
|
// });
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// /**
|
|
|
|
/** |
|
|
|
// * Run the Transformer
|
|
|
|
* Run the Transformer |
|
|
|
// */
|
|
|
|
*/ |
|
|
|
// console.log(
|
|
|
|
console.log( |
|
|
|
// "############################## AvatarTraverser DoAction ##############################",
|
|
|
|
"############################## AvatarTraverser DoAction ##############################", |
|
|
|
// );
|
|
|
|
); |
|
|
|
// const result = await avatarTransformer.transform(aang, "Bender", undefined);
|
|
|
|
const result = await avatarTransformer.transform(aang, "Bender", undefined); |
|
|
|
// result.doAction();
|
|
|
|
result.doAction(); |
|
|
|
// result.friends[0].doAction();
|
|
|
|
result.friends[0].doAction(); |
|
|
|
// result.friends[1].doAction();
|
|
|
|
result.friends[1].doAction(); |
|
|
|
} |
|
|
|
} |
|
|
|
run(); |
|
|
|
run(); |
|
|
|