import { type StaticType, type StaticDirection, type StaticEvaluate } from './static.mjs'; import { type TSchema } from './schema.mjs'; import { type TOptional } from './_optional.mjs'; import { type TReadonly } from './_readonly.mjs'; import { type TUnionToTuple } from '../engine/helpers/union.mjs'; type ReadonlyOptionalKeys ? (Properties[Key] extends TOptional ? Key : never) : never; }[keyof Properties]> = Result; type ReadonlyKeys ? (Properties[Key] extends TOptional ? never : Key) : never; }[keyof Properties]> = Result; type OptionalKeys ? (Properties[Key] extends TReadonly ? never : Key) : never; }[keyof Properties]> = Result; type RequiredKeys | ReadonlyKeys | OptionalKeys>> = Result; type StaticPropertiesWithModifiers> = StaticEvaluate>>> & Readonly>> & Partial>> & Required>>>; type StaticPropertiesWithoutModifiers = { [Key in keyof Properties]: StaticType; }> = Result; export type StaticProperties = StaticPropertiesWithoutModifiers, PropertiesWithModifiers extends Record = StaticPropertiesWithModifiers, Result extends Record = { [Key in keyof PropertiesWithModifiers]: PropertiesWithModifiers[Key]; }> = Result; /** Represents a Record structure. */ export interface TProperties extends TSchema { [key: PropertyKey]: TSchema; } /** Creates a RequiredArray derived from the given TProperties value. */ export type TRequiredArray ? never : Key]: Properties[Key]; }, RequiredKeys extends string[] = TUnionToTuple>, Result extends string[] | undefined = RequiredKeys extends [] ? undefined : RequiredKeys> = Result; /** Creates a RequiredArray derived from the given TProperties value. */ export declare function RequiredArray(properties: Properties): TRequiredArray; type TKeyToString = `${Key}`; /** Extracts a tuple of keys from a TProperties value. */ export type TPropertyKeys, StringKey extends string = TKeyToString, Result extends string[] = TUnionToTuple> = Result; /** Extracts a tuple of keys from a TProperties value. */ export declare function PropertyKeys(properties: Properties): TPropertyKeys; type TPropertyValuesReduce = Keys extends [infer Left extends string, ...infer Right extends string[]] ? Left extends keyof Properties ? TPropertyValuesReduce : TPropertyValuesReduce : Result; /** Extracts a tuple of property values from a TProperties value. */ export type TPropertyValues, Result extends TSchema[] = TPropertyValuesReduce> = Result; /** Extracts a tuple of property values from a TProperties value. */ export declare function PropertyValues(properties: Properties): TPropertyValues; export {};