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.
40 lines • 2.29 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSafeApiContext = createSafeApiContext;
const axios_1 = __importDefault(require("axios"));
const executeRequest_1 = require("../internal/executeRequest");
const safe_1 = require("../functions/safe");
/**
* Pattern 4: Context/Provider (React style)
* Usage: const safeApi = createSafeApiContext({ baseURL: '...', defaultTolerance: false });
* const result = await safeApi.get('/users/1', { guard: isUser });
*/
function createSafeApiContext(contextConfig = {}) {
const instance = contextConfig.axiosInstance ||
axios_1.default.create({
baseURL: contextConfig.baseURL,
timeout: contextConfig.timeout,
headers: contextConfig.headers,
});
return {
get: (url, config, axiosConfig) => (0, executeRequest_1.executeRequest)({ ...axiosConfig, url, method: "GET" }, { ...contextConfig, ...config, axiosInstance: instance }),
post: (url, data, config, axiosConfig) => (0, executeRequest_1.executeRequest)({ ...axiosConfig, url, method: "POST", data }, { ...contextConfig, ...config, axiosInstance: instance }),
put: (url, data, config, axiosConfig) => (0, executeRequest_1.executeRequest)({ ...axiosConfig, url, method: "PUT", data }, { ...contextConfig, ...config, axiosInstance: instance }),
patch: (url, data, config, axiosConfig) => (0, executeRequest_1.executeRequest)({ ...axiosConfig, url, method: "PATCH", data }, { ...contextConfig, ...config, axiosInstance: instance }),
delete: (url, config, axiosConfig) => (0, executeRequest_1.executeRequest)({ ...axiosConfig, url, method: "DELETE" }, { ...contextConfig, ...config, axiosInstance: instance }),
// Provide builder access
safe: () => {
const builder = (0, safe_1.safe)().baseURL(contextConfig.baseURL || "");
if (contextConfig.timeout) {
builder.timeout(contextConfig.timeout);
}
return builder;
},
// Direct instance access
instance,
};
}
//# sourceMappingURL=createSafeApiContext.js.map