'use strict'; import type { AnyRecord, Maybe, NonMutable, UnknownRecord } from '../..'; export type ValueProcessor = ( value: NonMutable ) => Maybe | Record; type ProcessedProps

= { [K in keyof P]: string; }; export type RuleBuildHandler< P extends AnyRecord, R = Record, > = (props: ProcessedProps

) => R; type BuilderBase

> = { add(property: keyof P, value: P[keyof P]): void; build(): R; }; export type RuleBuilder< P extends AnyRecord, R = Record, > = BuilderBase; type PropertyAlias

= { as: keyof P; }; type PropertyValueConfigBase

= | boolean // true - included, false - excluded | string // suffix | PropertyAlias

; // alias for another property type PropsBuilderPropertyConfig< P extends AnyRecord, K extends keyof P = keyof P, > = | PropertyValueConfigBase

| RuleBuilder | RuleBuilder | { process?: ValueProcessor>; // for custom value processing name?: string; // for custom property name }; type RuleBuilderPropertyConfig< P extends AnyRecord, K extends keyof P = keyof P, > = | PropertyValueConfigBase

| { process?: ValueProcessor>; // for custom value processing name?: string; // for custom property name }; export type PropsBuilderConfig

= { [K in keyof P]: PropsBuilderPropertyConfig; }; export type RuleBuilderConfig

= { [K in keyof P]: RuleBuilderPropertyConfig; };