UNPKG

@segment/analytics-react-native

Version:

The hassle-free way to add Segment analytics to your React-Native app.

95 lines (89 loc) 3.17 kB
/** * Error types reported through the errorHandler in the client */ export let ErrorType = /*#__PURE__*/function (ErrorType) { ErrorType[ErrorType["NetworkUnexpectedHTTPCode"] = 0] = "NetworkUnexpectedHTTPCode"; ErrorType[ErrorType["NetworkServerLimited"] = 1] = "NetworkServerLimited"; ErrorType[ErrorType["NetworkServerRejected"] = 2] = "NetworkServerRejected"; ErrorType[ErrorType["NetworkUnknown"] = 3] = "NetworkUnknown"; ErrorType[ErrorType["JsonUnableToSerialize"] = 4] = "JsonUnableToSerialize"; ErrorType[ErrorType["JsonUnableToDeserialize"] = 5] = "JsonUnableToDeserialize"; ErrorType[ErrorType["JsonUnknown"] = 6] = "JsonUnknown"; ErrorType[ErrorType["PluginError"] = 7] = "PluginError"; ErrorType[ErrorType["InitializationError"] = 8] = "InitializationError"; ErrorType[ErrorType["ResetError"] = 9] = "ResetError"; ErrorType[ErrorType["FlushError"] = 10] = "FlushError"; return ErrorType; }({}); /** * Segment Error object for ErrorHandler option */ export class SegmentError extends Error { constructor(type, message, innerError) { super(message); Object.setPrototypeOf(this, SegmentError.prototype); this.type = type; this.message = message; this.innerError = innerError; } } /** * Custom Error type for Segment HTTP Error responses */ export class NetworkError extends SegmentError { constructor(statusCode, message, innerError) { let type; if (statusCode === 429) { type = ErrorType.NetworkServerLimited; } else if (statusCode > 300 && statusCode < 400) { type = ErrorType.NetworkUnexpectedHTTPCode; } else if (statusCode >= 400) { type = ErrorType.NetworkServerRejected; } else { type = ErrorType.NetworkUnknown; } super(type, message, innerError); Object.setPrototypeOf(this, NetworkError.prototype); this.statusCode = statusCode; this.type = type; } } /** * Error type for JSON Serialization errors */ export class JSONError extends SegmentError { constructor(type, message, innerError) { super(type, message, innerError); Object.setPrototypeOf(this, JSONError.prototype); } } /** * Utility method for handling HTTP fetch errors * @param response Fetch Response * @returns response if status OK, throws NetworkError for everything else */ export const checkResponseForErrors = response => { if (!response.ok) { throw new NetworkError(response.status, response.statusText); } return response; }; /** * Converts a .fetch() error to a SegmentError object for reporting to the error handler * @param error any JS error instance * @returns a SegmentError object */ export const translateHTTPError = error => { // SegmentError already if (error instanceof SegmentError) { return error; // JSON Deserialization Errors } else if (error instanceof SyntaxError) { return new JSONError(ErrorType.JsonUnableToDeserialize, error.message, error); // HTTP Errors } else { const message = error instanceof Error ? error.message : typeof error === 'string' ? error : 'Unknown error'; return new NetworkError(-1, message, error); } }; //# sourceMappingURL=errors.js.map