# core/adapters/style.adapter.ts

> 22 lines of code and 3 definitions.

Tree: Project Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/scripts#file-scripts-core-adapters-style-adapter-ts
Source text: https://banes-lab.com/source/scripts/core/adapters/style.adapter.ts.txt

Listed in [core/adapters](https://banes-lab.com/api/source/scripts/core/adapters.md), after [core/adapters/server.adapter.ts](https://banes-lab.com/source/scripts/core/adapters/server.adapter.ts.md) and before [core/adapters/viewport.adapter.ts](https://banes-lab.com/source/scripts/core/adapters/viewport.adapter.ts.md).

## Definitions

- `unusedSelectors` (lexical_declaration, line 9, exported)
- `member` (lexical_declaration, line 10, exported)
- `results` (lexical_declaration, line 11, exported)

## Contained in

- [core/adapters](https://banes-lab.com/anatomy/scripts/folder-scripts-core-adapters.md)

## Source

```typescript
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,
        })),
    );
};
```
