firesage
Version:
🔥 Extremely High Precision Typescript Wrapper for Firestore Web, Providing Unparalleled Type Safe and Dev Experience
21 lines (20 loc) • 2.09 kB
TypeScript
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;