import { FTypes, STypes } from '../../types' export function $collectionSchema() { // eslint-disable-next-line prefer-rest-params const rawFirstArgument = arguments[0] ?? {} type HasDecoder = _U extends undefined ? false : true type U = _U extends undefined ? T : _U type DecoderOptions = HasDecoder extends true ? { decoder: STypes.Decoder } : { decoder?: undefined } return ({ decoder, selectors = () => ({} as SL), }: DecoderOptions & { selectors?: ( q: FTypes.Query, firestoreStatic: FTypes.FirestoreStatic, ) => SL }): STypes.CollectionSchema => { return { ...rawFirstArgument, decoder, selectors, } } }