@aws-amplify/datastore
Version:
AppSyncLocal support for aws-amplify
90 lines • 3.71 kB
JavaScript
import { __read, __spread, __values } from "tslib";
var connectionTimeout = function (error) {
return /^Connection failed: Connection Timeout/.test(error.message);
};
var serverError = function (error) {
return /^Error: Request failed with status code 5\d\d/.test(error.message);
};
export var mutationErrorMap = {
BadModel: function () { return false; },
BadRecord: function (error) {
var message = error.message;
return (/^Cannot return \w+ for [\w-_]+ type/.test(message) ||
/^Variable '.+' has coerced Null value for NonNull type/.test(message)); // newly required field, out of date client
},
ConfigError: function () { return false; },
Transient: function (error) { return connectionTimeout(error) || serverError(error); },
Unauthorized: function (error) {
return error.message === 'Unauthorized' ||
/^Request failed with status code 401/.test(error.message);
},
};
export var subscriptionErrorMap = {
BadModel: function () { return false; },
BadRecord: function () { return false; },
ConfigError: function () { return false; },
Transient: function (observableError) {
var error = unwrapObservableError(observableError);
return connectionTimeout(error) || serverError(error);
},
Unauthorized: function (observableError) {
var error = unwrapObservableError(observableError);
return /Connection failed.+Unauthorized/.test(error.message);
},
};
export var syncErrorMap = {
BadModel: function () { return false; },
BadRecord: function (error) { return /^Cannot return \w+ for [\w-_]+ type/.test(error.message); },
ConfigError: function () { return false; },
Transient: function (error) { return connectionTimeout(error) || serverError(error); },
Unauthorized: function (error) { return error.errorType === 'Unauthorized'; },
};
/**
* Get the first error reason of an observable.
* Allows for error maps to be easily applied to observable errors
*
* @param observableError an error from ZenObservable subscribe error callback
*/
function unwrapObservableError(observableError) {
var _a = observableError.error, _b = __read((_a === void 0 ? {
errors: [],
} : _a).errors, 1), error = _b[0];
return error;
}
export function getMutationErrorType(error) {
return mapErrorToType(mutationErrorMap, error);
}
export function getSubscriptionErrorType(error) {
return mapErrorToType(subscriptionErrorMap, error);
}
export function getSyncErrorType(error) {
return mapErrorToType(syncErrorMap, error);
}
/**
* Categorizes an error with a broad error type, intended to make
* customer error handling code simpler.
* @param errorMap Error names and a list of patterns that indicate them (each pattern as a regex or function)
* @param error The underying error to categorize.
*/
export function mapErrorToType(errorMap, error) {
var e_1, _a;
var errorTypes = __spread(Object.keys(errorMap));
try {
for (var errorTypes_1 = __values(errorTypes), errorTypes_1_1 = errorTypes_1.next(); !errorTypes_1_1.done; errorTypes_1_1 = errorTypes_1.next()) {
var errorType = errorTypes_1_1.value;
var matcher = errorMap[errorType];
if (matcher === null || matcher === void 0 ? void 0 : matcher(error)) {
return errorType;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (errorTypes_1_1 && !errorTypes_1_1.done && (_a = errorTypes_1.return)) _a.call(errorTypes_1);
}
finally { if (e_1) throw e_1.error; }
}
return 'Unknown';
}
//# sourceMappingURL=errorMaps.js.map