guardz-axios
Version:
Type-safe HTTP client built on top of Axios with runtime validation using guardz. Part of the guardz ecosystem for comprehensive TypeScript type safety.
138 lines • 4.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StatusValidators = exports.isStatus503 = exports.isStatus502 = exports.isStatus500 = exports.isStatus429 = exports.isStatus422 = exports.isStatus404 = exports.isStatus403 = exports.isStatus401 = exports.isStatus400 = exports.isStatus204 = exports.isStatus201 = exports.isStatus200 = exports.isServerErrorStatus = exports.isClientErrorStatus = exports.isRedirectStatus = exports.isSuccessStatus = exports.isHttpStatus = void 0;
exports.createStatusGuard = createStatusGuard;
exports.getStatusCategory = getStatusCategory;
exports.isRetryableStatus = isRetryableStatus;
exports.hasResponseBody = hasResponseBody;
/**
* Type guard for valid HTTP status codes
*/
const isHttpStatus = function (value, _config) {
if (typeof value !== "number") {
return false;
}
return value >= 100 && value < 600;
};
exports.isHttpStatus = isHttpStatus;
/**
* Type guard for success status codes (2xx)
*/
const isSuccessStatus = function (value, _config) {
if (!(0, exports.isHttpStatus)(value, _config)) {
return false;
}
return value >= 200 && value < 300;
};
exports.isSuccessStatus = isSuccessStatus;
/**
* Type guard for redirect status codes (3xx)
*/
const isRedirectStatus = function (value, _config) {
if (!(0, exports.isHttpStatus)(value, _config)) {
return false;
}
return value >= 300 && value < 400;
};
exports.isRedirectStatus = isRedirectStatus;
/**
* Type guard for client error status codes (4xx)
*/
const isClientErrorStatus = function (value, _config) {
if (!(0, exports.isHttpStatus)(value, _config)) {
return false;
}
return value >= 400 && value < 500;
};
exports.isClientErrorStatus = isClientErrorStatus;
/**
* Type guard for server error status codes (5xx)
*/
const isServerErrorStatus = function (value, _config) {
if (!(0, exports.isHttpStatus)(value, _config)) {
return false;
}
return value >= 500 && value < 600;
};
exports.isServerErrorStatus = isServerErrorStatus;
/**
* Type guard for specific status codes
*/
const isStatus200 = (value, _config) => value === 200;
exports.isStatus200 = isStatus200;
const isStatus201 = (value, _config) => value === 201;
exports.isStatus201 = isStatus201;
const isStatus204 = (value, _config) => value === 204;
exports.isStatus204 = isStatus204;
const isStatus400 = (value, _config) => value === 400;
exports.isStatus400 = isStatus400;
const isStatus401 = (value, _config) => value === 401;
exports.isStatus401 = isStatus401;
const isStatus403 = (value, _config) => value === 403;
exports.isStatus403 = isStatus403;
const isStatus404 = (value, _config) => value === 404;
exports.isStatus404 = isStatus404;
const isStatus422 = (value, _config) => value === 422;
exports.isStatus422 = isStatus422;
const isStatus429 = (value, _config) => value === 429;
exports.isStatus429 = isStatus429;
const isStatus500 = (value, _config) => value === 500;
exports.isStatus500 = isStatus500;
const isStatus502 = (value, _config) => value === 502;
exports.isStatus502 = isStatus502;
const isStatus503 = (value, _config) => value === 503;
exports.isStatus503 = isStatus503;
/**
* Creates a type guard for a specific status code
*/
function createStatusGuard(statusCode) {
return function (value, _config) {
return value === statusCode;
};
}
/**
* Status code category checker
*/
function getStatusCategory(status) {
if ((0, exports.isSuccessStatus)(status))
return "success";
if ((0, exports.isRedirectStatus)(status))
return "redirect";
if ((0, exports.isClientErrorStatus)(status))
return "client-error";
if ((0, exports.isServerErrorStatus)(status))
return "server-error";
return "unknown";
}
/**
* Check if status indicates retryable error
*/
function isRetryableStatus(status) {
const retryableStatuses = [408, 429, 500, 502, 503, 504];
return retryableStatuses.includes(status);
}
/**
* Check if status indicates success that might have response body
*/
function hasResponseBody(status) {
// 204 No Content and 304 Not Modified typically don't have response body
return status !== 204 && status !== 304;
}
/**
* Common status code validators
*/
exports.StatusValidators = Object.freeze({
isOk: exports.isStatus200,
isCreated: exports.isStatus201,
isNoContent: exports.isStatus204,
isBadRequest: exports.isStatus400,
isUnauthorized: exports.isStatus401,
isForbidden: exports.isStatus403,
isNotFound: exports.isStatus404,
isValidationError: exports.isStatus422,
isRateLimit: exports.isStatus429,
isInternalServerError: exports.isStatus500,
isBadGateway: exports.isStatus502,
isServiceUnavailable: exports.isStatus503,
});
//# sourceMappingURL=status-guards.js.map