@apollo/client
Version:
A fully-featured caching GraphQL client.
18 lines (17 loc) • 2 kB
text/typescript
import type { ApolloCache } from "@apollo/client/cache";
import type { Exact, IsAny, IsNeverish, Prettify, Primitive } from "@apollo/client/utilities/internal";
type CustomScalarTypes = {
[K in keyof ApolloCache.Scalars]: ApolloCache.Scalars[K]["serialized"] | ApolloCache.Scalars[K]["parsed"];
}[keyof ApolloCache.Scalars];
type ScalarType = CustomScalarTypes extends any ? true extends IsAny<CustomScalarTypes> ? Primitive : unknown extends CustomScalarTypes ? Primitive : Primitive | CustomScalarTypes : never;
type HasNeverishField<T> = true extends {
[K in keyof T]: IsNeverish<T[K]>;
}[keyof T] ? true : false;
export type ContainsNeverishFields<TData, Seen = never> = true extends (IsAny<TData>) ? false : true extends IsScalarType<TData> ? false : TData extends ReadonlyArray<infer TItem> ? true extends IsScalarType<TItem> ? false : ContainsNeverishFields<TItem, Seen> : keyof TData extends never ? false : TData extends object ? string extends keyof TData ? false : [Seen] extends [never] ? ContainsNeverishFieldsInObject<TData, Exact<TData>> : Exact<TData> extends Seen ? false : ContainsNeverishFieldsInObject<TData, Seen | Exact<TData>> : false;
type ContainsNeverishFieldsInObject<TData, Seen> = HasNeverishField<TData> extends true ? true : ContainsNeverishFields<TData[keyof TData], Seen>;
type IsScalarType<TData> = Exact<TData> extends Exact<Extract<ScalarType, TData>> ? true : false;
export type RemoveNeverishFields<TData> = true extends IsAny<TData> ? TData : true extends IsScalarType<TData> ? TData : TData extends ReadonlyArray<infer TItem> ? TItem[] extends (TData) ? TData extends Array<infer TItem> ? Array<RemoveNeverishFields<TItem>> : ReadonlyArray<RemoveNeverishFields<TItem>> : TData : string extends keyof TData ? TData : keyof TData extends never ? TData : TData extends object ? HasNeverishField<TData> extends true ? never : Prettify<{
[K in keyof TData]: RemoveNeverishFields<TData[K]>;
}> : TData;
export {};
//# sourceMappingURL=types.d.cts.map