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.
136 lines • 4.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isCreatedResponse = exports.isEmptyResponse = exports.isJsonResponse = exports.isServerErrorResponse = exports.isClientErrorResponse = exports.isRedirectResponse = exports.isSuccessResponse = exports.isAxiosResponse = void 0;
exports.isAxiosResponseWithData = isAxiosResponseWithData;
exports.isSuccessResponseWithData = isSuccessResponseWithData;
exports.isResponseWithStatus = isResponseWithStatus;
exports.isResponseWithContentType = isResponseWithContentType;
exports.isCreatedResponseWithData = isCreatedResponseWithData;
const guardz_1 = require("guardz");
/**
* Type guard for basic AxiosResponse structure
*/
const isAxiosResponse = function (value, config) {
return (0, guardz_1.isType)({
data: (v) => true, // data can be anything
status: guardz_1.isNumber,
statusText: guardz_1.isString,
headers: (v) => (0, guardz_1.isNonNullObject)(v),
config: (v) => (0, guardz_1.isNonNullObject)(v),
request: (v) => true, // request can be anything
})(value, config);
};
exports.isAxiosResponse = isAxiosResponse;
/**
* Creates a type guard for AxiosResponse with specific data type validation
*/
function isAxiosResponseWithData(dataGuard) {
return function (value, config) {
return (0, guardz_1.isType)({
data: dataGuard,
status: guardz_1.isNumber,
statusText: guardz_1.isString,
headers: (v) => (0, guardz_1.isNonNullObject)(v),
config: (v) => (0, guardz_1.isNonNullObject)(v),
request: (v) => true,
})(value, config);
};
}
/**
* Type guard for successful HTTP response (2xx status codes)
*/
const isSuccessResponse = function (value, config) {
if (!(0, exports.isAxiosResponse)(value, config)) {
return false;
}
return value.status >= 200 && value.status < 300;
};
exports.isSuccessResponse = isSuccessResponse;
/**
* Creates a type guard for successful response with specific data type
*/
function isSuccessResponseWithData(dataGuard) {
return function (value, config) {
return (isAxiosResponseWithData(dataGuard)(value, config) &&
(0, exports.isSuccessResponse)(value, config));
};
}
/**
* Type guard for redirect response (3xx status codes)
*/
const isRedirectResponse = function (value, config) {
if (!(0, exports.isAxiosResponse)(value, config)) {
return false;
}
return value.status >= 300 && value.status < 400;
};
exports.isRedirectResponse = isRedirectResponse;
/**
* Type guard for client error response (4xx status codes)
*/
const isClientErrorResponse = function (value, config) {
if (!(0, exports.isAxiosResponse)(value, config)) {
return false;
}
return value.status >= 400 && value.status < 500;
};
exports.isClientErrorResponse = isClientErrorResponse;
/**
* Type guard for server error response (5xx status codes)
*/
const isServerErrorResponse = function (value, config) {
if (!(0, exports.isAxiosResponse)(value, config)) {
return false;
}
return value.status >= 500 && value.status < 600;
};
exports.isServerErrorResponse = isServerErrorResponse;
/**
* Type guard for specific status code
*/
function isResponseWithStatus(statusCode) {
return function (value, config) {
return (0, exports.isAxiosResponse)(value, config) && value.status === statusCode;
};
}
/**
* Type guard for response with specific content type
*/
function isResponseWithContentType(contentType) {
return function (value, config) {
if (!(0, exports.isAxiosResponse)(value, config)) {
return false;
}
const responseContentType = value.headers["content-type"] || value.headers["Content-Type"];
return (typeof responseContentType === "string" &&
responseContentType.includes(contentType));
};
}
/**
* Type guard for JSON response
*/
exports.isJsonResponse = isResponseWithContentType("application/json");
/**
* Type guard for empty response (204 No Content)
*/
const isEmptyResponse = function (value, config) {
return isResponseWithStatus(204)(value, config);
};
exports.isEmptyResponse = isEmptyResponse;
/**
* Type guard for created response (201 Created)
*/
const isCreatedResponse = function (value, config) {
return isResponseWithStatus(201)(value, config);
};
exports.isCreatedResponse = isCreatedResponse;
/**
* Creates a type guard for created response with specific data type
*/
function isCreatedResponseWithData(dataGuard) {
return function (value, config) {
return (isAxiosResponseWithData(dataGuard)(value, config) &&
(0, exports.isCreatedResponse)(value, config));
};
}
//# sourceMappingURL=axios-response-guards.js.map