/**
* @license
* Copyright The Closure Library Authors.
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @fileoverview Provides a base class for custom Error objects such that the
* stack is correctly maintained.
*
* You should never need to throw DebugError(msg) directly, Error(msg) is
* sufficient.
*/
goog.module('goog.debug.Error');
goog.module.declareLegacyNamespace();
/**
* Base class for custom error objects.
* @param {*=} msg The message associated with the error.
* @param {{
* message: (?|undefined),
* name: (?|undefined),
* lineNumber: (?|undefined),
* fileName: (?|undefined),
* stack: (?|undefined),
* cause: (?|undefined),
* }=} cause The original error object to chain with.
* @constructor
* @extends {Error}
*/
function DebugError(msg = undefined, cause = undefined) {
// Attempt to ensure there is a stack trace.
if (Error.captureStackTrace) {
Error.captureStackTrace(this, DebugError);
} else {
const stack = new Error().stack;
if (stack) {
/** @override */
this.stack = stack;
}
}
if (msg) {
/** @override */
this.message = String(msg);
}
if (cause !== undefined) {
/** @type {?} */
this.cause = cause;
}
/**
* Whether to report this error to the server. Setting this to false will
* cause the error reporter to not report the error back to the server,
* which can be useful if the client knows that the error has already been
* logged on the server.
* @type {boolean}
*/
this.reportErrorToServer = true;
}
goog.inherits(DebugError, Error);
/** @override @type {string} */
DebugError.prototype.name = 'CustomError';
exports = DebugError;