From 0878865114584c70152e8edc67ab816df7e7baf0 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Wed, 9 Mar 2016 12:27:13 +1100 Subject: [PATCH] Cutting a new version --- dist/db.js | 28 +++++++++++++++++++++++++--- dist/db.js.map | 2 +- dist/db.min.js | 2 +- dist/db.min.js.map | 2 +- package.json | 2 +- src/db.js | 2 +- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/dist/db.js b/dist/db.js index 94b4f50..6ae4610 100644 --- a/dist/db.js +++ b/dist/db.js @@ -24,6 +24,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }(); var dbCache = {}; + var serverEvents = ['abort', 'error', 'versionchange']; function mongoDBToKeyRangeArgs(opts) { var keys = Object.keys(opts).sort(); @@ -301,6 +302,26 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }); }; + this.addEventListener = function (eventName, handler) { + if (!serverEvents.includes(eventName)) { + throw new Error('Unrecognized event type ' + eventName); + } + db.addEventListener(eventName, handler); + }; + + this.removeEventListener = function (eventName, handler) { + if (!serverEvents.includes(eventName)) { + throw new Error('Unrecognized event type ' + eventName); + } + db.removeEventListener(eventName, handler); + }; + + serverEvents.forEach(function (evName) { + this[evName] = function (handler) { + this.addEventListener(evName, handler); + }; + }, this); + if (noServerMethods) { return; } @@ -315,7 +336,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr _this3[storeName] = {}; var keys = Object.keys(_this3); keys.filter(function (key) { - return key !== 'close'; + return ![].concat(serverEvents, ['close', 'addEventListener', 'removeEventListener']).includes(key); }).map(function (key) { return _this3[storeName][key] = function () { for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { @@ -582,7 +603,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr for (var i = 0; i < db.objectStoreNames.length; i++) { var name = db.objectStoreNames[i]; - if (schema.hasOwnProperty(name) === false) { + if (!schema.hasOwnProperty(name)) { e.currentTarget.transaction.db.deleteObjectStore(name); } } @@ -618,7 +639,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }; var db = { - version: '0.13.2', + version: '0.14.0', open: function open(options) { var server = options.server; var version = options.version || 1; @@ -685,6 +706,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // the user unblocks by closing the blocking // connection request.onsuccess = function (ev) { + // Attempt to workaround Firefox event version problem: https://bugzilla.mozilla.org/show_bug.cgi?id=1220279 if (!('newVersion' in ev)) { ev.newVersion = e.newVersion; } diff --git a/dist/db.js.map b/dist/db.js.map index be928cf..eabe572 100644 --- a/dist/db.js.map +++ b/dist/db.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/db.js"],"names":[],"mappings":"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","file":"db.js","sourcesContent":["(function (local) {\r\n 'use strict';\r\n\r\n const IDBKeyRange = local.IDBKeyRange || local.webkitIDBKeyRange;\r\n const transactionModes = {\r\n readonly: 'readonly',\r\n readwrite: 'readwrite'\r\n };\r\n const hasOwn = Object.prototype.hasOwnProperty;\r\n const defaultMapper = x => x;\r\n\r\n let indexedDB = local.indexedDB || local.webkitIndexedDB ||\r\n local.mozIndexedDB || local.oIndexedDB || local.msIndexedDB ||\r\n local.shimIndexedDB || (function () {\r\n throw new Error('IndexedDB required');\r\n }());\r\n\r\n const dbCache = {};\r\n\r\n function mongoDBToKeyRangeArgs (opts) {\r\n var keys = Object.keys(opts).sort();\r\n if (keys.length === 1) {\r\n var key = keys[0];\r\n var val = opts[key];\r\n var name, inclusive;\r\n switch (key) {\r\n case 'eq': name = 'only'; break;\r\n case 'gt':\r\n name = 'lowerBound';\r\n inclusive = true;\r\n break;\r\n case 'lt':\r\n name = 'upperBound';\r\n inclusive = true;\r\n break;\r\n case 'gte': name = 'lowerBound'; break;\r\n case 'lte': name = 'upperBound'; break;\r\n default: throw new TypeError('`' + key + '` is not valid key');\r\n }\r\n return [name, [val, inclusive]];\r\n }\r\n var x = opts[keys[0]];\r\n var y = opts[keys[1]];\r\n var pattern = keys.join('-');\r\n\r\n switch (pattern) {\r\n case 'gt-lt': case 'gt-lte': case 'gte-lt': case 'gte-lte':\r\n return ['bound', [x, y, keys[0] === 'gt', keys[1] === 'lt']];\r\n default: throw new TypeError(\r\n '`' + pattern + '` are conflicted keys'\r\n );\r\n }\r\n }\r\n function mongoifyKey (key) {\r\n if (key && typeof key === 'object' && !(key instanceof IDBKeyRange)) {\r\n let [type, args] = mongoDBToKeyRangeArgs(key);\r\n return IDBKeyRange[type](...args);\r\n }\r\n return key;\r\n }\r\n\r\n var Server = function (db, name, noServerMethods, version) {\r\n var closed = false;\r\n\r\n this.getIndexedDB = () => db;\r\n this.isClosed = () => closed;\r\n\r\n this.add = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => {\r\n // prevent Firefox from throwing a ConstraintError and aborting (hard)\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=872873\r\n e.preventDefault();\r\n reject(e);\r\n };\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n records.forEach(function (record) {\r\n var req;\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n req = store.add(record, key);\r\n } else {\r\n req = store.add(record);\r\n }\r\n\r\n req.onsuccess = function (e) {\r\n var target = e.target;\r\n var keyPath = target.source.keyPath;\r\n if (keyPath === null) {\r\n keyPath = '__id__';\r\n }\r\n Object.defineProperty(record, keyPath, {\r\n value: target.result,\r\n enumerable: true\r\n });\r\n };\r\n });\r\n });\r\n };\r\n\r\n this.update = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n records.forEach(function (record) {\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n store.put(record, key);\r\n } else {\r\n store.put(record);\r\n }\r\n });\r\n });\r\n };\r\n\r\n this.remove = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(key);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.delete(key);\r\n });\r\n };\r\n\r\n this.clear = function (table) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.clear();\r\n });\r\n };\r\n\r\n this.close = function () {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n }\r\n db.close();\r\n closed = true;\r\n delete dbCache[name][version];\r\n resolve();\r\n });\r\n };\r\n\r\n this.get = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = store.get(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n this.query = function (table, index) {\r\n var error = closed ? 'Database has been closed' : null;\r\n return new IndexQuery(table, db, index, error);\r\n };\r\n\r\n this.count = function (table, key) {\r\n return new Promise((resolve, reject) => {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = key === undefined ? store.count() : store.count(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n if (noServerMethods) {\r\n return;\r\n }\r\n\r\n var err;\r\n [].some.call(db.objectStoreNames, storeName => {\r\n if (this[storeName]) {\r\n err = new Error('The store name, \"' + storeName + '\", which you have attempted to load, conflicts with db.js method names.\"');\r\n this.close();\r\n return true;\r\n }\r\n this[storeName] = {};\r\n var keys = Object.keys(this);\r\n keys.filter(key => key !== 'close')\r\n .map(key =>\r\n this[storeName][key] = (...args) => this[key](storeName, ...args)\r\n );\r\n });\r\n return err;\r\n };\r\n\r\n var IndexQuery = function (table, db, indexName, preexistingError) {\r\n var modifyObj = false;\r\n\r\n var runQuery = function (type, args, cursorType, direction, limitRange, filters, mapper) {\r\n return new Promise(function (resolve, reject) {\r\n var keyRange = type ? IDBKeyRange[type](...args) : null;\r\n var results = [];\r\n var indexArgs = [keyRange];\r\n var counter = 0;\r\n\r\n var transaction = db.transaction(table, modifyObj ? transactionModes.readwrite : transactionModes.readonly);\r\n transaction.oncomplete = () => resolve(results);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var index = indexName ? store.index(indexName) : store;\r\n\r\n limitRange = limitRange || null;\r\n filters = filters || [];\r\n if (cursorType !== 'count') {\r\n indexArgs.push(direction || 'next');\r\n }\r\n\r\n // create a function that will set in the modifyObj properties into\r\n // the passed record.\r\n var modifyKeys = modifyObj ? Object.keys(modifyObj) : [];\r\n\r\n var modifyRecord = function (record) {\r\n modifyKeys.forEach(key => {\r\n var val = modifyObj[key];\r\n if (val instanceof Function) { val = val(record); }\r\n record[key] = val;\r\n });\r\n return record;\r\n };\r\n\r\n index[cursorType](...indexArgs).onsuccess = function (e) {\r\n var cursor = e.target.result;\r\n if (typeof cursor === 'number') {\r\n results = cursor;\r\n } else if (cursor) {\r\n if (limitRange !== null && limitRange[0] > counter) {\r\n counter = limitRange[0];\r\n cursor.advance(limitRange[0]);\r\n } else if (limitRange !== null && counter >= (limitRange[0] + limitRange[1])) {\r\n // out of limit range... skip\r\n } else {\r\n var matchFilter = true;\r\n var result = 'value' in cursor ? cursor.value : cursor.key;\r\n\r\n filters.forEach(function (filter) {\r\n if (!filter || !filter.length) {\r\n // Invalid filter do nothing\r\n } else if (filter.length === 2) {\r\n matchFilter = matchFilter && (result[filter[0]] === filter[1]);\r\n } else {\r\n matchFilter = matchFilter && filter[0](result);\r\n }\r\n });\r\n\r\n if (matchFilter) {\r\n counter++;\r\n // if we're doing a modify, run it now\r\n if (modifyObj) {\r\n result = modifyRecord(result);\r\n cursor.update(result);\r\n }\r\n results.push(mapper(result));\r\n }\r\n cursor.continue();\r\n }\r\n }\r\n };\r\n });\r\n };\r\n\r\n var Query = function (type, args, queuedError) {\r\n var direction = 'next';\r\n var cursorType = 'openCursor';\r\n var filters = [];\r\n var limitRange = null;\r\n var mapper = defaultMapper;\r\n var unique = false;\r\n var error = preexistingError || queuedError;\r\n\r\n var execute = function () {\r\n if (error) {\r\n return Promise.reject(error);\r\n }\r\n return runQuery(type, args, cursorType, unique ? direction + 'unique' : direction, limitRange, filters, mapper);\r\n };\r\n\r\n var limit = function (...args) {\r\n limitRange = args.slice(0, 2);\r\n if (limitRange.length === 1) {\r\n limitRange.unshift(0);\r\n }\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n var count = function () {\r\n direction = null;\r\n cursorType = 'count';\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n\r\n var filter, desc, distinct, modify, map;\r\n var keys = function () {\r\n cursorType = 'openKeyCursor';\r\n\r\n return {\r\n desc,\r\n execute,\r\n filter,\r\n distinct,\r\n map\r\n };\r\n };\r\n filter = function (...args) {\r\n filters.push(args.slice(0, 2));\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n desc = function () {\r\n direction = 'prev';\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n distinct,\r\n modify,\r\n map\r\n };\r\n };\r\n distinct = function () {\r\n unique = true;\r\n return {\r\n keys,\r\n count,\r\n execute,\r\n filter,\r\n desc,\r\n modify,\r\n map\r\n };\r\n };\r\n modify = function (update) {\r\n modifyObj = update;\r\n return {\r\n execute\r\n };\r\n };\r\n map = function (fn) {\r\n mapper = fn;\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n ['only', 'bound', 'upperBound', 'lowerBound'].forEach((name) => {\r\n this[name] = function () {\r\n return Query(name, arguments);\r\n };\r\n });\r\n\r\n this.range = function (opts) {\r\n var error;\r\n var keyRange = [null, null];\r\n try {\r\n keyRange = mongoDBToKeyRangeArgs(opts);\r\n } catch (e) {\r\n error = e;\r\n }\r\n return Query(...keyRange, error);\r\n };\r\n\r\n this.filter = function (...args) {\r\n var query = Query(null, null);\r\n return query.filter(...args);\r\n };\r\n\r\n this.all = function () {\r\n return this.filter();\r\n };\r\n };\r\n\r\n var createSchema = function (e, schema, db) {\r\n if (typeof schema === 'function') {\r\n schema = schema();\r\n }\r\n\r\n if (!schema || schema.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < db.objectStoreNames.length; i++) {\r\n var name = db.objectStoreNames[i];\r\n if (schema.hasOwnProperty(name) === false) {\r\n e.currentTarget.transaction.db.deleteObjectStore(name);\r\n }\r\n }\r\n\r\n var tableName;\r\n for (tableName in schema) {\r\n var table = schema[tableName];\r\n var store;\r\n if (!hasOwn.call(schema, tableName) || db.objectStoreNames.contains(tableName)) {\r\n store = e.currentTarget.transaction.objectStore(tableName);\r\n } else {\r\n store = db.createObjectStore(tableName, table.key);\r\n }\r\n\r\n var indexKey;\r\n for (indexKey in table.indexes) {\r\n var index = table.indexes[indexKey];\r\n try {\r\n store.index(indexKey);\r\n } catch (err) {\r\n store.createIndex(indexKey, index.key || indexKey, Object.keys(index).length ? index : { unique: false });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var open = function (e, server, noServerMethods, version, schema) {\r\n var db = e.target.result;\r\n dbCache[server][version] = db;\r\n\r\n var s = new Server(db, server, noServerMethods, version);\r\n return s instanceof Error ? Promise.reject(s) : Promise.resolve(s);\r\n };\r\n\r\n var db = {\r\n version: '0.13.2',\r\n open: function (options) {\r\n var server = options.server;\r\n var version = options.version || 1;\r\n if (!dbCache[server]) {\r\n dbCache[server] = {};\r\n }\r\n return new Promise(function (resolve, reject) {\r\n if (dbCache[server][version]) {\r\n open({\r\n target: {\r\n result: dbCache[server][version]\r\n }\r\n }, server, options.noServerMethods, version, options.schema)\r\n .then(resolve, reject);\r\n } else {\r\n let request = indexedDB.open(server, version);\r\n\r\n request.onsuccess = e => open(e, server, options.noServerMethods, version, options.schema).then(resolve, reject);\r\n request.onupgradeneeded = e => createSchema(e, options.schema, e.target.result);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // open() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = (ev) => {\r\n open(ev, server, options.noServerMethods, version, options.schema)\r\n .then(res, rej);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n }\r\n });\r\n },\r\n\r\n delete: function (dbName) {\r\n return new Promise(function (resolve, reject) {\r\n var request = indexedDB.deleteDatabase(dbName);\r\n\r\n request.onsuccess = e => resolve(e);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // delete() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = ev => {\r\n if (!('newVersion' in ev)) {\r\n ev.newVersion = e.newVersion;\r\n }\r\n\r\n if (!('oldVersion' in ev)) {\r\n ev.oldVersion = e.oldVersion;\r\n }\r\n\r\n res(ev);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n });\r\n },\r\n\r\n cmp: function (param1, param2) {\r\n return indexedDB.cmp(param1, param2);\r\n }\r\n };\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = db;\r\n } else if (typeof define === 'function' && define.amd) {\r\n define(function () { return db; });\r\n } else {\r\n local.db = db;\r\n }\r\n}(self));\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/db.js"],"names":[],"mappings":"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","file":"db.js","sourcesContent":["(function (local) {\r\n 'use strict';\r\n\r\n const IDBKeyRange = local.IDBKeyRange || local.webkitIDBKeyRange;\r\n const transactionModes = {\r\n readonly: 'readonly',\r\n readwrite: 'readwrite'\r\n };\r\n const hasOwn = Object.prototype.hasOwnProperty;\r\n const defaultMapper = x => x;\r\n\r\n let indexedDB = local.indexedDB || local.webkitIndexedDB ||\r\n local.mozIndexedDB || local.oIndexedDB || local.msIndexedDB ||\r\n local.shimIndexedDB || (function () {\r\n throw new Error('IndexedDB required');\r\n }());\r\n\r\n const dbCache = {};\r\n const serverEvents = ['abort', 'error', 'versionchange'];\r\n\r\n function mongoDBToKeyRangeArgs (opts) {\r\n var keys = Object.keys(opts).sort();\r\n if (keys.length === 1) {\r\n var key = keys[0];\r\n var val = opts[key];\r\n var name, inclusive;\r\n switch (key) {\r\n case 'eq': name = 'only'; break;\r\n case 'gt':\r\n name = 'lowerBound';\r\n inclusive = true;\r\n break;\r\n case 'lt':\r\n name = 'upperBound';\r\n inclusive = true;\r\n break;\r\n case 'gte': name = 'lowerBound'; break;\r\n case 'lte': name = 'upperBound'; break;\r\n default: throw new TypeError('`' + key + '` is not valid key');\r\n }\r\n return [name, [val, inclusive]];\r\n }\r\n var x = opts[keys[0]];\r\n var y = opts[keys[1]];\r\n var pattern = keys.join('-');\r\n\r\n switch (pattern) {\r\n case 'gt-lt': case 'gt-lte': case 'gte-lt': case 'gte-lte':\r\n return ['bound', [x, y, keys[0] === 'gt', keys[1] === 'lt']];\r\n default: throw new TypeError(\r\n '`' + pattern + '` are conflicted keys'\r\n );\r\n }\r\n }\r\n function mongoifyKey (key) {\r\n if (key && typeof key === 'object' && !(key instanceof IDBKeyRange)) {\r\n let [type, args] = mongoDBToKeyRangeArgs(key);\r\n return IDBKeyRange[type](...args);\r\n }\r\n return key;\r\n }\r\n\r\n var Server = function (db, name, noServerMethods, version) {\r\n var closed = false;\r\n\r\n this.getIndexedDB = () => db;\r\n this.isClosed = () => closed;\r\n\r\n this.add = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => {\r\n // prevent Firefox from throwing a ConstraintError and aborting (hard)\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=872873\r\n e.preventDefault();\r\n reject(e);\r\n };\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n records.forEach(function (record) {\r\n var req;\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n req = store.add(record, key);\r\n } else {\r\n req = store.add(record);\r\n }\r\n\r\n req.onsuccess = function (e) {\r\n var target = e.target;\r\n var keyPath = target.source.keyPath;\r\n if (keyPath === null) {\r\n keyPath = '__id__';\r\n }\r\n Object.defineProperty(record, keyPath, {\r\n value: target.result,\r\n enumerable: true\r\n });\r\n };\r\n });\r\n });\r\n };\r\n\r\n this.update = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n records.forEach(function (record) {\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n store.put(record, key);\r\n } else {\r\n store.put(record);\r\n }\r\n });\r\n });\r\n };\r\n\r\n this.remove = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(key);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.delete(key);\r\n });\r\n };\r\n\r\n this.clear = function (table) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.clear();\r\n });\r\n };\r\n\r\n this.close = function () {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n }\r\n db.close();\r\n closed = true;\r\n delete dbCache[name][version];\r\n resolve();\r\n });\r\n };\r\n\r\n this.get = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = store.get(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n this.query = function (table, index) {\r\n var error = closed ? 'Database has been closed' : null;\r\n return new IndexQuery(table, db, index, error);\r\n };\r\n\r\n this.count = function (table, key) {\r\n return new Promise((resolve, reject) => {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = key === undefined ? store.count() : store.count(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n this.addEventListener = function (eventName, handler) {\r\n if (!serverEvents.includes(eventName)) {\r\n throw new Error('Unrecognized event type ' + eventName);\r\n }\r\n db.addEventListener(eventName, handler);\r\n };\r\n\r\n this.removeEventListener = function (eventName, handler) {\r\n if (!serverEvents.includes(eventName)) {\r\n throw new Error('Unrecognized event type ' + eventName);\r\n }\r\n db.removeEventListener(eventName, handler);\r\n };\r\n\r\n serverEvents.forEach(function (evName) {\r\n this[evName] = function (handler) {\r\n this.addEventListener(evName, handler);\r\n };\r\n }, this);\r\n\r\n if (noServerMethods) {\r\n return;\r\n }\r\n\r\n var err;\r\n [].some.call(db.objectStoreNames, storeName => {\r\n if (this[storeName]) {\r\n err = new Error('The store name, \"' + storeName + '\", which you have attempted to load, conflicts with db.js method names.\"');\r\n this.close();\r\n return true;\r\n }\r\n this[storeName] = {};\r\n var keys = Object.keys(this);\r\n keys.filter(key => !(([...serverEvents, 'close', 'addEventListener', 'removeEventListener']).includes(key)))\r\n .map(key =>\r\n this[storeName][key] = (...args) => this[key](storeName, ...args)\r\n );\r\n });\r\n return err;\r\n };\r\n\r\n var IndexQuery = function (table, db, indexName, preexistingError) {\r\n var modifyObj = false;\r\n\r\n var runQuery = function (type, args, cursorType, direction, limitRange, filters, mapper) {\r\n return new Promise(function (resolve, reject) {\r\n var keyRange = type ? IDBKeyRange[type](...args) : null;\r\n var results = [];\r\n var indexArgs = [keyRange];\r\n var counter = 0;\r\n\r\n var transaction = db.transaction(table, modifyObj ? transactionModes.readwrite : transactionModes.readonly);\r\n transaction.oncomplete = () => resolve(results);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var index = indexName ? store.index(indexName) : store;\r\n\r\n limitRange = limitRange || null;\r\n filters = filters || [];\r\n if (cursorType !== 'count') {\r\n indexArgs.push(direction || 'next');\r\n }\r\n\r\n // create a function that will set in the modifyObj properties into\r\n // the passed record.\r\n var modifyKeys = modifyObj ? Object.keys(modifyObj) : [];\r\n\r\n var modifyRecord = function (record) {\r\n modifyKeys.forEach(key => {\r\n var val = modifyObj[key];\r\n if (val instanceof Function) { val = val(record); }\r\n record[key] = val;\r\n });\r\n return record;\r\n };\r\n\r\n index[cursorType](...indexArgs).onsuccess = function (e) {\r\n var cursor = e.target.result;\r\n if (typeof cursor === 'number') {\r\n results = cursor;\r\n } else if (cursor) {\r\n if (limitRange !== null && limitRange[0] > counter) {\r\n counter = limitRange[0];\r\n cursor.advance(limitRange[0]);\r\n } else if (limitRange !== null && counter >= (limitRange[0] + limitRange[1])) {\r\n // out of limit range... skip\r\n } else {\r\n var matchFilter = true;\r\n var result = 'value' in cursor ? cursor.value : cursor.key;\r\n\r\n filters.forEach(function (filter) {\r\n if (!filter || !filter.length) {\r\n // Invalid filter do nothing\r\n } else if (filter.length === 2) {\r\n matchFilter = matchFilter && (result[filter[0]] === filter[1]);\r\n } else {\r\n matchFilter = matchFilter && filter[0](result);\r\n }\r\n });\r\n\r\n if (matchFilter) {\r\n counter++;\r\n // if we're doing a modify, run it now\r\n if (modifyObj) {\r\n result = modifyRecord(result);\r\n cursor.update(result);\r\n }\r\n results.push(mapper(result));\r\n }\r\n cursor.continue();\r\n }\r\n }\r\n };\r\n });\r\n };\r\n\r\n var Query = function (type, args, queuedError) {\r\n var direction = 'next';\r\n var cursorType = 'openCursor';\r\n var filters = [];\r\n var limitRange = null;\r\n var mapper = defaultMapper;\r\n var unique = false;\r\n var error = preexistingError || queuedError;\r\n\r\n var execute = function () {\r\n if (error) {\r\n return Promise.reject(error);\r\n }\r\n return runQuery(type, args, cursorType, unique ? direction + 'unique' : direction, limitRange, filters, mapper);\r\n };\r\n\r\n var limit = function (...args) {\r\n limitRange = args.slice(0, 2);\r\n if (limitRange.length === 1) {\r\n limitRange.unshift(0);\r\n }\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n var count = function () {\r\n direction = null;\r\n cursorType = 'count';\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n\r\n var filter, desc, distinct, modify, map;\r\n var keys = function () {\r\n cursorType = 'openKeyCursor';\r\n\r\n return {\r\n desc,\r\n execute,\r\n filter,\r\n distinct,\r\n map\r\n };\r\n };\r\n filter = function (...args) {\r\n filters.push(args.slice(0, 2));\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n desc = function () {\r\n direction = 'prev';\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n distinct,\r\n modify,\r\n map\r\n };\r\n };\r\n distinct = function () {\r\n unique = true;\r\n return {\r\n keys,\r\n count,\r\n execute,\r\n filter,\r\n desc,\r\n modify,\r\n map\r\n };\r\n };\r\n modify = function (update) {\r\n modifyObj = update;\r\n return {\r\n execute\r\n };\r\n };\r\n map = function (fn) {\r\n mapper = fn;\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n ['only', 'bound', 'upperBound', 'lowerBound'].forEach((name) => {\r\n this[name] = function () {\r\n return Query(name, arguments);\r\n };\r\n });\r\n\r\n this.range = function (opts) {\r\n var error;\r\n var keyRange = [null, null];\r\n try {\r\n keyRange = mongoDBToKeyRangeArgs(opts);\r\n } catch (e) {\r\n error = e;\r\n }\r\n return Query(...keyRange, error);\r\n };\r\n\r\n this.filter = function (...args) {\r\n var query = Query(null, null);\r\n return query.filter(...args);\r\n };\r\n\r\n this.all = function () {\r\n return this.filter();\r\n };\r\n };\r\n\r\n var createSchema = function (e, schema, db) {\r\n if (typeof schema === 'function') {\r\n schema = schema();\r\n }\r\n\r\n if (!schema || schema.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < db.objectStoreNames.length; i++) {\r\n var name = db.objectStoreNames[i];\r\n if (!schema.hasOwnProperty(name)) {\r\n e.currentTarget.transaction.db.deleteObjectStore(name);\r\n }\r\n }\r\n\r\n var tableName;\r\n for (tableName in schema) {\r\n var table = schema[tableName];\r\n var store;\r\n if (!hasOwn.call(schema, tableName) || db.objectStoreNames.contains(tableName)) {\r\n store = e.currentTarget.transaction.objectStore(tableName);\r\n } else {\r\n store = db.createObjectStore(tableName, table.key);\r\n }\r\n\r\n var indexKey;\r\n for (indexKey in table.indexes) {\r\n var index = table.indexes[indexKey];\r\n try {\r\n store.index(indexKey);\r\n } catch (err) {\r\n store.createIndex(indexKey, index.key || indexKey, Object.keys(index).length ? index : { unique: false });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var open = function (e, server, noServerMethods, version, schema) {\r\n var db = e.target.result;\r\n dbCache[server][version] = db;\r\n\r\n var s = new Server(db, server, noServerMethods, version);\r\n return s instanceof Error ? Promise.reject(s) : Promise.resolve(s);\r\n };\r\n\r\n var db = {\r\n version: '0.14.0',\r\n open: function (options) {\r\n var server = options.server;\r\n var version = options.version || 1;\r\n if (!dbCache[server]) {\r\n dbCache[server] = {};\r\n }\r\n return new Promise(function (resolve, reject) {\r\n if (dbCache[server][version]) {\r\n open({\r\n target: {\r\n result: dbCache[server][version]\r\n }\r\n }, server, options.noServerMethods, version, options.schema)\r\n .then(resolve, reject);\r\n } else {\r\n let request = indexedDB.open(server, version);\r\n\r\n request.onsuccess = e => open(e, server, options.noServerMethods, version, options.schema).then(resolve, reject);\r\n request.onupgradeneeded = e => createSchema(e, options.schema, e.target.result);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // open() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = (ev) => {\r\n open(ev, server, options.noServerMethods, version, options.schema)\r\n .then(res, rej);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n }\r\n });\r\n },\r\n\r\n delete: function (dbName) {\r\n return new Promise(function (resolve, reject) {\r\n var request = indexedDB.deleteDatabase(dbName);\r\n\r\n request.onsuccess = e => resolve(e);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // delete() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = ev => {\r\n // Attempt to workaround Firefox event version problem: https://bugzilla.mozilla.org/show_bug.cgi?id=1220279\r\n if (!('newVersion' in ev)) {\r\n ev.newVersion = e.newVersion;\r\n }\r\n\r\n if (!('oldVersion' in ev)) {\r\n ev.oldVersion = e.oldVersion;\r\n }\r\n\r\n res(ev);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n });\r\n },\r\n\r\n cmp: function (param1, param2) {\r\n return indexedDB.cmp(param1, param2);\r\n }\r\n };\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = db;\r\n } else if (typeof define === 'function' && define.amd) {\r\n define(function () { return db; });\r\n } else {\r\n local.db = db;\r\n }\r\n}(self));\r\n"]} \ No newline at end of file diff --git a/dist/db.min.js b/dist/db.min.js index eab9591..d6e13d4 100644 --- a/dist/db.min.js +++ b/dist/db.min.js @@ -1,2 +1,2 @@ -"use strict";function _toConsumableArray(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b1?c-1:0),f=1;c>f;f++)d[f-1]=arguments[f];return new Promise(function(c,f){var g=this;if(h)return void f("Database has been closed");var i=d.reduce(function(a,b){return a.concat(b)},[]),j=a.transaction(b,e.readwrite);j.oncomplete=function(){return c(i,g)},j.onerror=function(a){a.preventDefault(),f(a)},j.onabort=function(a){return f(a)};var k=j.objectStore(b);i.forEach(function(a){var b;if(a.item&&a.key){var c=a.key;a=a.item,b=k.add(a,c)}else b=k.add(a);b.onsuccess=function(b){var c=b.target,d=c.source.keyPath;null===d&&(d="__id__"),Object.defineProperty(a,d,{value:c.result,enumerable:!0})}})})},this.update=function(b){for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;c>f;f++)d[f-1]=arguments[f];return new Promise(function(c,f){var g=this;if(h)return void f("Database has been closed");var i=a.transaction(b,e.readwrite);i.oncomplete=function(){return c(k,g)},i.onerror=function(a){return f(a)},i.onabort=function(a){return f(a)};var j=i.objectStore(b),k=d.reduce(function(a,b){return a.concat(b)},[]);k.forEach(function(a){if(a.item&&a.key){var b=a.key;a=a.item,j.put(a,b)}else j.put(a)})})},this.remove=function(b,c){return new Promise(function(d,f){if(h)return void f("Database has been closed");var g=a.transaction(b,e.readwrite);g.oncomplete=function(){return d(c)},g.onerror=function(a){return f(a)},g.onabort=function(a){return f(a)};var i=g.objectStore(b);i["delete"](c)})},this.clear=function(b){return new Promise(function(c,d){if(h)return void d("Database has been closed");var f=a.transaction(b,e.readwrite);f.oncomplete=function(){return c()},f.onerror=function(a){return d(a)},f.onabort=function(a){return d(a)};var g=f.objectStore(b);g.clear()})},this.close=function(){return new Promise(function(c,d){h&&d("Database has been closed"),a.close(),h=!0,delete i[b][f],c()})},this.get=function(b,d){return new Promise(function(e,f){if(h)return void f("Database has been closed");var g=a.transaction(b);g.onerror=function(a){return f(a)},g.onabort=function(a){return f(a)};var i=g.objectStore(b);try{d=c(d)}catch(j){f(j)}var k=i.get(d);k.onsuccess=function(a){return e(a.target.result)}})},this.query=function(b,c){var d=h?"Database has been closed":null;return new k(b,a,c,d)},this.count=function(b,d){return new Promise(function(e,f){if(h)return void f("Database has been closed");var g=a.transaction(b);g.onerror=function(a){return f(a)},g.onabort=function(a){return f(a)};var i=g.objectStore(b);try{d=c(d)}catch(j){f(j)}var k=void 0===d?i.count():i.count(d);k.onsuccess=function(a){return e(a.target.result)}})},!d){var j;return[].some.call(a.objectStoreNames,function(a){if(g[a])return j=new Error('The store name, "'+a+'", which you have attempted to load, conflicts with db.js method names."'),g.close(),!0;g[a]={};var b=Object.keys(g);b.filter(function(a){return"close"!==a}).map(function(b){return g[a][b]=function(){for(var c=arguments.length,d=Array(c),e=0;c>e;e++)d[e]=arguments[e];return g[b].apply(g,[a].concat(d))}})}),j}},k=function(a,c,f,h){var i=this,j=!1,k=function(b,g,h,i,k,l,m){return new Promise(function(n,o){var p=b?d[b].apply(d,_toConsumableArray(g)):null,q=[],r=[p],s=0,t=c.transaction(a,j?e.readwrite:e.readonly);t.oncomplete=function(){return n(q)},t.onerror=function(a){return o(a)},t.onabort=function(a){return o(a)};var u=t.objectStore(a),v=f?u.index(f):u;k=k||null,l=l||[],"count"!==h&&r.push(i||"next");var w=j?Object.keys(j):[],x=function(a){return w.forEach(function(b){var c=j[b];c instanceof Function&&(c=c(a)),a[b]=c}),a};v[h].apply(v,r).onsuccess=function(a){var b=a.target.result;if("number"==typeof b)q=b;else if(b)if(null!==k&&k[0]>s)s=k[0],b.advance(k[0]);else if(null!==k&&s>=k[0]+k[1]);else{var c=!0,d="value"in b?b.value:b.key;l.forEach(function(a){a&&a.length&&(c=2===a.length?c&&d[a[0]]===a[1]:c&&a[0](d))}),c&&(s++,j&&(d=x(d),b.update(d)),q.push(m(d))),b["continue"]()}}})},l=function(a,b,c){var d,e,f,i,l,m="next",n="openCursor",o=[],p=null,q=g,r=!1,s=h||c,t=function(){return s?Promise.reject(s):k(a,b,n,r?m+"unique":m,p,o,q)},u=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return p=b.slice(0,2),1===p.length&&p.unshift(0),{execute:t}},v=function(){return m=null,n="count",{execute:t}},w=function(){return n="openKeyCursor",{desc:e,execute:t,filter:d,distinct:f,map:l}};return d=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return o.push(b.slice(0,2)),{keys:w,execute:t,filter:d,desc:e,distinct:f,modify:i,limit:u,map:l}},e=function(){return m="prev",{keys:w,execute:t,filter:d,distinct:f,modify:i,map:l}},f=function(){return r=!0,{keys:w,count:v,execute:t,filter:d,desc:e,modify:i,map:l}},i=function(a){return j=a,{execute:t}},l=function(a){return q=a,{execute:t,count:v,keys:w,filter:d,desc:e,distinct:f,modify:i,limit:u,map:l}},{execute:t,count:v,keys:w,filter:d,desc:e,distinct:f,modify:i,limit:u,map:l}};["only","bound","upperBound","lowerBound"].forEach(function(a){i[a]=function(){return l(a,arguments)}}),this.range=function(a){var c,d=[null,null];try{d=b(a)}catch(e){c=e}return l.apply(void 0,_toConsumableArray(d).concat([c]))},this.filter=function(){var a=l(null,null);return a.filter.apply(a,arguments)},this.all=function(){return this.filter()}},l=function(a,b,c){if("function"==typeof b&&(b=b()),b&&0!==b.length){for(var d=0;d1?c-1:0),f=1;c>f;f++)d[f-1]=arguments[f];return new Promise(function(c,f){var g=this;if(h)return void f("Database has been closed");var i=d.reduce(function(a,b){return a.concat(b)},[]),j=a.transaction(b,e.readwrite);j.oncomplete=function(){return c(i,g)},j.onerror=function(a){a.preventDefault(),f(a)},j.onabort=function(a){return f(a)};var k=j.objectStore(b);i.forEach(function(a){var b;if(a.item&&a.key){var c=a.key;a=a.item,b=k.add(a,c)}else b=k.add(a);b.onsuccess=function(b){var c=b.target,d=c.source.keyPath;null===d&&(d="__id__"),Object.defineProperty(a,d,{value:c.result,enumerable:!0})}})})},this.update=function(b){for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;c>f;f++)d[f-1]=arguments[f];return new Promise(function(c,f){var g=this;if(h)return void f("Database has been closed");var i=a.transaction(b,e.readwrite);i.oncomplete=function(){return c(k,g)},i.onerror=function(a){return f(a)},i.onabort=function(a){return f(a)};var j=i.objectStore(b),k=d.reduce(function(a,b){return a.concat(b)},[]);k.forEach(function(a){if(a.item&&a.key){var b=a.key;a=a.item,j.put(a,b)}else j.put(a)})})},this.remove=function(b,c){return new Promise(function(d,f){if(h)return void f("Database has been closed");var g=a.transaction(b,e.readwrite);g.oncomplete=function(){return d(c)},g.onerror=function(a){return f(a)},g.onabort=function(a){return f(a)};var i=g.objectStore(b);i["delete"](c)})},this.clear=function(b){return new Promise(function(c,d){if(h)return void d("Database has been closed");var f=a.transaction(b,e.readwrite);f.oncomplete=function(){return c()},f.onerror=function(a){return d(a)},f.onabort=function(a){return d(a)};var g=f.objectStore(b);g.clear()})},this.close=function(){return new Promise(function(c,d){h&&d("Database has been closed"),a.close(),h=!0,delete i[b][f],c()})},this.get=function(b,d){return new Promise(function(e,f){if(h)return void f("Database has been closed");var g=a.transaction(b);g.onerror=function(a){return f(a)},g.onabort=function(a){return f(a)};var i=g.objectStore(b);try{d=c(d)}catch(j){f(j)}var k=i.get(d);k.onsuccess=function(a){return e(a.target.result)}})},this.query=function(b,c){var d=h?"Database has been closed":null;return new l(b,a,c,d)},this.count=function(b,d){return new Promise(function(e,f){if(h)return void f("Database has been closed");var g=a.transaction(b);g.onerror=function(a){return f(a)},g.onabort=function(a){return f(a)};var i=g.objectStore(b);try{d=c(d)}catch(j){f(j)}var k=void 0===d?i.count():i.count(d);k.onsuccess=function(a){return e(a.target.result)}})},this.addEventListener=function(b,c){if(!j.includes(b))throw new Error("Unrecognized event type "+b);a.addEventListener(b,c)},this.removeEventListener=function(b,c){if(!j.includes(b))throw new Error("Unrecognized event type "+b);a.removeEventListener(b,c)},j.forEach(function(a){this[a]=function(b){this.addEventListener(a,b)}},this),!d){var k;return[].some.call(a.objectStoreNames,function(a){if(g[a])return k=new Error('The store name, "'+a+'", which you have attempted to load, conflicts with db.js method names."'),g.close(),!0;g[a]={};var b=Object.keys(g);b.filter(function(a){return![].concat(j,["close","addEventListener","removeEventListener"]).includes(a)}).map(function(b){return g[a][b]=function(){for(var c=arguments.length,d=Array(c),e=0;c>e;e++)d[e]=arguments[e];return g[b].apply(g,[a].concat(d))}})}),k}},l=function(a,c,f,h){var i=this,j=!1,k=function(b,g,h,i,k,l,m){return new Promise(function(n,o){var p=b?d[b].apply(d,_toConsumableArray(g)):null,q=[],r=[p],s=0,t=c.transaction(a,j?e.readwrite:e.readonly);t.oncomplete=function(){return n(q)},t.onerror=function(a){return o(a)},t.onabort=function(a){return o(a)};var u=t.objectStore(a),v=f?u.index(f):u;k=k||null,l=l||[],"count"!==h&&r.push(i||"next");var w=j?Object.keys(j):[],x=function(a){return w.forEach(function(b){var c=j[b];c instanceof Function&&(c=c(a)),a[b]=c}),a};v[h].apply(v,r).onsuccess=function(a){var b=a.target.result;if("number"==typeof b)q=b;else if(b)if(null!==k&&k[0]>s)s=k[0],b.advance(k[0]);else if(null!==k&&s>=k[0]+k[1]);else{var c=!0,d="value"in b?b.value:b.key;l.forEach(function(a){a&&a.length&&(c=2===a.length?c&&d[a[0]]===a[1]:c&&a[0](d))}),c&&(s++,j&&(d=x(d),b.update(d)),q.push(m(d))),b["continue"]()}}})},l=function(a,b,c){var d,e,f,i,l,m="next",n="openCursor",o=[],p=null,q=g,r=!1,s=h||c,t=function(){return s?Promise.reject(s):k(a,b,n,r?m+"unique":m,p,o,q)},u=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return p=b.slice(0,2),1===p.length&&p.unshift(0),{execute:t}},v=function(){return m=null,n="count",{execute:t}},w=function(){return n="openKeyCursor",{desc:e,execute:t,filter:d,distinct:f,map:l}};return d=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return o.push(b.slice(0,2)),{keys:w,execute:t,filter:d,desc:e,distinct:f,modify:i,limit:u,map:l}},e=function(){return m="prev",{keys:w,execute:t,filter:d,distinct:f,modify:i,map:l}},f=function(){return r=!0,{keys:w,count:v,execute:t,filter:d,desc:e,modify:i,map:l}},i=function(a){return j=a,{execute:t}},l=function(a){return q=a,{execute:t,count:v,keys:w,filter:d,desc:e,distinct:f,modify:i,limit:u,map:l}},{execute:t,count:v,keys:w,filter:d,desc:e,distinct:f,modify:i,limit:u,map:l}};["only","bound","upperBound","lowerBound"].forEach(function(a){i[a]=function(){return l(a,arguments)}}),this.range=function(a){var c,d=[null,null];try{d=b(a)}catch(e){c=e}return l.apply(void 0,_toConsumableArray(d).concat([c]))},this.filter=function(){var a=l(null,null);return a.filter.apply(a,arguments)},this.all=function(){return this.filter()}},m=function(a,b,c){if("function"==typeof b&&(b=b()),b&&0!==b.length){for(var d=0;d x;\r\n\r\n let indexedDB = local.indexedDB || local.webkitIndexedDB ||\r\n local.mozIndexedDB || local.oIndexedDB || local.msIndexedDB ||\r\n local.shimIndexedDB || (function () {\r\n throw new Error('IndexedDB required');\r\n }());\r\n\r\n const dbCache = {};\r\n\r\n function mongoDBToKeyRangeArgs (opts) {\r\n var keys = Object.keys(opts).sort();\r\n if (keys.length === 1) {\r\n var key = keys[0];\r\n var val = opts[key];\r\n var name, inclusive;\r\n switch (key) {\r\n case 'eq': name = 'only'; break;\r\n case 'gt':\r\n name = 'lowerBound';\r\n inclusive = true;\r\n break;\r\n case 'lt':\r\n name = 'upperBound';\r\n inclusive = true;\r\n break;\r\n case 'gte': name = 'lowerBound'; break;\r\n case 'lte': name = 'upperBound'; break;\r\n default: throw new TypeError('`' + key + '` is not valid key');\r\n }\r\n return [name, [val, inclusive]];\r\n }\r\n var x = opts[keys[0]];\r\n var y = opts[keys[1]];\r\n var pattern = keys.join('-');\r\n\r\n switch (pattern) {\r\n case 'gt-lt': case 'gt-lte': case 'gte-lt': case 'gte-lte':\r\n return ['bound', [x, y, keys[0] === 'gt', keys[1] === 'lt']];\r\n default: throw new TypeError(\r\n '`' + pattern + '` are conflicted keys'\r\n );\r\n }\r\n }\r\n function mongoifyKey (key) {\r\n if (key && typeof key === 'object' && !(key instanceof IDBKeyRange)) {\r\n let [type, args] = mongoDBToKeyRangeArgs(key);\r\n return IDBKeyRange[type](...args);\r\n }\r\n return key;\r\n }\r\n\r\n var Server = function (db, name, noServerMethods, version) {\r\n var closed = false;\r\n\r\n this.getIndexedDB = () => db;\r\n this.isClosed = () => closed;\r\n\r\n this.add = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => {\r\n // prevent Firefox from throwing a ConstraintError and aborting (hard)\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=872873\r\n e.preventDefault();\r\n reject(e);\r\n };\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n records.forEach(function (record) {\r\n var req;\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n req = store.add(record, key);\r\n } else {\r\n req = store.add(record);\r\n }\r\n\r\n req.onsuccess = function (e) {\r\n var target = e.target;\r\n var keyPath = target.source.keyPath;\r\n if (keyPath === null) {\r\n keyPath = '__id__';\r\n }\r\n Object.defineProperty(record, keyPath, {\r\n value: target.result,\r\n enumerable: true\r\n });\r\n };\r\n });\r\n });\r\n };\r\n\r\n this.update = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n records.forEach(function (record) {\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n store.put(record, key);\r\n } else {\r\n store.put(record);\r\n }\r\n });\r\n });\r\n };\r\n\r\n this.remove = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(key);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.delete(key);\r\n });\r\n };\r\n\r\n this.clear = function (table) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.clear();\r\n });\r\n };\r\n\r\n this.close = function () {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n }\r\n db.close();\r\n closed = true;\r\n delete dbCache[name][version];\r\n resolve();\r\n });\r\n };\r\n\r\n this.get = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = store.get(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n this.query = function (table, index) {\r\n var error = closed ? 'Database has been closed' : null;\r\n return new IndexQuery(table, db, index, error);\r\n };\r\n\r\n this.count = function (table, key) {\r\n return new Promise((resolve, reject) => {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = key === undefined ? store.count() : store.count(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n if (noServerMethods) {\r\n return;\r\n }\r\n\r\n var err;\r\n [].some.call(db.objectStoreNames, storeName => {\r\n if (this[storeName]) {\r\n err = new Error('The store name, \"' + storeName + '\", which you have attempted to load, conflicts with db.js method names.\"');\r\n this.close();\r\n return true;\r\n }\r\n this[storeName] = {};\r\n var keys = Object.keys(this);\r\n keys.filter(key => key !== 'close')\r\n .map(key =>\r\n this[storeName][key] = (...args) => this[key](storeName, ...args)\r\n );\r\n });\r\n return err;\r\n };\r\n\r\n var IndexQuery = function (table, db, indexName, preexistingError) {\r\n var modifyObj = false;\r\n\r\n var runQuery = function (type, args, cursorType, direction, limitRange, filters, mapper) {\r\n return new Promise(function (resolve, reject) {\r\n var keyRange = type ? IDBKeyRange[type](...args) : null;\r\n var results = [];\r\n var indexArgs = [keyRange];\r\n var counter = 0;\r\n\r\n var transaction = db.transaction(table, modifyObj ? transactionModes.readwrite : transactionModes.readonly);\r\n transaction.oncomplete = () => resolve(results);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var index = indexName ? store.index(indexName) : store;\r\n\r\n limitRange = limitRange || null;\r\n filters = filters || [];\r\n if (cursorType !== 'count') {\r\n indexArgs.push(direction || 'next');\r\n }\r\n\r\n // create a function that will set in the modifyObj properties into\r\n // the passed record.\r\n var modifyKeys = modifyObj ? Object.keys(modifyObj) : [];\r\n\r\n var modifyRecord = function (record) {\r\n modifyKeys.forEach(key => {\r\n var val = modifyObj[key];\r\n if (val instanceof Function) { val = val(record); }\r\n record[key] = val;\r\n });\r\n return record;\r\n };\r\n\r\n index[cursorType](...indexArgs).onsuccess = function (e) {\r\n var cursor = e.target.result;\r\n if (typeof cursor === 'number') {\r\n results = cursor;\r\n } else if (cursor) {\r\n if (limitRange !== null && limitRange[0] > counter) {\r\n counter = limitRange[0];\r\n cursor.advance(limitRange[0]);\r\n } else if (limitRange !== null && counter >= (limitRange[0] + limitRange[1])) {\r\n // out of limit range... skip\r\n } else {\r\n var matchFilter = true;\r\n var result = 'value' in cursor ? cursor.value : cursor.key;\r\n\r\n filters.forEach(function (filter) {\r\n if (!filter || !filter.length) {\r\n // Invalid filter do nothing\r\n } else if (filter.length === 2) {\r\n matchFilter = matchFilter && (result[filter[0]] === filter[1]);\r\n } else {\r\n matchFilter = matchFilter && filter[0](result);\r\n }\r\n });\r\n\r\n if (matchFilter) {\r\n counter++;\r\n // if we're doing a modify, run it now\r\n if (modifyObj) {\r\n result = modifyRecord(result);\r\n cursor.update(result);\r\n }\r\n results.push(mapper(result));\r\n }\r\n cursor.continue();\r\n }\r\n }\r\n };\r\n });\r\n };\r\n\r\n var Query = function (type, args, queuedError) {\r\n var direction = 'next';\r\n var cursorType = 'openCursor';\r\n var filters = [];\r\n var limitRange = null;\r\n var mapper = defaultMapper;\r\n var unique = false;\r\n var error = preexistingError || queuedError;\r\n\r\n var execute = function () {\r\n if (error) {\r\n return Promise.reject(error);\r\n }\r\n return runQuery(type, args, cursorType, unique ? direction + 'unique' : direction, limitRange, filters, mapper);\r\n };\r\n\r\n var limit = function (...args) {\r\n limitRange = args.slice(0, 2);\r\n if (limitRange.length === 1) {\r\n limitRange.unshift(0);\r\n }\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n var count = function () {\r\n direction = null;\r\n cursorType = 'count';\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n\r\n var filter, desc, distinct, modify, map;\r\n var keys = function () {\r\n cursorType = 'openKeyCursor';\r\n\r\n return {\r\n desc,\r\n execute,\r\n filter,\r\n distinct,\r\n map\r\n };\r\n };\r\n filter = function (...args) {\r\n filters.push(args.slice(0, 2));\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n desc = function () {\r\n direction = 'prev';\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n distinct,\r\n modify,\r\n map\r\n };\r\n };\r\n distinct = function () {\r\n unique = true;\r\n return {\r\n keys,\r\n count,\r\n execute,\r\n filter,\r\n desc,\r\n modify,\r\n map\r\n };\r\n };\r\n modify = function (update) {\r\n modifyObj = update;\r\n return {\r\n execute\r\n };\r\n };\r\n map = function (fn) {\r\n mapper = fn;\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n ['only', 'bound', 'upperBound', 'lowerBound'].forEach((name) => {\r\n this[name] = function () {\r\n return Query(name, arguments);\r\n };\r\n });\r\n\r\n this.range = function (opts) {\r\n var error;\r\n var keyRange = [null, null];\r\n try {\r\n keyRange = mongoDBToKeyRangeArgs(opts);\r\n } catch (e) {\r\n error = e;\r\n }\r\n return Query(...keyRange, error);\r\n };\r\n\r\n this.filter = function (...args) {\r\n var query = Query(null, null);\r\n return query.filter(...args);\r\n };\r\n\r\n this.all = function () {\r\n return this.filter();\r\n };\r\n };\r\n\r\n var createSchema = function (e, schema, db) {\r\n if (typeof schema === 'function') {\r\n schema = schema();\r\n }\r\n\r\n if (!schema || schema.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < db.objectStoreNames.length; i++) {\r\n var name = db.objectStoreNames[i];\r\n if (schema.hasOwnProperty(name) === false) {\r\n e.currentTarget.transaction.db.deleteObjectStore(name);\r\n }\r\n }\r\n\r\n var tableName;\r\n for (tableName in schema) {\r\n var table = schema[tableName];\r\n var store;\r\n if (!hasOwn.call(schema, tableName) || db.objectStoreNames.contains(tableName)) {\r\n store = e.currentTarget.transaction.objectStore(tableName);\r\n } else {\r\n store = db.createObjectStore(tableName, table.key);\r\n }\r\n\r\n var indexKey;\r\n for (indexKey in table.indexes) {\r\n var index = table.indexes[indexKey];\r\n try {\r\n store.index(indexKey);\r\n } catch (err) {\r\n store.createIndex(indexKey, index.key || indexKey, Object.keys(index).length ? index : { unique: false });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var open = function (e, server, noServerMethods, version, schema) {\r\n var db = e.target.result;\r\n dbCache[server][version] = db;\r\n\r\n var s = new Server(db, server, noServerMethods, version);\r\n return s instanceof Error ? Promise.reject(s) : Promise.resolve(s);\r\n };\r\n\r\n var db = {\r\n version: '0.13.2',\r\n open: function (options) {\r\n var server = options.server;\r\n var version = options.version || 1;\r\n if (!dbCache[server]) {\r\n dbCache[server] = {};\r\n }\r\n return new Promise(function (resolve, reject) {\r\n if (dbCache[server][version]) {\r\n open({\r\n target: {\r\n result: dbCache[server][version]\r\n }\r\n }, server, options.noServerMethods, version, options.schema)\r\n .then(resolve, reject);\r\n } else {\r\n let request = indexedDB.open(server, version);\r\n\r\n request.onsuccess = e => open(e, server, options.noServerMethods, version, options.schema).then(resolve, reject);\r\n request.onupgradeneeded = e => createSchema(e, options.schema, e.target.result);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // open() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = (ev) => {\r\n open(ev, server, options.noServerMethods, version, options.schema)\r\n .then(res, rej);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n }\r\n });\r\n },\r\n\r\n delete: function (dbName) {\r\n return new Promise(function (resolve, reject) {\r\n var request = indexedDB.deleteDatabase(dbName);\r\n\r\n request.onsuccess = e => resolve(e);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // delete() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = ev => {\r\n if (!('newVersion' in ev)) {\r\n ev.newVersion = e.newVersion;\r\n }\r\n\r\n if (!('oldVersion' in ev)) {\r\n ev.oldVersion = e.oldVersion;\r\n }\r\n\r\n res(ev);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n });\r\n },\r\n\r\n cmp: function (param1, param2) {\r\n return indexedDB.cmp(param1, param2);\r\n }\r\n };\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = db;\r\n } else if (typeof define === 'function' && define.amd) {\r\n define(function () { return db; });\r\n } else {\r\n local.db = db;\r\n }\r\n}(self));\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/db.js"],"names":["local","mongoDBToKeyRangeArgs","opts","keys","Object","sort","length","name","inclusive","key","val","TypeError","x","y","pattern","join","mongoifyKey","_typeof","IDBKeyRange","type","_mongoDBToKeyRangeArg2","args","apply","_toConsumableArray","webkitIDBKeyRange","transactionModes","readonly","readwrite","hasOwn","prototype","hasOwnProperty","defaultMapper","indexedDB","webkitIndexedDB","mozIndexedDB","oIndexedDB","msIndexedDB","shimIndexedDB","Error","dbCache","serverEvents","Server","db","noServerMethods","version","closed","this","getIndexedDB","isClosed","add","table","Array","_len","_key","Promise","resolve","reject","records","reduce","aip","concat","transaction","oncomplete","_this","onerror","e","preventDefault","onabort","store","objectStore","forEach","record","req","item","onsuccess","target","keyPath","source","defineProperty","value","result","enumerable","update","_len2","_key2","_this2","put","remove","clear","close","get","query","index","error","IndexQuery","count","undefined","addEventListener","eventName","handler","includes","removeEventListener","evName","err","some","call","objectStoreNames","storeName","_this3","filter","map","_len3","_key3","indexName","preexistingError","modifyObj","runQuery","cursorType","direction","limitRange","filters","mapper","keyRange","results","indexArgs","counter","push","modifyKeys","modifyRecord","Function","cursor","advance","matchFilter","Query","queuedError","_filter","desc","distinct","modify","_map","unique","execute","limit","_len4","_key4","slice","unshift","_len5","_key5","fn","_this4","arguments","range","all","createSchema","schema","i","currentTarget","deleteObjectStore","tableName","contains","createObjectStore","indexKey","indexes","createIndex","_open","server","s","open","options","then","request","onupgradeneeded","onblocked","resume","res","rej","ev","delete","dbName","deleteDatabase","newVersion","oldVersion","cmp","param1","param2","module","exports","define","amd","self"],"mappings":"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","file":"db.min.js","sourcesContent":["(function (local) {\r\n 'use strict';\r\n\r\n const IDBKeyRange = local.IDBKeyRange || local.webkitIDBKeyRange;\r\n const transactionModes = {\r\n readonly: 'readonly',\r\n readwrite: 'readwrite'\r\n };\r\n const hasOwn = Object.prototype.hasOwnProperty;\r\n const defaultMapper = x => x;\r\n\r\n let indexedDB = local.indexedDB || local.webkitIndexedDB ||\r\n local.mozIndexedDB || local.oIndexedDB || local.msIndexedDB ||\r\n local.shimIndexedDB || (function () {\r\n throw new Error('IndexedDB required');\r\n }());\r\n\r\n const dbCache = {};\r\n const serverEvents = ['abort', 'error', 'versionchange'];\r\n\r\n function mongoDBToKeyRangeArgs (opts) {\r\n var keys = Object.keys(opts).sort();\r\n if (keys.length === 1) {\r\n var key = keys[0];\r\n var val = opts[key];\r\n var name, inclusive;\r\n switch (key) {\r\n case 'eq': name = 'only'; break;\r\n case 'gt':\r\n name = 'lowerBound';\r\n inclusive = true;\r\n break;\r\n case 'lt':\r\n name = 'upperBound';\r\n inclusive = true;\r\n break;\r\n case 'gte': name = 'lowerBound'; break;\r\n case 'lte': name = 'upperBound'; break;\r\n default: throw new TypeError('`' + key + '` is not valid key');\r\n }\r\n return [name, [val, inclusive]];\r\n }\r\n var x = opts[keys[0]];\r\n var y = opts[keys[1]];\r\n var pattern = keys.join('-');\r\n\r\n switch (pattern) {\r\n case 'gt-lt': case 'gt-lte': case 'gte-lt': case 'gte-lte':\r\n return ['bound', [x, y, keys[0] === 'gt', keys[1] === 'lt']];\r\n default: throw new TypeError(\r\n '`' + pattern + '` are conflicted keys'\r\n );\r\n }\r\n }\r\n function mongoifyKey (key) {\r\n if (key && typeof key === 'object' && !(key instanceof IDBKeyRange)) {\r\n let [type, args] = mongoDBToKeyRangeArgs(key);\r\n return IDBKeyRange[type](...args);\r\n }\r\n return key;\r\n }\r\n\r\n var Server = function (db, name, noServerMethods, version) {\r\n var closed = false;\r\n\r\n this.getIndexedDB = () => db;\r\n this.isClosed = () => closed;\r\n\r\n this.add = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => {\r\n // prevent Firefox from throwing a ConstraintError and aborting (hard)\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=872873\r\n e.preventDefault();\r\n reject(e);\r\n };\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n records.forEach(function (record) {\r\n var req;\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n req = store.add(record, key);\r\n } else {\r\n req = store.add(record);\r\n }\r\n\r\n req.onsuccess = function (e) {\r\n var target = e.target;\r\n var keyPath = target.source.keyPath;\r\n if (keyPath === null) {\r\n keyPath = '__id__';\r\n }\r\n Object.defineProperty(record, keyPath, {\r\n value: target.result,\r\n enumerable: true\r\n });\r\n };\r\n });\r\n });\r\n };\r\n\r\n this.update = function (table, ...args) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(records, this);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var records = args.reduce(function (records, aip) {\r\n return records.concat(aip);\r\n }, []);\r\n records.forEach(function (record) {\r\n if (record.item && record.key) {\r\n var key = record.key;\r\n record = record.item;\r\n store.put(record, key);\r\n } else {\r\n store.put(record);\r\n }\r\n });\r\n });\r\n };\r\n\r\n this.remove = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve(key);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.delete(key);\r\n });\r\n };\r\n\r\n this.clear = function (table) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table, transactionModes.readwrite);\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n store.clear();\r\n });\r\n };\r\n\r\n this.close = function () {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n }\r\n db.close();\r\n closed = true;\r\n delete dbCache[name][version];\r\n resolve();\r\n });\r\n };\r\n\r\n this.get = function (table, key) {\r\n return new Promise(function (resolve, reject) {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = store.get(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n this.query = function (table, index) {\r\n var error = closed ? 'Database has been closed' : null;\r\n return new IndexQuery(table, db, index, error);\r\n };\r\n\r\n this.count = function (table, key) {\r\n return new Promise((resolve, reject) => {\r\n if (closed) {\r\n reject('Database has been closed');\r\n return;\r\n }\r\n var transaction = db.transaction(table);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n try {\r\n key = mongoifyKey(key);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n var req = key === undefined ? store.count() : store.count(key);\r\n req.onsuccess = e => resolve(e.target.result);\r\n });\r\n };\r\n\r\n this.addEventListener = function (eventName, handler) {\r\n if (!serverEvents.includes(eventName)) {\r\n throw new Error('Unrecognized event type ' + eventName);\r\n }\r\n db.addEventListener(eventName, handler);\r\n };\r\n\r\n this.removeEventListener = function (eventName, handler) {\r\n if (!serverEvents.includes(eventName)) {\r\n throw new Error('Unrecognized event type ' + eventName);\r\n }\r\n db.removeEventListener(eventName, handler);\r\n };\r\n\r\n serverEvents.forEach(function (evName) {\r\n this[evName] = function (handler) {\r\n this.addEventListener(evName, handler);\r\n };\r\n }, this);\r\n\r\n if (noServerMethods) {\r\n return;\r\n }\r\n\r\n var err;\r\n [].some.call(db.objectStoreNames, storeName => {\r\n if (this[storeName]) {\r\n err = new Error('The store name, \"' + storeName + '\", which you have attempted to load, conflicts with db.js method names.\"');\r\n this.close();\r\n return true;\r\n }\r\n this[storeName] = {};\r\n var keys = Object.keys(this);\r\n keys.filter(key => !(([...serverEvents, 'close', 'addEventListener', 'removeEventListener']).includes(key)))\r\n .map(key =>\r\n this[storeName][key] = (...args) => this[key](storeName, ...args)\r\n );\r\n });\r\n return err;\r\n };\r\n\r\n var IndexQuery = function (table, db, indexName, preexistingError) {\r\n var modifyObj = false;\r\n\r\n var runQuery = function (type, args, cursorType, direction, limitRange, filters, mapper) {\r\n return new Promise(function (resolve, reject) {\r\n var keyRange = type ? IDBKeyRange[type](...args) : null;\r\n var results = [];\r\n var indexArgs = [keyRange];\r\n var counter = 0;\r\n\r\n var transaction = db.transaction(table, modifyObj ? transactionModes.readwrite : transactionModes.readonly);\r\n transaction.oncomplete = () => resolve(results);\r\n transaction.onerror = e => reject(e);\r\n transaction.onabort = e => reject(e);\r\n\r\n var store = transaction.objectStore(table);\r\n var index = indexName ? store.index(indexName) : store;\r\n\r\n limitRange = limitRange || null;\r\n filters = filters || [];\r\n if (cursorType !== 'count') {\r\n indexArgs.push(direction || 'next');\r\n }\r\n\r\n // create a function that will set in the modifyObj properties into\r\n // the passed record.\r\n var modifyKeys = modifyObj ? Object.keys(modifyObj) : [];\r\n\r\n var modifyRecord = function (record) {\r\n modifyKeys.forEach(key => {\r\n var val = modifyObj[key];\r\n if (val instanceof Function) { val = val(record); }\r\n record[key] = val;\r\n });\r\n return record;\r\n };\r\n\r\n index[cursorType](...indexArgs).onsuccess = function (e) {\r\n var cursor = e.target.result;\r\n if (typeof cursor === 'number') {\r\n results = cursor;\r\n } else if (cursor) {\r\n if (limitRange !== null && limitRange[0] > counter) {\r\n counter = limitRange[0];\r\n cursor.advance(limitRange[0]);\r\n } else if (limitRange !== null && counter >= (limitRange[0] + limitRange[1])) {\r\n // out of limit range... skip\r\n } else {\r\n var matchFilter = true;\r\n var result = 'value' in cursor ? cursor.value : cursor.key;\r\n\r\n filters.forEach(function (filter) {\r\n if (!filter || !filter.length) {\r\n // Invalid filter do nothing\r\n } else if (filter.length === 2) {\r\n matchFilter = matchFilter && (result[filter[0]] === filter[1]);\r\n } else {\r\n matchFilter = matchFilter && filter[0](result);\r\n }\r\n });\r\n\r\n if (matchFilter) {\r\n counter++;\r\n // if we're doing a modify, run it now\r\n if (modifyObj) {\r\n result = modifyRecord(result);\r\n cursor.update(result);\r\n }\r\n results.push(mapper(result));\r\n }\r\n cursor.continue();\r\n }\r\n }\r\n };\r\n });\r\n };\r\n\r\n var Query = function (type, args, queuedError) {\r\n var direction = 'next';\r\n var cursorType = 'openCursor';\r\n var filters = [];\r\n var limitRange = null;\r\n var mapper = defaultMapper;\r\n var unique = false;\r\n var error = preexistingError || queuedError;\r\n\r\n var execute = function () {\r\n if (error) {\r\n return Promise.reject(error);\r\n }\r\n return runQuery(type, args, cursorType, unique ? direction + 'unique' : direction, limitRange, filters, mapper);\r\n };\r\n\r\n var limit = function (...args) {\r\n limitRange = args.slice(0, 2);\r\n if (limitRange.length === 1) {\r\n limitRange.unshift(0);\r\n }\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n var count = function () {\r\n direction = null;\r\n cursorType = 'count';\r\n\r\n return {\r\n execute: execute\r\n };\r\n };\r\n\r\n var filter, desc, distinct, modify, map;\r\n var keys = function () {\r\n cursorType = 'openKeyCursor';\r\n\r\n return {\r\n desc,\r\n execute,\r\n filter,\r\n distinct,\r\n map\r\n };\r\n };\r\n filter = function (...args) {\r\n filters.push(args.slice(0, 2));\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n desc = function () {\r\n direction = 'prev';\r\n\r\n return {\r\n keys,\r\n execute,\r\n filter,\r\n distinct,\r\n modify,\r\n map\r\n };\r\n };\r\n distinct = function () {\r\n unique = true;\r\n return {\r\n keys,\r\n count,\r\n execute,\r\n filter,\r\n desc,\r\n modify,\r\n map\r\n };\r\n };\r\n modify = function (update) {\r\n modifyObj = update;\r\n return {\r\n execute\r\n };\r\n };\r\n map = function (fn) {\r\n mapper = fn;\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n return {\r\n execute,\r\n count,\r\n keys,\r\n filter,\r\n desc,\r\n distinct,\r\n modify,\r\n limit,\r\n map\r\n };\r\n };\r\n\r\n ['only', 'bound', 'upperBound', 'lowerBound'].forEach((name) => {\r\n this[name] = function () {\r\n return Query(name, arguments);\r\n };\r\n });\r\n\r\n this.range = function (opts) {\r\n var error;\r\n var keyRange = [null, null];\r\n try {\r\n keyRange = mongoDBToKeyRangeArgs(opts);\r\n } catch (e) {\r\n error = e;\r\n }\r\n return Query(...keyRange, error);\r\n };\r\n\r\n this.filter = function (...args) {\r\n var query = Query(null, null);\r\n return query.filter(...args);\r\n };\r\n\r\n this.all = function () {\r\n return this.filter();\r\n };\r\n };\r\n\r\n var createSchema = function (e, schema, db) {\r\n if (typeof schema === 'function') {\r\n schema = schema();\r\n }\r\n\r\n if (!schema || schema.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < db.objectStoreNames.length; i++) {\r\n var name = db.objectStoreNames[i];\r\n if (!schema.hasOwnProperty(name)) {\r\n e.currentTarget.transaction.db.deleteObjectStore(name);\r\n }\r\n }\r\n\r\n var tableName;\r\n for (tableName in schema) {\r\n var table = schema[tableName];\r\n var store;\r\n if (!hasOwn.call(schema, tableName) || db.objectStoreNames.contains(tableName)) {\r\n store = e.currentTarget.transaction.objectStore(tableName);\r\n } else {\r\n store = db.createObjectStore(tableName, table.key);\r\n }\r\n\r\n var indexKey;\r\n for (indexKey in table.indexes) {\r\n var index = table.indexes[indexKey];\r\n try {\r\n store.index(indexKey);\r\n } catch (err) {\r\n store.createIndex(indexKey, index.key || indexKey, Object.keys(index).length ? index : { unique: false });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var open = function (e, server, noServerMethods, version, schema) {\r\n var db = e.target.result;\r\n dbCache[server][version] = db;\r\n\r\n var s = new Server(db, server, noServerMethods, version);\r\n return s instanceof Error ? Promise.reject(s) : Promise.resolve(s);\r\n };\r\n\r\n var db = {\r\n version: '0.14.0',\r\n open: function (options) {\r\n var server = options.server;\r\n var version = options.version || 1;\r\n if (!dbCache[server]) {\r\n dbCache[server] = {};\r\n }\r\n return new Promise(function (resolve, reject) {\r\n if (dbCache[server][version]) {\r\n open({\r\n target: {\r\n result: dbCache[server][version]\r\n }\r\n }, server, options.noServerMethods, version, options.schema)\r\n .then(resolve, reject);\r\n } else {\r\n let request = indexedDB.open(server, version);\r\n\r\n request.onsuccess = e => open(e, server, options.noServerMethods, version, options.schema).then(resolve, reject);\r\n request.onupgradeneeded = e => createSchema(e, options.schema, e.target.result);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // open() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = (ev) => {\r\n open(ev, server, options.noServerMethods, version, options.schema)\r\n .then(res, rej);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n }\r\n });\r\n },\r\n\r\n delete: function (dbName) {\r\n return new Promise(function (resolve, reject) {\r\n var request = indexedDB.deleteDatabase(dbName);\r\n\r\n request.onsuccess = e => resolve(e);\r\n request.onerror = e => reject(e);\r\n request.onblocked = e => {\r\n var resume = new Promise(function (res, rej) {\r\n // We overwrite handlers rather than make a new\r\n // delete() since the original request is still\r\n // open and its onsuccess will still fire if\r\n // the user unblocks by closing the blocking\r\n // connection\r\n request.onsuccess = ev => {\r\n // Attempt to workaround Firefox event version problem: https://bugzilla.mozilla.org/show_bug.cgi?id=1220279\r\n if (!('newVersion' in ev)) {\r\n ev.newVersion = e.newVersion;\r\n }\r\n\r\n if (!('oldVersion' in ev)) {\r\n ev.oldVersion = e.oldVersion;\r\n }\r\n\r\n res(ev);\r\n };\r\n request.onerror = e => rej(e);\r\n });\r\n e.resume = resume;\r\n reject(e);\r\n };\r\n });\r\n },\r\n\r\n cmp: function (param1, param2) {\r\n return indexedDB.cmp(param1, param2);\r\n }\r\n };\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = db;\r\n } else if (typeof define === 'function' && define.amd) {\r\n define(function () { return db; });\r\n } else {\r\n local.db = db;\r\n }\r\n}(self));\r\n"]} \ No newline at end of file diff --git a/package.json b/package.json index d0b2e29..8e6e66e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "db.js", "description": "db.js is a wrapper for IndexedDB to make it easier to work against, making it look more like a queryable API.", - "version": "0.13.2", + "version": "0.14.0", "author": "Aaron Powell ", "contributors": [ "Brett Zamir " diff --git a/src/db.js b/src/db.js index 0eb814a..9c3cd9c 100644 --- a/src/db.js +++ b/src/db.js @@ -545,7 +545,7 @@ }; var db = { - version: '0.13.2', + version: '0.14.0', open: function (options) { var server = options.server; var version = options.version || 1;