Skip to content

Commit a2f0020

Browse files
committed
minor typescript tweaks
1 parent 1de94e9 commit a2f0020

File tree

1 file changed

+11
-27
lines changed

1 file changed

+11
-27
lines changed

src/index.ts

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { hasTTY } from "std-env";
1111
import { applyEnv } from "./env";
1212
import { snakeCase } from "scule";
1313
import { klona } from "klona";
14+
import { expectTypeOf } from "vitest";
1415

1516
const prompt = enquirer?.prompt;
1617

@@ -100,7 +101,7 @@ async function search<T>(
100101
searchPlaces?: string[],
101102
): Promise<ConfigLoaderResult<T> | null> {
102103
return getExplorer(moduleName, searchStrategy, searchPlaces).search(
103-
searchFrom,
104+
searchFrom
104105
) as Promise<ConfigLoaderResult<T>>;
105106
}
106107

@@ -117,7 +118,7 @@ async function load<T>(
117118
throw new Error(`Config file ${filename} not found`);
118119
}
119120

120-
export interface LoadConfigOptions<
121+
export async function loadConfig<
121122
T extends Record<string, any> = Record<string, any>,
122123
TOverrides extends Record<string, any> = {
123124
[K in keyof T]: T[K];
@@ -128,12 +129,12 @@ export interface LoadConfigOptions<
128129
TRequired extends Array<Exclude<keyof T, number | symbol>> = Array<
129130
Exclude<keyof T, number | symbol>
130131
>,
131-
TResult extends Record<string, any> = T &
132+
TResult extends Record<string, any> =
132133
TOverrides &
133134
TDefaultConfig & {
134135
[K in TRequired[number]]?: any;
135-
},
136-
> {
136+
} & T
137+
>(options: {
137138
name: string;
138139
searchStrategy?: SearchStrategy;
139140
searchPlaces?: string[];
@@ -149,28 +150,7 @@ export interface LoadConfigOptions<
149150
| false
150151
| Array<PromptOptions>
151152
| ((config: TResult) => Array<PromptOptions> | Promise<PromptOptions>);
152-
}
153-
154-
// NOSONAR - Generic type parameters are necessarily duplicated between interface and function for type safety
155-
export async function loadConfig<
156-
T extends Record<string, any> = Record<string, any>,
157-
TOverrides extends Record<string, any> = {
158-
[K in keyof T]: T[K];
159-
},
160-
TDefaultConfig extends Record<string, any> = {
161-
[K in keyof T]: T[K];
162-
},
163-
TRequired extends Array<Exclude<keyof T, number | symbol>> = Array<
164-
Exclude<keyof T, number | symbol>
165-
>,
166-
TResult extends Record<string, any> = T &
167-
TOverrides &
168-
TDefaultConfig & {
169-
[K in TRequired[number]]?: any;
170-
},
171-
>(
172-
options: LoadConfigOptions<T, TOverrides, TDefaultConfig, TRequired, TResult>,
173-
): Promise<ConfigLoaderResult<TResult>> {
153+
}): Promise<ConfigLoaderResult<TResult>> {
174154
const envName = options?.envName ?? process.env.NODE_ENV;
175155
const cwd = resolve(process.cwd(), options?.cwd || ".");
176156
const dotenv = options?.dotenv ?? true;
@@ -276,3 +256,7 @@ export async function loadConfig<
276256

277257
return { config, filepath, isEmpty, missing: [] };
278258
}
259+
260+
export type LoadConfigOptions<T extends Record<string, any>> = Parameters<
261+
typeof loadConfig<T>
262+
>[0];

0 commit comments

Comments
 (0)