import { IGunChainReference } from './chain'; export declare type ArrayOf = T extends Array ? U : never; /** Gun does not accept Array value, so we need extract to make types correct */ export declare type AllowArray = ArrayOf extends never ? T : ArrayOf; export declare type DisallowArray = ArrayOf extends never ? T : never; /** These types cannot be stored on Gun */ export declare type AlwaysDisallowedType = T extends (...args: any[]) => void ? never : T extends { new (...args: any[]): any; } ? never : AccessObject; export declare type AccessObject = T extends object ? { [key in keyof T]: (AlwaysDisallowedType extends never ? never : AccessObject); } : T; /** These types cannot be stored on Gun's root level */ export declare type DisallowPrimitives = Open extends false ? T : T extends string ? never : T extends number ? never : T extends boolean ? never : T extends null ? never : T extends undefined ? never : T; export declare type ArrayAsRecord = ArrayOf extends never ? DataType : Record; export declare type Saveable = Partial | string | number | boolean | null | IGunChainReference; export declare type AckCallback = (ack: { err: Error; ok: any; } | { err: undefined; ok: string; }) => void; export declare type IGunCryptoKeyPair = Record<'pub' | 'priv' | 'epub' | 'epriv', string>; export interface IGunRecordNodeRawBase { '#': string; } export interface IGunRecordNodeRawExtra extends IGunRecordNodeRawBase { '>': Record; } export interface IGunRecordNodeRaw { '_': IGunRecordNodeRawExtra; } export declare type IGunRecordNode = { [K in keyof DataType]: IGunRecordNodeRawBase; } & IGunRecordNodeRaw; export declare type IGunRecordData = DataType & IGunRecordNodeRaw;