From 7dc7c0ca69848bdb3a4b6f135c169101b40cbab5 Mon Sep 17 00:00:00 2001 From: Damjan Bursac Date: Thu, 15 Aug 2019 11:03:08 +0200 Subject: [PATCH] Added window declaration, added dbName to construcotr --- src/EventEmitter.ts | 6 +++--- src/Store.ts | 19 ++++++++----------- src/index.d.ts | 5 +++++ 3 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 src/index.d.ts diff --git a/src/EventEmitter.ts b/src/EventEmitter.ts index b8be925..bc2c144 100644 --- a/src/EventEmitter.ts +++ b/src/EventEmitter.ts @@ -1,13 +1,13 @@ export default class EventEmitter { - private subscribers: Array = [] + private subscribers: Array = []; subscribe (subscriber) { - this.subscribers.push(subscriber) + this.subscribers.push(subscriber); } notify () { this.subscribers.forEach((subscriber) => { - subscriber() + subscriber(); }) } } diff --git a/src/Store.ts b/src/Store.ts index b72f3d3..0364691 100644 --- a/src/Store.ts +++ b/src/Store.ts @@ -18,17 +18,18 @@ export default class Store { /** @var {string} osName - Object store name */ private readonly osName: string = 'chunks'; - constructor (chunkLength: number) { + constructor (chunkLength: number, dbName?: string) { this.currentStoreCount = Store.storeCount; this.chunkLength = chunkLength; + // Dependency with EventEmitter because of constructor spec this.eventEmitter = new EventEmitter(); // Open indexedDB (torrent_chunks) and // create objectStore (torrent_chunk_store) - this.idb = window.indexedDB || {}; // || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + this.idb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; - let request = this.idb.open(this.getDatabaseName(), 1); + let request = this.idb.open(this.getDatabaseName(dbName), 1); Store.storeCount++; @@ -52,14 +53,13 @@ export default class Store { }; } - // TODO define cb parameters - public get (index: number, options, cb: Function) { + public get (index: number, options, cb: (err: Error, ev?: Buffer) => void) { if (typeof options === 'function') { return this.get(index, null, options) } if (typeof cb !== 'function') { - cb = (err: Error, ev?: Event): void => {} + cb = (err: Error, ev?: Buffer): void => {} } this.executeFn(() => { @@ -88,7 +88,6 @@ export default class Store { }) } - // TODO define cb parameters public put (index: number, chunkBuffer: Buffer, cb: (err: Error, ev?: Event) => void) { if (typeof cb !== 'function') { cb = (err: Error, ev?: Event): void => {} @@ -121,8 +120,6 @@ export default class Store { } public destroy (cb) { - // Currently same implementation as close - // For indexeddb would be different: // -- Close would empty database // -- Destroy should delete database this.close(cb); @@ -138,8 +135,8 @@ export default class Store { /** * Get database name based on storeCount */ - private getDatabaseName () { - const databaseName = 'torrent_chunk_store'; + private getDatabaseName (dbName?: string) { + const databaseName = dbName || 'torrent_chunk_store'; if (this.currentStoreCount === 0) { return databaseName diff --git a/src/index.d.ts b/src/index.d.ts new file mode 100644 index 0000000..8a0183b --- /dev/null +++ b/src/index.d.ts @@ -0,0 +1,5 @@ +interface Window { + mozIndexedDB: IDBFactory; + webkitIndexedDB: IDBFactory; + msIndexedDB: IDBFactory; +}