UNPKG

firetruss

Version:

Advanced data sync layer for Firebase and Vue.js

249 lines (208 loc) 7.92 kB
declare class Truss { static readonly SERVER_TIMESTAMP: any; static readonly VERSION: string; static readonly FIREBASE_SDK_VERSION: string; readonly SERVER_TIMESTAMP: any; readonly VERSION: string; readonly FIREBASE_SDK_VERSION: string; static readonly ComponentPlugin: {install(vue: any, {truss: Truss}): void;}; static readonly computedPropertyStats: Stats; static readonly worker: WorkerFunctions; static connectWorker(worker: string | Worker | SharedWorker, config: any): Promise<void>; static preExpose(functionName: string): void; static bounceConnection(): Promise<void>; static suspend(): Promise<void>; static debugPermissionDeniedErrors( simulatedTokenGenerator: any, maxSimulationDuration: number, callFilter: any ): Promise<void>; static debounceAngularDigest(wait: number): void; static escapeKey(key: string): string; static unescapeKey(escapedKey: string): string; static enableLogging(fn: boolean | ((msg: string) => void)): void; readonly now: number; readonly info: Info; readonly store: Truss.Model; constructor(rootUrl: string); mount(classes: ModelConstructor[] | Record<string, ModelConstructor>): void; destroy(): void; newKey(): string; nextTick(): Promise<void>; throttleRemoteDataUpdates(delay: number): void; checkObjectsForRogueProperties(): void; authenticate(token?: string): Promise<void>; unauthenticate(): Promise<void>; intercept(actionType: InterceptActionKey, callbacks: InterceptCallbacks): () => void; connect(connections: Connection | (() => Connection | undefined)): Truss.Connector; connect(scope: any, connections: Connections | (() => Connections)): Truss.Connector; peek( target: Truss.Query | Truss.Reference | Connections, callback?: (value: any) => Promise<any> | void ): Promise<any>; observe<T>(subject: () => T, callback: (newValue: T, oldValue: T | undefined) => void, options?: { precise?: boolean, deep?: boolean, scope?: any }): () => void; when(expression: () => any, options?: {timeout?: number, scope?: any}): Promise<any>; } declare namespace Truss { class Model extends BaseModel { readonly $parent: Model | undefined; readonly $path: string; readonly $ref: Reference; readonly $refs: Reference; readonly $key: string; readonly $data: Record<string, Node>; readonly $hidden: boolean; readonly $empty: boolean; readonly $keys: string[]; readonly $values: string[]; readonly $ready: boolean; readonly $overridden: boolean; $nextTick(): Promise<void>; $freezeComputedProperty(): void; $set(value: any): Promise<void>; $update(values: Record<string, any>): Promise<void>; $override(values: Record<string, any>): Promise<void>; $commit(updateFunction: (txn: Transaction) => void): Promise<Transaction>; // This should have a value type of Node, but there appears to be no way to specify an indexed // property solely as a fallback (with a type other than any or unknown), so it ends up clashing // with all the other properties instead. [key: string]: any; } interface Connector { readonly ready: boolean; readonly at: Connections; readonly data: Record<string, any>; destroy(): void; } interface Query extends Handle { readonly constraints: QuerySpec; annotate(annotations: any): Query; } interface Reference extends Handle { readonly value: any; annotate(annotations: any): Reference; query(spec: QuerySpec): Query; set(value: any): Promise<void>; update(values: Record<string, any>): Promise<void>; override(value: any): Promise<void>; commit(updateFunction: (txn: Transaction) => void): Promise<Transaction>; } interface Operation { readonly type: 'read' | 'write' | ' auth'; readonly method: 'set' | 'update' | 'commit' | 'peek' | 'authenticate' | 'unauthenticate' | 'certify'; readonly target: Reference; readonly targets: Reference[]; readonly operand: any; readonly ready: boolean; readonly running: boolean; readonly ended: boolean; readonly tries: number; readonly error: Error | undefined; onSlow(delay: number, callback: (op: Operation) => void): void; } } export default Truss; type Node = undefined | boolean | number | string | Truss.Model; interface ModelConstructor { new(): Truss.Model; } declare class BaseModel { readonly $truss: Truss; readonly $info: Info; readonly $store: Truss.Model; readonly $now: number; readonly $newKey: string; readonly $destroyed: boolean; $intercept(actionType: InterceptActionKey, callbacks: InterceptCallbacks): () => void; $connect(connections: Connection | (() => Connection | undefined)): Truss.Connector; $connect(scope: any, connections: Connections | (() => Connections)): Truss.Connector; $peek( target: Truss.Query | Truss.Reference | Connections, callback?: (value: any) => Promise<any> | void ): Promise<any>; $observe<T>( subject: () => T, callback: (newValue: T, oldValue: T | undefined) => void, options?: { precise?: boolean, deep?: boolean } ): () => void; $when(expression: () => any, options?: {timeout?: number}): Promise<any>; } interface Handle { readonly $ref: Truss.Reference; readonly ready: boolean; readonly key: string; readonly path: string; readonly parent: Truss.Reference; readonly annotations: Record<string, any>; child(...segments: string[]): Truss.Reference; child(...segments: (string | null | undefined)[]): Truss.Reference | undefined; children(...segments: (string | string[])[]): References; children(...segments: (string | null | undefined | string[])[]): References | undefined; peek(callback?: (value: any) => Promise<any> | void): Promise<any>; match(pattern: string): Record<string, string> | undefined; test(pattern: string): boolean; isEqual(other: Truss.Reference | Truss.Query | null | undefined): boolean; belongsTo(truss: Truss): boolean; } type References = Truss.Reference | ReferencesObject; interface ReferencesObject { [key: string]: References | undefined; } interface QuerySpec { readonly by: '$key' | '$value' | Truss.Reference; readonly at?: any; readonly from?: any; readonly to?: any; readonly first?: number; readonly last?: number; } interface Transaction { readonly currentValue: any; readonly outcome: 'abort' | 'cancel' | 'set' | 'update' | undefined; readonly values: Record<string, any> | undefined; abort(): void; cancel(): void; set(value: any): void; update(values: Record<string, any>): void; } interface Info { readonly connected: boolean | undefined, readonly timeOffset: number; readonly user: any | undefined, readonly userid: string | undefined } interface Stats { readonly list: StatItem[]; log(n: number): void; wrap<T>(getter: () => T, className: string, name: string): () => T; } interface StatItem { name: string; numRecomputes: number; numUpdates: number; runtime: number; runtimePerRecompute: number; } type InterceptActionKey = 'read' | 'write' | 'auth' | 'set' | 'update' | 'commit' | 'connect' | 'peek' | 'authenticate' | 'unathenticate' | 'certify' | 'all'; interface InterceptCallbacks { onBefore?: (op: Truss.Operation) => Promise<void> | void, onAfter?: (op: Truss.Operation) => Promise<void> | void, onError?: (op: Truss.Operation, error: Error) => Promise<boolean> | boolean | void, onFailure?: (op: Truss.Operation) => Promise<void> | void } type Connection = Truss.Query | References | Connections; interface Connections { [key: string]: Connection | undefined | (() => Connection | undefined); } interface WorkerFunctions { [key: string]: (...args: any[]) => Promise<any> | WorkerFunctions; } declare module 'vue/types/vue' { interface Vue extends BaseModel { readonly $truss: Truss; readonly $store: any; } }