UNPKG

@boost/config

Version:

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

57 lines (50 loc) 1.72 kB
import { type Blueprint, type Schemas, schemas } from '@boost/common/optimal'; import type { ExtendsSetting, FileGlob, OverridesSettingItem, PluginOptions, PluginsSetting, } from './types'; /** * Create an `optimal` schema for validating the structure of an "extends" setting. */ export function createExtendsSchema(schematics: Schemas = schemas) { const { array, string, union } = schematics; return union<ExtendsSetting>([]) .of([string().notEmpty(), array().of(string().notEmpty())]) .notNullable(); } /** * Create an `optimal` schema for validating the structure of a "plugins" setting. */ export function createPluginsSchema(schematics: Schemas = schemas) { const { array, bool, object, string, tuple, union } = schematics; const pluginOptions = union<PluginOptions>({}).of([bool(), object()]); const pluginSource = string().notEmpty(); const pluginEntry = tuple<[string, PluginOptions]>([pluginSource, pluginOptions]); return union<PluginsSetting>({}).of([ array().of(union('').of([pluginSource, pluginEntry])), object().of(pluginOptions).notNullable(), ]); } /** * Create an `optimal` schema for validating the structure of an "overrides" setting. */ export function createOverridesSchema<T extends object>( blueprint: Blueprint<T>, schematics: Schemas = schemas, ) { const { array, shape, string, union } = schematics; return array<OverridesSettingItem<T>>() .of( shape({ exclude: union<FileGlob>([]).of([string().notEmpty(), array().of(string().notEmpty())]), include: union<FileGlob>([]).of([string().notEmpty(), array().of(string().notEmpty())]), settings: shape(blueprint).notNullable(), }) .exact() .notNullable(), ) .notNullable(); }