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