@boost/config
Version:
Powerful convention based finder, loader, and manager of both configuration and ignore files.
82 lines • 3.43 kB
TypeScript
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