import { Gindex, Tree } from "@chainsafe/persistent-merkle-tree"; import { Type, ValueOf } from "../type/abstract.ts"; import { BasicType } from "../type/basic.ts"; import { CompositeType } from "../type/composite.ts"; import { NonOptionalFields } from "../type/optional.ts"; import { TreeView } from "./abstract.ts"; export type FieldEntry>> = { fieldName: keyof Fields; fieldType: Fields[keyof Fields]; jsonKey: string; gindex: Gindex; }; /** Expected API of this View's type. This interface allows to break a recursive dependency between types and views */ export type BasicContainerTypeGeneric>> = CompositeType, ContainerTreeViewType, unknown> & { readonly fields: Fields; readonly fieldsEntries: (FieldEntry | FieldEntry>)[]; }; export type ContainerTypeGeneric>> = BasicContainerTypeGeneric & { readonly fixedEnd: number; }; export type ValueOfFields>> = { [K in keyof Fields]: ValueOf; }; export type FieldsView>> = { [K in keyof Fields]: Fields[K] extends CompositeType ? TV : Fields[K] extends BasicType ? V : never; }; export type ContainerTreeViewType>> = FieldsView & TreeView>; export type ContainerTreeViewTypeConstructor>> = { new (type: ContainerTypeGeneric, tree: Tree): ContainerTreeViewType; }; export declare function getContainerTreeViewClass>>(type: ContainerTypeGeneric): ContainerTreeViewTypeConstructor;