UNPKG

@firebase/util

Version:

_NOTE: This is specifically tailored for Firebase JS SDK usage, if you are not a member of the Firebase team, please avoid using this package_

88 lines (87 loc) 2.81 kB
/** * @license * Copyright 2017 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @fileoverview Standardized Firebase Error. * * Usage: * * // TypeScript string literals for type-safe codes * type Err = * 'unknown' | * 'object-not-found' * ; * * // Closure enum for type-safe error codes * // at-enum {string} * var Err = { * UNKNOWN: 'unknown', * OBJECT_NOT_FOUND: 'object-not-found', * } * * let errors: Map<Err, string> = { * 'generic-error': "Unknown error", * 'file-not-found': "Could not find file: {$file}", * }; * * // Type-safe function - must pass a valid error code as param. * let error = new ErrorFactory<Err>('service', 'Service', errors); * * ... * throw error.create(Err.GENERIC); * ... * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName}); * ... * // Service: Could not file file: foo.txt (service/file-not-found). * * catch (e) { * assert(e.message === "Could not find file: foo.txt."); * if ((e as FirebaseError)?.code === 'service/file-not-found') { * console.log("Could not read file: " + e['file']); * } * } */ export type ErrorMap<ErrorCode extends string> = { readonly [K in ErrorCode]: string; }; export interface StringLike { toString(): string; } export interface ErrorData { [key: string]: unknown; } export declare class FirebaseError extends Error { /** The error code for this error. */ readonly code: string; /** Custom data for this error. */ customData?: Record<string, unknown> | undefined; /** The custom name for all FirebaseErrors. */ readonly name: string; constructor( /** The error code for this error. */ code: string, message: string, /** Custom data for this error. */ customData?: Record<string, unknown> | undefined); } export declare class ErrorFactory<ErrorCode extends string, ErrorParams extends { readonly [K in ErrorCode]?: ErrorData; } = {}> { private readonly service; private readonly serviceName; private readonly errors; constructor(service: string, serviceName: string, errors: ErrorMap<ErrorCode>); create<K extends ErrorCode>(code: K, ...data: K extends keyof ErrorParams ? [ErrorParams[K]] : []): FirebaseError; }