Skip to content
This repository has been archived by the owner on Jul 20, 2023. It is now read-only.

Commit

Permalink
Remove AliasedField type and add AliasName to Field type
Browse files Browse the repository at this point in the history
  • Loading branch information
lorefnon committed Apr 18, 2022
1 parent 41ad703 commit 992326d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 22 deletions.
28 changes: 12 additions & 16 deletions src/AST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,26 +119,23 @@ export const selectionSet = <T extends ReadonlyArray<Selection>>(
export interface Field<
Name extends string,
Arguments extends Array<Argument<string, any>> | undefined = undefined,
SS extends SelectionSet<any> | undefined = undefined
SS extends SelectionSet<any> | undefined = undefined,
AliasName extends string | undefined = undefined,
> extends FieldNode {
name: { kind: Kind.NAME; value: Name };
arguments?: Arguments;
selectionSet?: SS;
as<AliasName extends string>(alias: AliasName): AliasedField<AliasName, Name, Arguments, SS>
}
alias?: AliasNode<AliasName>;

export interface AliasedField<
AliasName extends string,
Name extends string,
Arguments extends Array<Argument<string, any>> | undefined = undefined,
SS extends SelectionSet<any> | undefined = undefined
> extends FieldNode {
name: { kind: Kind.NAME; value: Name };
alias: { kind: Kind.NAME; value: AliasName };
arguments?: Arguments;
selectionSet?: SS;
as<AliasName extends string>(alias: AliasName): Field<Name, Arguments, SS, AliasName>
}

type AliasNode<AliasName extends string | undefined> =
AliasName extends string
? { kind: Kind.NAME, value: AliasName }
: undefined


export const field = <
Name extends string,
Arguments extends Array<Argument<string, any>> | undefined = undefined,
Expand All @@ -157,7 +154,7 @@ export const field = <
as<AliasName extends string>(alias: AliasName) {
return {
...this,
alias: { kind: Kind.NAME, value: alias }
alias: { kind: Kind.NAME, value: alias } as AliasNode<AliasName>
}
}
});
Expand Down Expand Up @@ -216,8 +213,7 @@ export interface FragmentSpread<Name extends string>

// SelectionNode
export type Selection =
| Field<any, any, any>
| AliasedField<any, any, any, any>
| Field<any, any, any, any>
| InlineFragment<any, any>
| FragmentSpread<any>;

Expand Down
12 changes: 7 additions & 5 deletions src/Result.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { L, Test } from "ts-toolbelt";

import type { AliasedField, Field, InlineFragment, NamedType, Selection, SelectionSet } from "./AST";
import type { Field, InlineFragment, NamedType, Selection, SelectionSet } from "./AST";

// @note `Result` takes a root `Type` (TS) and `SelectionSet` (GQL) and recursively walks the
// array of `Selection` nodes's (i.e `Field`, `InlineFragment`, or `FragmentSpread` nodes)
Expand Down Expand Up @@ -32,16 +32,18 @@ export type Result<
Parent;

type InferName<F> =
F extends Field<infer Name, any, any> | AliasedField<infer Name, any, any, any>
? Name
F extends Field<infer Name, any, any, infer AliasName>
? AliasName extends string
? AliasName
: Name
: never;

type InferResult<
F,
Schema extends Record<string, any>,
Parent extends Record<string, any>
> =
F extends Field<infer Name, any, infer SS> | AliasedField<any, infer Name, any, infer SS>
F extends Field<infer Name, any, infer SS, any>
? Result<Schema, InferParent<Parent, Name>, SS>
: never

Expand All @@ -66,7 +68,7 @@ export type SpreadFragments<
export type SpreadFragment<
Schema extends Record<string, any>,
Fragment extends InlineFragment<any, any>,
CommonSelection extends SelectionSet<ReadonlyArray<Field<any, any, any> | AliasedField<any, any, any>>>,
CommonSelection extends SelectionSet<ReadonlyArray<Field<any, any, any, any>>>,
> = Fragment extends InlineFragment<
NamedType<infer Typename>,
infer SelectionSet
Expand Down
2 changes: 1 addition & 1 deletion src/Variables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export type Variables<
? {}
: S extends SelectionSet<ReadonlyArray<Selection>>
? S["selections"][number] extends infer Selection
? Selection extends Field<infer FieldName, infer FieldArgs, infer SS>
? Selection extends Field<infer FieldName, infer FieldArgs, infer SS, any>
? O.Merge<
FilterMapArguments<RootType, FieldName, FieldArgs>,
Variables<Schema, RootType[FieldName], SS>
Expand Down

0 comments on commit 992326d

Please sign in to comment.