import { ErrorEmptyDocumentOrCollectionID, NoUndefinedAndBannedTypes, ErrorInvalidDocumentOrCollectionIDStart, ErrorInvalidDocumentOrCollectionID, ErrorEndOfID } from './error';
declare type InvalidIDCharacter = '/' | '..' | '//' | '__';
declare type AllowInvalidIDCharacter<S extends InvalidIDCharacter> = Exclude<InvalidIDCharacter, S>;
export declare type GetNumberOfSlash<ID extends string> = GetNumberOfInvalidCharacter<ID, '/'>;
export declare type GetNumberOfInvalidCharacter<ID extends string, InvalidCharacter extends string, SlashCount extends unknown[] = []> = ID extends `${string}${InvalidCharacter}${infer Tail}` ? GetNumberOfInvalidCharacter<Tail, InvalidCharacter, [1, ...SlashCount]> : SlashCount['length'];
export declare type IsValidID<ID extends string, Mode extends 'Document' | 'Collection', Type extends 'ID' | 'Path'> = ID extends NoUndefinedAndBannedTypes<ID, never> ? ID extends '' ? ErrorEmptyDocumentOrCollectionID<Mode> : ID extends `${string}/` ? ErrorEndOfID : ID extends `.${string}` ? ErrorInvalidDocumentOrCollectionIDStart<Mode> : GetNumberOfInvalidCharacter<ID, AllowInvalidIDCharacter<Type extends 'ID' ? never : Type extends 'Path' ? '/' : never>> extends 0 ? ID : ErrorInvalidDocumentOrCollectionID<Mode, Type> : NoUndefinedAndBannedTypes<ID, never>;
export {};
