Skip to content
This repository was archived by the owner on Dec 30, 2023. It is now read-only.

Commit c07740f

Browse files
authored
feat(runtime/variable): 🏷️ Improve typings (#79)
1 parent ee3bf04 commit c07740f

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

.changeset/three-seas-smell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@terminal-nerds/snippets-runtime": minor
3+
---
4+
5+
✨ Improve typing for `getEnvironmentVariable()` and `parseEnvironmentVariableValue()`

packages/runtime/source/variable/variable.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,30 +49,39 @@ export function hasEnvironmentVariable(variable: string): boolean {
4949
}
5050

5151
/* prettier-ignore */
52-
export function getEnvironmentVariable( variable: string, options?: { strict?: false }): EnvironmentVariableValue | undefined;
53-
export function getEnvironmentVariable(variable: string, options: { strict: true }): EnvironmentVariableValue;
54-
export function getEnvironmentVariable(
52+
export function getEnvironmentVariable<ValueType extends EnvironmentVariableValue>(variable: string, options?: { strict?: false }): ValueType | undefined;
53+
/* prettier-ignore */
54+
export function getEnvironmentVariable<ValueType extends EnvironmentVariableValue>(variable: string, options: { strict: true }): ValueType;
55+
export function getEnvironmentVariable<ValueType extends EnvironmentVariableValue>(
5556
variable: string,
5657
options: EnvironmentVariableOptions = {},
57-
): EnvironmentVariableValue | undefined {
58+
): ValueType | undefined {
5859
const { strict = false } = options;
5960

6061
const value = toMap(getEnvironmentVariables()).get(variable);
6162

6263
if (value) {
63-
return parseEnvironmentVariableValue(value);
64+
return parseEnvironmentVariableValue(value) as ValueType;
6465
} else if (strict) {
6566
throw new RuntimeError(`The environment variable - "${variable}" - is not set. Getter aborted.`);
6667
}
6768
}
6869

69-
function parseEnvironmentVariableValue(value: EnvironmentVariableValue) {
70-
if (value === "true") return true;
71-
else if (value === "false") return false;
70+
type ParsedEnvVariableValue<Value extends string> = Value extends "true"
71+
? true
72+
: Value extends "false"
73+
? false
74+
: Value extends `${number}`
75+
? number
76+
: string;
77+
78+
function parseEnvironmentVariableValue<Value extends string>(value: Value): ParsedEnvVariableValue<Value> {
79+
if (value === "true") return true as ParsedEnvVariableValue<Value>;
80+
else if (value === "false") return false as ParsedEnvVariableValue<Value>;
7281
else {
7382
const asNumber = Number(value);
7483

75-
return Number.isNaN(asNumber) ? value : asNumber;
84+
return (Number.isNaN(asNumber) ? value : asNumber) as ParsedEnvVariableValue<Value>;
7685
}
7786
}
7887

0 commit comments

Comments
 (0)