0.1.3•Updated 6 months ago
import meta from "@infinity-beyond/deno.json" with { type: "json" };
const Default = new Headers({
'X-Powered-By': `Infinity-Beyond (${meta.version})`
});
type HeaderLike = Headers | Record<string, string>;
/**
* Returns a new Headers instance which combines all header-like entries into one
*
* *Does not mutate any of the input values*. To mutate, us `apply` instead.
*
* @param header_entries All headers to be combined
* @returns
*/
const concat = (...header_entries: (HeaderLike | undefined)[]) => {
const initial = new Headers();
for(const header of header_entries) {
const entries = (header instanceof Headers) ? header.entries() : Object.entries<string>(header || {});
for(const [key, value] of entries) {
initial.set(key, value);
}
}
return initial;
};
/**
* Combines all header-like entries into the first passed Headers entry.
*
* ***MUTATES** the first input value*. To avoid mutation, us `concat` instead.
*
* @param initial The initial Headers entry
* @param header_entries All other headers to be combined into the initial Headers entry
* @returns
*/
const apply = (initial: Headers, ...header_entries: (HeaderLike)[]) => {
for(const header of header_entries) {
const entries = (header instanceof Headers) ? header.entries() : Object.entries<string>(header);
for(const [key, value] of entries) {
initial.append(key, value);
}
}
return initial;
}
const InfinityHeaders = {
Default,
concat,
apply,
}
export default InfinityHeaders;