@missive/ndex
Version:
Ndex is an indexedDB wrapper
46 lines (35 loc) • 1.51 kB
text/coffeescript
Connection = require('./ndex/connection')
BrowserAdapter = require('./ndex/adapters/browser_adapter')
WorkerAdapter = require('./ndex/adapters/worker_adapter')
class Ndex
constructor: ->
= {}
connect: (name, migrations, { adapter, options } = {}) ->
new Promise (resolve, reject) =>
unless adapter
if connection = [name]
return reject(new Error("Already connected to “#{name}”"))
connection = new Connection(name, migrations, options)
adapter = [name] = this.getAdapter(connection)
adapter.handleMethod('open')
.then (objectStoreNames) ->
adapter.proxyObjectStoresNamespace(objectStoreNames)
resolve(adapter)
.catch (error) =>
# WorkerAdapter errors
if adapter instanceof WorkerAdapter
# Try to connect in the main thread
adapter = [name] = new BrowserAdapter(connection)
console.info "Ndex: Fallbacking to BrowserAdapter for “#{name}” because “#{error}”"
return resolve(this.connect(null, null, { adapter }))
reject("Ndex: #{error}")
getAdapter: (connection) ->
adapterClass = this.getAdapterClass()
new adapterClass(connection)
getAdapterClass: ->
return WorkerAdapter if this.workersAreSupported()
BrowserAdapter
workersAreSupported: (scope = window) ->
?= 'Worker' of scope
# Singleton
module.exports = new Ndex