UNPKG

@orbit/jsonapi

Version:

JSON:API support for Orbit.

69 lines 8 kB
"use strict"; 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