UNPKG

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