Skip to content

Commit

Permalink
commit types
Browse files Browse the repository at this point in the history
  • Loading branch information
Joshibbotson committed May 15, 2024
1 parent a6c6ae9 commit 1904824
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 265 deletions.
62 changes: 21 additions & 41 deletions src/@types/__graphqlTypes__/fragment-masking.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
/* eslint-disable */
import {
ResultOf,
DocumentTypeDecoration,
TypedDocumentNode,
} from '@graphql-typed-document-node/core';
import { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from '@graphql-typed-document-node/core';
import { FragmentDefinitionNode } from 'graphql';
import { Incremental } from './graphql';

export type FragmentType<
TDocumentType extends DocumentTypeDecoration<any, any>,
> =
TDocumentType extends DocumentTypeDecoration<infer TType, any>
? [TType] extends [{ ' $fragmentName'?: infer TKey }]
? TKey extends string
? { ' $fragmentRefs'?: { [key in TKey]: TType } }
: never

export type FragmentType<TDocumentType extends DocumentTypeDecoration<any, any>> = TDocumentType extends DocumentTypeDecoration<
infer TType,
any
>
? [TType] extends [{ ' $fragmentName'?: infer TKey }]
? TKey extends string
? { ' $fragmentRefs'?: { [key in TKey]: TType } }
: never
: never;
: never
: never;

// return non-nullable if `fragmentType` is non-nullable
export function useFragment<TType>(
Expand All @@ -26,10 +23,7 @@ export function useFragment<TType>(
// return nullable if `fragmentType` is nullable
export function useFragment<TType>(
_documentNode: DocumentTypeDecoration<TType, any>,
fragmentType:
| FragmentType<DocumentTypeDecoration<TType, any>>
| null
| undefined
fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | null | undefined
): TType | null | undefined;
// return array of non-nullable if `fragmentType` is array of non-nullable
export function useFragment<TType>(
Expand All @@ -39,49 +33,35 @@ export function useFragment<TType>(
// return array of nullable if `fragmentType` is array of nullable
export function useFragment<TType>(
_documentNode: DocumentTypeDecoration<TType, any>,
fragmentType:
| ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>
| null
| undefined
fragmentType: ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>> | null | undefined
): ReadonlyArray<TType> | null | undefined;
export function useFragment<TType>(
_documentNode: DocumentTypeDecoration<TType, any>,
fragmentType:
| FragmentType<DocumentTypeDecoration<TType, any>>
| ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>
| null
| undefined
fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>> | null | undefined
): TType | ReadonlyArray<TType> | null | undefined {
return fragmentType as any;
}


export function makeFragmentData<
F extends DocumentTypeDecoration<any, any>,
FT extends ResultOf<F>,
FT extends ResultOf<F>
>(data: FT, _fragment: F): FragmentType<F> {
return data as FragmentType<F>;
}
export function isFragmentReady<TQuery, TFrag>(
queryNode: DocumentTypeDecoration<TQuery, any>,
fragmentNode: TypedDocumentNode<TFrag>,
data:
| FragmentType<TypedDocumentNode<Incremental<TFrag>, any>>
| null
| undefined
data: FragmentType<TypedDocumentNode<Incremental<TFrag>, any>> | null | undefined
): data is FragmentType<typeof fragmentNode> {
const deferredFields = (
queryNode as {
__meta__?: { deferredFields: Record<string, (keyof TFrag)[]> };
}
).__meta__?.deferredFields;
const deferredFields = (queryNode as { __meta__?: { deferredFields: Record<string, (keyof TFrag)[]> } }).__meta__
?.deferredFields;

if (!deferredFields) return true;

const fragDef = fragmentNode.definitions[0] as
| FragmentDefinitionNode
| undefined;
const fragDef = fragmentNode.definitions[0] as FragmentDefinitionNode | undefined;
const fragName = fragDef?.name?.value;

const fields = (fragName && deferredFields[fragName]) || [];
return fields.length > 0 && fields.every((field) => data && field in data);
return fields.length > 0 && fields.every(field => data && field in data);
}
10 changes: 3 additions & 7 deletions src/@types/__graphqlTypes__/gql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
* Therefore it is highly recommended to use the babel or swc plugin for production.
*/
const documents = {
'\n query ReadDiaries($take: Int!, $skip: Int!) {\n readDiaries(take: $take, skip: $skip) {\n code\n success\n message\n data {\n createdDate\n updatedDate\n deletedDate\n version\n id\n userId\n title\n notes {\n createdDate\n updatedDate\n deletedDate\n version\n id\n diaryId\n title\n text\n images {\n url\n title\n }\n }\n }\n count\n }\n }\n':
types.ReadDiariesDocument,
"\n query ReadDiaries($take: Int!, $skip: Int!) {\n readDiaries(take: $take, skip: $skip) {\n code\n success\n message\n data {\n createdDate\n updatedDate\n deletedDate\n version\n id\n userId\n title\n notes {\n createdDate\n updatedDate\n deletedDate\n version\n id\n diaryId\n title\n text\n images {\n url\n title\n }\n }\n }\n count\n }\n }\n": types.ReadDiariesDocument,
};

/**
Expand All @@ -34,13 +33,10 @@ export function gql(source: string): unknown;
/**
* The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function gql(
source: '\n query ReadDiaries($take: Int!, $skip: Int!) {\n readDiaries(take: $take, skip: $skip) {\n code\n success\n message\n data {\n createdDate\n updatedDate\n deletedDate\n version\n id\n userId\n title\n notes {\n createdDate\n updatedDate\n deletedDate\n version\n id\n diaryId\n title\n text\n images {\n url\n title\n }\n }\n }\n count\n }\n }\n'
): (typeof documents)['\n query ReadDiaries($take: Int!, $skip: Int!) {\n readDiaries(take: $take, skip: $skip) {\n code\n success\n message\n data {\n createdDate\n updatedDate\n deletedDate\n version\n id\n userId\n title\n notes {\n createdDate\n updatedDate\n deletedDate\n version\n id\n diaryId\n title\n text\n images {\n url\n title\n }\n }\n }\n count\n }\n }\n'];
export function gql(source: "\n query ReadDiaries($take: Int!, $skip: Int!) {\n readDiaries(take: $take, skip: $skip) {\n code\n success\n message\n data {\n createdDate\n updatedDate\n deletedDate\n version\n id\n userId\n title\n notes {\n createdDate\n updatedDate\n deletedDate\n version\n id\n diaryId\n title\n text\n images {\n url\n title\n }\n }\n }\n count\n }\n }\n"): (typeof documents)["\n query ReadDiaries($take: Int!, $skip: Int!) {\n readDiaries(take: $take, skip: $skip) {\n code\n success\n message\n data {\n createdDate\n updatedDate\n deletedDate\n version\n id\n userId\n title\n notes {\n createdDate\n updatedDate\n deletedDate\n version\n id\n diaryId\n title\n text\n images {\n url\n title\n }\n }\n }\n count\n }\n }\n"];

export function gql(source: string) {
return (documents as any)[source] ?? {};
}

export type DocumentType<TDocumentNode extends DocumentNode<any, any>> =
TDocumentNode extends DocumentNode<infer TType, any> ? TType : never;
export type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode< infer TType, any> ? TType : never;
Loading

0 comments on commit 1904824

Please sign in to comment.