pluto-http-client
Version:
HTTP client for NodeJS. Inspired in the Java JAX-RS spec so you can expect excellence, versatility and extensibility.
100 lines (99 loc) • 3.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FormUrlEncoded = exports.BinaryEntity = exports.JsonEntity = exports.StringEntity = exports.Entity = void 0;
const buffer_1 = require("buffer");
const media_type_1 = require("../core/media-type");
const collections_1 = require("../utils/collections");
class Entity {
constructor(_mediaType) {
this._mediaType = _mediaType;
}
static json(obj) {
return new JsonEntity(obj);
}
static form(obj) {
return new FormUrlEncoded(obj);
}
marshal() {
return Promise.reject(new Error("Not implemented"));
}
get mediaType() {
return this._mediaType;
}
}
exports.Entity = Entity;
class StringEntity extends Entity {
constructor(_data = "") {
super(media_type_1.MediaType.ANY_TEXT_TYPE);
this._data = _data;
}
marshal() {
return Promise.resolve(buffer_1.Buffer.from(this._data));
}
unmarshal(bytes, mediaType) {
return Promise.resolve(bytes.toString("utf-8"));
}
}
exports.StringEntity = StringEntity;
class JsonEntity extends Entity {
constructor(_data = {}) {
super(media_type_1.MediaType.APPLICATION_JSON_TYPE);
this._data = _data;
}
marshal() {
try {
return Promise.resolve(buffer_1.Buffer.from(JSON.stringify(this._data)));
}
catch (e) {
return Promise.reject(e);
}
}
unmarshal(bytes, mediaType) {
if (this.mediaType.isCompatible(mediaType)) {
try {
return Promise.resolve(JSON.parse(bytes.toString('utf-8')));
}
catch (e) {
return Promise.reject(e);
}
}
return Promise.reject(new Error(`Incompatible Media-Type reader: Expected: ${this.mediaType.toString()} response with: ${mediaType === null || mediaType === void 0 ? void 0 : mediaType.toString()}`));
}
}
exports.JsonEntity = JsonEntity;
class BinaryEntity extends Entity {
constructor(_data = new Uint8Array([])) {
super(media_type_1.MediaType.APPLICATION_OCTET_STREAM_TYPE);
this._data = _data;
}
marshal() {
return Promise.resolve(this._data);
}
unmarshal(bytes, mediaType) {
return Promise.resolve(bytes);
}
}
exports.BinaryEntity = BinaryEntity;
class FormUrlEncoded extends Entity {
constructor(_entity) {
super(media_type_1.MediaType.APPLICATION_FORM_URLENCODED_TYPE);
this._entity = _entity;
}
marshal() {
let body;
if (this._entity instanceof collections_1.PrimitiveMultiValueMap) {
body = encodeURI(Object.entries(Object.fromEntries(this._entity.entries())).map(([k, values]) => {
const r = [];
for (const value of values) {
r.push(`${k}=${value}`);
}
return r.join("&");
}).join("&"));
}
else {
body = encodeURI(Object.entries(this._entity).map(([k, v]) => `${k}=${v}`).join("&"));
}
return Promise.resolve(buffer_1.Buffer.from(body));
}
}
exports.FormUrlEncoded = FormUrlEncoded;