export function encodePrefix(K: any, prefix: any): any; /** * @interface * @typedef {IAny[]} _IAnyArray */ export class IEncodable { /** * @param {decoding.Decoder} _decoder * @return {IEncodable} */ static decode(_decoder: decoding.Decoder): IEncodable; /** * @param {...any} _args */ constructor(..._args: any[]); /** * @param {encoding.Encoder} _encoder */ encode(_encoder: encoding.Encoder): void; } /** * @typedef {IEncodable} IEncodableKey * @property {function(...any):Uint8Array} [prefix] */ /** * @template {IAny} V * @implements IEncodable */ export class AnyValue implements IEncodable { /** * @param {decoding.Decoder} decoder * @return {AnyValue} */ static decode(decoder: decoding.Decoder): AnyValue; /** * @param {V} v */ constructor(v: V); v: V; /** * @param {encoding.Encoder} encoder */ encode(encoder: encoding.Encoder): void; } /** * @implements IEncodable */ export class NoValue implements IEncodable { /** * @param {decoding.Decoder} _decoder * @return {NoValue} */ static decode(_decoder: decoding.Decoder): NoValue; /** * @param {null} v */ constructor(v: null); v: any; /** * @param {encoding.Encoder} _encoder */ encode(_encoder: encoding.Encoder): void; } /** * @implements IEncodable */ export class CryptoKeyValue implements IEncodable { /** * @param {decoding.Decoder} decoder * @return {Promise} */ static decode(decoder: decoding.Decoder): Promise; /** * @param {CryptoKey} key */ constructor(key: CryptoKey); key: CryptoKey; /** * @param {encoding.Encoder} _encoder */ encode(_encoder: encoding.Encoder): void; } /** * @implements IEncodable */ export class AutoKey implements IEncodable { /** * @param {decoding.Decoder} decoder * @return {IEncodable} */ static decode(decoder: decoding.Decoder): IEncodable; /** * @param {number} v */ constructor(v: number); v: number; /** * @param {encoding.Encoder} encoder */ encode(encoder: encoding.Encoder): void; } /** * @implements IEncodable */ export class Uint32Key implements IEncodable { /** * @param {decoding.Decoder} decoder * @return {IEncodable} */ static decode(decoder: decoding.Decoder): IEncodable; /** * @param {number} v */ constructor(v: number); v: number; /** * @param {encoding.Encoder} encoder */ encode(encoder: encoding.Encoder): void; } /** * Note that this implementation should be polyfilled by node.js/browser.js. This is just an * implementation that works exactly like the native implementation (however, it's quite * inefficient). * * @implements IEncodableKey */ export class BinaryKey implements IEncodableKey { /** * @param {decoding.Decoder} decoder * @return {IEncodable} */ static decode(decoder: decoding.Decoder): IEncodable; /** * @param {Uint8Array} prefix */ static prefix(prefix: Uint8Array): Uint8Array; /** * @param {Uint8Array} v */ constructor(v: Uint8Array); v: Uint8Array; /** * @param {encoding.Encoder} encoder */ encode(encoder: encoding.Encoder): void; } /** * @implements IEncodable */ export class StringKey implements IEncodable { /** * @param {decoding.Decoder} decoder * @return {IEncodable} */ static decode(decoder: decoding.Decoder): IEncodable; /** * @param {string} prefix */ static prefix(prefix: string): Uint8Array; /** * @param {string} v */ constructor(v: string); v: string; /** * @param {encoding.Encoder} encoder */ encode(encoder: encoding.Encoder): void; } /** * @implements IEncodable */ export class StringValue implements IEncodable { /** * @param {decoding.Decoder} decoder * @return {IEncodable} */ static decode(decoder: decoding.Decoder): IEncodable; /** * @param {string} v */ constructor(v: string); v: string; /** * @param {encoding.Encoder} encoder */ encode(encoder: encoding.Encoder): void; } /** * @template { { iat: number } } PAYLOAD * @template {any} [HEADER=any] * * @todo could implement check verifying that this is indeed a jwt string. If so, we can use binary * encoding and also support hashes. * @implements IEncodable */ export class JwtValue extends StringValue implements IEncodable { /** * @param {string} v */ constructor(v: string); /** * @param {CryptoKey} publicKey * @return {Promise<{ header: HEADER, payload: PAYLOAD }>} */ verify(publicKey: CryptoKey): Promise<{ header: HEADER; payload: PAYLOAD; }>; /** * Decode the value without verifying it. * @return { { header: HEADER, payload: PAYLOAD } } */ unsafeDecode(): { header: HEADER; payload: PAYLOAD; }; } /** * @template {typeof IEncodable} KEY * @template {typeof IEncodable} VALUE * @template {typeof IEncodable} MKEY * * @typedef {Object} ITableIndex * @property {MKEY} ITableIndex.key * @property {function(InstanceType,InstanceType):InstanceType} ITableIndex.mapper */ /** * @template {typeof IEncodable} KEY * @template {typeof IEncodable} VALUE * * @typedef {Object} ITableDef * @property {KEY} ITableDef.key * @property {VALUE} ITableDef.value * @property {{[key: string]: ITableIndex}} [ITableDef.indexes] */ /** * @template {typeof IEncodable} VAL * * @typedef {{ [key: string]: VAL }} IObjectDef */ /** * @typedef {Object} IDbDef * @property {{ [key: string]: ITableDef }} [IDbDef.tables] * @property {{ [key: string]: IObjectDef }} [IDbDef.objects] */ /** * @template {typeof IEncodable} KEY * * @typedef {Object} StartEndRangeOption * @property {InstanceType|FirstKeyParam} [start] * @property {boolean} [startExclusive] * @property {InstanceType|FirstKeyParam} [end] * @property {boolean} [endExclusive] * @property {boolean} [reverse] * @property {number} [limit] Number of items to receive */ /** * @template {typeof IEncodable} KEY * * @typedef {Object} PrefixedRangeOption * @property {KeyPrefixArg} PrefixedRangeOption.prefix * @property {boolean} [reverse] * @property {number} [limit] Number of items to receive */ /** * @template {typeof IEncodable} KEY * * @typedef {PrefixedRangeOption|StartEndRangeOption} RangeOption */ /** * @template {IEncodable} KEY * @template {IEncodable} VALUE * @template {IEncodable|undefined} FKEY * * @interface * @typedef {Object} ICursor * @property {KEY} ICursor.key * @property {VALUE} ICursor.value * @property {FKEY} ICursor.fkey * @property {function():void} stop */ /** * @template {typeof IEncodable} KEY * @template {typeof IEncodable} VALUE * @template {{[key: string]: ITableIndex}} INDEX * @template {IEncodable | undefined} FKEY * * @interface */ export class ITableReadonly; }, FKEY extends IEncodable | undefined> { /** * @type {{ [Indexname in keyof INDEX]: IndexedTableReadonly }} */ indexes: { [Indexname in keyof INDEX]: IndexedTableReadonly; }; /** * @param {InstanceType|FirstKeyParam} _key * @return {Promise|null>} */ get(_key: InstanceType | FirstKeyParam): Promise | null>; /** * @param {RangeOption} [_range] * @return {Promise, value: InstanceType, fkey: FKEY }>>} */ getEntries(_range?: RangeOption | undefined): Promise; value: InstanceType; fkey: FKEY; }>>; /** * @param {RangeOption} [_range] * @return {Promise>>} */ getValues(_range?: RangeOption | undefined): Promise>>; /** * @param {RangeOption} [_range] * @return {Promise>>} */ getKeys(_range?: RangeOption | undefined): Promise>>; /** * @param {RangeOption} _range * @param {function(ICursor,InstanceType,FKEY>):void|Promise} _f * @return {Promise} */ iterate(_range: RangeOption, _f: (arg0: ICursor, InstanceType, FKEY>) => void | Promise): Promise; } /** * @template {typeof IEncodable} KEY * @template {typeof IEncodable} VALUE * @template {{[key: string]: ITableIndex}} INDEX * @template {IEncodable|undefined} FKEY * * @interface * @extends ITableReadonly */ export class ITable; }, FKEY extends IEncodable | undefined> extends ITableReadonly { constructor(); /** * @type {{ [Indexname in keyof INDEX]: IndexedTable }} */ indexes: { [Indexname in keyof INDEX]: IndexedTable; }; /** * @param {InstanceType|FirstKeyParam} _key * @param {InstanceType|FirstKeyParam} _value */ set(_key: InstanceType | FirstKeyParam, _value: InstanceType | FirstKeyParam): void; /** * Only works with AutoKey * * @param {InstanceType|FirstKeyParam} _value * @return {Promise>} */ add(_value: InstanceType | FirstKeyParam): Promise>; /** * @param {InstanceType|FirstKeyParam} _key * @return {Promise} */ remove(_key: InstanceType | FirstKeyParam): Promise; /** * @param {RangeOption} _range * @return {Promise} */ removeRange(_range: RangeOption): Promise; } /** * @todo move to utils. dont export via common * @todo rename MKEY to FKEY and change the order * * @template {typeof IEncodable} MKEY * @template {typeof IEncodable} VALUE * @template {typeof IEncodable} KEY * @template {{[key: string]: ITableIndex}} INDEX * * @implements ITableReadonly> */ export class IndexedTableReadonly; }> implements ITableReadonly> { /** * @param {ITable} t * @param {ITable} source * @param {ITableIndex} def */ constructor(t: ITable, source: ITable, def: ITableIndex); t: ITable; source: ITable; indexDef: ITableIndex; /** * @type {{ [Indexname in keyof INDEX]: IndexedTableReadonly }} */ indexes: { [Indexname in keyof INDEX]: IndexedTableReadonly; }; /** * @param {InstanceType|FirstKeyParam} mkey * @return {Promise|null>} */ get(mkey: InstanceType | FirstKeyParam): Promise | null>; /** * @param {RangeOption} [range] * @return {Promise, value: InstanceType, fkey: InstanceType}>>} */ getEntries(range?: RangeOption | undefined): Promise; value: InstanceType; fkey: InstanceType; }>>; /** * @param {RangeOption} [range] * @return {Promise>>} */ getValues(range?: RangeOption | undefined): Promise>>; /** * @param {RangeOption} [range] * @return {Promise>>} */ getKeys(range?: RangeOption | undefined): Promise>>; /** * @param {RangeOption} range * @param {function(ICursor,InstanceType,InstanceType>):void} f * @return {Promise} */ iterate(range: RangeOption, f: (arg0: ICursor, InstanceType, InstanceType>) => void): Promise; } /** * @todo move to utils. dont export via common * @todo rename MKEY to FKEY and change the order * * @template {typeof IEncodable} KEY * @template {typeof IEncodable} VALUE * @template {typeof IEncodable} MKEY * @template {{[key: string]: ITableIndex}} INDEX * * @extends IndexedTableReadonly */ export class IndexedTable; }> extends IndexedTableReadonly { /** * @param {InstanceType|FirstKeyParam} key * @return {Promise} */ remove(key: InstanceType | FirstKeyParam): Promise; /** * @param {RangeOption} range * @return {Promise} */ removeRange(range: RangeOption): Promise; } /** * @template {IObjectDef} ODef * * @interface */ export class IObjectReadonly> { /** * @template {keyof ODef} Key * @param {Key} _key * @return {Promise|null>} */ get(_key: Key): Promise | null>; } /** * @template {IObjectDef} ODef * * @interface * @extends IObjectReadonly */ export class IObject> extends IObjectReadonly { /** * @template {keyof ODef} Key * @param {Key} _key * @param {InstanceType|FirstKeyParam} _value */ set(_key: Key, _value: InstanceType | FirstKeyParam): void; /** * @template {keyof ODef} Key * @param {Key} _key */ remove(_key: Key_1): void; } /** * @template {IDbDef} DEF * * @interface */ export class ITransaction { /** * @param {IDB} _db */ constructor(_db: IDB); /** * @type {{ [Tablename in keyof DEF["tables"]]: ITable[Tablename]["key"],NonNullable[Tablename]["value"],Defined[Tablename]["indexes"]>,undefined> }} */ tables: DEF["tables"] extends infer T ? { [Tablename in keyof T]: ITable[Tablename]["key"], NonNullable[Tablename]["value"], Defined[Tablename]["indexes"]>, undefined>; } : never; /** * @type {{ [Objectname in keyof DEF["objects"]]: IObject> }} */ objects: DEF["objects"] extends infer T_1 ? { [Objectname in keyof T_1]: IObject>; } : never; } /** * @template {IDbDef} DEF * * @interface */ export class ITransactionReadonly { /** * @param {IDB} _db */ constructor(_db: IDB); /** * @type {{ [Tablename in keyof DEF["tables"]]:ITableReadonly[Tablename]["key"],NonNullable[Tablename]["value"],Defined[Tablename]["indexes"]>,undefined> }} */ tables: DEF["tables"] extends infer T ? { [Tablename in keyof T]: ITableReadonly[Tablename]["key"], NonNullable[Tablename]["value"], Defined[Tablename]["indexes"]>, undefined>; } : never; } /** * @template {IDbDef} DEF * .* @interface */ export class IDB { /** * @template T * @param {function(ITransaction): Promise|T} _f * @return {Promise} */ transact(_f: (arg0: ITransaction) => T | Promise): Promise; /** * @template T * @param {function(ITransactionReadonly): Promise|T} _f * @return {Promise} */ transactReadonly(_f: (arg0: ITransactionReadonly) => T_1 | Promise): Promise; /** * @return {Promise} */ destroy(): Promise; } /** * Note that inheritance is not supported by intention. */ export const unexpectedContentTypeException: Error; export type Defined = T & {}; export type IAny = string | number | bigint | boolean | Uint8Array | _IAnyArray | { [key: string]: IAny; } | null | undefined; export type FirstKeyParam any> = T extends abstract new (arg: infer P) => any ? P : never; export type KeyPrefixArg = T extends { prefix: (arg: infer P) => Uint8Array; } ? P : Uint8Array; export type _IAnyArray = IAny[]; export type IEncodableKey = IEncodable; export type ITableIndex = { key: MKEY; mapper: (arg0: InstanceType, arg1: InstanceType) => InstanceType; }; export type ITableDef = { key: KEY; value: VALUE; indexes?: { [key: string]: ITableIndex; } | undefined; }; export type IObjectDef = { [key: string]: VAL; }; export type IDbDef = { tables?: { [key: string]: ITableDef; } | undefined; objects?: { [key: string]: IObjectDef; } | undefined; }; export type StartEndRangeOption = { start?: InstanceType | FirstKeyParam | undefined; startExclusive?: boolean | undefined; end?: InstanceType | FirstKeyParam | undefined; endExclusive?: boolean | undefined; reverse?: boolean | undefined; /** * Number of items to receive */ limit?: number | undefined; }; export type PrefixedRangeOption = { prefix: KeyPrefixArg; reverse?: boolean | undefined; /** * Number of items to receive */ limit?: number | undefined; }; export type RangeOption = PrefixedRangeOption | StartEndRangeOption; export type ICursor = { key: KEY; value: VALUE; fkey: FKEY; stop: () => void; }; import * as encoding from 'lib0/encoding'; import * as decoding from 'lib0/decoding'; //# sourceMappingURL=common.d.ts.map