Files
SnowLuma/.pnpm-store/v11/files/a3/cb654b41e71095ff5021d84b6fb00b0b20689c7c2b60cd52e58bfc10c494ec1c10d4c05ddab895c218a6634c2d0ee519a9f4836ec669a518b75d108f59eae1
TanTan 2a69b23b47
Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

50 lines
1.1 KiB
Plaintext

import type { SerovalNode } from 'seroval';
import { createPlugin } from 'seroval';
function convertHeaders(instance: Headers): HeadersInit {
const items: HeadersInit = [];
// biome-ignore lint/complexity/noForEach: <explanation>
instance.forEach((value, key) => {
items.push([key, value]);
});
return items;
}
const HeadersPlugin = /* @__PURE__ */ createPlugin<
Headers,
{ value: SerovalNode }
>({
tag: 'seroval-plugins/web/Headers',
test(value) {
if (typeof Headers === 'undefined') {
return false;
}
return value instanceof Headers;
},
parse: {
sync(value, ctx) {
return {
value: ctx.parse(convertHeaders(value)),
};
},
async async(value, ctx) {
return {
value: await ctx.parse(convertHeaders(value)),
};
},
stream(value, ctx) {
return {
value: ctx.parse(convertHeaders(value)),
};
},
},
serialize(node, ctx) {
return 'new Headers(' + ctx.serialize(node.value) + ')';
},
deserialize(node, ctx) {
return new Headers(ctx.deserialize(node.value) as HeadersInit);
},
});
export default HeadersPlugin;