ts-retrofit
Version:
A declarative and axios based retrofit implementation for JavaScript and TypeScript.
139 lines (138 loc) • 5.06 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataResolverFactory = exports.TextXmlResolver = exports.JsonResolver = exports.MultiPartResolver = exports.FormUrlencodedResolver = exports.BaseDataResolver = void 0;
const qs = __importStar(require("qs"));
const form_data_1 = __importDefault(require("form-data"));
const constants_1 = require("./constants");
class BaseDataResolver {
resolve(headers, data) {
throw new Error("Can not call this method in BaseDataResolver.");
}
}
exports.BaseDataResolver = BaseDataResolver;
class FormUrlencodedResolver extends BaseDataResolver {
constructor() {
super();
}
resolve(headers, data) {
const deepStringify = (obj) => {
const res = {};
for (const key in obj) {
if (!obj.hasOwnProperty(key)) {
continue;
}
if (typeof obj[key] === "object") {
res[key] = JSON.stringify(obj[key]);
}
else {
res[key] = obj[key];
}
}
return qs.stringify(res);
};
return deepStringify(data);
}
}
exports.FormUrlencodedResolver = FormUrlencodedResolver;
class MultiPartResolver extends BaseDataResolver {
constructor() {
super();
}
resolve(headers, data) {
const formData = new form_data_1.default();
for (const key in data) {
if (Array.isArray(data[key])) {
for (const element of data[key]) {
const options = this.getFormDataAppendOptions(element);
formData.append(key, element.value, options);
}
}
else if (Array.isArray(data[key].value)) {
for (const element of data[key].value) {
const options = this.getFormDataAppendOptions(data[key]);
formData.append(key, element, options);
}
}
else {
const options = this.getFormDataAppendOptions(data[key]);
formData.append(key, data[key].value, options);
}
}
return formData;
}
getFormDataAppendOptions(partDescriptor) {
const options = {};
Object.keys(partDescriptor).forEach((key) => {
if (key !== "value") {
options[key] = partDescriptor[key];
}
});
return options;
}
}
exports.MultiPartResolver = MultiPartResolver;
class JsonResolver extends BaseDataResolver {
constructor() {
super();
}
resolve(headers, data) {
return data;
}
}
exports.JsonResolver = JsonResolver;
class TextXmlResolver extends BaseDataResolver {
constructor() {
super();
}
resolve(headers, data) {
return data;
}
}
exports.TextXmlResolver = TextXmlResolver;
const dataResolverMap = new Map();
dataResolverMap.set("application/x-www-form-urlencoded", FormUrlencodedResolver);
dataResolverMap.set("multipart/form-data", MultiPartResolver);
dataResolverMap.set("application/json", JsonResolver);
dataResolverMap.set("text/xml", TextXmlResolver);
class DataResolverFactory {
createDataResolver(contentType) {
const contentTypeLowCased = contentType.toLowerCase();
for (const dataContentType of constants_1.DATA_CONTENT_TYPES) {
if (contentTypeLowCased.includes(dataContentType)) {
const resolverCls = this._getDataResolverCls(dataContentType);
return new resolverCls();
}
}
return new (this._getDataResolverCls("application/json"))();
}
_getDataResolverCls(dataContentType) {
return dataResolverMap.get(dataContentType) || JsonResolver;
}
}
exports.DataResolverFactory = DataResolverFactory;