Skip to content

developer-couch/header-parsers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HTTP Header Parsers Collection

A collection of TypeScript header parsers, compliant with RFC 9110: HTTP Semantics.

Supported Header Parsers

All parsers receive a string (the header value) and output either an object representing the header value, or null if the syntax is invalid.

Date

function parseDate(input: string): Date | null;

Example

parseDate("Sun, 06 Nov 1994 08:49:37 GMT");
// [Out]: Date(1994-11-06T08:49:37.000Z)

Host

interface Host {
  host: string;
  port: number | null;
}

function parseHost(input: string): Host | null;

Example

parseHost("example.com:8080");
// [Out]: { host: "example.com", port: 8080 }

Content-Type

interface MediaType {
  type: string;
  subtype: string;
  parameters: Record<string, string> | null;
}

function parseContentType(input: string): MediaType | null;

Example

parseContentType("application/json; charset=utf-8");
// [Out]: { type: "application", subtype: "json", parameters: { charset: "utf-8" } }

Content-Encoding

function parseContentEncoding(input: string): string[] | null;

Example

parseContentEncoding("compress, deflate, gzip");
// [Out]: ["compress", "deflate", "gzip"]

Content-Length

function parseContentLength(input: string): number | null;

Example

parseContentLength("28374");
// [Out]: 28374

Authorization

interface Credentials {
  scheme: string;
  params: Record<string, string> | string | null;
}

function parseAuthorization(input: string): Credentials | null;

Example

parseAuthorization('AuthScheme param1=value, param2="quoted \\\"value\\\"\"');
// [Out]: { scheme: "AuthScheme", params: { param1: "value", param2: "quoted \"value\"" } }

Range

interface IntRange {
  type: "int";
  firstPos: number;
  lastPos: number | null;
}

interface SuffixRange {
  type: "suffix";
  length: number;
}

interface OtherRange {
  type: "other";
  spec: string;
}

type RangeSpec = IntRange | SuffixRange | OtherRange;

interface RangesSpecifier {
  unit: string;
  set: RangeSpec[];
}

function parseRange(input: string): null;

Example

parseRange("bytes=0-100, -100");
// [Out]: {
//   unit: "bytes",
//   set: [
//     { type: "int", startPos: 0, endPos: 100 },
//     { type: "suffix", length: 100 }
//   ]
// }

About

A collection of header parsers, as defined by the HTTP Semantics RFC

Resources

Stars

Watchers

Forks