lightrail-client
Version:
A Javascript and Typescript client for Lightrail
63 lines (62 loc) • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatResponse = exports.isSuccessStatus = exports.formatFilterParams = exports.validateRequiredParams = void 0;
const parseLinkHeader = require("parse-link-header");
exports.validateRequiredParams = (keys, params) => keys.every(key => {
if (params[key] === undefined || params[key] === null) {
throw new Error("params." + key + " not set");
}
return !!params[key];
});
/**
* Flattens one level deep and formats as key.subkey ie: {key:{subkey:4}} => {key.subkey:4}
* @param {object} params
* @returns {object}
*/
exports.formatFilterParams = (params) => {
const formattedParams = {};
if (params) {
for (const key in params) {
if (typeof params[key] !== "object") {
formattedParams[key] = params[key];
}
else {
for (const filterKey in params[key]) {
if (params[key][filterKey] !== undefined) {
formattedParams[key + "." + filterKey] = params[key][filterKey];
}
}
}
}
}
return formattedParams;
};
function isSuccessStatus(status) {
return status >= 200 && status < 300;
}
exports.isSuccessStatus = isSuccessStatus;
/**
* Formats a response object into a standardized/predictable response, should be used to format all responses
* @param {request.Response} response
* @returns {LightrailResponse<T> | PaginatedLightrailResponse<T>}
*/
function formatResponse(response) {
const lr = {
body: (response.status !== 404) ? response.body : null,
text: response.text,
status: response.status
};
if (response.header) {
if (response.header["max-limit"] !== undefined) {
lr.maxLimit = parseInt(response.header["max-limit"]);
}
if (response.header["limit"] !== undefined) {
lr.limit = parseInt(response.header.limit);
}
if (response.header["link"] !== undefined) {
lr.links = parseLinkHeader(response.header.link);
}
}
return lr;
}
exports.formatResponse = formatResponse;