forked from crowetic/commerce
27 lines
709 B
TypeScript
27 lines
709 B
TypeScript
|
export interface ShopifyErrorLike {
|
||
|
status: number;
|
||
|
message: Error;
|
||
|
}
|
||
|
|
||
|
export const isObject = (object: unknown): object is Record<string, unknown> => {
|
||
|
return typeof object === 'object' && object !== null && !Array.isArray(object);
|
||
|
};
|
||
|
|
||
|
export const isShopifyError = (error: unknown): error is ShopifyErrorLike => {
|
||
|
if (!isObject(error)) return false;
|
||
|
|
||
|
if (error instanceof Error) return true;
|
||
|
|
||
|
return findError(error);
|
||
|
};
|
||
|
|
||
|
function findError<T extends object>(error: T): boolean {
|
||
|
if (Object.prototype.toString.call(error) === '[object Error]') {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
const prototype = Object.getPrototypeOf(error) as T | null;
|
||
|
|
||
|
return prototype === null ? false : findError(prototype);
|
||
|
}
|