mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00

* Add TypeScript test file & tsd as devDep to run it This helps those who want to contribute to the TypeScript definitions by adding: * a tool called `tsd,` * its corresponding configuration in package.json * a teste file index.test-d.ts Also add a extra line between type definitions to improve readability. * Fix set/get parameters to use Record<string,*>. The previous implementation did not allow users to retrieve items that were inserted using "set," and it incorrectly used ArrayOf to extract record types. The previous implementation also prevented users from ever inserting an array. Although it the database does not handle arrays elegantly, it allows the user to insert them. Typing should not prohibit use of arrays.
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { IGunChainReference } from './chain';
|
|
|
|
export declare type ArrayOf<T> = T extends Array<infer U> ? U : never;
|
|
|
|
export declare type DisallowArray<T> = Exclude<T, Array<any>>;
|
|
|
|
/** These types cannot be stored on Gun (functions and classes) */
|
|
export declare type AlwaysDisallowedType<T> = T extends (...args: any[]) => void ? never
|
|
: T extends { new(...args: any[]): any; } ? never
|
|
: AccessObject<T>;
|
|
|
|
export declare type AccessObject<T> = T extends object ? {
|
|
[key in keyof T]: (AlwaysDisallowedType<T[key]> extends never ? never : AccessObject<T[key]>);
|
|
} : T;
|
|
|
|
/** These types cannot be stored on Gun's root level */
|
|
export declare type DisallowPrimitives<Open, T> = 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 Saveable<DataType> = Partial<DataType> | string | number | boolean | null | IGunChainReference<DataType>;
|
|
|
|
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<DataType> extends IGunRecordNodeRawBase {
|
|
'>': Record<keyof DataType, number>;
|
|
}
|
|
|
|
export interface IGunRecordNodeRaw<DataType> {
|
|
'_': IGunRecordNodeRawExtra<DataType>;
|
|
}
|
|
|
|
export declare type IGunRecordNode<DataType> = {
|
|
[K in keyof DataType]: IGunRecordNodeRawBase;
|
|
} & IGunRecordNodeRaw<DataType>;
|
|
export declare type IGunRecordData<DataType> = DataType & IGunRecordNodeRaw<DataType>;
|