import { addExtension } from "msgpackr" import { BufferedBlob, BufferedFile, BufferedRequest, BufferedResponse, } from "./buffered" import { EXT_CODES } from "./type-codes" addExtension({ Class: BufferedRequest, type: EXT_CODES.REQUEST, write(instance: BufferedRequest) { return [instance.url, instance.method, instance.headers, instance.body] }, read([url, method, headers, body]: [ string, string, Record, Uint8Array | null, ]) { return new BufferedRequest(url, method, headers, body).toRequest() }, }) addExtension({ Class: BufferedResponse, type: EXT_CODES.RESPONSE, write(instance: BufferedResponse) { return [ instance.status, instance.statusText, instance.headers, instance.body, ] }, read([status, statusText, headers, body]: [ number, string, Record, Uint8Array | null, ]) { return new BufferedResponse(status, statusText, headers, body).toResponse() }, }) addExtension({ Class: BufferedBlob, type: EXT_CODES.BLOB, write(instance: BufferedBlob) { return [instance.type, instance.bytes] }, read([type, bytes]: [string, Uint8Array]) { return new BufferedBlob(type, bytes).toBlob() }, }) addExtension({ Class: BufferedFile, type: EXT_CODES.FILE, write(instance: BufferedFile) { return [instance.name, instance.type, instance.lastModified, instance.bytes] }, read([name, type, lastModified, bytes]: [ string, string, number, Uint8Array, ]) { return new BufferedFile(name, type, lastModified, bytes).toFile() }, }) addExtension({ Class: Headers, type: EXT_CODES.HEADERS, write: (h: Headers) => Object.fromEntries(h), read: (entries: Record) => new Headers(entries), }) addExtension({ Class: URL, type: EXT_CODES.URL, write: (u: URL) => u.href, read: (href: string) => new URL(href), }) addExtension({ Class: URLSearchParams, type: EXT_CODES.URL_SEARCH_PARAMS, write: (p: URLSearchParams) => [...p.entries()], read: (entries: [string, string][]) => new URLSearchParams(entries), })