core/resolvers/layer.resolver.ts

core/resolvers/layer.resolver.ts is a file in GovLab Quality. 27 lines of code and 6 definitions.

import type { LayerOptions, LayerSegment } from "#types/layer.types";

const isLayerOptions = function isLayerOptions(value: unknown): value is LayerOptions {
    return typeof value === "object" && value !== null;
};

export const asLayerOptions = function asLayerOptions(value?: unknown): LayerOptions {
    return isLayerOptions(value) ? value : {};
};

const matchSegment = function matchSegment(normalized: string, segments: LayerSegment[]): string | null {
    for (const { layer, needle } of segments) {
        if (normalized.includes(needle)) {
            return layer;
        }
    }
    return null;
};

const tokensLayer = function tokensLayer(normalized: string, tokensFile: string | undefined): string {
    return typeof tokensFile === "string" && tokensFile.length > 0 && normalized.endsWith(tokensFile)
        ? "tokens"
        : "unknown";
};

export const layerOf = function layerOf(filepath: string | undefined, opts?: LayerOptions): string {
    if (typeof filepath !== "string" || filepath.length === 0) {
        return "unknown";
    }
    const normalized = filepath.split("\\").join("/");
    return matchSegment(normalized, opts?.segments ?? []) ?? tokensLayer(normalized, opts?.tokensFile);
};