@web3-storage/parse-link-header
Version:
Parses a link header and returns paging information for each contained link.
1 lines • 4.14 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../index.js"],"sourcesContent":["const MAX_HEADER_LENGTH = 2000\nconst THROW_ON_MAX_HEADER_LENGTH_EXCEEDED = false\n\nfunction hasRel (x) {\n return x && x.rel\n}\n\nfunction intoRels (acc, x) {\n function splitRel (rel) {\n acc[rel] = Object.assign({}, x, { rel: rel })\n }\n\n x.rel.split(/\\s+/).forEach(splitRel)\n\n return acc\n}\n\nfunction createObjects (acc, p) {\n // rel=\"next\" => 1: rel 2: next\n const m = p.match(/\\s*(.+)\\s*=\\s*\"?([^\"]+)\"?/)\n if (m) acc[m[1]] = m[2]\n return acc\n}\n\nfunction parseLink (link) {\n try {\n const m = link.match(/<?([^>]*)>(.*)/)\n const linkUrl = m[1]\n const parts = m[2].split(';')\n const qry = {}\n // The origin is unused but it's required to parse relative URLs\n const url = new URL(linkUrl, 'https://example.com')\n\n for (const [key, value] of url.searchParams) {\n qry[key] = value\n }\n\n parts.shift()\n\n let info = parts.reduce(createObjects, {})\n info = Object.assign({}, qry, info)\n info.url = linkUrl\n return info\n } catch {\n return null\n }\n}\n\nfunction checkHeader (linkHeader, options) {\n if (!linkHeader) return false\n\n options = options || {}\n const maxHeaderLength = options.maxHeaderLength || MAX_HEADER_LENGTH\n const throwOnMaxHeaderLengthExceeded = options.throwOnMaxHeaderLengthExceeded || THROW_ON_MAX_HEADER_LENGTH_EXCEEDED\n\n if (linkHeader.length > maxHeaderLength) {\n if (throwOnMaxHeaderLengthExceeded) {\n throw new Error('Input string too long, it should be under ' + maxHeaderLength + ' characters.')\n } else {\n return false\n }\n }\n return true\n}\n\nfunction parseLinkHeader (linkHeader, options) {\n if (!checkHeader(linkHeader, options)) return null\n\n return linkHeader.split(/,\\s*</)\n .map(parseLink)\n .filter(hasRel)\n .reduce(intoRels, {})\n}\n\nexport { parseLinkHeader }\n"],"names":[],"mappings":"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"}