axios-case-converter
Version:
Axios transformer/interceptor that converts snake_case/camelCase
95 lines (94 loc) • 4.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyCaseMiddleware = exports.createCamelResponseTransformer = exports.createSnakeRequestTransformer = exports.createSnakeParamsInterceptor = void 0;
var tslib_1 = require("tslib");
var transformers_1 = require("./transformers");
var util_1 = require("./util");
var createSnakeParamsInterceptor = function (options) {
var snake = (0, transformers_1.createObjectTransformers)(options === null || options === void 0 ? void 0 : options.caseFunctions).snake;
return function (config) {
if (!(options === null || options === void 0 ? void 0 : options.ignoreParams) && config.params) {
config.params = snake(config.params, options);
}
return config;
};
};
exports.createSnakeParamsInterceptor = createSnakeParamsInterceptor;
var createSnakeRequestTransformer = function (options) {
var _a = (0, transformers_1.createObjectTransformers)(options === null || options === void 0 ? void 0 : options.caseFunctions), snake = _a.snake, header = _a.header;
return function (data, headers) {
overwriteHeadersOrNoop(headers, header, options, [
'common',
'delete',
'get',
'head',
'post',
'put',
'patch',
]);
return snake(data, options);
};
};
exports.createSnakeRequestTransformer = createSnakeRequestTransformer;
var createCamelResponseTransformer = function (options) {
var camel = (0, transformers_1.createObjectTransformers)(options === null || options === void 0 ? void 0 : options.caseFunctions).camel;
return function (data, headers) {
overwriteHeadersOrNoop(headers, camel, options);
return camel(data, options);
};
};
exports.createCamelResponseTransformer = createCamelResponseTransformer;
var overwriteHeadersOrNoop = function (headers, fn, options, excludedKeys) {
var e_1, _a, _b, _c;
if ((options === null || options === void 0 ? void 0 : options.ignoreHeaders) ||
(!(0, util_1.isPlainObject)(headers) && !(0, util_1.isAxiosHeaders)(headers))) {
return;
}
try {
for (var _d = tslib_1.__values(Object.entries(headers)), _e = _d.next(); !_e.done; _e = _d.next()) {
var _f = tslib_1.__read(_e.value, 2), key = _f[0], value = _f[1];
fn(value, tslib_1.__assign({ overwrite: true }, options));
if ((excludedKeys || []).includes(key)) {
continue;
}
if ((0, util_1.isAxiosHeaders)(headers)) {
headers.delete(key);
headers.set(Object.keys(fn((_b = {}, _b[key] = null, _b), options))[0], value, true);
}
else {
delete headers[key];
headers[Object.keys(fn((_c = {}, _c[key] = null, _c), options))[0]] = value;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
}
finally { if (e_1) throw e_1.error; }
}
};
var applyCaseMiddleware = function (axios, options) {
var _a, _b, _c;
axios.defaults.transformRequest = tslib_1.__spreadArray([
((_a = options === null || options === void 0 ? void 0 : options.caseMiddleware) === null || _a === void 0 ? void 0 : _a.requestTransformer) ||
(0, exports.createSnakeRequestTransformer)(options)
], tslib_1.__read((Array.isArray(axios.defaults.transformRequest)
? axios.defaults.transformRequest
: axios.defaults.transformRequest !== undefined
? [axios.defaults.transformRequest]
: [])), false);
axios.defaults.transformResponse = tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read((Array.isArray(axios.defaults.transformResponse)
? axios.defaults.transformResponse
: axios.defaults.transformResponse !== undefined
? [axios.defaults.transformResponse]
: [])), false), [
((_b = options === null || options === void 0 ? void 0 : options.caseMiddleware) === null || _b === void 0 ? void 0 : _b.responseTransformer) ||
(0, exports.createCamelResponseTransformer)(options),
], false);
axios.interceptors.request.use(((_c = options === null || options === void 0 ? void 0 : options.caseMiddleware) === null || _c === void 0 ? void 0 : _c.requestInterceptor) ||
(0, exports.createSnakeParamsInterceptor)(options));
return axios;
};
exports.applyCaseMiddleware = applyCaseMiddleware;