@hairy/lnv
Version:
Loading environment variables in Next.js and other frameworks can be quite cumbersome, and using dotenv or vault at runtime is also inconvenient. That's why my created this tool
94 lines (91 loc) • 2.63 kB
TypeScript
import { SelectOptions, Option, TextOptions, PasswordOptions, MultiSelectOptions, ConfirmOptions } from '@clack/prompts';
type ParsedFn<V> = (parsed: Record<string, string>) => Promise<V> | V;
interface PromptSelect extends Omit<SelectOptions<string>, 'options' | 'message'> {
type: 'select';
key: string;
message?: string;
options: ParsedFn<Option<string>[]> | Option<string>[];
}
interface PromptMultiselect extends Omit<MultiSelectOptions<string>, 'options' | 'message'> {
type: 'multiselect';
key: string;
message?: string;
options: ParsedFn<Option<string>[]> | Option<string>[];
}
interface PromptConfirm extends Omit<ConfirmOptions, 'message'> {
type: 'confirm';
key: string;
message?: string;
}
interface PromptText extends Omit<TextOptions, 'message'> {
type: 'text';
key: string;
message?: string;
}
interface PromptPassword extends Omit<PasswordOptions, 'message'> {
type: 'password';
key: string;
message?: string;
}
interface PromptHandler {
type: 'handler';
key: string;
handler: ParsedFn<string>;
}
type Prompt = PromptSelect | PromptText | PromptPassword | PromptMultiselect | PromptConfirm | PromptHandler;
interface Environment {
[key: string]: string;
}
interface EnvironmentOptions {
entries?: string[];
before?: Environment;
after?: Environment;
depth?: boolean;
}
interface Command extends Omit<SelectOptions<string>, 'message' | 'options'>, EnvironmentOptions {
message?: string;
prompts?: Prompt[];
command: string | Option<string>[];
}
type Script = Command | string;
interface UserConfig {
dts?: boolean | string;
injects?: EnvironmentOptions;
scripts?: {
[command: string]: Script | string;
};
}
interface LoadEnvironmentOptions {
/**
* set environment variables entry
*
* @example
* // load .env, .env.local
* entry: ['env', 'local']
*/
entries?: string[];
/**
* set environment variables
*
* @example
* // set environment variables
* values: {
* NODE_ENV: 'production',
* PORT: '3000'
* }
*/
env?: Record<string, string>;
/**
* set environment variables to .env file
*/
write?: boolean;
/**
* command to run
*/
run?: string | string[];
/**
* deep load and merge environment variables
*/
depth?: boolean;
}
export type { Command, Environment, EnvironmentOptions, LoadEnvironmentOptions, ParsedFn, Prompt, PromptConfirm, PromptHandler, PromptMultiselect, PromptPassword, PromptSelect, PromptText, Script, UserConfig };