# core/converters/rate.converter.ts

> 15 lines of code and 3 definitions.

Tree: Project Scripts
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/scripts#file-scripts-core-converters-rate-converter-ts
Source text: https://banes-lab.com/source/scripts/core/converters/rate.converter.ts.txt

Listed in [core/converters](https://banes-lab.com/api/source/scripts/core/converters.md), after [core/converters/closure.converter.ts](https://banes-lab.com/source/scripts/core/converters/closure.converter.ts.md) and before [core/converters/route.converter.ts](https://banes-lab.com/source/scripts/core/converters/route.converter.ts.md).

## Definitions

- `readRateOptions` (lexical_declaration, line 8, exported)
- `asked` (lexical_declaration, line 9, exported)
- `out` (lexical_declaration, line 10, exported)

## Contained in

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

## Source

```typescript
import { DEFAULT_MONTHS, REPORT_NAME } from "#configuration/constants/rate.constants";
import { flagValue, numberFlag } from "@govlab/argv";
import { join, resolve } from "node:path";
import type { ParsedArgv } from "@govlab/argv";
import type { RateOptions } from "#types/rate.types";
import { absolutePath } from "@ssot/paths";

export const readRateOptions = function readRateOptions(argv: ParsedArgv): RateOptions {
    const asked = numberFlag(argv, "--rate", Number.NaN);
    const out = flagValue(argv, "--out");
    return {
        months: numberFlag(argv, "--months", DEFAULT_MONTHS),
        out: out === undefined ? join(absolutePath("scratch"), REPORT_NAME) : resolve(out),
        rate: Number.isFinite(asked) ? asked : null,
    };
};
```
