All files / shared/functions FunctionsError.ts

100% Statements 10/10
100% Branches 3/3
100% Functions 4/4
100% Lines 10/10

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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72          1x   1x 3x                                           1x   7x     7x 7x 7x   7x       1x                                                        
import type { Flattable, ITypeBuilder } from '@stevenkellner/typescript-common-functionality';
import type { FunctionsErrorCode as FirebaseFunctionsErrorCode } from 'firebase-functions/lib/common/providers/https';
 
export type FunctionsErrorCode = FirebaseFunctionsErrorCode;
 
export namespace FunctionsErrorCode {
 
    export function isFunctionsErrorCode(code: string): code is FunctionsErrorCode {
        return [
            'ok',
            'cancelled',
            'unknown',
            'invalid-argument',
            'deadline-exceeded',
            'not-found',
            'already-exists',
            'permission-denied',
            'resource-exhausted',
            'failed-precondition',
            'aborted',
            'out-of-range',
            'unimplemented',
            'internal',
            'unavailable',
            'data-loss',
            'unauthenticated'
        ].includes(code);
    }
}
 
export class FunctionsError extends Error implements Flattable<FunctionsError.Flatten> {
 
    public readonly name = 'FunctionsError';
 
    public constructor(
        public readonly code: FunctionsErrorCode,
        public readonly message: string,
        public readonly details: string | null = null
    ) {
        super(message);
    }
 
    public get flatten(): FunctionsError.Flatten {
        return {
            name: this.name,
            code: this.code,
            message: this.message,
            details: this.details
        };
    }
}
 
// istanbul ignore next
export namespace FunctionsError {
 
    export type Flatten = {
        name: 'FunctionsError';
        code: FunctionsErrorCode;
        message: string;
        details: string | null;
    };
 
    export class TypeBuilder implements ITypeBuilder<FunctionsError.Flatten, FunctionsError> {
 
        public build(flatten: FunctionsError.Flatten): FunctionsError {
            return new FunctionsError(flatten.code, flatten.message, flatten.details);
        }
    }
 
    export const builder = new TypeBuilder();
}