UNPKG

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
"use strict"; 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