Создание типа для url
Давайте создадим простой тип для кодирования URL. В качестве примера, мы будем использовать URL с протоколом http
или https
.
type TURL = `https://${string}` | `http://${string}`;const urlRegEx = /^https?:\/\//;
export const url = customType<TURL>({ encode(value, buffer) { // Кодируем протокол http - 1, https - 2 buffer.writeUint8(value.startsWith("https") ? 2 : 1); // Кодируем остальной url buffer.writeString(value.slice(value.indexOf("://") + 3)); }, decode(buffer) { const protocol = buffer.readUint8(); const url = buffer.readString(); return `${protocol === 2 ? "https" : "http"}://${url}`; }, guard(data): data is TURL { if (typeof data !== "string") return false; if (!urlRegEx.test(data)) return false; return true; }, name: "url",});
Теперь мы можем использовать этот тип в схеме данных:
import { Serializer, t } from "encodexx";import { url } from "./url.ts";
const serializer = new Serializer([url]);