core/selectors/catalog.selector.ts

core/selectors/catalog.selector.ts is a file in Bane's Lab Build Scripts. 46 lines of code and 7 definitions.

import { fileOfAddress, localAddress } from "#core/resolvers/catalog.resolver";
import type { ManifestRow } from "#types/catalog.types";
import { isRecord } from "#core/selectors/base.selector";

export const stringsIn = function stringsIn(value: unknown): string[] {
    if (typeof value === "string") {
        return [value];
    }
    if (Array.isArray(value)) {
        return value.flatMap(stringsIn);
    }
    return isRecord(value) ? Object.values(value).flatMap(stringsIn) : [];
};

export const rowsOf = function rowsOf(raw: string): readonly ManifestRow[] {
    const parsed: unknown = JSON.parse(raw);
    if (!isRecord(parsed) || !Array.isArray(parsed["columns"]) || !Array.isArray(parsed["rows"])) {
        return [];
    }
    const columns: readonly unknown[] = parsed["columns"];
    const at = (name: string): number => columns.indexOf(name);
    return parsed["rows"]
        .filter(Array.isArray)
        .map((row: readonly unknown[]) => ({
            bytes: Number(row[at("bytes")]),
            fingerprint: String(row[at("fingerprint")]),
            json: String(row[at("json")]),
            markdown: typeof row[at("markdown")] === "string" ? String(row[at("markdown")]) : null,
            ref: String(row[at("ref")]),
        }));
};

export const columnValues = function columnValues(raw: string, column: string): readonly unknown[] {
    const parsed: unknown = JSON.parse(raw);
    if (!isRecord(parsed) || !Array.isArray(parsed["columns"]) || !Array.isArray(parsed["rows"])) {
        return [];
    }
    const at = parsed["columns"].indexOf(column);
    return at === -1 ? [] : parsed["rows"].filter(Array.isArray).map((row: readonly unknown[]) => row[at]);
};

export const shardFilesOf = function shardFilesOf(raw: string, site: string): readonly string[] {
    const parsed: unknown = JSON.parse(raw);
    if (!isRecord(parsed) || !Array.isArray(parsed["shards"])) {
        return [];
    }
    return parsed["shards"].flatMap((shard: unknown) =>
        isRecord(shard) && typeof shard["json"] === "string" ? [fileOfAddress(localAddress(site, shard["json"]))] : [],
    );
};