@orbit/jsonapi
Version:
JSON:API support for Orbit.
69 lines • 8 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.appendQueryParams = exports.encodeQueryParams = void 0;
function flattenObjectToParams(obj, path = []) {
let params = [];
Object.keys(obj).forEach((key) => {
if (!obj.hasOwnProperty(key)) {
return;
}
let newPath = path.slice();
newPath.push(key);
if (obj[key] !== null && typeof obj[key] === 'object') {
Array.prototype.push.apply(params, flattenObjectToParams(obj[key], newPath));
}
else {
params.push({
path: newPath,
val: obj[key]
});
}
});
return params;
}
function encodeQueryParams(obj) {
return flattenObjectToParams(obj)
.map((rawParam) => {
let path;
let val = rawParam.val;
if (val === null) {
val = 'null';
}
if (rawParam.path.length === 1) {
path = rawParam.path[0];
}
else {
let firstSegment = rawParam.path[0];
let remainingSegments = rawParam.path.slice(1);
path = firstSegment + '[' + remainingSegments.join('][') + ']';
}
return { path, val };
})
.map((param) => encodeURIComponent(param.path) + '=' + encodeURIComponent(param.val))
.join('&');
}
exports.encodeQueryParams = encodeQueryParams;
function appendQueryParams(url, obj) {
let fullUrl = url;
if (obj.filter && Array.isArray(obj.filter)) {
let filter = obj.filter;
delete obj.filter;
filter.forEach((filterOption) => {
fullUrl = appendQueryParams(fullUrl, { filter: filterOption });
});
}
let queryParams = encodeQueryParams(obj);
if (queryParams.length > 0) {
fullUrl += nextQueryParamIndicator(fullUrl);
fullUrl += queryParams;
}
return fullUrl;
}
exports.appendQueryParams = appendQueryParams;
function nextQueryParamIndicator(url) {
if (url.indexOf('?') === -1) {
return '?';
}
return '&';
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9xdWVyeS1wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBWUEsU0FBUyxxQkFBcUIsQ0FBQyxHQUFRLEVBQUUsT0FBaUIsRUFBRTtJQUMxRCxJQUFJLE1BQU0sR0FBZSxFQUFFLENBQUM7SUFFNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPO1NBQ1I7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3JELEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDeEIsTUFBTSxFQUNOLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDekMsQ0FBQztTQUNIO2FBQU07WUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxPQUFPO2dCQUNiLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQ2QsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxHQUFjO0lBQzlDLE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDO1NBQzlCLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2hCLElBQUksSUFBWSxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFFdkIsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLEdBQUcsR0FBRyxNQUFNLENBQUM7U0FDZDtRQUVELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksaUJBQWlCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxHQUFHLFlBQVksR0FBRyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNoRTtRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQyxDQUFDO1NBQ0QsR0FBRyxDQUNGLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FDdkU7U0FDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDO0FBeEJELDhDQXdCQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxHQUFpQjtJQUM5RCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFFbEIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzNDLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDeEIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRWxCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDbkMsT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxJQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFCLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksV0FBVyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQWxCRCw4Q0FrQkM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLEdBQVc7SUFDMUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzNCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0IH0gZnJvbSAnQG9yYml0L3V0aWxzJztcblxuaW50ZXJmYWNlIFJhd1BhcmFtIHtcbiAgcGF0aDogc3RyaW5nW107XG4gIHZhbDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtIHtcbiAgcGF0aDogc3RyaW5nO1xuICB2YWw6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk9iamVjdFRvUGFyYW1zKG9iajogYW55LCBwYXRoOiBzdHJpbmdbXSA9IFtdKTogUmF3UGFyYW1bXSB7XG4gIGxldCBwYXJhbXM6IFJhd1BhcmFtW10gPSBbXTtcblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbmV3UGF0aCA9IHBhdGguc2xpY2UoKTtcbiAgICBuZXdQYXRoLnB1c2goa2V5KTtcblxuICAgIGlmIChvYmpba2V5XSAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBmbGF0dGVuT2JqZWN0VG9QYXJhbXMob2JqW2tleV0sIG5ld1BhdGgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMucHVzaCh7XG4gICAgICAgIHBhdGg6IG5ld1BhdGgsXG4gICAgICAgIHZhbDogb2JqW2tleV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVF1ZXJ5UGFyYW1zKG9iajogRGljdDxhbnk+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGZsYXR0ZW5PYmplY3RUb1BhcmFtcyhvYmopXG4gICAgLm1hcCgocmF3UGFyYW0pID0+IHtcbiAgICAgIGxldCBwYXRoOiBzdHJpbmc7XG4gICAgICBsZXQgdmFsID0gcmF3UGFyYW0udmFsO1xuXG4gICAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICAgIHZhbCA9ICdudWxsJztcbiAgICAgIH1cblxuICAgICAgaWYgKHJhd1BhcmFtLnBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHBhdGggPSByYXdQYXJhbS5wYXRoWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGZpcnN0U2VnbWVudCA9IHJhd1BhcmFtLnBhdGhbMF07XG4gICAgICAgIGxldCByZW1haW5pbmdTZWdtZW50cyA9IHJhd1BhcmFtLnBhdGguc2xpY2UoMSk7XG4gICAgICAgIHBhdGggPSBmaXJzdFNlZ21lbnQgKyAnWycgKyByZW1haW5pbmdTZWdtZW50cy5qb2luKCddWycpICsgJ10nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgcGF0aCwgdmFsIH07XG4gICAgfSlcbiAgICAubWFwKFxuICAgICAgKHBhcmFtKSA9PlxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQocGFyYW0ucGF0aCkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW0udmFsKVxuICAgIClcbiAgICAuam9pbignJicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kUXVlcnlQYXJhbXModXJsOiBzdHJpbmcsIG9iajogRGljdDxzdHJpbmc+KTogc3RyaW5nIHtcbiAgbGV0IGZ1bGxVcmwgPSB1cmw7XG5cbiAgaWYgKG9iai5maWx0ZXIgJiYgQXJyYXkuaXNBcnJheShvYmouZmlsdGVyKSkge1xuICAgIGxldCBmaWx0ZXIgPSBvYmouZmlsdGVyO1xuICAgIGRlbGV0ZSBvYmouZmlsdGVyO1xuXG4gICAgZmlsdGVyLmZvckVhY2goKGZpbHRlck9wdGlvbjogYW55KSA9PiB7XG4gICAgICBmdWxsVXJsID0gYXBwZW5kUXVlcnlQYXJhbXMoZnVsbFVybCwgeyBmaWx0ZXI6IGZpbHRlck9wdGlvbiB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBxdWVyeVBhcmFtcyA9IGVuY29kZVF1ZXJ5UGFyYW1zKG9iaik7XG4gIGlmIChxdWVyeVBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgZnVsbFVybCArPSBuZXh0UXVlcnlQYXJhbUluZGljYXRvcihmdWxsVXJsKTtcbiAgICBmdWxsVXJsICs9IHF1ZXJ5UGFyYW1zO1xuICB9XG4gIHJldHVybiBmdWxsVXJsO1xufVxuXG5mdW5jdGlvbiBuZXh0UXVlcnlQYXJhbUluZGljYXRvcih1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh1cmwuaW5kZXhPZignPycpID09PSAtMSkge1xuICAgIHJldHVybiAnPyc7XG4gIH1cblxuICByZXR1cm4gJyYnO1xufVxuIl19
;