@vtmap/vtmap-sdk-js
Version:
JS SDK for accessing Viettelmaps APIs
76 lines (66 loc) • 1.61 kB
JavaScript
;
// Like https://github.com/thlorenz/lib/parse-link-header but without any
// additional dependencies.
function parseParam(param) {
var parts = param.match(/\s*(.+)\s*=\s*"?([^"]+)"?/);
if (!parts) return null;
return {
key: parts[1],
value: parts[2]
};
}
function parseLink(link) {
var parts = link.match(/<?([^>]*)>(.*)/);
if (!parts) return null;
var linkUrl = parts[1];
var linkParams = parts[2].split(';');
var rel = null;
var parsedLinkParams = linkParams.reduce(function(result, param) {
var parsed = parseParam(param);
if (!parsed) return result;
if (parsed.key === 'rel') {
if (!rel) {
rel = parsed.value;
}
return result;
}
result[parsed.key] = parsed.value;
return result;
}, {});
if (!rel) return null;
return {
url: linkUrl,
rel: rel,
params: parsedLinkParams
};
}
/**
* Parse a Link header.
*
* @param {string} linkHeader
* @returns {{
* [string]: {
* url: string,
* params: { [string]: string }
* }
* }}
*/
function parseLinkHeader(linkHeader) {
if (!linkHeader) return {};
return linkHeader.split(/,\s*</).reduce(function(result, link) {
var parsed = parseLink(link);
if (!parsed) return result;
// rel value can be multiple whitespace-separated rels.
var splitRel = parsed.rel.split(/\s+/);
splitRel.forEach(function(rel) {
if (!result[rel]) {
result[rel] = {
url: parsed.url,
params: parsed.params
};
}
});
return result;
}, {});
}
module.exports = parseLinkHeader;