feat: add parse-header-link helper
This commit is contained in:
48
packages/backend/src/helpers/parse-header-link.ts
Normal file
48
packages/backend/src/helpers/parse-header-link.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user