import { NodeDefinition, StaticGraphNode, StaticNodeDefinition, StaticNodeType } from '../../types/graph'; import { CatchErrorNodeDefinition } from './catch-error'; import { CreateCallerNodeDefinition } from './create-caller'; import { CreateSetterNodeDefinition } from './create-setter'; import { DeferNodeDefinition } from './defer'; import { EntriesNodeDefinition } from './entries'; import { IsPendingNodeDefinition } from './is-pending'; import { KeyNodeDefinition } from './key'; import { WithTransformsNodeDefinition } from './with-transforms'; export declare type ChildKeyDefinition = KeyNodeDefinition | DeferNodeDefinition | IsPendingNodeDefinition | CreateSetterNodeDefinition | CreateCallerNodeDefinition | CatchErrorNodeDefinition; export declare type FieldSetDefinition = { [id: string]: FieldDefinition; }; export declare type FieldDefinition = true | FieldsNodeDefinition | EntriesNodeDefinition | WithTransformsNodeDefinition | KeyNodeDefinition | DeferNodeDefinition | IsPendingNodeDefinition | CreateSetterNodeDefinition | CreateCallerNodeDefinition | FieldSetDefinition | CatchErrorNodeDefinition; export interface FieldsNodeProperties { fields: { [id: string]: ChildKeyDefinition; }; } export interface SerializedFieldsNodeProperties { fields: { [id: string]: T; }; } /** * An instance of the [[fields]] node. * See the [[fields]] documentation to find out more. */ export interface FieldsNode extends StaticGraphNode<'fields', FieldsNodeProperties, SerializedFieldsNodeProperties> { } /** * A definition of the [[fields]] node. * See the [[fields]] documentation to find out more. */ export interface FieldsNodeDefinition extends StaticNodeDefinition<'fields', FieldsNodeProperties, SerializedFieldsNodeProperties> { } /** * The implementation of the [[fields]] node. * See the [[fields]] documentation to learn more. */ export declare const FieldsNodeType: StaticNodeType<'fields', FieldsNodeProperties, SerializedFieldsNodeProperties>; /** * Creates a new instance of a [[fields]] node, which is a type of a [[NodeDefinition]] used inside of * a [[query]] to represent a nested graph structures. It serves as a container for a following graph nodes: * - [key](_nodes_graph_key_.html#key) * - [[defer]] * - [[isPending]] * - [[createCaller]] * - [[createSetter]] * * Muster is performing implicit conversion to this node type every time a query or a key node with * fields is created. * * * @example **Implicit conversion in [[query]]** * ```js * import { fields, key, query, root } from '@dws/muster'; * * query(root(), { * firstName: key('firstName'), * lastName: key('lastName'), * }); * // is equivalent to * query(root(), fields({ * firstName: key('firstName'), * lastName: key('lastName'), * })); * ``` * This example shows how Muster implicitly converts an object to a [[fields]] when creating * a [[query]] with child fields. * * * @example **Implicit conversion in [key](_nodes_graph_key_.html#key)** * ```js * import { fields, key } from '@dws/muster'; * * key('someKey', { * firstName: key('firstName'), * lastName: key('lastName'), * }); * // is equivalent to * key('someKey', fields({ * firstName: key('firstName'), * lastName: key('lastName'), * })); * ``` * This example shows how Muster implicitly converts an object to a [[fields]] when creating * a [key](_nodes_graph_key_.html#key) with child fields. * * * @example **Implicit conversion in [[entries]]** * ```js * import { fields, key, entries } from '@dws/muster'; * * entries({ * firstName: key('firstName'), * lastName: key('lastName'), * }); * // is equivalent to * entries(fields({ * firstName: key('firstName'), * lastName: key('lastName'), * })); * ``` * This example shows how Muster implicitly converts an object to a [[fields]] when creating * an [[entries]] with child fields. */ export declare function fields(fieldSet: FieldSetDefinition): FieldsNodeDefinition; export declare function isFieldsNodeDefinition(value: NodeDefinition): value is FieldsNodeDefinition;