UNPKG

@aeternity/aepp-sdk

Version:

SDK for the æternity blockchain

38 lines (37 loc) 2.64 kB
import { Field as OriginalField } from './field-types/interface.js'; import { UnionToIntersection } from '../../utils/other.js'; export interface Field extends OriginalField { serialize: (...args: any[]) => any; } type NullablePartial<T, NK extends keyof T = { [K in keyof T]: undefined extends T[K] ? K : never; }[keyof T]> = Partial<Pick<T, NK>> & Omit<T, NK>; type Or<A, B> = A extends undefined ? B : A; type TxParamsBySchemaInternal<SchemaItem> = { -readonly [key in keyof SchemaItem]: SchemaItem[key] extends Field ? Parameters<SchemaItem[key]['serialize']>[0] : never; }; type TxParamsBySchemaInternalParams<SchemaItem, SchemaItemValues = SchemaItem[keyof SchemaItem]> = UnionToIntersection<SchemaItemValues extends Field ? Or<Parameters<SchemaItemValues['serialize']>[2], {}> : never>; type PickIsRec<SchemaItem, Recursive extends boolean> = { [Key in keyof SchemaItem as SchemaItem[Key] extends Field & { recursiveType: true; } ? Recursive extends true ? Key : never : Recursive extends true ? never : Key]: SchemaItem[Key]; }; type TxParamsBySchema<SchemaItem> = SchemaItem extends Object ? TxParamsBySchemaInternal<PickIsRec<SchemaItem, true>> & NullablePartial<TxParamsBySchemaInternal<PickIsRec<SchemaItem, false>>> & TxParamsBySchemaInternalParams<PickIsRec<SchemaItem, false>> : never; type TxParamsAsyncBySchemaInternal<SchemaItem> = { -readonly [key in keyof SchemaItem]: SchemaItem[key] extends Field & { prepare: Function; } ? Parameters<SchemaItem[key]['prepare']>[0] : SchemaItem[key] extends Field ? Parameters<SchemaItem[key]['serialize']>[0] : never; }; type TxParamsAsyncBySchemaInternalParams<SchemaItem, SchemaItemValues = SchemaItem[keyof SchemaItem]> = UnionToIntersection<SchemaItemValues extends Field & { prepare: Function; } ? Or<Parameters<SchemaItemValues['prepare']>[2], {}> : {}>; type TxParamsAsyncBySchema<SchemaItem> = SchemaItem extends Object ? TxParamsAsyncBySchemaInternal<PickIsRec<SchemaItem, true>> & NullablePartial<TxParamsAsyncBySchemaInternal<PickIsRec<SchemaItem, false>>> & TxParamsAsyncBySchemaInternalParams<PickIsRec<SchemaItem, false>> & TxParamsBySchemaInternalParams<PickIsRec<SchemaItem, false>> : never; type TxUnpackedBySchema<SchemaItem> = { -readonly [key in keyof SchemaItem]: SchemaItem[key] extends Field ? ReturnType<SchemaItem[key]['deserialize']> : never; }; export default interface SchemaTypes<Schema extends readonly any[], SchemaItems = Schema[number]> { TxParams: TxParamsBySchema<SchemaItems>; TxParamsAsync: TxParamsAsyncBySchema<SchemaItems>; TxUnpacked: TxUnpackedBySchema<SchemaItems>; } export {};