From 2a0c2b06294ee802243877f46f289dcfd1bbb141 Mon Sep 17 00:00:00 2001 From: Jackson Morgan Date: Mon, 16 Dec 2024 21:12:51 -0500 Subject: [PATCH] Before Transformer Transformation --- packages/type-traverser/example/example.ts | 186 ++++++++---------- .../src/ReverseRelationshipTypes.ts | 2 +- packages/type-traverser/src/index.ts | 12 +- .../src/instanceGraph/InstanceGraph.ts | 4 +- .../src/instanceGraph/nodes/InstanceNode.ts | 4 +- .../nodes/InterfaceInstanceNode.ts | 5 +- .../nodes/PrimitiveInstanceNode.ts | 5 +- .../instanceGraph/nodes/UnionInstanceNode.ts | 2 +- .../nodes/createInstanceNodeFor.ts | 2 +- .../src/{ => transformer}/Transformer.ts | 10 +- .../TransformerReturnTypes.ts | 2 +- .../TransformerReturnTypesDefaults.ts | 2 +- .../src/{ => transformer}/Transformers.ts | 4 +- .../TransformerInterfaceSubTraverser.ts | 4 +- .../TransformerPrimitiveSubTraverser.ts | 2 +- .../TransformerUnionSubTraverser.ts | 4 +- .../src/{ => traverser}/Traverser.ts | 6 +- .../{ => traverser}/TraverserDefinition.ts | 2 +- .../src/{ => traverser}/TraverserTypes.ts | 2 +- .../traverserGraph/TraverserGraph.ts | 0 .../VisitorInterfaceSubTraverser.ts | 4 +- .../VisitorPrimitiveSubTraverser.ts | 2 +- .../VisitorUnionSubTraverser.ts | 4 +- .../test/integration/avatar/avatar.test.ts | 101 +++++----- 24 files changed, 186 insertions(+), 185 deletions(-) rename packages/type-traverser/src/{ => transformer}/Transformer.ts (94%) rename packages/type-traverser/src/{ => transformer}/TransformerReturnTypes.ts (99%) rename packages/type-traverser/src/{ => transformer}/TransformerReturnTypesDefaults.ts (99%) rename packages/type-traverser/src/{ => transformer}/Transformers.ts (97%) rename packages/type-traverser/src/{ => traverser}/Traverser.ts (88%) rename packages/type-traverser/src/{ => traverser}/TraverserDefinition.ts (98%) rename packages/type-traverser/src/{ => traverser}/TraverserTypes.ts (92%) create mode 100644 packages/type-traverser/src/traverser/traverserGraph/TraverserGraph.ts diff --git a/packages/type-traverser/example/example.ts b/packages/type-traverser/example/example.ts index 7b3398f..f1eec76 100644 --- a/packages/type-traverser/example/example.ts +++ b/packages/type-traverser/example/example.ts @@ -110,28 +110,12 @@ async function run() { }, }; - console.log(avatarTraverserDefinition); - - const graph = new InstanceGraph(avatarTraverserDefinition); - const aangNode = graph.getNodeFor(aang, "Bender"); - const aangeChild = aangNode.child("friends"); - - 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( - // avatarTraverserDefinition, - // ); + /** + * Instantiate the Traverser + */ + const avatarTraverser = new Traverser( + avatarTraverserDefinition, + ); // /** // * Create a visitor @@ -193,85 +177,85 @@ async function run() { // await avatarCountingVisitor.visit(aang, "Bender", countContext); // console.log(countContext.numberOfBenders); - // /** - // * Set up a transformer - // */ - // interface ActionablePerson { - // doAction(): void; - // friends: ActionablePerson[]; - // } - // const avatarTransformer = avatarTraverser.createTransformer< - // { - // Element: { - // return: string; - // }; - // Bender: { - // return: ActionablePerson; - // properties: { - // element: string; - // }; - // }; - // NonBender: { - // return: ActionablePerson; - // }; - // }, - // undefined - // >({ - // Element: async (item) => { - // return item.toUpperCase(); - // }, - // Bender: { - // transformer: async (item, getTransformedChildren) => { - // const transformedChildren = await getTransformedChildren(); - // return { - // doAction: () => { - // console.log(`I can bend ${transformedChildren.element}`); - // }, - // friends: transformedChildren.friends, - // }; - // }, - // properties: { - // element: async (item, getTransformedChildren) => { - // const transformedChildren = await getTransformedChildren(); - // return `the element of ${transformedChildren}`; - // }, - // }, - // }, - // NonBender: { - // transformer: async (item, getTransformedChildren) => { - // const transformedChildren = await getTransformedChildren(); - // return { - // doAction: () => { - // console.log(`I can't bend.`); - // }, - // friends: transformedChildren.friends, - // }; - // }, - // }, - // Person: async ( - // item, - // getTransformedChildren, - // setReturnPointer, - // _context, - // ) => { - // const personToReturn: ActionablePerson = {} as ActionablePerson; - // setReturnPointer(personToReturn); - // const transformedChildren = await getTransformedChildren(); - // personToReturn.doAction = transformedChildren.doAction; - // personToReturn.friends = transformedChildren.friends; - // return personToReturn; - // }, - // }); + /** + * Set up a transformer + */ + interface ActionablePerson { + doAction(): void; + friends: ActionablePerson[]; + } + const avatarTransformer = avatarTraverser.createTransformer< + { + Element: { + return: string; + }; + Bender: { + return: ActionablePerson; + properties: { + element: string; + }; + }; + NonBender: { + return: ActionablePerson; + }; + }, + undefined + >({ + Element: async (item) => { + return item.toUpperCase(); + }, + Bender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can bend ${transformedChildren.element}`); + }, + friends: transformedChildren.friends, + }; + }, + properties: { + element: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return `the element of ${transformedChildren}`; + }, + }, + }, + NonBender: { + transformer: async (item, getTransformedChildren) => { + const transformedChildren = await getTransformedChildren(); + return { + doAction: () => { + console.log(`I can't bend.`); + }, + friends: transformedChildren.friends, + }; + }, + }, + Person: async ( + item, + getTransformedChildren, + setReturnPointer, + _context, + ) => { + const personToReturn: ActionablePerson = {} as ActionablePerson; + setReturnPointer(personToReturn); + const transformedChildren = await getTransformedChildren(); + personToReturn.doAction = transformedChildren.doAction; + personToReturn.friends = transformedChildren.friends; + return personToReturn; + }, + }); - // /** - // * Run the Transformer - // */ - // console.log( - // "############################## AvatarTraverser DoAction ##############################", - // ); - // const result = await avatarTransformer.transform(aang, "Bender", undefined); - // result.doAction(); - // result.friends[0].doAction(); - // result.friends[1].doAction(); + /** + * Run the Transformer + */ + console.log( + "############################## AvatarTraverser DoAction ##############################", + ); + const result = await avatarTransformer.transform(aang, "Bender", undefined); + result.doAction(); + result.friends[0].doAction(); + result.friends[1].doAction(); } run(); diff --git a/packages/type-traverser/src/ReverseRelationshipTypes.ts b/packages/type-traverser/src/ReverseRelationshipTypes.ts index f7c91ec..7e16861 100644 --- a/packages/type-traverser/src/ReverseRelationshipTypes.ts +++ b/packages/type-traverser/src/ReverseRelationshipTypes.ts @@ -4,7 +4,7 @@ import type { PrimitiveType, TraverserTypes, UnionType, -} from "./TraverserTypes"; +} from "./traverser/TraverserTypes"; export type InterfaceReverseRelationshipIndentifier< Types extends TraverserTypes, diff --git a/packages/type-traverser/src/index.ts b/packages/type-traverser/src/index.ts index 1a33e26..ba02e66 100644 --- a/packages/type-traverser/src/index.ts +++ b/packages/type-traverser/src/index.ts @@ -1,9 +1,9 @@ -export * from "./TraverserTypes"; +export * from "./traverser/TraverserTypes"; export * from "./UtilTypes"; -export * from "./TraverserDefinition"; -export * from "./TransformerReturnTypes"; -export * from "./TransformerReturnTypesDefaults"; -export * from "./Traverser"; -export * from "./Transformer"; +export * from "./traverser/TraverserDefinition"; +export * from "./transformer/TransformerReturnTypes"; +export * from "./transformer/TransformerReturnTypesDefaults"; +export * from "./traverser/Traverser"; +export * from "./transformer/Transformer"; export * from "./Visitor"; export * from "./Visitors"; diff --git a/packages/type-traverser/src/instanceGraph/InstanceGraph.ts b/packages/type-traverser/src/instanceGraph/InstanceGraph.ts index 04f28bc..2fb3922 100644 --- a/packages/type-traverser/src/instanceGraph/InstanceGraph.ts +++ b/packages/type-traverser/src/instanceGraph/InstanceGraph.ts @@ -1,11 +1,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { MultiMap } from "../transformerSubTraversers/util/MultiMap"; -import type { TraverserTypes } from "../TraverserTypes"; +import type { TraverserTypes } from "../traverser/TraverserTypes"; import { createInstanceNodeFor, type InstanceNodeFor, } from "./nodes/createInstanceNodeFor"; -import type { TraverserDefinitions } from "../TraverserDefinition"; +import type { TraverserDefinitions } from "../traverser/TraverserDefinition"; export class InstanceGraph> { protected objectMap: MultiMap< diff --git a/packages/type-traverser/src/instanceGraph/nodes/InstanceNode.ts b/packages/type-traverser/src/instanceGraph/nodes/InstanceNode.ts index de5a629..85f5bf2 100644 --- a/packages/type-traverser/src/instanceGraph/nodes/InstanceNode.ts +++ b/packages/type-traverser/src/instanceGraph/nodes/InstanceNode.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { TraverserDefinition } from "../.."; import type { ParentIdentifiers } from "../../reverseRelationshipTypes"; -import type { TraverserTypes } from "../../TraverserTypes"; +import type { TraverserTypes } from "../../traverser/TraverserTypes"; import type { InstanceGraph } from "../instanceGraph"; import type { InstanceNodeFor } from "./createInstanceNodeFor"; @@ -11,7 +11,7 @@ export abstract class InstanceNode< Type extends Types[TypeName], > { readonly graph: InstanceGraph; - readonly instance: Types[TypeName]["type"]; + readonly instance: Type["type"]; readonly typeName: TypeName; protected readonly parents: Record< string, diff --git a/packages/type-traverser/src/instanceGraph/nodes/InterfaceInstanceNode.ts b/packages/type-traverser/src/instanceGraph/nodes/InterfaceInstanceNode.ts index fb688f2..4db0fc7 100644 --- a/packages/type-traverser/src/instanceGraph/nodes/InterfaceInstanceNode.ts +++ b/packages/type-traverser/src/instanceGraph/nodes/InterfaceInstanceNode.ts @@ -1,5 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { InterfaceType, TraverserTypes } from "../../TraverserTypes"; +import type { + InterfaceType, + TraverserTypes, +} from "../../traverser/TraverserTypes"; import type { InstanceGraph } from "../instanceGraph"; import type { InstanceNodeFor } from "./createInstanceNodeFor"; import { InstanceNode } from "./InstanceNode"; diff --git a/packages/type-traverser/src/instanceGraph/nodes/PrimitiveInstanceNode.ts b/packages/type-traverser/src/instanceGraph/nodes/PrimitiveInstanceNode.ts index 10004f4..847f0b0 100644 --- a/packages/type-traverser/src/instanceGraph/nodes/PrimitiveInstanceNode.ts +++ b/packages/type-traverser/src/instanceGraph/nodes/PrimitiveInstanceNode.ts @@ -1,5 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { PrimitiveType, TraverserTypes } from "../../TraverserTypes"; +import type { + PrimitiveType, + TraverserTypes, +} from "../../traverser/TraverserTypes"; import { InstanceNode } from "./InstanceNode"; export class PrimitiveInstanceNode< diff --git a/packages/type-traverser/src/instanceGraph/nodes/UnionInstanceNode.ts b/packages/type-traverser/src/instanceGraph/nodes/UnionInstanceNode.ts index 1fe5e77..2b206d6 100644 --- a/packages/type-traverser/src/instanceGraph/nodes/UnionInstanceNode.ts +++ b/packages/type-traverser/src/instanceGraph/nodes/UnionInstanceNode.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { TraverserTypes, UnionType } from "../../TraverserTypes"; +import type { TraverserTypes, UnionType } from "../../traverser/TraverserTypes"; import type { InstanceNodeFor } from "./createInstanceNodeFor"; import { InstanceNode } from "./InstanceNode"; diff --git a/packages/type-traverser/src/instanceGraph/nodes/createInstanceNodeFor.ts b/packages/type-traverser/src/instanceGraph/nodes/createInstanceNodeFor.ts index 6013694..96768bf 100644 --- a/packages/type-traverser/src/instanceGraph/nodes/createInstanceNodeFor.ts +++ b/packages/type-traverser/src/instanceGraph/nodes/createInstanceNodeFor.ts @@ -4,7 +4,7 @@ import type { PrimitiveType, TraverserTypes, UnionType, -} from "../../TraverserTypes"; +} from "../../traverser/TraverserTypes"; import type { InstanceGraph } from "../instanceGraph"; import { InterfaceInstanceNode } from "./InterfaceInstanceNode"; import { PrimitiveInstanceNode } from "./PrimitiveInstanceNode"; diff --git a/packages/type-traverser/src/Transformer.ts b/packages/type-traverser/src/transformer/Transformer.ts similarity index 94% rename from packages/type-traverser/src/Transformer.ts rename to packages/type-traverser/src/transformer/Transformer.ts index 143e66b..a0ba5a8 100644 --- a/packages/type-traverser/src/Transformer.ts +++ b/packages/type-traverser/src/transformer/Transformer.ts @@ -12,11 +12,11 @@ import type { TraverserTypes, UnionReturnType, UnionType, -} from "."; -import { transformerParentSubTraverser } from "./transformerSubTraversers/TransformerParentSubTraverser"; -import { CircularDepenedencyAwaiter } from "./transformerSubTraversers/util/CircularDependencyAwaiter"; -import { MultiMap } from "./transformerSubTraversers/util/MultiMap"; -import { SuperPromise } from "./transformerSubTraversers/util/SuperPromise"; +} from ".."; +import { transformerParentSubTraverser } from "../transformerSubTraversers/TransformerParentSubTraverser"; +import { CircularDepenedencyAwaiter } from "../transformerSubTraversers/util/CircularDependencyAwaiter"; +import { MultiMap } from "../transformerSubTraversers/util/MultiMap"; +import { SuperPromise } from "../transformerSubTraversers/util/SuperPromise"; import type { GetTransformedChildrenFunction, InterfaceTransformerDefinition, diff --git a/packages/type-traverser/src/TransformerReturnTypes.ts b/packages/type-traverser/src/transformer/TransformerReturnTypes.ts similarity index 99% rename from packages/type-traverser/src/TransformerReturnTypes.ts rename to packages/type-traverser/src/transformer/TransformerReturnTypes.ts index 86785fc..d23c4f8 100644 --- a/packages/type-traverser/src/TransformerReturnTypes.ts +++ b/packages/type-traverser/src/transformer/TransformerReturnTypes.ts @@ -3,7 +3,7 @@ import type { PrimitiveType, TraverserTypes, UnionType, -} from "."; +} from ".."; /* eslint-disable @typescript-eslint/no-explicit-any */ export type InterfaceReturnType> = { diff --git a/packages/type-traverser/src/TransformerReturnTypesDefaults.ts b/packages/type-traverser/src/transformer/TransformerReturnTypesDefaults.ts similarity index 99% rename from packages/type-traverser/src/TransformerReturnTypesDefaults.ts rename to packages/type-traverser/src/transformer/TransformerReturnTypesDefaults.ts index 75f9322..028da76 100644 --- a/packages/type-traverser/src/TransformerReturnTypesDefaults.ts +++ b/packages/type-traverser/src/transformer/TransformerReturnTypesDefaults.ts @@ -10,7 +10,7 @@ import type { TraverserTypes, UnionInputReturnType, UnionType, -} from "."; +} from ".."; export type RecursivelyFindReturnType< Types extends TraverserTypes, diff --git a/packages/type-traverser/src/Transformers.ts b/packages/type-traverser/src/transformer/Transformers.ts similarity index 97% rename from packages/type-traverser/src/Transformers.ts rename to packages/type-traverser/src/transformer/Transformers.ts index a649fa4..2378dc9 100644 --- a/packages/type-traverser/src/Transformers.ts +++ b/packages/type-traverser/src/transformer/Transformers.ts @@ -10,7 +10,8 @@ import type { TraverserTypes, UnionReturnType, UnionType, -} from "."; +} from ".."; +import type { InterfaceInstanceNode } from "../instanceGraph/nodes/InterfaceInstanceNode"; export type GetTransformedChildrenFunction = () => Promise; @@ -30,6 +31,7 @@ export type InterfaceTransformerFunction< [PropertyName in keyof ReturnType["properties"]]: ReturnType["properties"][PropertyName]; }>, setReturnPointer: SetReturnPointerFunction, + node: InterfaceInstanceNode, context: Context, ) => Promise; diff --git a/packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts b/packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts index 9d0b227..a0ce693 100644 --- a/packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts +++ b/packages/type-traverser/src/transformerSubTraversers/TransformerInterfaceSubTraverser.ts @@ -5,8 +5,8 @@ import type { TransformerReturnTypes, } from "../TransformerReturnTypes"; import type { InterfaceTransformerDefinition } from "../Transformers"; -import type { InterfaceTraverserDefinition } from "../TraverserDefinition"; -import type { InterfaceType } from "../TraverserTypes"; +import type { InterfaceTraverserDefinition } from "../traverser/TraverserDefinition"; +import type { InterfaceType } from "../traverser/TraverserTypes"; import { transformerParentSubTraverser } from "./TransformerParentSubTraverser"; import type { TransformerSubTraverserGlobals } from "./util/transformerSubTraverserTypes"; diff --git a/packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts b/packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts index 8b49bfc..adcf17a 100644 --- a/packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts +++ b/packages/type-traverser/src/transformerSubTraversers/TransformerPrimitiveSubTraverser.ts @@ -5,7 +5,7 @@ import type { TransformerReturnTypes, } from "../TransformerReturnTypes"; import type { PrimitiveTransformerDefinition } from "../Transformers"; -import type { PrimitiveType } from "../TraverserTypes"; +import type { PrimitiveType } from "../traverser/TraverserTypes"; import type { TransformerSubTraverserGlobals } from "./util/transformerSubTraverserTypes"; export async function transformerPrimitiveSubTraverser< diff --git a/packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts b/packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts index fd977b2..39a342c 100644 --- a/packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts +++ b/packages/type-traverser/src/transformerSubTraversers/TransformerUnionSubTraverser.ts @@ -5,8 +5,8 @@ import type { UnionReturnType, } from "../TransformerReturnTypes"; import type { UnionTransformerDefinition } from "../Transformers"; -import type { UnionTraverserDefinition } from "../TraverserDefinition"; -import type { UnionType } from "../TraverserTypes"; +import type { UnionTraverserDefinition } from "../traverser/TraverserDefinition"; +import type { UnionType } from "../traverser/TraverserTypes"; import { transformerParentSubTraverser } from "./TransformerParentSubTraverser"; import type { TransformerSubTraverserGlobals } from "./util/transformerSubTraverserTypes"; diff --git a/packages/type-traverser/src/Traverser.ts b/packages/type-traverser/src/traverser/Traverser.ts similarity index 88% rename from packages/type-traverser/src/Traverser.ts rename to packages/type-traverser/src/traverser/Traverser.ts index b514f4d..bdc6d67 100644 --- a/packages/type-traverser/src/Traverser.ts +++ b/packages/type-traverser/src/traverser/Traverser.ts @@ -4,9 +4,9 @@ import type { TraverserDefinitions, TraverserTypes, VisitorsInput, -} from "."; -import { Transformer, Visitor } from "."; -import type { TransformersInput } from "./Transformers"; +} from ".."; +import { Transformer, Visitor } from ".."; +import type { TransformersInput } from "../transformer/Transformers"; export class Traverser< // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/type-traverser/src/TraverserDefinition.ts b/packages/type-traverser/src/traverser/TraverserDefinition.ts similarity index 98% rename from packages/type-traverser/src/TraverserDefinition.ts rename to packages/type-traverser/src/traverser/TraverserDefinition.ts index dfec5b4..cdb6ed7 100644 --- a/packages/type-traverser/src/TraverserDefinition.ts +++ b/packages/type-traverser/src/traverser/TraverserDefinition.ts @@ -4,7 +4,7 @@ import type { TraverserTypes, UnionType, PrimitiveType, -} from "."; +} from ".."; export type InterfaceTraverserDefinition> = { kind: "interface"; diff --git a/packages/type-traverser/src/TraverserTypes.ts b/packages/type-traverser/src/traverser/TraverserTypes.ts similarity index 92% rename from packages/type-traverser/src/TraverserTypes.ts rename to packages/type-traverser/src/traverser/TraverserTypes.ts index 1830aa2..e25ef77 100644 --- a/packages/type-traverser/src/TraverserTypes.ts +++ b/packages/type-traverser/src/traverser/TraverserTypes.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { AssertExtends, KeyTypes } from "./UtilTypes"; +import type { AssertExtends, KeyTypes } from "../UtilTypes"; export interface InterfaceType { kind: "interface"; diff --git a/packages/type-traverser/src/traverser/traverserGraph/TraverserGraph.ts b/packages/type-traverser/src/traverser/traverserGraph/TraverserGraph.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts b/packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts index 0b8a3a6..f93e01b 100644 --- a/packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts +++ b/packages/type-traverser/src/visitorSubTraversers/VisitorInterfaceSubTraverser.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { InterfaceVisitorDefinition, TraverserTypes } from ".."; -import type { InterfaceTraverserDefinition } from "../TraverserDefinition"; -import type { InterfaceType } from "../TraverserTypes"; +import type { InterfaceTraverserDefinition } from "../traverser/TraverserDefinition"; +import type { InterfaceType } from "../traverser/TraverserTypes"; import type { VisitorSubTraverserGlobals } from "./util/visitorSubTraverserTypes"; import { visitorParentSubTraverser } from "./VisitorParentSubTraverser"; diff --git a/packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts b/packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts index 0d79638..35593b1 100644 --- a/packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts +++ b/packages/type-traverser/src/visitorSubTraversers/VisitorPrimitiveSubTraverser.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { PrimitiveVisitorDefinition, TraverserTypes } from ".."; -import type { PrimitiveType } from "../TraverserTypes"; +import type { PrimitiveType } from "../traverser/TraverserTypes"; import type { VisitorSubTraverserGlobals } from "./util/visitorSubTraverserTypes"; export async function visitorPrimitiveSubTraverser< diff --git a/packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts b/packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts index f9b2932..8a75bcf 100644 --- a/packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts +++ b/packages/type-traverser/src/visitorSubTraversers/VisitorUnionSubTraverser.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { TraverserTypes, UnionVisitorDefinition } from ".."; -import type { UnionTraverserDefinition } from "../TraverserDefinition"; -import type { UnionType } from "../TraverserTypes"; +import type { UnionTraverserDefinition } from "../traverser/TraverserDefinition"; +import type { UnionType } from "../traverser/TraverserTypes"; import type { VisitorSubTraverserGlobals } from "./util/visitorSubTraverserTypes"; import { visitorParentSubTraverser } from "./VisitorParentSubTraverser"; diff --git a/packages/type-traverser/test/integration/avatar/avatar.test.ts b/packages/type-traverser/test/integration/avatar/avatar.test.ts index f2b071f..6d3d16f 100644 --- a/packages/type-traverser/test/integration/avatar/avatar.test.ts +++ b/packages/type-traverser/test/integration/avatar/avatar.test.ts @@ -100,53 +100,62 @@ describe("AvatarExample", () => { }, }; - it("returns child nodes when child methods are called.", () => { - const graph = new InstanceGraph(avatarTraverserDefinition); - const aangBender = graph.getNodeFor(aang, "Bender"); - expect(aangBender.typeName).toBe("Bender"); - expect(aangBender.instance.name).toBe("Aang"); - // child - const aangElement = aangBender.child("element"); - expect(aangElement.instance).toBe("Air"); - expect(aangElement.typeName).toBe("Element"); - const aangFriends = aangBender.child("friends"); - expect(aangFriends.length).toBe(2); - const sokkaPerson = aangFriends[0]; - const kataraPerson = aangFriends[1]; - expect(sokkaPerson.instance.name).toBe("Sokka"); - expect(kataraPerson.instance.name).toBe("Katara"); - expect(sokkaPerson.typeName).toBe("Person"); - expect(kataraPerson.typeName).toBe("Person"); - const sokkaNonBender = sokkaPerson.child(); - expect(sokkaNonBender.instance.name).toBe("Sokka"); - expect(sokkaNonBender.typeName).toBe("NonBender"); - if (sokkaNonBender.typeName === "NonBender") { - const aangPerson = sokkaNonBender.child("friends")[0]; - const aangBender2 = aangPerson.child(); - expect(aangBender2).toBe(aangBender); - } - // allChildren - const [childElemement, childSokka, childKatara] = aangBender.allChildren(); - expect(childElemement.instance).toBe("Air"); - expect((childSokka.instance as NonBender).name).toBe("Sokka"); - expect((childKatara.instance as Bender).name).toBe("Katara"); - const childOfSokkaPerson = sokkaPerson.allChildren(); - expect(childOfSokkaPerson.length).toBe(1); - expect(childOfSokkaPerson[0].instance.name).toBe("Sokka"); + describe("Build Instance Graph", () => { + it("returns child nodes when child methods are called.", () => { + const graph = new InstanceGraph(avatarTraverserDefinition); + const aangBender = graph.getNodeFor(aang, "Bender"); + expect(aangBender.typeName).toBe("Bender"); + expect(aangBender.instance.name).toBe("Aang"); + // child + const aangElement = aangBender.child("element"); + expect(aangElement.instance).toBe("Air"); + expect(aangElement.typeName).toBe("Element"); + const aangFriends = aangBender.child("friends"); + expect(aangFriends.length).toBe(2); + const sokkaPerson = aangFriends[0]; + const kataraPerson = aangFriends[1]; + expect(sokkaPerson.instance.name).toBe("Sokka"); + expect(kataraPerson.instance.name).toBe("Katara"); + expect(sokkaPerson.typeName).toBe("Person"); + expect(kataraPerson.typeName).toBe("Person"); + const sokkaNonBender = sokkaPerson.child(); + expect(sokkaNonBender.instance.name).toBe("Sokka"); + expect(sokkaNonBender.typeName).toBe("NonBender"); + if (sokkaNonBender.typeName === "NonBender") { + const aangPerson = sokkaNonBender.child("friends")[0]; + const aangBender2 = aangPerson.child(); + expect(aangBender2).toBe(aangBender); + } + // allChildren + const [childElemement, childSokka, childKatara] = + aangBender.allChildren(); + expect(childElemement.instance).toBe("Air"); + expect((childSokka.instance as NonBender).name).toBe("Sokka"); + expect((childKatara.instance as Bender).name).toBe("Katara"); + const childOfSokkaPerson = sokkaPerson.allChildren(); + expect(childOfSokkaPerson.length).toBe(1); + expect(childOfSokkaPerson[0].instance.name).toBe("Sokka"); + }); + + it("returns parent nodes when parent methods are called.", () => { + const graph = new InstanceGraph(avatarTraverserDefinition); + const aangBender = graph.getNodeFor(aang, "Bender"); + // parent + const [aangPerson] = aangBender.parent("Person"); + expect(aangPerson.instance.name).toBe("Aang"); + expect(aangPerson.typeName).toBe("Person"); + const [sokkaNonBender] = aangPerson.parent("NonBender", "friends"); + const [kataraBender] = aangPerson.parent("Bender", "friends"); + expect(sokkaNonBender.typeName).toBe("NonBender"); + expect(sokkaNonBender.instance.name).toBe("Sokka"); + expect(kataraBender.typeName).toBe("Bender"); + expect(kataraBender.instance.name).toBe("Katara"); + }); }); - it("returns parent nodes when parent methods are called.", () => { - const graph = new InstanceGraph(avatarTraverserDefinition); - const aangBender = graph.getNodeFor(aang, "Bender"); - // parent - const [aangPerson] = aangBender.parent("Person"); - expect(aangPerson.instance.name).toBe("Aang"); - expect(aangPerson.typeName).toBe("Person"); - const [sokkaNonBender] = aangPerson.parent("NonBender", "friends"); - const [kataraBender] = aangPerson.parent("Bender", "friends"); - expect(sokkaNonBender.typeName).toBe("NonBender"); - expect(sokkaNonBender.instance.name).toBe("Sokka"); - expect(kataraBender.typeName).toBe("Bender"); - expect(kataraBender.instance.name).toBe("Katara"); + describe("Transformer", () => { + it("transforms", () => { + + }) }); });