Files
automatisch/packages/backend/src/helpers/parse-header-link.ts
2022-11-05 23:57:33 +01:00

52 lines
1.1 KiB
TypeScript

type TParameters = {
[key: string]: string;
rel?: string;
};
type TReference = {
uri: string;
parameters: TParameters;
};
type TRel = 'next' | 'prev' | 'first' | 'last';
type TParsedLinkHeader = {
next?: TReference;
prev?: TReference;
first?: TReference;
last?: TReference;
};
export default function parseLinkHeader(link: string): TParsedLinkHeader {
const parsed: TParsedLinkHeader = {};
if (!link) return parsed;
const items = link.split(',');
for (const item of items) {
const [rawUriReference, ...rawLinkParameters] = item.split(';') as [
string,
...string[]
];
const trimmedUriReference = rawUriReference.trim();
const reference = trimmedUriReference.slice(1, -1);
const parameters: TParameters = {};
for (const rawParameter of rawLinkParameters) {
const trimmedRawParameter = rawParameter.trim();
const [key, value] = trimmedRawParameter.split('=');
parameters[key.trim()] = value.slice(1, -1);
}
parsed[parameters.rel as TRel] = {
uri: reference,
parameters,
};
}
return parsed;
}