UNPKG

@boost/config

Version:

Powerful convention based finder, loader, and manager of both configuration and ignore files.

82 lines 3.43 kB
import { type ModuleResolver, type PackageStructure, Path } from '@boost/common'; import { type DeepPartial } from '@boost/common/optimal'; export type ExtType = 'cjs' | 'js' | 'json' | 'json5' | 'mjs' | 'ts' | 'yaml' | 'yml'; export type LoaderType = Exclude<ExtType, 'yml'>; export type Loader<T> = (path: Path, pkg: PackageStructure) => Promise<DeepPartial<T>>; export type Handler<T> = (prev: T, next: T) => Promise<T | undefined> | T | undefined; export type FileType = 'branch' | 'preset' | 'root-file' | 'root-folder'; export type FileSource = 'branch' | 'extended' | 'overridden' | 'root'; export interface File { /** Absolute path of the file. */ path: Path; /** The source where the file originated. */ source: FileSource; } export interface ConfigFile<T> extends File { /** Config content of the file. */ config: DeepPartial<T>; } export interface IgnoreFile extends File { /** Ignored content of the file, split on new lines. */ ignore: string[]; } export interface ProcessedConfig<T> { /** All found and loaded config file contents merged and processed into a single config object. */ config: Required<T>; /** List of config files found and loaded. */ files: ConfigFile<T>[]; } export interface BaseFinderOptions { /** Name of files, without extension. */ name: string; /** Throw an error if the root config cannot be located. */ errorIfNoRootFound?: boolean; } export interface ConfigFinderOptions<T> extends BaseFinderOptions { /** Name of the setting in which "config extending" is enabled. */ extendsSetting?: string; /** List of extensions, in order, to find config files within each folder. Defaults to built-in file format list. */ extensions?: ExtType[]; /** Find and load environment based config files (using `NODE_ENV`). Defaults to `true`. */ includeEnv?: boolean; /** Mapping of loader functions by type. Defaults to built-in file type loaders. */ loaders?: { [K in LoaderType]: Loader<T>; }; /** Name of the setting in which "config overriding" is enabled. */ overridesSetting?: string; /** Custom module resolver. */ resolver?: ModuleResolver; } export interface IgnoreFinderOptions extends BaseFinderOptions { } export interface ProcessorOptions { /** * When a setting has a value of `undefined`, fallback to the * default/initial value for that setting. Defaults to `true`. */ defaultWhenUndefined?: boolean; /** Name of config files, without extension. */ name: string; /** Validate all settings within a config file before processing. Defaults to `true`. */ validate?: boolean; } export type FileGlob = string[] | string; export type ExtendsSetting = string[] | string; export interface OverridesSettingItem<T> { /** File path patterns/globs to ignore. */ exclude?: FileGlob; /** File path patterns/globs to match against. */ include: FileGlob; /** Settings configured for this specific override. */ settings: DeepPartial<T>; } export type OverridesSetting<T> = OverridesSettingItem<T>[]; export type PluginOptions = boolean | object; export type PluginEntry = string | [string, PluginOptions]; export type PluginsSettingMap = Record<string, PluginOptions>; export type PluginsSettingList = PluginEntry[]; export type PluginsSetting = PluginsSettingList | PluginsSettingMap; //# sourceMappingURL=types.d.ts.map