UNPKG

firesage

Version:

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

69 lines (68 loc) • 7.07 kB
import { OriTimestamp } from './ori'; import { ErrorFieldValueInArray, ErrorUnassignedAbleFieldValue, NoUndefinedAndBannedTypes, NoDirectNestedArray, ErrorPossiblyUndefinedAsArrayElement, ErrorCollectionIDString } from './error'; import { IsValidID } from './validID'; import { FieldValues, UnassignedAbleFieldValue, ArrayUnionOrRemove, Increment, DeleteField, ServerTimestamp, PossiblyReadAsUndefined } from './fieldValue'; import { ObjectFlattenHybrid } from './objectFlatten'; import { RecursiveExcludePossiblyUndefinedFieldValue, RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg } from './markUnionObjectAsError'; export declare type MetaType = { collectionPath: string; collectionID: string; docID: string; docPath: string; read: Record<string, unknown>; write: Record<string, unknown>; writeFlatten: Record<string, unknown>; compare: Record<string, unknown>; base: Record<string, unknown>; parent: MetaType | null; ancestors: MetaType[]; }; export declare type MetaTypeCreator<Base extends Record<string, unknown>, CollectionID extends string, DocID extends string = string, Parent extends MetaType | null = null, Settings extends { allFieldsPossiblyReadAsUndefined?: boolean; banNull?: boolean; } = { allFieldsPossiblyReadAsUndefined: false; banNull: false; }> = { base: Base; read: { [J in keyof RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<Base>]-?: ReadConverter<RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<Base>[J], Settings['allFieldsPossiblyReadAsUndefined'] extends true ? undefined : never, Settings['banNull'] extends true ? null : never>; }; write: { [J in keyof RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<RecursiveExcludePossiblyUndefinedFieldValue<Base>>]-?: WriteConverter<RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<RecursiveExcludePossiblyUndefinedFieldValue<Base>>[J], Settings['banNull'] extends true ? null : never>; }; writeFlatten: { [J in keyof ObjectFlattenHybrid<RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<RecursiveExcludePossiblyUndefinedFieldValue<Base>>>]-?: WriteConverter<ObjectFlattenHybrid<RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<RecursiveExcludePossiblyUndefinedFieldValue<Base>>>[J], Settings['banNull'] extends true ? null : never>; }; compare: { [J in keyof ObjectFlattenHybrid<RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<RecursiveExcludePossiblyUndefinedFieldValue<Base>>>]-?: CompareConverter<ObjectFlattenHybrid<RecursiveReplaceUnionInvolveObjectTypeWithErrorMsg<RecursiveExcludePossiblyUndefinedFieldValue<Base>>>[J], Settings['banNull'] extends true ? null : never>; }; collectionID: NoUndefinedAndBannedTypes<string extends CollectionID ? ErrorCollectionIDString : IsValidID<CollectionID, 'Collection', 'ID'>, never>; collectionPath: Parent extends MetaType ? `${Parent['collectionPath']}/${Parent['docID']}/${CollectionID}` : CollectionID; docID: IsValidID<DocID, 'Document', 'ID'>; docPath: Parent extends MetaType ? `${Parent['collectionPath']}/${Parent['docID']}/${CollectionID}/${DocID}` : `${CollectionID}/${DocID}`; parent: Parent; ancestors: Parent extends MetaType ? [ ...Parent['ancestors'], MetaTypeCreator<Base, CollectionID, DocID, Parent, Settings> ] : [MetaTypeCreator<Base, CollectionID, DocID, Parent, Settings>]; }; declare type ReadConverterArray<T, allFieldsPossiblyReadAsUndefined, BannedTypes, InArray extends boolean> = NoDirectNestedArray<T, T extends (infer A)[] ? ReadConverterArray<A, allFieldsPossiblyReadAsUndefined, BannedTypes, true>[] | (InArray extends true ? never : allFieldsPossiblyReadAsUndefined) : T extends FieldValues ? ErrorFieldValueInArray : T extends Date | OriTimestamp ? OriTimestamp | (InArray extends true ? never : allFieldsPossiblyReadAsUndefined) : T extends PossiblyReadAsUndefined ? InArray extends true ? ErrorPossiblyUndefinedAsArrayElement : undefined : T extends Record<string, unknown> ? { [K in keyof T]-?: ReadConverterArray<T[K], allFieldsPossiblyReadAsUndefined, BannedTypes, false>; } | (InArray extends true ? never : allFieldsPossiblyReadAsUndefined) : NoUndefinedAndBannedTypes<T, BannedTypes> | allFieldsPossiblyReadAsUndefined>; declare type ReadConverter<T, allFieldsPossiblyReadAsUndefined, BannedTypes> = NoDirectNestedArray<T, T extends (infer A)[] ? ReadConverterArray<A, allFieldsPossiblyReadAsUndefined, BannedTypes, true>[] | allFieldsPossiblyReadAsUndefined : T extends ServerTimestamp | Date | OriTimestamp ? OriTimestamp | allFieldsPossiblyReadAsUndefined : T extends DeleteField | PossiblyReadAsUndefined ? undefined : T extends UnassignedAbleFieldValue ? ErrorUnassignedAbleFieldValue : T extends Record<string, unknown> ? { [K in keyof T]-?: ReadConverter<T[K], allFieldsPossiblyReadAsUndefined, BannedTypes>; } | allFieldsPossiblyReadAsUndefined : NoUndefinedAndBannedTypes<T, BannedTypes> | allFieldsPossiblyReadAsUndefined>; declare type CompareConverterArray<T, BannedTypes> = NoDirectNestedArray<T, T extends (infer A)[] ? CompareConverterArray<A, BannedTypes>[] : T extends FieldValues ? ErrorFieldValueInArray : T extends Date | OriTimestamp ? OriTimestamp | Date : T extends PossiblyReadAsUndefined ? never : T extends Record<string, unknown> ? { [K in keyof T]-?: CompareConverterArray<T[K], BannedTypes>; } : NoUndefinedAndBannedTypes<T, BannedTypes>>; declare type CompareConverter<T, BannedTypes> = NoDirectNestedArray<T, T extends (infer A)[] ? CompareConverterArray<A, BannedTypes>[] : T extends ServerTimestamp | Date | OriTimestamp ? OriTimestamp | Date : T extends UnassignedAbleFieldValue ? ErrorUnassignedAbleFieldValue : T extends PossiblyReadAsUndefined | DeleteField ? never : T extends Record<string, unknown> ? { [K in keyof T]-?: CompareConverter<T[K], BannedTypes>; } : NoUndefinedAndBannedTypes<T, BannedTypes>>; declare type ArrayWriteConverter<T, BannedTypes> = NoDirectNestedArray<T, T extends (infer A)[] ? ArrayWriteConverter<A, BannedTypes>[] : T extends FieldValues ? ErrorFieldValueInArray : T extends OriTimestamp | Date ? OriTimestamp | Date : T extends PossiblyReadAsUndefined ? never : T extends Record<string, unknown> ? { [K in keyof T]-?: ArrayWriteConverter<T[K], BannedTypes>; } : NoUndefinedAndBannedTypes<T, BannedTypes>>; declare type WriteConverter<T, BannedTypes> = NoDirectNestedArray<T, T extends (infer A)[] ? ArrayWriteConverter<A, BannedTypes>[] | ArrayUnionOrRemove<ArrayWriteConverter<A, BannedTypes>> : T extends ServerTimestamp ? ServerTimestamp : T extends number ? number extends T ? T | Increment : T : T extends DeleteField ? DeleteField : T extends UnassignedAbleFieldValue ? ErrorUnassignedAbleFieldValue : T extends OriTimestamp | Date ? OriTimestamp | Date : T extends PossiblyReadAsUndefined ? never : T extends Record<string, unknown> ? { [K in keyof T]-?: WriteConverter<T[K], BannedTypes>; } : NoUndefinedAndBannedTypes<T, BannedTypes>>; export {};