core/loaders/config.loader.ts

core/loaders/config.loader.ts is a file in GovLab Stats. 35 lines of code and 6 definitions.

import {
    BASE_CONFIG,
    MEMBER_CONFIG,
    STRICT_FLAGS,
    UNSPECIFIED_TARGET,
} from "#configuration/constants/config.constants";
import type { MemberConfig, TypescriptStats } from "#types/config.types";
import { field, stringField } from "#core/selectors/field.selector";
import { existsSync } from "node:fs";
import { isRecord } from "#core/predicates/record.predicate";
import path from "node:path";
import { posixOf } from "#core/selectors/source.selector";
import { readJson } from "#core/loaders/data.loader";
import { workspaceMembers } from "#core/resolvers/package.resolver";

const memberConfigOf = function memberConfigOf(root: string, abs: string): MemberConfig {
    const member = posixOf(path.relative(root, abs));
    const file = path.join(abs, MEMBER_CONFIG);
    if (!existsSync(file)) {
        return { extendsBase: false, member, present: false };
    }
    return { extendsBase: stringField(readJson(file), "extends").includes(BASE_CONFIG), member, present: true };
};

export const collectTypescript = function collectTypescript(root: string): TypescriptStats {
    const members = workspaceMembers(root).map((abs) => memberConfigOf(root, abs));
    const options = field(readJson(path.join(root, BASE_CONFIG)), "compilerOptions");
    return {
        baseOptions: isRecord(options) ? Object.keys(options).length : 0,
        covered: members.filter((entry) => entry.present).length,
        members,
        strictFlags: STRICT_FLAGS.map((flag): [string, boolean] => [flag, field(options, flag) === true]),
        target: stringField(options, "target") || UNSPECIFIED_TARGET,
        total: members.length,
        uncovered: members.filter((entry) => !entry.present).map((entry) => entry.member),
    };
};