{"id":16189135,"url":"https://github.com/jhermsmeier/node-http-link-header","last_synced_at":"2025-07-08T02:36:40.250Z","repository":{"id":40063939,"uuid":"70104357","full_name":"jhermsmeier/node-http-link-header","owner":"jhermsmeier","description":"Parse \u0026 format HTTP link headers according to RFC 8288","archived":false,"fork":false,"pushed_at":"2024-03-16T19:17:56.000Z","size":180,"stargazers_count":39,"open_issues_count":3,"forks_count":12,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-13T00:10:32.180Z","etag":null,"topics":["http","http-header","http-link","parser","rfc-8288"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jhermsmeier.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-05T22:26:38.000Z","updated_at":"2024-10-13T04:48:58.000Z","dependencies_parsed_at":"2024-03-16T22:09:31.863Z","dependency_job_id":"3b52828a-ba86-4006-bb7a-22209bb8d7c8","html_url":"https://github.com/jhermsmeier/node-http-link-header","commit_stats":{"total_commits":89,"total_committers":8,"mean_commits":11.125,"dds":0.101123595505618,"last_synced_commit":"e5a4865982febd8c58307d51920adb15e2227719"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermsmeier%2Fnode-http-link-header","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermsmeier%2Fnode-http-link-header/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermsmeier%2Fnode-http-link-header/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermsmeier%2Fnode-http-link-header/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jhermsmeier","download_url":"https://codeload.github.com/jhermsmeier/node-http-link-header/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234764141,"owners_count":18882978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["http","http-header","http-link","parser","rfc-8288"],"created_at":"2024-10-10T07:34:15.686Z","updated_at":"2025-01-20T09:06:07.400Z","avatar_url":"https://github.com/jhermsmeier.png","language":"JavaScript","readme":"# HTTP Link Header\n[![npm](https://img.shields.io/npm/v/http-link-header.svg?style=flat-square)](https://npmjs.com/http-link-header)\n[![npm license](https://img.shields.io/npm/l/http-link-header.svg?style=flat-square)](https://npmjs.com/http-link-header)\n[![npm downloads](https://img.shields.io/npm/dm/http-link-header.svg?style=flat-square)](https://npmjs.com/http-link-header)\n\nParse \u0026 format HTTP link headers according to [RFC 8288]\n\n[RFC 8288]: https://tools.ietf.org/html/rfc8288\n\n## Install via [npm](https://npmjs.com)\n\n```sh\n$ npm install --save http-link-header\n```\n\n## Deviations from the RFC\n\n### Link Target\n\nWhile [RFC 8288, Section 3.1](https://tools.ietf.org/html/rfc8288#section-3.1) states that relative URI-References\nMUST be resolved by the parsers – this library DOES NOT.\nThis is due to the parser not having an input for the absolute or canonical URI of the related document.\nCurrently there are no plans to add this, and it is left to the user whether or not to resolve relative URIs.\n\n## Usage\n\n```js\nvar LinkHeader = require( 'http-link-header' )\n```\n\n### Parsing a HTTP link header\n\n```js\nvar link = LinkHeader.parse(\n  '\u003cexample.com\u003e; rel=\"example\"; title=\"Example Website\", ' +\n  '\u003cexample-01.com\u003e; rel=\"alternate\"; title=\"Alternate Example Domain\"'\n)\n\n\u003e Link {\n  refs: [\n    { uri: 'example.com', rel: 'example', title: 'Example Website' },\n    { uri: 'example-01.com', rel: 'alternate', title: 'Alternate Example Domain' },\n  ]\n}\n```\n\n### Checking whether it has a reference with a given attribute \u0026 value\n\n```js\nlink.has( 'rel', 'alternate' )\n\u003e true\n```\n\n### Retrieving a reference with a given attribute \u0026 value\n\n```js\nlink.get( 'rel', 'alternate' )\n\u003e [\n  { uri: 'example-01.com', rel: 'alternate', title: 'Alternate Example Domain' }\n]\n```\n```js\n// Shorthand for `rel` attributes\nlink.rel( 'alternate' )\n\u003e [\n  { uri: 'example-01.com', rel: 'alternate', title: 'Alternate Example Domain' }\n]\n```\n\n### Setting references\n\n```js\nlink.set({ uri: 'https://example.com/next', rel: 'next' })\n\u003e Link {\n  refs: [\n    { uri: 'example.com', rel: 'example', title: 'Example Website' },\n    { uri: 'example-01.com', rel: 'alternate', title: 'Alternate Example Domain' },\n    { rel: 'next', uri: 'https://example.com/next' }\n  ]\n}\n```\n\n### Setting a unique reference\n\n```js\nlink.setUnique({\n  uri: 'https://example.com/image.png',\n  rel: 'preload',\n  as: 'image',\n  type: 'image/png'\n})\n\u003e Link {\n  refs: [\n    { uri: 'https://example.com/image.png', rel: 'preload', as: 'image', type: 'image/png' }\n  ]\n}\n\nlink.setUnique({\n  uri: 'https://example.com/image.png',\n  rel: 'preload',\n  as: 'image',\n  type: 'image/png'\n})\n\u003e Link {\n  refs: [\n    { uri: 'https://example.com/image.png', rel: 'preload', as: 'image', type: 'image/png' }\n  ]\n}\n```\n\n### Parsing multiple headers\n\n```js\nvar link = new LinkHeader()\n\nlink.parse( '\u003cexample.com\u003e; rel=\"example\"; title=\"Example Website\"' )\n\u003e Link {\n  refs: [\n    { uri: 'example.com', rel: 'example', title: 'Example Website' },\n  ]\n}\n\nlink.parse( '\u003cexample-01.com\u003e; rel=\"alternate\"; title=\"Alternate Example Domain\"' )\n\u003e Link {\n  refs: [\n    { uri: 'example.com', rel: 'example', title: 'Example Website' },\n    { uri: 'example-01.com', rel: 'alternate', title: 'Alternate Example Domain' },\n  ]\n}\n\nlink.parse( '\u003cexample-02.com\u003e; rel=\"alternate\"; title=\"Second Alternate Example Domain\"' )\n\u003e Link {\n  refs: [\n    { uri: 'example.com', rel: 'example', title: 'Example Website' },\n    { uri: 'example-01.com', rel: 'alternate', title: 'Alternate Example Domain' },\n    { uri: 'example-02.com', rel: 'alternate', title: 'Second Alternate Example Domain' },\n  ]\n}\n```\n\n### Handling extended attributes\n\n```js\nlink.parse( '\u003c/extended-attr-example\u003e; rel=start; title*=UTF-8\\'en\\'%E2%91%A0%E2%93%AB%E2%85%93%E3%8F%A8%E2%99%B3%F0%9D%84%9E%CE%BB' )\n```\n\n```js\n\u003e Link {\n  refs: [\n    { uri: '/extended-attr-example', rel: 'start', 'title*': { language: 'en', encoding: null, value: '①⓫⅓㏨♳𝄞λ' } }\n  ]\n}\n```\n\n### Stringifying to HTTP header format\n\n```js\nlink.toString()\n\u003e '\u003cexample.com\u003e; rel=example; title=\"Example Website\", \u003cexample-01.com\u003e; rel=alternate; title=\"Alternate Example Domain\"'\n```\n\n## Speed\n\n```\n$ npm run benchmark\n```\n\n```\n# http-link-header .parse() ⨉ 1000000\nok ~1.29 s (1 s + 289696759 ns)\n\n# http-link-header #toString() ⨉ 1000000\nok ~554 ms (0 s + 553782657 ns)\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermsmeier%2Fnode-http-link-header","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhermsmeier%2Fnode-http-link-header","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermsmeier%2Fnode-http-link-header/lists"}