import { IfTrue } from './utilityTypes'; export declare const ID: unique symbol; export declare const LABEL: unique symbol; export declare const ANY_PROPERTY: unique symbol; export declare const NO_PROPERTIES: {}; export declare const PrimitivePropertyDefinitionSeparator: " | "; export declare type Id = string | number; declare type PrimitivePropertyDefinitionCombo = `${A}${typeof PrimitivePropertyDefinitionSeparator}${B}` | `${B}${typeof PrimitivePropertyDefinitionSeparator}${A}`; declare type PrimitivePropertyDefinition = 'boolean' | 'string' | 'number' | PrimitivePropertyDefinitionCombo<'boolean', 'number'> | PrimitivePropertyDefinitionCombo<'boolean', 'string'> | PrimitivePropertyDefinitionCombo<'string', 'number'> | PrimitivePropertyDefinitionCombo<'string', PrimitivePropertyDefinitionCombo<'boolean', 'number'>> | PrimitivePropertyDefinitionCombo<'number', PrimitivePropertyDefinitionCombo<'boolean', 'string'>> | PrimitivePropertyDefinitionCombo<'boolean', PrimitivePropertyDefinitionCombo<'string', 'number'>>; declare type EnumPropertyDefinition = Record; export declare type NonOptionalPropertyDefinition = PrimitivePropertyDefinition | EnumPropertyDefinition; export declare class OptionalPropertyDefinition { readonly type: T; constructor(type: T); } export declare type PropertyDefinition = NonOptionalPropertyDefinition | OptionalPropertyDefinition; export declare type PropertiesDefinition = { readonly [K: string]: PropertyDefinition; readonly [ANY_PROPERTY]?: NonOptionalPropertyDefinition; }; export declare type MergePropertiesDefinitions = { [K in keyof A | keyof B]: (K extends keyof A ? A[K] : never) | (K extends keyof B ? B[K] : never); }; export declare type PrimitivePropertySingle

= P extends 'boolean' ? boolean : P extends 'string' ? string : P extends 'number' ? number : never; export declare type PrimitiveType = PrimitivePropertySingle; declare type PrimitiveProperty = S extends `${infer T} | ${infer U}` ? PrimitivePropertySingle | PrimitiveProperty : PrimitivePropertySingle; export declare type NonOptionalProperty

= P extends EnumPropertyDefinition ? P[keyof P] : PrimitiveProperty

; export declare type Property

= P extends NonOptionalPropertyDefinition ? NonOptionalProperty

: P extends OptionalPropertyDefinition ? X extends NonOptionalPropertyDefinition ? NonOptionalProperty | OptionalType : never : never; export declare type Properties = { [K in keyof D]: Property; }; export declare type PropertiesForOutput = Pick<{ [ID]: Id; [LABEL]: string; }, IfTrue | IfTrue> & (D[typeof ANY_PROPERTY] extends NonOptionalPropertyDefinition ? Omit, typeof ANY_PROPERTY> & Record> : Properties); export declare const optional: (type: T) => OptionalPropertyDefinition; export declare const mergePropertyDefinitions: (a: PropertyDefinition, b: PropertyDefinition) => PropertyDefinition; export {};