core/converters/catalog.converter.ts

core/converters/catalog.converter.ts is a file in Bane's Lab Deploy. 51 lines of code and 22 definitions.

import type { CatalogRow } from "#types/deployment.types";

const ROOT_LISTS: readonly string[] = ["collections", "documents", "pages", "queries", "trees"];
const JSON_COLUMN = "json";
const MARKDOWN_COLUMN = "markdown";
const BYTES_COLUMN = "bytes";
const FINGERPRINT_COLUMN = "fingerprint";
const REF_COLUMN = "ref";
const TITLE_COLUMN = "title";

const fieldOf = function fieldOf(value: unknown, key: string): unknown {
    return typeof value === "object" && value !== null && key in value ? Reflect.get(value, key) : undefined;
};

const textOf = function textOf(value: unknown): string | null {
    return typeof value === "string" ? value : null;
};

const listOf = function listOf(value: unknown): readonly unknown[] {
    return Array.isArray(value) ? value : [];
};

const rowFrom = function rowFrom(read: (column: string) => unknown): CatalogRow | null {
    const json = textOf(read(JSON_COLUMN));
    const bytes = read(BYTES_COLUMN);
    const fingerprint = textOf(read(FINGERPRINT_COLUMN));
    if (json === null || typeof bytes !== "number" || fingerprint === null) {
        return null;
    }
    return {
        bytes,
        fingerprint,
        json,
        markdown: textOf(read(MARKDOWN_COLUMN)),
        ref: textOf(read(REF_COLUMN)),
        title: textOf(read(TITLE_COLUMN)),
    };
};

export const rootRows = function rootRows(root: unknown): readonly CatalogRow[] {
    return ROOT_LISTS.flatMap((key) => {
        const [first] = listOf(fieldOf(root, key));
        const row = rowFrom((column) => fieldOf(first, column));
        return row === null ? [] : [row];
    });
};

export const shardAddresses = function shardAddresses(head: unknown): readonly string[] {
    return listOf(fieldOf(head, "shards")).flatMap((shard) => {
        const address = textOf(fieldOf(shard, JSON_COLUMN));
        return address === null ? [] : [address];
    });
};

export const shardRow = function shardRow(shard: unknown): CatalogRow | null {
    const columns = listOf(fieldOf(shard, "columns"));
    const [cells] = listOf(fieldOf(shard, "rows"));
    return rowFrom((column) => listOf(cells)[columns.indexOf(column)]);
};