diff --git a/packages/core/src/edge/edge-builder.ts b/packages/core/src/edge/edge-builder.ts index a7f4fc9..e871baf 100644 --- a/packages/core/src/edge/edge-builder.ts +++ b/packages/core/src/edge/edge-builder.ts @@ -34,7 +34,7 @@ export interface EdgeBuilderConstructor { export class EdgeBuilder { protected type?: string; - protected edges: Projection; + protected edges: Projection = {}; protected directives: Record = {}; protected args: ArgsBuilder = new ArgsBuilder(); @@ -54,13 +54,20 @@ export class EdgeBuilder { this.setEdges(edges); } - protected setEdges(edges: EdgeBuilder | RawProjection) { + protected setEdges( + edges: EdgeBuilder | RawProjection, + overwrite = false + ) { this.edges = Object.entries(edges) - .reduce((r, [k ,v]) => { - if (typeof v === 'object') r[k] = new EdgeBuilder(k, v); - else r[k] = v; + .reduce((r, [k, v]) => { + if (typeof v === 'object') { + if (r[k] instanceof EdgeBuilder) + (r[k] as EdgeBuilder).setEdges(v); + else + r[k] = new EdgeBuilder(k, v); + } else r[k] = v; return r; - }, {}); + }, overwrite ? {} : this.edges); } withArgs(args: ArgsBuilder | Omit) { diff --git a/packages/core/src/query/query-builder.ts b/packages/core/src/query/query-builder.ts index 93decab..cf75fce 100644 --- a/packages/core/src/query/query-builder.ts +++ b/packages/core/src/query/query-builder.ts @@ -56,8 +56,11 @@ export class QueryBuilder extends EdgeBuilder { return this; } - project(projection: EdgeBuilder | RawProjection) { - this.setEdges(projection); + project( + projection: EdgeBuilder | RawProjection, + overwrite = false + ) { + this.setEdges(projection, overwrite); return this; }