# core/predicates/environment.predicate.ts

> 18 lines of code and 5 definitions.

Tree: Secrets
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/secrets#file-secrets-core-predicates-environment-predicate-ts
Source text: https://banes-lab.com/source/secrets/core/predicates/environment.predicate.ts.txt

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

## Definitions

- `isRecord` (lexical_declaration, line 4)
- `isEntryAnswer` (lexical_declaration, line 16, exported)
- `isValueAnswer` (lexical_declaration, line 12, exported)
- `isFieldLabel` (lexical_declaration, line 8)
- `{ entry }` (lexical_declaration, line 20, exported)

## Contained in

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

## Used by

- [core/adapters/environment.adapter.ts](https://banes-lab.com/source/secrets/core/adapters/environment.adapter.ts.md)

## Linked from

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

## Source

```typescript
import { ENTRY_ANSWER, VALUE_ANSWER } from "#configuration/constants/environment.constants";
import type { EntryAnswer, FieldLabel, ValueAnswer } from "#types/environment.types";

const isRecord = function isRecord(value: unknown): value is Record<string, unknown> {
    return typeof value === "object" && value !== null && !Array.isArray(value);
};

const isFieldLabel = function isFieldLabel(value: unknown): value is FieldLabel {
    return isRecord(value) && typeof value["label"] === "string";
};

export const isValueAnswer = function isValueAnswer(value: unknown): value is ValueAnswer {
    return isRecord(value) && value["answer"] === VALUE_ANSWER && typeof value["value"] === "string";
};

export const isEntryAnswer = function isEntryAnswer(value: unknown): value is EntryAnswer {
    if (!isRecord(value) || value["answer"] !== ENTRY_ANSWER) {
        return false;
    }
    const { entry } = value;
    return isRecord(entry) && Array.isArray(entry["fields"]) && entry["fields"].every(isFieldLabel);
};
```
