# core/selectors/field.selector.ts

> 19 lines of code and 6 definitions.

Tree: GovLab Stats
Language: typescript
Layer: application
Canonical: https://banes-lab.com/anatomy/stats#file-stats-core-selectors-field-selector-ts
Source text: https://banes-lab.com/source/stats/core/selectors/field.selector.ts.txt

Listed in [core/selectors](https://banes-lab.com/api/source/stats/core/selectors.md), after [core/selectors/document.selector.ts](https://banes-lab.com/source/stats/core/selectors/document.selector.ts.md) and before [core/selectors/metric.selector.ts](https://banes-lab.com/source/stats/core/selectors/metric.selector.ts.md).

## Definitions

- `stringField` (lexical_declaration, line 7, exported)
- `numberField` (lexical_declaration, line 12, exported)
- `field` (lexical_declaration, line 3, exported)
- `arrayField` (lexical_declaration, line 17, exported)
- `stringsIn` (lexical_declaration, line 22, exported)
- `raw` (lexical_declaration, line 18, exported)

## Contained in

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

## Uses

- [core/predicates/record.predicate.ts](https://banes-lab.com/source/stats/core/predicates/record.predicate.ts.md)

## Used by

- [core/analyzers/rule.analyzer.ts](https://banes-lab.com/source/stats/core/analyzers/rule.analyzer.ts.md)
- [core/loaders/catalog.loader.ts](https://banes-lab.com/source/stats/core/loaders/catalog.loader.ts.md)
- [core/loaders/code.loader.ts](https://banes-lab.com/source/stats/core/loaders/code.loader.ts.md)
- [core/loaders/config.loader.ts](https://banes-lab.com/source/stats/core/loaders/config.loader.ts.md)
- [core/loaders/manifest.loader.ts](https://banes-lab.com/source/stats/core/loaders/manifest.loader.ts.md)
- [core/loaders/pattern.loader.ts](https://banes-lab.com/source/stats/core/loaders/pattern.loader.ts.md)
- [core/loaders/registry.loader.ts](https://banes-lab.com/source/stats/core/loaders/registry.loader.ts.md)
- [core/loaders/report.loader.ts](https://banes-lab.com/source/stats/core/loaders/report.loader.ts.md)

## Linked from

- [core/analyzers](https://banes-lab.com/anatomy/stats/folder-stats-core-analyzers.md)
- [core/loaders](https://banes-lab.com/anatomy/stats/folder-stats-core-loaders.md)
- [core/predicates](https://banes-lab.com/anatomy/stats/folder-stats-core-predicates.md)

## Source

```typescript
import { isRecord } from "#core/predicates/record.predicate";

export const field = function field(value: unknown, key: string): unknown {
    return isRecord(value) ? value[key] : null;
};

export const stringField = function stringField(value: unknown, key: string): string {
    const raw = field(value, key);
    return typeof raw === "string" ? raw : "";
};

export const numberField = function numberField(value: unknown, key: string, fallback: number): number {
    const raw = field(value, key);
    return typeof raw === "number" ? raw : fallback;
};

export const arrayField = function arrayField(value: unknown, key: string): unknown[] {
    const raw = field(value, key);
    return Array.isArray(raw) ? raw : [];
};

export const stringsIn = function stringsIn(value: unknown): string[] {
    return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === "string") : [];
};
```
