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)]);
};