Summary: what else can I say move_complexity Reviewed By: passy Differential Revision: D31483414 fbshipit-source-id: 1692c792121a3aae0843eb238040cae0445cdf54
106 lines
2.4 KiB
TypeScript
106 lines
2.4 KiB
TypeScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
export function isAuthError(
|
|
err: any,
|
|
): err is UserNotSignedInError | UserUnauthorizedError {
|
|
return (
|
|
err instanceof UserNotSignedInError || err instanceof UserUnauthorizedError
|
|
);
|
|
}
|
|
|
|
export function isConnectivityOrAuthError(
|
|
err: any,
|
|
): err is ConnectivityError | UserNotSignedInError | UserUnauthorizedError {
|
|
return (
|
|
err instanceof ConnectivityError ||
|
|
isAuthError(err) ||
|
|
String(err).startsWith('Failed to fetch')
|
|
);
|
|
}
|
|
|
|
export class CancelledPromiseError extends Error {
|
|
constructor(msg: string) {
|
|
super(msg);
|
|
this.name = 'CancelledPromiseError';
|
|
}
|
|
name: 'CancelledPromiseError';
|
|
}
|
|
|
|
export class ConnectivityError extends Error {
|
|
constructor(msg: string) {
|
|
super(msg);
|
|
this.name = 'ConnectivityError';
|
|
}
|
|
name: 'ConnectivityError';
|
|
}
|
|
|
|
export class UserUnauthorizedError extends Error {
|
|
constructor(msg: string = 'User unauthorized.') {
|
|
super(msg);
|
|
this.name = 'UserUnauthorizedError';
|
|
}
|
|
name: 'UserUnauthorizedError';
|
|
}
|
|
|
|
export class UserNotSignedInError extends Error {
|
|
constructor(msg: string = 'User not signed in.') {
|
|
super(msg);
|
|
this.name = 'UserNotSignedInError';
|
|
}
|
|
name: 'UserNotSignedInError';
|
|
}
|
|
|
|
declare global {
|
|
interface Error {
|
|
interaction?: unknown;
|
|
}
|
|
}
|
|
|
|
export function isError(obj: any): obj is Error {
|
|
return (
|
|
obj instanceof Error ||
|
|
(obj &&
|
|
obj.name &&
|
|
typeof obj.name === 'string' &&
|
|
obj.message &&
|
|
typeof obj.message === 'string' &&
|
|
obj.stack &&
|
|
typeof obj.stack === 'string')
|
|
);
|
|
}
|
|
|
|
export function getErrorFromErrorLike(e: any): Error | undefined {
|
|
if (Array.isArray(e)) {
|
|
return e.map(getErrorFromErrorLike).find((x) => x);
|
|
} else if (isError(e)) {
|
|
return e;
|
|
} else {
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
export function getStringFromErrorLike(e: any): string {
|
|
if (Array.isArray(e)) {
|
|
return e.map(getStringFromErrorLike).join(' ');
|
|
} else if (typeof e == 'string') {
|
|
return e;
|
|
} else if (isError(e)) {
|
|
return e.message || e.toString();
|
|
} else {
|
|
try {
|
|
return JSON.stringify(e);
|
|
} catch (e) {
|
|
// Stringify might fail on arbitrary structures
|
|
// Last resort: toString it.
|
|
return '' + e;
|
|
}
|
|
}
|
|
}
|