UNPKG

@chainsafe/ssz

Version:

Simple Serialize

19 lines (18 loc) 1.5 kB
import { Node } from "@chainsafe/persistent-merkle-tree"; import { Type } from "../type/abstract.ts"; import { BasicType } from "../type/basic.ts"; import { CompositeType } from "../type/composite.ts"; import { OptionalType } from "../type/optional.ts"; import { ContainerTypeGeneric } from "../view/profile.ts"; import { TreeViewDU } from "./abstract.ts"; export type ViewDUValue<T extends Type<unknown>> = T extends CompositeType<unknown, unknown, infer TVDU> ? TVDU : T extends BasicType<infer V> ? V : never; export type OptionalViewDUValue<T extends Type<unknown>> = T extends CompositeType<unknown, unknown, infer TVDU> ? // If composite, return view. MAY propagate changes updwards TVDU | null | undefined : T extends BasicType<infer V> ? V | null | undefined : never; export type FieldsViewDU<Fields extends Record<string, Type<unknown>>> = { [K in keyof Fields]: Fields[K] extends OptionalType<infer U> ? OptionalViewDUValue<U> : ViewDUValue<Fields[K]>; }; export type ContainerTreeViewDUType<Fields extends Record<string, Type<unknown>>> = FieldsViewDU<Fields> & TreeViewDU<ContainerTypeGeneric<Fields>>; export type ContainerTreeViewDUTypeConstructor<Fields extends Record<string, Type<unknown>>> = { new (type: ContainerTypeGeneric<Fields>, node: Node, cache?: unknown): ContainerTreeViewDUType<Fields>; }; export declare function getProfileTreeViewDUClass<Fields extends Record<string, Type<unknown>>>(type: ContainerTypeGeneric<Fields>): ContainerTreeViewDUTypeConstructor<Fields>;