From ee0c347e6e5080f9c22b0ae6c35bafb32ae9bbcf Mon Sep 17 00:00:00 2001 From: Steve Oney Date: Fri, 31 Aug 2018 16:25:54 -0400 Subject: [PATCH] Exposing more internal types --- types/sharedb/index.d.ts | 57 ++++++++++++++++++++++++++++------ types/sharedb/lib/client.d.ts | 20 ++++++++++-- types/sharedb/lib/sharedb.d.ts | 40 +++++++++++++++++------- 3 files changed, 95 insertions(+), 22 deletions(-) diff --git a/types/sharedb/index.d.ts b/types/sharedb/index.d.ts index 7b34c85583..1620808f99 100644 --- a/types/sharedb/index.d.ts +++ b/types/sharedb/index.d.ts @@ -5,9 +5,7 @@ /// -import { Doc, Query, Error, Action, RawOp, Op } from './lib/sharedb'; - -type UseCallback = ((request: {action: Action, agent: any, req: any, collection: string, id: string, query: any, op: RawOp}, callback: () => void) => void); +import * as ShareDB from './lib/sharedb'; interface PubSubOptions { prefix?: string; @@ -24,13 +22,36 @@ declare class sharedb { addProjection(name: string, collection: string, fields: {}): any; listen(stream: any): void; close(callback?: (err: Error) => any): void; - use(action: Action, fn: UseCallback); - types: { - register: () => void + use(action: sharedb.UseAction, fn: sharedb.UseCallback); + static types: { + register: (type: { name?: string, uri?: string, [key: string]: any}) => void; }; } declare namespace sharedb { + type UseAction = 'connect' | 'op' | 'doc' | 'query' | 'submit' | 'apply' | 'commit' | 'after submit' | 'receive'; + type UseCallback = ((request: {action: UseAction, agent: any, req: any, collection: string, id: string, query: any, op: ShareDB.RawOp}, callback: () => void) => void); + + abstract class DB { + projectsSnapshots: boolean; + disableSubscribe: boolean; + close(callback?: () => void): void; + commit(collection: string, id: string, op: Op, snapshot, options, callback: (...args: any[]) => any): void; + getSnapshot(collection: string, id: string, fields, options, callback: (...args: any[]) => any): void; + getSnapshotBulk(collection: string, ids: string, fields, options, callback: (...args: any[]) => any): void; + getOps(collection: string, id: string, from: number, to: number, options, callback: (...args: any[]) => any): void; + getOpsToSnapshot(collection: string, id: string, from: number, snapshot: number, options, callback: (...args: any[]) => any): void; + getOpsBulk(collection: string, fromMap, toMap, options, callback: (...args: any[]) => any): void; + getCommittedOpVersion(collection: string, id: string, snapshot, op, options, callback: (...args: any[]) => any): void; + query(collection: string, query: Query, fields, options, callback: (...args: any[]) => any): void; + queryPoll(collection: string, query: Query, options, callback: (...args: any[]) => any): void; + queryPollDoc(collection: string, id: string, query: Query, options, callback: (...args: any[]) => any): void; + canPollDoc(): boolean; + skipPoll(): boolean; + } + + class MemoryDB extends DB { } + abstract class PubSub { private static shallowCopy(obj: any); protected prefix?: string; @@ -56,8 +77,26 @@ declare namespace sharedb { class Connection { constructor(ws: WebSocket); - get(collectionName: string, documentID: string): Doc; - createFetchQuery(collectionName: string, query: string, options: {results?: Query[]}, callback: (err: Error, results: any) => any): Query; - createSubscribeQuery(collectionName: string, query: string, options: {results?: Query[]}, callback: (err: Error, results: any) => any): Query; + get(collectionName: string, documentID: string): ShareDB.Doc; + createFetchQuery(collectionName: string, query: string, options: {results?: ShareDB.Query[]}, callback: (err: Error, results: any) => any): ShareDB.Query; + createSubscribeQuery(collectionName: string, query: string, options: {results?: ShareDB.Query[]}, callback: (err: Error, results: any) => any): ShareDB.Query; } + type Doc = ShareDB.Doc; + type Query = ShareDB.Query; + type Error = ShareDB.Error; + type Op = ShareDB.Op; + type AddNumOp = ShareDB.AddNumOp; + type ListMoveOp = ShareDB.ListMoveOp; + type ListInsertOp = ShareDB.ListInsertOp; + type ListDeleteOp = ShareDB.ListDeleteOp; + type ListReplaceOp = ShareDB.ListReplaceOp; + type StringInsertOp = ShareDB.StringInsertOp; + type StringDeleteOp = ShareDB.StringDeleteOp; + type ObjectInsertOp = ShareDB.ObjectInsertOp; + type ObjectDeleteOp = ShareDB.ObjectDeleteOp; + type ObjectReplaceOp = ShareDB.ObjectReplaceOp; + type SubtypeOp = ShareDB.SubtypeOp; + + type Path = ShareDB.Path; + type ShareDBSourceOptions = ShareDB.ShareDBSourceOptions; } diff --git a/types/sharedb/lib/client.d.ts b/types/sharedb/lib/client.d.ts index ad8328dc83..08999f2449 100644 --- a/types/sharedb/lib/client.d.ts +++ b/types/sharedb/lib/client.d.ts @@ -1,12 +1,28 @@ /// -import * as WebSocket from 'ws'; +import * as WS from 'ws'; import * as ShareDB from './sharedb'; export class Connection { - constructor(ws: WebSocket); + constructor(ws: WebSocket | WS); get(collectionName: string, documentID: string): Doc; createFetchQuery(collectionName: string, query: string, options: {results?: Query[]}, callback: (err: Error, results: any) => any): Query; createSubscribeQuery(collectionName: string, query: string, options: {results?: Query[]}, callback: (err: Error, results: any) => any): Query; } export type Doc = ShareDB.Doc; export type Query = ShareDB.Query; +export type Error = ShareDB.Error; +export type Op = ShareDB.Op; +export type AddNumOp = ShareDB.AddNumOp; +export type ListMoveOp = ShareDB.ListMoveOp; +export type ListInsertOp = ShareDB.ListInsertOp; +export type ListDeleteOp = ShareDB.ListDeleteOp; +export type ListReplaceOp = ShareDB.ListReplaceOp; +export type StringInsertOp = ShareDB.StringInsertOp; +export type StringDeleteOp = ShareDB.StringDeleteOp; +export type ObjectInsertOp = ShareDB.ObjectInsertOp; +export type ObjectDeleteOp = ShareDB.ObjectDeleteOp; +export type ObjectReplaceOp = ShareDB.ObjectReplaceOp; +export type SubtypeOp = ShareDB.SubtypeOp; + +export type Path = ShareDB.Path; +export type ShareDBSourceOptions = ShareDB.ShareDBSourceOptions; diff --git a/types/sharedb/lib/sharedb.d.ts b/types/sharedb/lib/sharedb.d.ts index 1b9b7ee5df..426eac5a0e 100644 --- a/types/sharedb/lib/sharedb.d.ts +++ b/types/sharedb/lib/sharedb.d.ts @@ -1,3 +1,5 @@ +import { EventEmitter } from 'events'; + export type Path = ReadonlyArray; export type Snapshot = number; @@ -29,7 +31,6 @@ export interface RawOp { d: string; } export type OTType = 'ot-text' | 'ot-json0' | 'ot-text-tp2' | 'rich-text'; -export type Action = 'connect'|'op'|'doc'|'query'|'submit'|'apply'|'commit'|'after submit'|'receive'; export interface Error { code: number; message: string; @@ -41,27 +42,44 @@ export interface ShareDBSourceOptions { source?: boolean; } export type Callback = (err: Error) => any; -export class Doc { +export type DocEvent = 'load' | 'create' | 'before op' | 'op' | 'del' | 'error' | 'no write pending' | 'nothing pending'; + +export class Doc extends EventEmitter { type: string; id: string; data: any; fetch: (callback: (err: Error) => void) => void; subscribe: (callback: (err: Error) => void) => void; - on: (event: 'load'|'create'|'before op'|'op'|'del'|'error', callback: (...args: any[]) => any) => void; - ingestSnapshot: (snapshot: Snapshot, callback: Callback) => void; - destroy: () => void; + + on(event: 'load' | 'no write pending' | 'nothing pending', callback: () => void): this; + on(event: 'create', callback: (source: boolean) => void): this; + on(event: 'op' | 'before op', callback: (ops: Op[], source: boolean) => void): this; + on(event: 'del', callback: (data: any, source: boolean) => void): this; + on(event: 'error', callback: (err: Error) => void): this; + + addListener(event: 'load' | 'no write pending' | 'nothing pending', callback: () => void): this; + addListener(event: 'create', callback: (source: boolean) => void): this; + addListener(event: 'op' | 'before op', callback: (ops: Op[], source: boolean) => void): this; + addListener(event: 'del', callback: (data: any, source: boolean) => void): this; + addListener(event: 'error', callback: (err: Error) => void): this; + + ingestSnapshot(snapshot: Snapshot, callback: Callback): void; + destroy(): void; create(data: any, callback?: Callback): void; create(data: any, type?: OTType, callback?: Callback): void; create(data: any, type?: OTType, options?: ShareDBSourceOptions, callback?: Callback): void; - submitOp: (data: ReadonlyArray, options?: ShareDBSourceOptions, callback?: Callback) => void; - del: (options: ShareDBSourceOptions, callback: (err: Error) => void) => void; - removeListener: (eventName: string, listener: () => any) => void; + submitOp(data: ReadonlyArray, options?: ShareDBSourceOptions, callback?: Callback): void; + del(options: ShareDBSourceOptions, callback: (err: Error) => void): void; + whenNothingPending(callback: (err: Error) => void): void; } -export class Query { +export type QueryEvent = 'ready' | 'error' | 'changed' | 'insert' | 'move' | 'remove' | 'extra'; +export class Query extends EventEmitter { ready: boolean; results: Doc[]; extra: any; - on: (event: 'ready'|'error'|'changed'|'insert'|'move'|'remove'|'extra', callback: (...args: any[]) => any) => any; - destroy: () => void; + on(event: QueryEvent, callback: (...args: any[]) => any): this; + addListener(event: QueryEvent, callback: (...args: any[]) => any): this; + removeListener(event: QueryEvent, listener: (...args: any[]) => any): this; + destroy(): void; }