Skip to main content
On this page

Создание типа для url

Давайте создадим простой тип для кодирования URL. В качестве примера, мы будем использовать URL с протоколом http или https.

url.ts
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",
});

Теперь мы можем использовать этот тип в схеме данных:

data.ts
import { Serializer, t } from "encodexx";
import { url } from "./url.ts";
const serializer = new Serializer([url]);