import { Type } from './type.js'; import { Expression } from './expression.js'; export type Argument = { type: T; isOptional: boolean; isRest: boolean; defaultValue: T['@type'] | undefined; description: string | undefined; }; export declare function Argument(type: T, params?: { description?: string; defaultValue?: T['@type']; isOptional?: boolean; isRest?: boolean; }): Argument; export type Arguments = Arguments.List | Arguments.Dictionary; export declare namespace Arguments { const None: Arguments; interface Dictionary { kind: 'dictionary'; map: { [P in keyof T]: Argument; }; '@type': T; } type PropTypes; }> = { [P in keyof Map]: Map[P]['type']['@type']; }; function Dictionary; }>(map: Map): Arguments>; interface List { kind: 'list'; type: Type; nonEmpty: boolean; '@type': T; } function List(type: T, params?: { nonEmpty?: boolean; }): Arguments<{ [key: string]: T['@type']; }>; } export type ExpressionArguments = { [P in keyof T]?: Expression; } | { [index: number]: Expression; }; export interface MSymbol { (args?: ExpressionArguments): Expression; info: { namespace: string; name: string; description?: string; }; args: A; type: T; id: string; } export declare function MSymbol(name: string, args: A, type: T, description?: string): MSymbol; export declare function CustomPropSymbol(namespace: string, name: string, type: T, description?: string): MSymbol, T>; export declare function isSymbol(x: any): x is MSymbol; export type SymbolMap = { [id: string]: MSymbol | undefined; };