All files / client/functions FirebaseFunctionsType.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51                                                                                                     
import type { FirebaseFunction, IFirebaseFunction } from './FirebaseFunction';
import type { FirebaseRequest, IFirebaseRequest } from './FirebaseRequest';
 
export type FirebaseFunctions =
    | IFirebaseFunction.ConstructorWrapper<unknown, unknown>
    | IFirebaseRequest.ConstructorWrapper<unknown, unknown>
    | { [key: string]: FirebaseFunctions };
 
export type RunnableFirebaseFunctions<Functions extends FirebaseFunctions> =
    FirebaseFunctions.IsFunction<Functions> extends true ? FirebaseFunction<FirebaseFunctions.FunctionParameters<Functions>, FirebaseFunctions.FunctionReturnType<Functions>> :
        FirebaseFunctions.IsRequest<Functions> extends true ? FirebaseRequest<FirebaseFunctions.RequestParameters<Functions>, FirebaseFunctions.RequestReturnType<Functions>> :
            Functions extends { [key: string]: FirebaseFunctions } ? { [Key in keyof Functions]: RunnableFirebaseFunctions<Functions[Key]> } : never;
 
export namespace FirebaseFunctions {
 
    export type IsFunction<Functions extends FirebaseFunctions> =
        Functions extends IFirebaseFunction.ConstructorWrapper<unknown, unknown> ? true :
            Functions extends IFirebaseRequest.ConstructorWrapper<unknown, unknown> ? false :
                false;
 
    export type IsRequest<Functions extends FirebaseFunctions> =
        Functions extends IFirebaseFunction.ConstructorWrapper<unknown, unknown> ? false :
            Functions extends IFirebaseRequest.ConstructorWrapper<unknown, unknown> ? true :
                false;
 
    export type IsRecord<Functions extends FirebaseFunctions> =
        Functions extends IFirebaseFunction.ConstructorWrapper<unknown, unknown> ? false :
            Functions extends IFirebaseRequest.ConstructorWrapper<unknown, unknown> ? false :
                true;
 
    export type FunctionParameters<Functions extends FirebaseFunctions> =
        Functions extends IFirebaseFunction.ConstructorWrapper<infer Parameters, unknown> ? Parameters :
            Functions extends IFirebaseRequest.ConstructorWrapper<unknown, unknown> ? never :
                never;
 
    export type FunctionReturnType<Functions extends FirebaseFunctions> =
        Functions extends IFirebaseFunction.ConstructorWrapper<unknown, infer ReturnType> ? ReturnType :
            Functions extends IFirebaseRequest.ConstructorWrapper<unknown, unknown> ? never :
                never;
 
    export type RequestParameters<Functions extends FirebaseFunctions> =
        Functions extends IFirebaseFunction.ConstructorWrapper<unknown, unknown> ? never :
            Functions extends IFirebaseRequest.ConstructorWrapper<infer Parameters, unknown> ? Parameters :
                never;
 
    export type RequestReturnType<Functions extends FirebaseFunctions> =
        Functions extends IFirebaseFunction.ConstructorWrapper<unknown, unknown> ? never :
            Functions extends IFirebaseRequest.ConstructorWrapper<unknown, infer ReturnType> ? ReturnType :
                never;
}