Skip to content

Commit

Permalink
fix indexedDB initialization for nodejs context
Browse files Browse the repository at this point in the history
  • Loading branch information
or-else committed Jul 6, 2021
1 parent e9fa8e6 commit 2517914
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 10 deletions.
16 changes: 14 additions & 2 deletions src/db.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
const DB_VERSION = 1;
const DB_NAME = 'tinode-web';

let IDBProvider;

const DB = function(onError, logger) {
onError = onError || function() {}
logger = logger || function() {}
Expand Down Expand Up @@ -127,7 +129,7 @@ const DB = function(onError, logger) {
initDatabase: function() {
return new Promise((resolve, reject) => {
// Open the database and initialize callbacks.
const req = indexedDB.open(DB_NAME, DB_VERSION);
const req = IDBProvider.open(DB_NAME, DB_VERSION);
req.onsuccess = (event) => {
db = event.target.result;
disabled = false;
Expand Down Expand Up @@ -176,7 +178,7 @@ const DB = function(onError, logger) {
*/
deleteDatabase: function() {
return new Promise((resolve, reject) => {
const req = indexedDB.deleteDatabase(DB_NAME);
const req = IDBProvider.deleteDatabase(DB_NAME);
req.onblocked = function(event) {
if (db) {
db.close();
Expand Down Expand Up @@ -601,6 +603,16 @@ const DB = function(onError, logger) {
};
}

/**
* To use DB in a non browser context, supply indexedDB provider.
* @static
* @memberof DB
* @param idbProvider indexedDB provider, e.g. for node <code>require('fake-indexeddb')</code>.
*/
DB.setDatabaseProvider = function(idbProvider) {
IDBProvider = idbProvider;
};

if (typeof module != 'undefined') {
module.exports = DB;
}
21 changes: 19 additions & 2 deletions src/tinode.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ if (typeof XMLHttpRequest != 'undefined') {
XHRProvider = XMLHttpRequest;
}

let IndexedDBProvider;
if (typeof indexedDB != 'undefined') {
IndexedDBProvider = indexedDB;
}

initForNonBrowserApp();

// Global constants
Expand Down Expand Up @@ -159,6 +164,7 @@ function initForNonBrowserApp() {
global.window = {
WebSocket: WebSocketProvider,
XMLHttpRequest: XHRProvider,
indexedDB: IndexedDBProvider,
URL: {
createObjectURL: function() {
throw new Error("Unable to use URL.createObjectURL in a non-browser application");
Expand All @@ -169,6 +175,7 @@ function initForNonBrowserApp() {

Connection.setNetworkProviders(WebSocketProvider, XHRProvider);
LargeFileHelper.setNetworkProvider(XHRProvider);
DBCache.setDatabaseProvider(IndexedDBProvider);
}

// Detect find most useful network transport.
Expand Down Expand Up @@ -1197,14 +1204,24 @@ Tinode.getVersion = function() {
* To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.
* @static
* @memberof Tinode
* @param wsProvider WebSocket provider, e.g. for nodeJS , <code>require('ws')</code>.
* @param xhrProvider XMLHttpRequest provider, e.g. for node <code>require('xhr')</code>.
* @param wsProvider <code>WebSocket</code> provider, e.g. for nodeJS , <code>require('ws')</code>.
* @param xhrProvider <code>XMLHttpRequest</code> provider, e.g. for node <code>require('xhr')</code>.
*/
Tinode.setNetworkProviders = function(wsProvider, xhrProvider) {
WebSocketProvider = wsProvider;
XHRProvider = xhrProvider;
};

/**
* To use Tinode in a non browser context, supply <code>indexedDB</code> provider.
* @static
* @memberof Tinode
* @param idbProvider <code>indexedDB</code> provider, e.g. for nodeJS , <code>require('fake-indexeddb')</code>.
*/
Tinode.setDatabaseProvider = function(idbProvider) {
IndexedDBProvider = idbProvider;
};

/**
* Return information about the current name and version of this Tinode library.
* @memberof Tinode
Expand Down
39 changes: 34 additions & 5 deletions umd/tinode.dev.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion umd/tinode.prod.js

Large diffs are not rendered by default.

0 comments on commit 2517914

Please sign in to comment.