UNPKG

firesage

Version:

🔥 Extremely High Precision Typescript Wrapper for Firestore Web, Providing Unparalleled Type Safe and Dev Experience

21 lines (20 loc) • 2.09 kB
import { MetaType } from './metaTypeCreator'; import { StrictOmit, IsEqual } from './utils'; import { DocumentReference, Query, CollectionReference } from './refs'; import { IsValidID, GetNumberOfSlash } from './validID'; import { ErrorNumberOfForwardSlashIsNotEqual, ErrorPleaseDoConstAssertion } from './error'; import { DocumentIdSymbol } from './unique'; export interface DocumentId { 'Firelord.FieldPath': DocumentIdSymbol; } export declare type AddSentinelFieldPathToCompare<T extends MetaType> = StrictOmit<T, 'compare'> & { compare: T['compare'] & { [K in __name__]: string | DocumentReference<T>; }; }; export declare type AddSentinelFieldPathToCompareHighLevel<T extends MetaType, Q extends Query<T> | CollectionReference<T>> = IsEqual<Query<AddSentinelFieldPathToCompare<T>>, Q> extends true ? Query<AddSentinelFieldPathToCompare<T>> : IsEqual<CollectionReference<T>, Q> extends true ? CollectionReference<AddSentinelFieldPathToCompare<T>> : never; export declare type RemoveSentinelFieldPathFromCompare<T extends MetaType> = StrictOmit<T, 'compare'> & { compare: StrictOmit<T['compare'], __name__>; }; export declare type __name__ = '__name__'; export declare type GetCorrectDocumentIdBasedOnRef<T extends MetaType, Q extends Query<T> | CollectionReference<T>, FieldPath extends keyof T['compare'], Value> = FieldPath extends __name__ ? Value extends string ? IsEqual<CollectionReference<T>, Q> extends true ? string extends Value ? ErrorPleaseDoConstAssertion : Value extends T['docID'] ? IsValidID<Value, 'Document', 'ID'> : T['docID'] : IsEqual<Query<AddSentinelFieldPathToCompare<T>>, Q> extends true ? string extends Value ? ErrorPleaseDoConstAssertion : GetNumberOfSlash<Value> extends GetNumberOfSlash<T['docPath']> ? Value extends T['docPath'] ? IsValidID<Value, 'Document', 'Path'> : T['docPath'] : ErrorNumberOfForwardSlashIsNotEqual<GetNumberOfSlash<T['docPath']>, GetNumberOfSlash<Value>> : never : DocumentReference<RemoveSentinelFieldPathFromCompare<T>> : FieldPath extends string ? T['compare'][FieldPath] : never;