# configuration/constants/filter.constants.ts

> 70 lines of code and 5 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-constants-filter-constants-ts
Source text: https://banes-lab.com/source/build-scripts/configuration/constants/filter.constants.ts.txt

Listed in [configuration/constants](https://banes-lab.com/api/source/build-scripts/configuration/constants.md), after [configuration/constants/exclusion.constants.ts](https://banes-lab.com/source/build-scripts/configuration/constants/exclusion.constants.ts.md) and before [configuration/constants/graph.constants.ts](https://banes-lab.com/source/build-scripts/configuration/constants/graph.constants.ts.md).

## Definitions

- `TRUE` (lexical_declaration, line 4)
- `FALSE` (lexical_declaration, line 5)
- `idsOf` (lexical_declaration, line 7)
- `KIND_FIELD` (lexical_declaration, line 11, exported)
- `FACET_FIELDS` (lexical_declaration, line 13, exported)

## Contained in

- [configuration/constants](https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-configuration-constants.md)

## Source

```typescript
import { ALGO_FACE, ARCH_FACE, LEX_FACE } from "@govlab/constants";
import type { FacetField } from "#types/filter.types";

const TRUE = "true";
const FALSE = "false";

const idsOf = function idsOf(records: readonly { readonly id: string }[]): readonly string[] {
    return records.map((record) => record.id);
};

export const KIND_FIELD = "kind";

export const FACET_FIELDS: readonly FacetField[] = [
    {
        collection: ARCH_FACE,
        field: "type",
        members: (context, value) => idsOf(context.arch.query({ type: value })),
        values: (context) => context.arch.all().map((principle) => principle.type),
    },
    {
        collection: ARCH_FACE,
        field: "category",
        members: (context, value) => idsOf(context.arch.query({ category: value })),
        values: (context) => context.arch.all().map((principle) => principle.category),
    },
    {
        collection: ARCH_FACE,
        field: "severity",
        members: (context, value) => idsOf(context.arch.query({ severity: value })),
        values: (context) => context.arch.all().map((principle) => principle.severity),
    },
    {
        collection: ARCH_FACE,
        field: "scope",
        members: (context, value) => idsOf(context.arch.query({ scope: value })),
        values: (context) => context.arch.all().flatMap((principle) => principle.scope),
    },
    {
        collection: LEX_FACE,
        field: "kind",
        members: (context, value) => idsOf(context.lex.query({ kind: value })),
        values: (context) => context.lex.all().map((term) => term.kind),
    },
    {
        collection: LEX_FACE,
        field: "category",
        members: (context, value) => idsOf(context.lex.query({ category: value })),
        values: (context) => context.lex.all().map((term) => term.category),
    },
    {
        collection: LEX_FACE,
        field: "enforcedBy",
        members: (context, value) => idsOf(context.lex.query({ enforcedBy: value })),
        values: (context) => context.lex.all().flatMap((term) => term.enforcedBy),
    },
    {
        collection: ALGO_FACE,
        field: "domain",
        members: (context, value) => idsOf(context.algo.query({ domain: value })),
        values: (context) => context.algo.all().map((contract) => contract.domain),
    },
    {
        collection: ALGO_FACE,
        field: "force",
        members: (context, value) => idsOf(context.algo.query({ force: value })),
        values: (context) => context.algo.all().flatMap((contract) => contract.force),
    },
    {
        collection: ALGO_FACE,
        field: "meta",
        members: (context, value) => idsOf(context.algo.query({ meta: value === TRUE })),
        values: (context) => context.algo.all().map((contract) => (contract.meta === true ? TRUE : FALSE)),
    },
];
```
