UNPKG

@medusajs/types

Version:
38 lines 2.5 kB
import { Prettify } from "../common"; import { OperatorMap } from "../dal"; import { RemoteQueryEntryPoints } from "./remote-query-entry-points"; type ExcludedProps = "__typename"; type Depth = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; type CleanupObject<T> = Prettify<Omit<Exclude<T, symbol>, ExcludedProps>>; type OmitNever<T extends object> = { [K in keyof T as T[K] extends never ? never : K]: T[K]; }; type TypeOnly<T> = Required<Exclude<T, null | undefined>>; type ExtractFiltersOperators<MaybeT, Lim extends number = Depth[2], Exclusion extends string[] = [], T = TypeOnly<MaybeT>> = { [Key in keyof T]?: Key extends Exclusion[number] ? never : Key extends ExcludedProps ? never : NonNullable<T[Key]> extends string | number | boolean | Date ? T[Key] | T[Key][] | OperatorMap<T[Key] | T[Key][]> : T[Key] extends Array<infer R> ? TypeOnly<R> extends { __typename: any; } ? RemoteQueryFilters<Key & string, T, [ Key & string, ...Exclusion ], Depth[Lim]> : R extends object ? CleanupObject<R> : never : T[Key] extends { __typename: any; } ? RemoteQueryFilters<Key & string, T[Key], [ Key & string, ...Exclusion ], Depth[Lim]> : T[Key] extends object ? CleanupObject<T[Key]> : never; }; type RemoteQueryFilterOperators<T> = { $or?: (T & RemoteQueryFilterOperators<T>)[]; $and?: (T & RemoteQueryFilterOperators<T>)[]; $not?: T & RemoteQueryFilterOperators<T>; }; /** * Extract all available filters from a remote entry point deeply */ export type InternalRemoteQueryFilters<TEntry extends string, RemoteQueryEntryPointsLevel = RemoteQueryEntryPoints, Exclusion extends string[] = [], Lim extends number = Depth[3]> = Lim extends number ? TEntry extends keyof RemoteQueryEntryPointsLevel ? TypeOnly<RemoteQueryEntryPointsLevel[TEntry]> extends Array<infer V> ? Prettify<OmitNever<ExtractFiltersOperators<V, Lim, [TEntry, ...Exclusion]>>> : Prettify<OmitNever<ExtractFiltersOperators<RemoteQueryEntryPointsLevel[TEntry], Lim, [ TEntry, ...Exclusion ]>>> : Record<string, any> : never; export type RemoteQueryFilters<TEntry extends string, RemoteQueryEntryPointsLevel = RemoteQueryEntryPoints, Exclusion extends string[] = [], Lim extends number = Depth[3]> = RemoteQueryFilterOperators<InternalRemoteQueryFilters<TEntry, RemoteQueryEntryPointsLevel, Exclusion, Lim>> & InternalRemoteQueryFilters<TEntry, RemoteQueryEntryPointsLevel, Exclusion, Lim>; export {}; //# sourceMappingURL=to-remote-query.d.ts.map