# core/selectors/invocation.selector.ts

> 15 lines of code and 5 definitions.

Tree: Argv Contract
Language: typescript
Layer: application
Canonical: https://banes-lab.com/anatomy/argv#file-argv-core-selectors-invocation-selector-ts
Source text: https://banes-lab.com/source/argv/core/selectors/invocation.selector.ts.txt

Listed in [core/selectors](https://banes-lab.com/api/source/argv/core/selectors.md).

## Definitions

- `hasFlag` (lexical_declaration, line 4, exported)
- `flagValues` (lexical_declaration, line 8, exported)
- `flagValue` (lexical_declaration, line 12, exported)
- `numberFlag` (lexical_declaration, line 16, exported)
- `parsed` (lexical_declaration, line 17, exported)

## Contained in

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

## Source

```typescript
import { DECIMAL } from "#configuration/constants/invocation.constants";
import type { ParsedArgv } from "#types/invocation.types";

export const hasFlag = function hasFlag(argv: ParsedArgv, name: string): boolean {
    return argv.flags.has(name);
};

export const flagValues = function flagValues(argv: ParsedArgv, name: string): readonly string[] {
    return argv.flags.get(name) ?? [];
};

export const flagValue = function flagValue(argv: ParsedArgv, name: string): string | undefined {
    return argv.flags.get(name)?.at(0);
};

export const numberFlag = function numberFlag(argv: ParsedArgv, name: string, fallback: number): number {
    const parsed = Number.parseInt(flagValue(argv, name) ?? "", DECIMAL);
    return Number.isNaN(parsed) ? fallback : parsed;
};
```
