# core/predicates/field.predicate.ts

> 15 lines of code and 4 definitions.

Tree: GovLab Context
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/context#file-context-core-predicates-field-predicate-ts
Source text: https://banes-lab.com/source/context/core/predicates/field.predicate.ts.txt

Listed in [core/predicates](https://banes-lab.com/api/source/context/core/predicates.md), after [core/predicates/check.predicate.ts](https://banes-lab.com/source/context/core/predicates/check.predicate.ts.md) and before [core/predicates/record.predicate.ts](https://banes-lab.com/source/context/core/predicates/record.predicate.ts.md).

## Definitions

- `lacksValue` (lexical_declaration, line 4, exported)
- `lacksEntry` (lexical_declaration, line 12, exported)
- `isKebabId` (lexical_declaration, line 16, exported)
- `text` (lexical_declaration, line 5, exported)

## Contained in

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

## Uses

- [core/converters/identifier.converter.ts](https://banes-lab.com/source/context/core/converters/identifier.converter.ts.md)

## Used by

- [core/predicates/check.predicate.ts](https://banes-lab.com/source/context/core/predicates/check.predicate.ts.md)
- [core/selectors/check.selector.ts](https://banes-lab.com/source/context/core/selectors/check.selector.ts.md)
- [core/validators/field.validator.ts](https://banes-lab.com/source/context/core/validators/field.validator.ts.md)

## Linked from

- [core/converters](https://banes-lab.com/anatomy/context/folder-context-core-converters.md)
- [core/predicates](https://banes-lab.com/anatomy/context/folder-context-core-predicates.md)
- [core/selectors](https://banes-lab.com/anatomy/context/folder-context-core-selectors.md)
- [core/validators](https://banes-lab.com/anatomy/context/folder-context-core-validators.md)

## Source

```typescript
import { NONE_PREFIX, NONE_WORD } from "#configuration/constants/field.constants";
import { slugify } from "#core/converters/identifier.converter";

export const lacksValue = function lacksValue(value: string): boolean {
    const text = value.trim();
    if (text.length === 0 || text === NONE_WORD) {
        return true;
    }
    return text.startsWith(NONE_PREFIX) && text.slice(NONE_PREFIX.length).trim().length === 0;
};

export const lacksEntry = function lacksEntry(value: unknown): boolean {
    return (typeof value === "string" && lacksValue(value)) || (Array.isArray(value) && value.length === 0);
};

export const isKebabId = function isKebabId(id: string): boolean {
    return id.length > 0 && slugify(id) === id;
};
```
