brick-module
Version:
Better React Native native module development
49 lines (48 loc) • 1.77 kB
JavaScript
//#region src/BrickError.ts
/**
* BrickError - Type-safe class for custom errors from native modules.
* Matches the structure of iOS/Android BrickError.
*/
var BrickError = class BrickError extends Error {
/** Error code (same as error.name) */
code;
/** Additional properties (e.g., amount, currency) */
userInfo;
/** Name of the module where the error occurred */
moduleName;
constructor(message, code, userInfo = {}, moduleName) {
super(message);
this.name = code;
this.code = code;
this.userInfo = userInfo;
this.moduleName = moduleName;
}
/**
* Type guard to check if an error object is a BrickError.
* @param error - The error object to check
* @returns true if the error is a BrickError
*/
static isBrickError(error) {
return error instanceof Error && typeof error.code === "string" && typeof error.userInfo === "object" && error.userInfo !== null;
}
/**
* Converts a general error object to a BrickError.
* @param error - The error object to convert
* @param moduleName - Name of the module where the error occurred
* @returns A BrickError instance
*/
static from(error, moduleName) {
if (error instanceof BrickError) {
if (moduleName && !error.moduleName) return new BrickError(error.message, error.code, error.userInfo, moduleName);
return error;
}
if (BrickError.isBrickError(error)) return new BrickError(error.message, error.code, error.userInfo, moduleName || error.moduleName);
if (error instanceof Error) {
const anyError = error;
return new BrickError(error.message, anyError.code || anyError.name || "UNKNOWN_ERROR", anyError.userInfo || {}, moduleName || anyError.moduleName);
}
return new BrickError(String(error), "UNKNOWN_ERROR", {}, moduleName);
}
};
//#endregion
export { BrickError };