core/adapters/style.adapter.ts

core/adapters/style.adapter.ts is a file in Project Scripts. 22 lines of code and 3 definitions.

import { ALWAYS_REACHED, UNKNOWN_FILE } from "#configuration/constants/style.constants";
import { PurgeCSS } from "purgecss";
import type { UnusedSelector } from "#types/style.types";
import { normalizePath } from "@ssot/govlab/shared/resolvers/anchor.resolver.ts";
import process from "node:process";
import { relative } from "node:path";
import { relativePath } from "@ssot/paths";

export const unusedSelectors = async function unusedSelectors(): Promise<readonly UnusedSelector[]> {
    const member = relativePath("app.member");
    const results = await new PurgeCSS().purge({
        content: [`${member}/**/*.html`, `${member}/**/*.ts`],
        css: [`${member}/**/*.css`],
        rejected: true,
        safelist: { standard: [...ALWAYS_REACHED] },
    });
    return results.flatMap((result) =>
        (result.rejected ?? []).map((selector) => ({
            file: typeof result.file === "string" ? normalizePath(relative(process.cwd(), result.file)) : UNKNOWN_FILE,
            selector,
        })),
    );
};