UNPKG

@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
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 };