core/selectors/manifest.selector.ts

core/selectors/manifest.selector.ts is a file in Project Scripts. 22 lines of code and 5 definitions.

import { WILDCARD } from "#configuration/constants/closure.constants";
import { isRecord } from "@banes-lab/build-scripts/core/selectors/base.selector.ts";

export const stringAt = function stringAt(value: unknown, key: string): string {
    const found = isRecord(value) ? value[key] : undefined;
    return typeof found === "string" ? found : "";
};

export const stringRecordAt = function stringRecordAt(value: unknown, key: string): Readonly<Record<string, string>> {
    const nested = isRecord(value) ? value[key] : undefined;
    if (!isRecord(nested)) {
        return {};
    }
    return Object.fromEntries(
        Object.entries(nested).flatMap(([name, target]) => (typeof target === "string" ? [[name, target]] : [])),
    );
};

export const exportPatternsOf = function exportPatternsOf(manifest: unknown): readonly (readonly [string, string])[] {
    return Object.entries(stringRecordAt(manifest, "exports"))
        .flatMap(([key, target]): [string, string][] =>
            key.endsWith(WILDCARD) ? [[key.slice(0, -WILDCARD.length), target]] : [],
        )
        .toSorted(([left], [right]) => right.length - left.length);
};