core/selectors/record.selector.ts

core/selectors/record.selector.ts is a file in GovLab Docs. 20 lines of code and 6 definitions.

import type { Manifest } from "#types/readme.types";
import { isPlainRecord } from "#core/predicates/record.predicate";

export const recordField = function recordField(record: Manifest, key: string): Manifest | null {
    const value = record[key];
    return isPlainRecord(value) ? value : null;
};

export const stringField = function stringField(record: Manifest, key: string): string | null {
    const value = record[key];
    return typeof value === "string" ? value : null;
};

export const arrayField = function arrayField(record: Manifest, key: string): unknown[] {
    const value = record[key];
    return Array.isArray(value) ? value : [];
};

export const stringsOf = function stringsOf(value: unknown): string[] {
    return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === "string") : [];
};

export const isNonEmptyStringArray = function isNonEmptyStringArray(value: unknown): value is string[] {
    return Array.isArray(value) && value.every((entry) => typeof entry === "string" && entry.trim().length > 0);
};