Skip to content

Instantly share code, notes, and snippets.

@n1k0
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save n1k0/e3b249bdee2cc15184e3 to your computer and use it in GitHub Desktop.
Save n1k0/e3b249bdee2cc15184e3 to your computer and use it in GitHub Desktop.
requirebin sketch
var Dexie = require("dexie");
var db = new Dexie("articles2");
db.version(1).stores({articles: "id++,title,archived"});
db.open();
db.on("error", function(err) {
console.error(err);
});
db.articles.add({title: "plop", archived: "true"}).catch(console.error.bind(console)).then(function(id) {
console.log(id);
db.articles.where("archived").equals("true").each(function(article) {
console.log(article);
});
});
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({dexie:[function(require,module,exports){(function(global){(function(window,publish,isBrowser,undefined){"use strict";function extend(obj,extension){if(typeof extension!=="object")extension=extension();Object.keys(extension).forEach(function(key){obj[key]=extension[key]});return obj}function derive(Child){return{from:function(Parent){Child.prototype=Object.create(Parent.prototype);Child.prototype.constructor=Child;return{extend:function(extension){extend(Child.prototype,typeof extension!=="object"?extension(Parent.prototype):extension)}}}}}function override(origFunc,overridedFactory){return overridedFactory(origFunc)}function Dexie(dbName){var deps=Dexie.dependencies;var indexedDB=deps.indexedDB,IDBKeyRange=deps.IDBKeyRange,IDBTransaction=deps.IDBTransaction;var DOMError=deps.DOMError,TypeError=deps.TypeError,Error=deps.Error;var globalSchema=this._dbSchema={};var versions=[];var dbStoreNames=[];var allTables={};var notInTransFallbackTables={};var idbdb=null;var db_is_blocked=true;var dbOpenError=null;var isBeingOpened=false;var READONLY="readonly",READWRITE="readwrite";var db=this;var pausedResumeables=[];var autoSchema=false;function init(){if(isBrowser)db.on("versionchange",function(ev){db.close();if(ev.newVersion){window.location.reload(true)}})}this.version=function(versionNumber){if(idbdb)throw new Error("Cannot add version when database is open");this.verno=Math.max(this.verno,versionNumber);var versionInstance=versions.filter(function(v){return v._cfg.version===versionNumber})[0];if(versionInstance)return versionInstance;versionInstance=new Version(versionNumber);versions.push(versionInstance);versions.sort(lowerVersionFirst);return versionInstance};function Version(versionNumber){this._cfg={version:versionNumber,storesSource:null,dbschema:{},tables:{},contentUpgrade:null};this.stores({})}extend(Version.prototype,{stores:function(stores){this._cfg.storesSource=this._cfg.storesSource?extend(this._cfg.storesSource,stores):stores;var storesSpec={};versions.forEach(function(version){extend(storesSpec,version._cfg.storesSource)});var dbschema=this._cfg.dbschema={};this._parseStoresSpec(storesSpec,dbschema);globalSchema=db._dbSchema=dbschema;removeTablesApi([allTables,db,notInTransFallbackTables]);setApiOnPlace([notInTransFallbackTables],tableNotInTransaction,Object.keys(dbschema),READWRITE,dbschema);setApiOnPlace([allTables,db,this._cfg.tables],db._transPromiseFactory,Object.keys(dbschema),READWRITE,dbschema,true);dbStoreNames=Object.keys(dbschema);return this},upgrade:function(upgradeFunction){var self=this;fakeAutoComplete(function(){upgradeFunction(db._createTransaction(READWRITE,Object.keys(self._cfg.dbschema),self._cfg.dbschema))});this._cfg.contentUpgrade=upgradeFunction;return this},_parseStoresSpec:function(stores,outSchema){Object.keys(stores).forEach(function(tableName){if(stores[tableName]!==null){var instanceTemplate={};var indexes=parseIndexSyntax(stores[tableName]);var primKey=indexes.shift();if(primKey.multi)throw new Error("Primary key cannot be multi-valued");if(primKey.keyPath&&primKey.auto)setByKeyPath(instanceTemplate,primKey.keyPath,0);indexes.forEach(function(idx){if(idx.auto)throw new Error("Only primary key can be marked as autoIncrement (++)");if(!idx.keyPath)throw new Error("Index must have a name and cannot be an empty string");setByKeyPath(instanceTemplate,idx.keyPath,idx.compound?idx.keyPath.map(function(){return""}):"")});outSchema[tableName]=new TableSchema(tableName,primKey,indexes,instanceTemplate)}})}});function runUpgraders(oldVersion,idbtrans,reject,openReq){if(oldVersion===0){Object.keys(globalSchema).forEach(function(tableName){createTable(idbtrans,tableName,globalSchema[tableName].primKey,globalSchema[tableName].indexes)});var t=db._createTransaction(READWRITE,dbStoreNames,globalSchema);t.idbtrans=idbtrans;t.idbtrans.onerror=eventRejectHandler(reject,["populating database"]);t.on("error").subscribe(reject);Promise.newPSD(function(){Promise.PSD.trans=t;try{db.on("populate").fire(t)}catch(err){openReq.onerror=idbtrans.onerror=function(ev){ev.preventDefault()};try{idbtrans.abort()}catch(e){}idbtrans.db.close();reject(err)}})}else{var queue=[];var oldVersionStruct=versions.filter(function(version){return version._cfg.version===oldVersion})[0];if(!oldVersionStruct)throw new Error("Dexie specification of currently installed DB version is missing");globalSchema=db._dbSchema=oldVersionStruct._cfg.dbschema;var anyContentUpgraderHasRun=false;var versToRun=versions.filter(function(v){return v._cfg.version>oldVersion});versToRun.forEach(function(version){var oldSchema=globalSchema;var newSchema=version._cfg.dbschema;adjustToExistingIndexNames(oldSchema,idbtrans);adjustToExistingIndexNames(newSchema,idbtrans);globalSchema=db._dbSchema=newSchema;{var diff=getSchemaDiff(oldSchema,newSchema);diff.add.forEach(function(tuple){queue.push(function(idbtrans,cb){createTable(idbtrans,tuple[0],tuple[1].primKey,tuple[1].indexes);cb()})});diff.change.forEach(function(change){if(change.recreate){throw new Error("Not yet support for changing primary key")}else{queue.push(function(idbtrans,cb){var store=idbtrans.objectStore(change.name);change.add.forEach(function(idx){addIndex(store,idx)});change.change.forEach(function(idx){store.deleteIndex(idx.name);addIndex(store,idx)});change.del.forEach(function(idxName){store.deleteIndex(idxName)});cb()})}});if(version._cfg.contentUpgrade){queue.push(function(idbtrans,cb){anyContentUpgraderHasRun=true;var t=db._createTransaction(READWRITE,[].slice.call(idbtrans.db.objectStoreNames,0),newSchema);t.idbtrans=idbtrans;var uncompletedRequests=0;t._promise=override(t._promise,function(orig_promise){return function(mode,fn,writeLock){++uncompletedRequests;function proxy(fn){return function(){fn.apply(this,arguments);if(--uncompletedRequests===0)cb()}}return orig_promise.call(this,mode,function(resolve,reject,trans){arguments[0]=proxy(resolve);arguments[1]=proxy(reject);fn.apply(this,arguments)},writeLock)}});idbtrans.onerror=eventRejectHandler(reject,["running upgrader function for version",version._cfg.version]);t.on("error").subscribe(reject);version._cfg.contentUpgrade(t);if(uncompletedRequests===0)cb()})}if(!anyContentUpgraderHasRun||!hasIEDeleteObjectStoreBug()){queue.push(function(idbtrans,cb){deleteRemovedTables(newSchema,idbtrans);cb()})}}});var runNextQueuedFunction=function(){try{if(queue.length)queue.shift()(idbtrans,runNextQueuedFunction);else createMissingTables(globalSchema,idbtrans)}catch(err){openReq.onerror=idbtrans.onerror=function(ev){ev.preventDefault()};idbtrans.abort();idbtrans.db.close();reject(err)}};runNextQueuedFunction()}}function getSchemaDiff(oldSchema,newSchema){var diff={del:[],add:[],change:[]};for(var table in oldSchema){if(!newSchema[table])diff.del.push(table)}for(var table in newSchema){var oldDef=oldSchema[table],newDef=newSchema[table];if(!oldDef)diff.add.push([table,newDef]);else{var change={name:table,def:newSchema[table],recreate:false,del:[],add:[],change:[]};if(oldDef.primKey.src!==newDef.primKey.src){change.recreate=true;diff.change.push(change)}else{var oldIndexes=oldDef.indexes.reduce(function(prev,current){prev[current.name]=current;return prev},{});var newIndexes=newDef.indexes.reduce(function(prev,current){prev[current.name]=current;return prev},{});for(var idxName in oldIndexes){if(!newIndexes[idxName])change.del.push(idxName)}for(var idxName in newIndexes){var oldIdx=oldIndexes[idxName],newIdx=newIndexes[idxName];if(!oldIdx)change.add.push(newIdx);else if(oldIdx.src!==newIdx.src)change.change.push(newIdx)}if(change.recreate||change.del.length>0||change.add.length>0||change.change.length>0){diff.change.push(change)}}}}return diff}function createTable(idbtrans,tableName,primKey,indexes){var store=idbtrans.db.createObjectStore(tableName,primKey.keyPath?{keyPath:primKey.keyPath,autoIncrement:primKey.auto}:{autoIncrement:primKey.auto});indexes.forEach(function(idx){addIndex(store,idx)});return store}function createMissingTables(newSchema,idbtrans){Object.keys(newSchema).forEach(function(tableName){if(!idbtrans.db.objectStoreNames.contains(tableName)){createTable(idbtrans,tableName,newSchema[tableName].primKey,newSchema[tableName].indexes)}})}function deleteRemovedTables(newSchema,idbtrans){for(var i=0;i<idbtrans.db.objectStoreNames.length;++i){var storeName=idbtrans.db.objectStoreNames[i];if(newSchema[storeName]===null||newSchema[storeName]===undefined){idbtrans.db.deleteObjectStore(storeName)}}}function addIndex(store,idx){store.createIndex(idx.name,idx.keyPath,{unique:idx.unique,multiEntry:idx.multi})}this._allTables=allTables;this._tableFactory=function createTable(mode,tableSchema,transactionPromiseFactory){if(mode===READONLY)return new Table(tableSchema.name,transactionPromiseFactory,tableSchema,Collection);else return new WriteableTable(tableSchema.name,transactionPromiseFactory,tableSchema)};this._createTransaction=function(mode,storeNames,dbschema,parentTransaction){return new Transaction(mode,storeNames,dbschema,parentTransaction)};function tableNotInTransaction(mode,storeNames){throw new Error("Table "+storeNames[0]+" not part of transaction. Original Scope Function Source: "+Dexie.Promise.PSD.trans.scopeFunc.toString())}this._transPromiseFactory=function transactionPromiseFactory(mode,storeNames,fn){if(db_is_blocked&&(!Promise.PSD||!Promise.PSD.letThrough)){var blockedPromise=new Promise(function(resolve,reject){pausedResumeables.push({resume:function(){var p=db._transPromiseFactory(mode,storeNames,fn);blockedPromise.onuncatched=p.onuncatched;p.then(resolve,reject)}})});return blockedPromise}else{var trans=db._createTransaction(mode,storeNames,globalSchema);return trans._promise(mode,function(resolve,reject){trans.error(function(err){db.on("error").fire(err)});fn(function(value){trans.complete(function(){resolve(value)})},reject,trans)})}};this._whenReady=function(fn){if(db_is_blocked&&(!Promise.PSD||!Promise.PSD.letThrough)){return new Promise(function(resolve,reject){fakeAutoComplete(function(){new Promise(function(){fn(resolve,reject)})});pausedResumeables.push({resume:function(){fn(resolve,reject)}})})}return new Promise(fn)};this.verno=0;this.open=function(){return new Promise(function(resolve,reject){if(idbdb||isBeingOpened)throw new Error("Database already opened or being opened");function openError(err){isBeingOpened=false;dbOpenError=err;db_is_blocked=false;reject(dbOpenError);pausedResumeables.forEach(function(resumable){resumable.resume()});pausedResumeables=[]}try{dbOpenError=null;isBeingOpened=true;if(versions.length===0){autoSchema=true}if(!indexedDB)throw new Error("indexedDB API not found. If using IE10+, make sure to run your code on a server URL (not locally). If using Safari, make sure to include indexedDB polyfill.");var dbWasCreated=false;var req=autoSchema?indexedDB.open(dbName):indexedDB.open(dbName,Math.round(db.verno*10));req.onerror=eventRejectHandler(openError,["opening database",dbName]);req.onblocked=function(ev){db.on("blocked").fire(ev)};req.onupgradeneeded=trycatch(function(e){if(autoSchema&&!db._allowEmptyDB){req.onerror=function(event){event.preventDefault()};req.transaction.abort();req.result.close();var delreq=indexedDB.deleteDatabase(dbName);delreq.onsuccess=delreq.onerror=function(){openError(new Error("Database '"+dbName+"' doesnt exist"))}}else{if(e.oldVersion===0)dbWasCreated=true;req.transaction.onerror=eventRejectHandler(openError);var oldVer=e.oldVersion>Math.pow(2,62)?0:e.oldVersion;runUpgraders(oldVer/10,req.transaction,openError,req)}},openError);req.onsuccess=trycatch(function(e){isBeingOpened=false;idbdb=req.result;if(autoSchema)readGlobalSchema();else if(idbdb.objectStoreNames.length>0)adjustToExistingIndexNames(globalSchema,idbdb.transaction(safariMultiStoreFix(idbdb.objectStoreNames),READONLY));idbdb.onversionchange=db.on("versionchange").fire;globalDatabaseList(function(databaseNames){if(databaseNames.indexOf(dbName)===-1)return databaseNames.push(dbName)});Promise.newPSD(function(){Promise.PSD.letThrough=true;try{var res=db.on.ready.fire();if(res&&typeof res.then==="function"){res.then(resume,function(err){idbdb.close();idbdb=null;openError(err)})}else{asap(resume)}}catch(e){openError(e)}function resume(){db_is_blocked=false;pausedResumeables.forEach(function(resumable){resumable.resume()});pausedResumeables=[];resolve()}})},openError)}catch(err){openError(err)}})};this.close=function(){if(idbdb){idbdb.close();idbdb=null;db_is_blocked=true;dbOpenError=null}};this.delete=function(){var args=arguments;return new Promise(function(resolve,reject){if(args.length>0)throw new Error("Arguments not allowed in db.delete()");function doDelete(){db.close();var req=indexedDB.deleteDatabase(dbName);req.onsuccess=function(){globalDatabaseList(function(databaseNames){var pos=databaseNames.indexOf(dbName);if(pos>=0)return databaseNames.splice(pos,1)});resolve()};req.onerror=eventRejectHandler(reject,["deleting",dbName]);req.onblocked=function(){db.on("blocked").fire()}}if(isBeingOpened){pausedResumeables.push({resume:doDelete})}else{doDelete()}})};this.backendDB=function(){return idbdb};this.isOpen=function(){return idbdb!==null};this.hasFailed=function(){return dbOpenError!==null};this.name=dbName;Object.defineProperty(this,"tables",{get:function(){return Object.keys(allTables).map(function(name){return allTables[name]})}});this.on=events(this,"error","populate","blocked",{ready:[promisableChain,nop],versionchange:[reverseStoppableEventChain,nop]});this.on.ready.subscribe=override(this.on.ready.subscribe,function(origSubscribe){return function(subscriber,bSticky){function proxy(){if(!bSticky)db.on.ready.unsubscribe(proxy);return subscriber.apply(this,arguments)}origSubscribe.call(this,proxy);if(db.isOpen()){if(db_is_blocked){pausedResumeables.push({resume:proxy})}else{proxy()}}}});fakeAutoComplete(function(){db.on("populate").fire(db._createTransaction(READWRITE,dbStoreNames,globalSchema));db.on("error").fire(new Error)});this.transaction=function(mode,tableInstances,scopeFunc){tableInstances=[].slice.call(arguments,1,arguments.length-1);scopeFunc=arguments[arguments.length-1];var parentTransaction=Promise.PSD&&Promise.PSD.trans;if(mode.indexOf("!")!==-1)parentTransaction=null;var onlyIfCompatible=mode.indexOf("?")!==-1;mode=mode.replace("!","").replace("?","");var tables=Array.isArray(tableInstances[0])?tableInstances.reduce(function(a,b){return a.concat(b)}):tableInstances;var error=null;var storeNames=tables.map(function(tableInstance){if(typeof tableInstance==="string"){return tableInstance}else{if(!(tableInstance instanceof Table))error=error||new TypeError("Invalid type. Arguments following mode must be instances of Table or String");return tableInstance.name}});if(mode=="r"||mode==READONLY)mode=READONLY;else if(mode=="rw"||mode==READWRITE)mode=READWRITE;else error=new Error("Invalid transaction mode: "+mode);if(parentTransaction){if(!error){if(parentTransaction.db!==db){if(onlyIfCompatible)parentTransaction=null;else error=new Error("Current transaction bound to different database instance")}if(parentTransaction&&parentTransaction.mode===READONLY&&mode===READWRITE){if(onlyIfCompatible)parentTransaction=null;else error=error||new Error("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY")}if(parentTransaction){storeNames.forEach(function(storeName){if(!parentTransaction.tables.hasOwnProperty(storeName)){if(onlyIfCompatible)parentTransaction=null;else error=error||new Error("Table "+storeName+" not included in parent transaction. Parent Transaction function: "+parentTransaction.scopeFunc.toString())}})}}}if(parentTransaction){return parentTransaction._promise(mode,enterTransactionScope,"lock")}else{return db._whenReady(enterTransactionScope)}function enterTransactionScope(resolve,reject){var trans=null;try{if(error)throw error;trans=db._createTransaction(mode,storeNames,globalSchema,parentTransaction);var tableArgs=storeNames.map(function(name){return trans.tables[name]});tableArgs.push(trans);var returnValue;var uncompletedRequests=0;Promise.newPSD(function(){Promise.PSD.trans=trans;trans.scopeFunc=scopeFunc;if(parentTransaction){trans.idbtrans=parentTransaction.idbtrans;trans._promise=override(trans._promise,function(orig){return function(mode,fn,writeLock){++uncompletedRequests;function proxy(fn2){return function(val){var retval=fn2(val);if(--uncompletedRequests===0&&trans.active){trans.active=false;trans.on.complete.fire()}return retval}}return orig.call(this,mode,function(resolve2,reject2,trans){return fn(proxy(resolve2),proxy(reject2),trans)},writeLock)}})}trans.complete(function(){resolve(returnValue)});trans.error(function(e){trans.idbtrans.onerror=preventDefault;trans.abort();if(parentTransaction){parentTransaction.active=false;parentTransaction.on.error.fire(e)}var catched=reject(e);if(!parentTransaction&&!catched){db.on.error.fire(e)}});returnValue=scopeFunc.apply(trans,tableArgs)});if(!trans.idbtrans||parentTransaction&&uncompletedRequests===0){trans._nop()}}catch(e){if(trans&&trans.idbtrans)trans.idbtrans.onerror=preventDefault;if(trans)trans.abort();if(parentTransaction)parentTransaction.on.error.fire(e);asap(function(){if(!reject(e))db.on("error").fire(e)})}}};this.table=function(tableName){if(!autoSchema&&!allTables.hasOwnProperty(tableName)){throw new Error("Table does not exist");return{AN_UNKNOWN_TABLE_NAME_WAS_SPECIFIED:1}}return allTables[tableName]};function Table(name,transactionPromiseFactory,tableSchema,collClass){this.name=name;this.schema=tableSchema;this.hook=allTables[name]?allTables[name].hook:events(null,{creating:[hookCreatingChain,nop],reading:[pureFunctionChain,mirror],updating:[hookUpdatingChain,nop],deleting:[nonStoppableEventChain,nop]});this._tpf=transactionPromiseFactory;this._collClass=collClass||Collection}extend(Table.prototype,function(){function failReadonly(){throw new Error("Current Transaction is READONLY")}return{_trans:function getTransaction(mode,fn,writeLocked){return this._tpf(mode,[this.name],fn,writeLocked)},_idbstore:function getIDBObjectStore(mode,fn,writeLocked){var self=this;return this._tpf(mode,[this.name],function(resolve,reject,trans){fn(resolve,reject,trans.idbtrans.objectStore(self.name),trans)},writeLocked)},get:function(key,cb){var self=this;fakeAutoComplete(function(){cb(self.schema.instanceTemplate)});return this._idbstore(READONLY,function(resolve,reject,idbstore){var req=idbstore.get(key);req.onerror=eventRejectHandler(reject,["getting",key,"from",self.name]);req.onsuccess=function(){resolve(self.hook.reading.fire(req.result))}}).then(cb)},where:function(indexName){return new WhereClause(this,indexName)},count:function(cb){return this.toCollection().count(cb)},offset:function(offset){return this.toCollection().offset(offset)},limit:function(numRows){return this.toCollection().limit(numRows)},reverse:function(){return this.toCollection().reverse()},filter:function(filterFunction){return this.toCollection().and(filterFunction)},each:function(fn){var self=this;fakeAutoComplete(function(){fn(self.schema.instanceTemplate)});return this._idbstore(READONLY,function(resolve,reject,idbstore){var req=idbstore.openCursor();req.onerror=eventRejectHandler(reject,["calling","Table.each()","on",self.name]);iterate(req,null,fn,resolve,reject,self.hook.reading.fire)})},toArray:function(cb){var self=this;fakeAutoComplete(function(){cb([self.schema.instanceTemplate])});return this._idbstore(READONLY,function(resolve,reject,idbstore){var a=[];var req=idbstore.openCursor();req.onerror=eventRejectHandler(reject,["calling","Table.toArray()","on",self.name]);iterate(req,null,function(item){a.push(item)},function(){resolve(a)},reject,self.hook.reading.fire)}).then(cb)},orderBy:function(index){return new this._collClass(new WhereClause(this,index))},toCollection:function(){return new this._collClass(new WhereClause(this))},mapToClass:function(constructor,structure){this.schema.mappedClass=constructor;var instanceTemplate=Object.create(constructor.prototype);if(this.schema.primKey.keyPath){setByKeyPath(instanceTemplate,this.schema.primKey.keyPath,this.schema.primKey.auto?0:"");delByKeyPath(constructor.prototype,this.schema.primKey.keyPath)}if(structure){applyStructure(instanceTemplate,structure)}this.schema.instanceTemplate=instanceTemplate;var readHook=Object.setPrototypeOf?function makeInherited(obj){if(!obj)return obj;Object.setPrototypeOf(obj,constructor.prototype);return obj}:function makeInherited(obj){if(!obj)return obj;var res=Object.create(constructor.prototype);for(var m in obj)if(obj.hasOwnProperty(m))res[m]=obj[m];return res};if(this.schema.readHook){this.hook.reading.unsubscribe(this.schema.readHook)}this.schema.readHook=readHook;this.hook("reading",readHook);return constructor},defineClass:function(structure){return this.mapToClass(Dexie.defineClass(structure),structure)},add:failReadonly,put:failReadonly,"delete":failReadonly,clear:failReadonly,update:failReadonly}});function WriteableTable(name,transactionPromiseFactory,tableSchema,collClass){Table.call(this,name,transactionPromiseFactory,tableSchema,collClass||WriteableCollection)}derive(WriteableTable).from(Table).extend(function(){return{add:function(obj,key){var self=this,creatingHook=this.hook.creating.fire;return this._idbstore(READWRITE,function(resolve,reject,idbstore,trans){var thisCtx={};if(creatingHook!==nop){var effectiveKey=key||(idbstore.keyPath?getByKeyPath(obj,idbstore.keyPath):undefined);var keyToUse=creatingHook.call(thisCtx,effectiveKey,obj,trans);if(effectiveKey===undefined&&keyToUse!==undefined){if(idbstore.keyPath)setByKeyPath(obj,idbstore.keyPath,keyToUse);else key=keyToUse}}var req=key?idbstore.add(obj,key):idbstore.add(obj);req.onerror=eventRejectHandler(function(e){if(thisCtx.onerror)thisCtx.onerror(e);return reject(e)},["adding",obj,"into",self.name]);req.onsuccess=function(ev){var keyPath=idbstore.keyPath;if(keyPath)setByKeyPath(obj,keyPath,ev.target.result);if(thisCtx.onsuccess)thisCtx.onsuccess(ev.target.result);resolve(req.result)}})},put:function(obj,key){var self=this,creatingHook=this.hook.creating.fire,updatingHook=this.hook.updating.fire;if(creatingHook!==nop||updatingHook!==nop){return this._trans(READWRITE,function(resolve,reject,trans){var effectiveKey=key||self.schema.primKey.keyPath&&getByKeyPath(obj,self.schema.primKey.keyPath);if(effectiveKey===undefined){trans.tables[self.name].add(obj).then(resolve,reject)}else{trans._lock();obj=deepClone(obj);trans.tables[self.name].where(":id").equals(effectiveKey).modify(function(value){this.value=obj}).then(function(count){if(count===0){return trans.tables[self.name].add(obj,key)}else{return effectiveKey}}).finally(function(){trans._unlock()}).then(resolve,reject)}})}else{return this._idbstore(READWRITE,function(resolve,reject,idbstore){var req=key?idbstore.put(obj,key):idbstore.put(obj);req.onerror=eventRejectHandler(reject,["putting",obj,"into",self.name]);req.onsuccess=function(ev){var keyPath=idbstore.keyPath;if(keyPath)setByKeyPath(obj,keyPath,ev.target.result);resolve(req.result)}})}},"delete":function(key){if(this.hook.deleting.subscribers.length){return this.where(":id").equals(key).delete()}else{return this._idbstore(READWRITE,function(resolve,reject,idbstore){var req=idbstore.delete(key);req.onerror=eventRejectHandler(reject,["deleting",key,"from",idbstore.name]);req.onsuccess=function(ev){resolve(req.result)}})}},clear:function(){if(this.hook.deleting.subscribers.length){return this.toCollection().delete()}else{return this._idbstore(READWRITE,function(resolve,reject,idbstore){var req=idbstore.clear();req.onerror=eventRejectHandler(reject,["clearing",idbstore.name]);req.onsuccess=function(ev){resolve(req.result)}})}},update:function(keyOrObject,modifications){if(typeof modifications!=="object"||Array.isArray(modifications))throw new Error("db.update(keyOrObject, modifications). modifications must be an object.");if(typeof keyOrObject==="object"&&!Array.isArray(keyOrObject)){Object.keys(modifications).forEach(function(keyPath){setByKeyPath(keyOrObject,keyPath,modifications[keyPath])});var key=getByKeyPath(keyOrObject,this.schema.primKey.keyPath);if(key===undefined)Promise.reject(new Error("Object does not contain its primary key"));return this.where(":id").equals(key).modify(modifications)}else{return this.where(":id").equals(keyOrObject).modify(modifications)}}}});function Transaction(mode,storeNames,dbschema,parent){var self=this;this.db=db;this.mode=mode;this.storeNames=storeNames;this.idbtrans=null;this.on=events(this,["complete","error"],"abort");this._reculock=0;this._blockedFuncs=[];this._psd=null;this.active=true;this._dbschema=dbschema;if(parent)this.parent=parent;this._tpf=transactionPromiseFactory;this.tables=Object.create(notInTransFallbackTables);function transactionPromiseFactory(mode,storeNames,fn,writeLocked){return self._promise(mode,fn,writeLocked)}for(var i=storeNames.length-1;i!==-1;--i){var name=storeNames[i];var table=db._tableFactory(mode,dbschema[name],transactionPromiseFactory);this.tables[name]=table;if(!this[name])this[name]=table}}extend(Transaction.prototype,{_lock:function(){++this._reculock;if(this._reculock===1&&Promise.PSD)Promise.PSD.lockOwnerFor=this;return this},_unlock:function(){if(--this._reculock===0){if(Promise.PSD)Promise.PSD.lockOwnerFor=null;while(this._blockedFuncs.length>0&&!this._locked()){var fn=this._blockedFuncs.shift();try{fn()}catch(e){}}}return this},_locked:function(){return this._reculock&&(!Promise.PSD||Promise.PSD.lockOwnerFor!==this)},_nop:function(cb){this.tables[this.storeNames[0]].get(0).then(cb)},_promise:function(mode,fn,bWriteLock){var self=this;return Promise.newPSD(function(){var p;if(!self._locked()){p=self.active?new Promise(function(resolve,reject){if(!self.idbtrans&&mode){if(!idbdb)throw dbOpenError?new Error("Database not open. Following error in populate, ready or upgrade function made Dexie.open() fail: "+dbOpenError):new Error("Database not open");var idbtrans=self.idbtrans=idbdb.transaction(safariMultiStoreFix(self.storeNames),self.mode);idbtrans.onerror=function(e){self.on("error").fire(e&&e.target.error);e.preventDefault();self.abort()};idbtrans.onabort=function(e){self.active=false;self.on("abort").fire(e)};idbtrans.oncomplete=function(e){self.active=false;self.on("complete").fire(e)}}if(bWriteLock)self._lock();try{fn(resolve,reject,self)}catch(e){Dexie.spawn(function(){self.on("error").fire(e)});self.abort();reject(e)}}):Promise.reject(stack(new Error("Transaction is inactive. Original Scope Function Source: "+self.scopeFunc.toString())));if(self.active&&bWriteLock)p.finally(function(){self._unlock()})}else{p=new Promise(function(resolve,reject){self._blockedFuncs.push(function(){self._promise(mode,fn,bWriteLock).then(resolve,reject)})})}p.onuncatched=function(e){Dexie.spawn(function(){self.on("error").fire(e)});self.abort()};return p})},complete:function(cb){return this.on("complete",cb)},error:function(cb){return this.on("error",cb)},abort:function(){if(this.idbtrans&&this.active)try{this.active=false;this.idbtrans.abort();this.on.error.fire(new Error("Transaction Aborted"))}catch(e){}},table:function(name){if(!this.tables.hasOwnProperty(name)){throw new Error("Table "+name+" not in transaction");return{AN_UNKNOWN_TABLE_NAME_WAS_SPECIFIED:1}}return this.tables[name]}});function WhereClause(table,index,orCollection){this._ctx={table:table,index:index===":id"?null:index,collClass:table._collClass,or:orCollection}}extend(WhereClause.prototype,function(){function fail(collection,err){try{throw err}catch(e){collection._ctx.error=e}return collection}function getSetArgs(args){return Array.prototype.slice.call(args.length===1&&Array.isArray(args[0])?args[0]:args)}function upperFactory(dir){return dir==="next"?function(s){return s.toUpperCase()}:function(s){return s.toLowerCase()}}function lowerFactory(dir){return dir==="next"?function(s){return s.toLowerCase()}:function(s){return s.toUpperCase()}}function nextCasing(key,lowerKey,upperNeedle,lowerNeedle,cmp,dir){var length=Math.min(key.length,lowerNeedle.length);var llp=-1;for(var i=0;i<length;++i){var lwrKeyChar=lowerKey[i];if(lwrKeyChar!==lowerNeedle[i]){if(cmp(key[i],upperNeedle[i])<0)return key.substr(0,i)+upperNeedle[i]+upperNeedle.substr(i+1);if(cmp(key[i],lowerNeedle[i])<0)return key.substr(0,i)+lowerNeedle[i]+upperNeedle.substr(i+1);if(llp>=0)return key.substr(0,llp)+lowerKey[llp]+upperNeedle.substr(llp+1);return null}if(cmp(key[i],lwrKeyChar)<0)llp=i}if(length<lowerNeedle.length&&dir==="next")return key+upperNeedle.substr(key.length);if(length<key.length&&dir==="prev")return key.substr(0,upperNeedle.length);return llp<0?null:key.substr(0,llp)+lowerNeedle[llp]+upperNeedle.substr(llp+1)}function addIgnoreCaseAlgorithm(c,match,needle){var upper,lower,compare,upperNeedle,lowerNeedle,direction;function initDirection(dir){upper=upperFactory(dir);lower=lowerFactory(dir);compare=dir==="next"?ascending:descending;upperNeedle=upper(needle);lowerNeedle=lower(needle);direction=dir}initDirection("next");c._ondirectionchange=function(direction){initDirection(direction)};c._addAlgorithm(function(cursor,advance,resolve){var key=cursor.key;if(typeof key!=="string")return false;var lowerKey=lower(key);if(match(lowerKey,lowerNeedle)){advance(function(){cursor.continue()});return true}else{var nextNeedle=nextCasing(key,lowerKey,upperNeedle,lowerNeedle,compare,direction);if(nextNeedle){advance(function(){cursor.continue(nextNeedle)})}else{advance(resolve)}return false}})}return{between:function(lower,upper,includeLower,includeUpper){includeLower=includeLower!==false;includeUpper=includeUpper===true;if(lower>upper||lower===upper&&(includeLower||includeUpper)&&!(includeLower&&includeUpper))return new this._ctx.collClass(this,IDBKeyRange.only(lower)).limit(0);return new this._ctx.collClass(this,IDBKeyRange.bound(lower,upper,!includeLower,!includeUpper))},equals:function(value){return new this._ctx.collClass(this,IDBKeyRange.only(value))},above:function(value){return new this._ctx.collClass(this,IDBKeyRange.lowerBound(value,true))},aboveOrEqual:function(value){return new this._ctx.collClass(this,IDBKeyRange.lowerBound(value))},below:function(value){return new this._ctx.collClass(this,IDBKeyRange.upperBound(value,true))},belowOrEqual:function(value){return new this._ctx.collClass(this,IDBKeyRange.upperBound(value))},startsWith:function(str){if(typeof str!=="string")return fail(new this._ctx.collClass(this),new TypeError("String expected"));return this.between(str,str+String.fromCharCode(65535),true,true)},startsWithIgnoreCase:function(str){if(typeof str!=="string")return fail(new this._ctx.collClass(this),new TypeError("String expected"));if(str==="")return this.startsWith(str);var c=new this._ctx.collClass(this,IDBKeyRange.bound(str.toUpperCase(),str.toLowerCase()+String.fromCharCode(65535)));addIgnoreCaseAlgorithm(c,function(a,b){return a.indexOf(b)===0},str);c._ondirectionchange=function(){fail(c,new Error("reverse() not supported with WhereClause.startsWithIgnoreCase()"))};return c},equalsIgnoreCase:function(str){if(typeof str!=="string")return fail(new this._ctx.collClass(this),new TypeError("String expected"));var c=new this._ctx.collClass(this,IDBKeyRange.bound(str.toUpperCase(),str.toLowerCase()));addIgnoreCaseAlgorithm(c,function(a,b){return a===b},str);return c},anyOf:function(valueArray){var ctx=this._ctx,schema=ctx.table.schema;var idxSpec=ctx.index?schema.idxByName[ctx.index]:schema.primKey;var isCompound=idxSpec&&idxSpec.compound;var set=getSetArgs(arguments);var compare=isCompound?compoundCompare(ascending):ascending;set.sort(compare);if(set.length===0)return new this._ctx.collClass(this,IDBKeyRange.only("")).limit(0);
var c=new this._ctx.collClass(this,IDBKeyRange.bound(set[0],set[set.length-1]));c._ondirectionchange=function(direction){compare=direction==="next"?ascending:descending;if(isCompound)compare=compoundCompare(compare);set.sort(compare)};var i=0;c._addAlgorithm(function(cursor,advance,resolve){var key=cursor.key;while(compare(key,set[i])>0){++i;if(i===set.length){advance(resolve);return false}}if(compare(key,set[i])===0){advance(function(){cursor.continue()});return true}else{advance(function(){cursor.continue(set[i])});return false}});return c}}});function Collection(whereClause,keyRange){var whereCtx=whereClause._ctx;this._ctx={table:whereCtx.table,index:whereCtx.index,isPrimKey:!whereCtx.index||whereCtx.table.schema.primKey.keyPath&&whereCtx.index===whereCtx.table.schema.primKey.name,range:keyRange,op:"openCursor",dir:"next",unique:"",algorithm:null,filter:null,isMatch:null,offset:0,limit:Infinity,error:null,or:whereCtx.or}}extend(Collection.prototype,function(){function addFilter(ctx,fn){ctx.filter=combine(ctx.filter,fn)}function addMatchFilter(ctx,fn){ctx.isMatch=combine(ctx.isMatch,fn)}function getIndexOrStore(ctx,store){if(ctx.isPrimKey)return store;var indexSpec=ctx.table.schema.idxByName[ctx.index];if(!indexSpec)throw new Error("KeyPath "+ctx.index+" on object store "+store.name+" is not indexed");return ctx.isPrimKey?store:store.index(indexSpec.name)}function openCursor(ctx,store){return getIndexOrStore(ctx,store)[ctx.op](ctx.range||null,ctx.dir+ctx.unique)}function iter(ctx,fn,resolve,reject,idbstore){if(!ctx.or){iterate(openCursor(ctx,idbstore),combine(ctx.algorithm,ctx.filter),fn,resolve,reject,ctx.table.hook.reading.fire)}else{(function(){var filter=ctx.filter;var set={};var primKey=ctx.table.schema.primKey.keyPath;var resolved=0;function resolveboth(){if(++resolved===2)resolve()}function union(item,cursor,advance){if(!filter||filter(cursor,advance,resolveboth,reject)){var key=cursor.primaryKey.toString();if(!set.hasOwnProperty(key)){set[key]=true;fn(item,cursor,advance)}}}ctx.or._iterate(union,resolveboth,reject,idbstore);iterate(openCursor(ctx,idbstore),ctx.algorithm,union,resolveboth,reject,ctx.table.hook.reading.fire)})()}}function getInstanceTemplate(ctx){return ctx.table.schema.instanceTemplate}return{_read:function(fn,cb){var ctx=this._ctx;if(ctx.error)return ctx.table._trans(null,function rejector(resolve,reject){reject(ctx.error)});else return ctx.table._idbstore(READONLY,fn).then(cb)},_write:function(fn){var ctx=this._ctx;if(ctx.error)return ctx.table._trans(null,function rejector(resolve,reject){reject(ctx.error)});else return ctx.table._idbstore(READWRITE,fn,"locked")},_addAlgorithm:function(fn){var ctx=this._ctx;ctx.algorithm=combine(ctx.algorithm,fn)},_iterate:function(fn,resolve,reject,idbstore){return iter(this._ctx,fn,resolve,reject,idbstore)},each:function(fn){var ctx=this._ctx;fakeAutoComplete(function(){fn(getInstanceTemplate(ctx))});return this._read(function(resolve,reject,idbstore){iter(ctx,fn,resolve,reject,idbstore)})},count:function(cb){fakeAutoComplete(function(){cb(0)});var self=this,ctx=this._ctx;if(ctx.filter||ctx.algorithm||ctx.or){var count=0;return this._read(function(resolve,reject,idbstore){iter(ctx,function(){++count;return false},function(){resolve(count)},reject,idbstore)},cb)}else{return this._read(function(resolve,reject,idbstore){var idx=getIndexOrStore(ctx,idbstore);var req=ctx.range?idx.count(ctx.range):idx.count();req.onerror=eventRejectHandler(reject,["calling","count()","on",self.name]);req.onsuccess=function(e){resolve(Math.min(e.target.result,Math.max(0,ctx.limit-ctx.offset)))}},cb)}},sortBy:function(keyPath,cb){var ctx=this._ctx;fakeAutoComplete(function(){cb([getInstanceTemplate(ctx)])});var parts=keyPath.split(".").reverse(),lastPart=parts[0],lastIndex=parts.length-1;function getval(obj,i){if(i)return getval(obj[parts[i]],i-1);return obj[lastPart]}var order=this._ctx.dir==="next"?1:-1;function sorter(a,b){var aVal=getval(a,lastIndex),bVal=getval(b,lastIndex);return aVal<bVal?-order:aVal>bVal?order:0}return this.toArray(function(a){return a.sort(sorter)}).then(cb)},toArray:function(cb){var ctx=this._ctx;fakeAutoComplete(function(){cb([getInstanceTemplate(ctx)])});return this._read(function(resolve,reject,idbstore){var a=[];iter(ctx,function(item){a.push(item)},function arrayComplete(){resolve(a)},reject,idbstore)},cb)},offset:function(offset){var ctx=this._ctx;if(offset<=0)return this;ctx.offset+=offset;if(!ctx.or&&!ctx.algorithm&&!ctx.filter){addFilter(ctx,function offsetFilter(cursor,advance,resolve){if(offset===0)return true;if(offset===1){--offset;return false}advance(function(){cursor.advance(offset);offset=0});return false})}else{addFilter(ctx,function offsetFilter(cursor,advance,resolve){return--offset<0})}return this},limit:function(numRows){this._ctx.limit=Math.min(this._ctx.limit,numRows);addFilter(this._ctx,function(cursor,advance,resolve){if(--numRows<=0)advance(resolve);return numRows>=0});return this},until:function(filterFunction,bIncludeStopEntry){var ctx=this._ctx;fakeAutoComplete(function(){filterFunction(getInstanceTemplate(ctx))});addFilter(this._ctx,function(cursor,advance,resolve){if(filterFunction(cursor.value)){advance(resolve);return bIncludeStopEntry}else{return true}});return this},first:function(cb){var self=this;fakeAutoComplete(function(){cb(getInstanceTemplate(self._ctx))});return this.limit(1).toArray(function(a){return a[0]}).then(cb)},last:function(cb){return this.reverse().first(cb)},and:function(filterFunction){var self=this;fakeAutoComplete(function(){filterFunction(getInstanceTemplate(self._ctx))});addFilter(this._ctx,function(cursor){return filterFunction(cursor.value)});addMatchFilter(this._ctx,filterFunction);return this},or:function(indexName){return new WhereClause(this._ctx.table,indexName,this)},reverse:function(){this._ctx.dir=this._ctx.dir==="prev"?"next":"prev";if(this._ondirectionchange)this._ondirectionchange(this._ctx.dir);return this},desc:function(){return this.reverse()},eachKey:function(cb){var self=this,ctx=this._ctx;fakeAutoComplete(function(){cb(getInstanceTemplate(self._ctx)[self._ctx.index])});if(!ctx.isPrimKey)ctx.op="openKeyCursor";return this.each(function(val,cursor){cb(cursor.key,cursor)})},eachUniqueKey:function(cb){this._ctx.unique="unique";return this.eachKey(cb)},keys:function(cb){fakeAutoComplete(function(){cb([getInstanceTemplate(ctx)[self._ctx.index]])});var self=this,ctx=this._ctx;if(!ctx.isPrimKey)ctx.op="openKeyCursor";var a=[];return this.each(function(item,cursor){a.push(cursor.key)}).then(function(){return a}).then(cb)},uniqueKeys:function(cb){this._ctx.unique="unique";return this.keys(cb)},firstKey:function(cb){var self=this;return this.limit(1).keys(function(a){return a[0]}).then(cb)},lastKey:function(cb){return this.reverse().firstKey(cb)},distinct:function(){var set={};addFilter(this._ctx,function(cursor){var strKey=cursor.primaryKey.toString();var found=set.hasOwnProperty(strKey);set[strKey]=true;return!found});return this}}});function WriteableCollection(){Collection.apply(this,arguments)}derive(WriteableCollection).from(Collection).extend({modify:function(changes){var self=this,ctx=this._ctx,hook=ctx.table.hook,updatingHook=hook.updating.fire,deletingHook=hook.deleting.fire;fakeAutoComplete(function(){if(typeof changes==="function"){changes.call({value:ctx.table.schema.instanceTemplate},ctx.table.schema.instanceTemplate)}});return this._write(function(resolve,reject,idbstore,trans){var modifyer;if(typeof changes==="function"){if(updatingHook===nop&&deletingHook===nop){modifyer=changes}else{modifyer=function(item){var origItem=deepClone(item);if(changes.call(this,item)===false)return false;if(!this.hasOwnProperty("value")){deletingHook.call(this,this.primKey,item,trans)}else{var objectDiff=getObjectDiff(origItem,this.value);var additionalChanges=updatingHook.call(this,objectDiff,this.primKey,origItem,trans);if(additionalChanges){item=this.value;Object.keys(additionalChanges).forEach(function(keyPath){setByKeyPath(item,keyPath,additionalChanges[keyPath])})}}}}}else if(updatingHook===nop){var keyPaths=Object.keys(changes);var numKeys=keyPaths.length;modifyer=function(item){var anythingModified=false;for(var i=0;i<numKeys;++i){var keyPath=keyPaths[i],val=changes[keyPath];if(getByKeyPath(item,keyPath)!==val){setByKeyPath(item,keyPath,val);anythingModified=true}}return anythingModified}}else{var origChanges=changes;changes=shallowClone(origChanges);modifyer=function(item){var anythingModified=false;var additionalChanges=updatingHook.call(this,changes,this.primKey,deepClone(item),trans);if(additionalChanges)extend(changes,additionalChanges);Object.keys(changes).forEach(function(keyPath){var val=changes[keyPath];if(getByKeyPath(item,keyPath)!==val){setByKeyPath(item,keyPath,changes[keyPath]);anythingModified=true}});if(additionalChanges)changes=shallowClone(origChanges);return anythingModified}}var count=0;var successCount=0;var iterationComplete=false;var failures=[];var failKeys=[];var currentKey=null;function modifyItem(item,cursor,advance){currentKey=cursor.primaryKey;var thisContext={primKey:cursor.primaryKey,value:item};if(modifyer.call(thisContext,item)!==false){var bDelete=!thisContext.hasOwnProperty("value");var req=bDelete?cursor.delete():cursor.update(thisContext.value);++count;req.onerror=eventRejectHandler(function(e){failures.push(e);failKeys.push(thisContext.primKey);if(thisContext.onerror)thisContext.onerror(e);return true},bDelete?["deleting",item,"from",ctx.table.name]:["modifying",item,"on",ctx.table.name]);req.onsuccess=function(ev){if(thisContext.onsuccess)thisContext.onsuccess(thisContext.value);++successCount;checkFinished()}}}function doReject(e){if(e){failures.push(e);failKeys.push(currentKey)}return reject(new ModifyError("Error modifying one or more objects",failures,successCount,failKeys))}function checkFinished(){if(iterationComplete&&successCount+failures.length===count){if(failures.length>0)doReject();else resolve(successCount)}}self._iterate(modifyItem,function(){iterationComplete=true;checkFinished()},doReject,idbstore)})},"delete":function(){return this.modify(function(){delete this.value})}});function lowerVersionFirst(a,b){return a._cfg.version-b._cfg.version}function setApiOnPlace(objs,transactionPromiseFactory,tableNames,mode,dbschema,enableProhibitedDB){tableNames.forEach(function(tableName){var tableInstance=db._tableFactory(mode,dbschema[tableName],transactionPromiseFactory);objs.forEach(function(obj){if(!obj[tableName]){if(enableProhibitedDB){Object.defineProperty(obj,tableName,{configurable:true,enumerable:true,get:function(){if(Promise.PSD&&Promise.PSD.trans){return Promise.PSD.trans.tables[tableName]}return tableInstance}})}else{obj[tableName]=tableInstance}}})})}function removeTablesApi(objs){objs.forEach(function(obj){for(var key in obj){if(obj[key]instanceof Table)delete obj[key]}})}function iterate(req,filter,fn,resolve,reject,readingHook){var psd=Promise.PSD;readingHook=readingHook||mirror;if(!req.onerror)req.onerror=eventRejectHandler(reject);if(filter){req.onsuccess=trycatch(function filter_record(e){var cursor=req.result;if(cursor){var c=function(){cursor.continue()};if(filter(cursor,function(advancer){c=advancer},resolve,reject))fn(readingHook(cursor.value),cursor,function(advancer){c=advancer});c()}else{resolve()}},reject,psd)}else{req.onsuccess=trycatch(function filter_record(e){var cursor=req.result;if(cursor){var c=function(){cursor.continue()};fn(readingHook(cursor.value),cursor,function(advancer){c=advancer});c()}else{resolve()}},reject,psd)}}function parseIndexSyntax(indexes){var rv=[];indexes.split(",").forEach(function(index){index=index.trim();var name=index.replace("&","").replace("++","").replace("*","");var keyPath=name.indexOf("[")!==0?name:index.substring(index.indexOf("[")+1,index.indexOf("]")).split("+");rv.push(new IndexSpec(name,keyPath||null,index.indexOf("&")!==-1,index.indexOf("*")!==-1,index.indexOf("++")!==-1,Array.isArray(keyPath),keyPath.indexOf(".")!==-1))});return rv}function ascending(a,b){return a<b?-1:a>b?1:0}function descending(a,b){return a<b?1:a>b?-1:0}function compoundCompare(itemCompare){return function(a,b){var i=0;while(true){var result=itemCompare(a[i],b[i]);if(result!==0)return result;++i;if(i===a.length||i===b.length)return itemCompare(a.length,b.length)}}}function combine(filter1,filter2){return filter1?filter2?function(){return filter1.apply(this,arguments)&&filter2.apply(this,arguments)}:filter1:filter2}function hasIEDeleteObjectStoreBug(){return navigator.userAgent.indexOf("Trident")>=0||navigator.userAgent.indexOf("MSIE")>=0}function readGlobalSchema(){db.verno=idbdb.version/10;db._dbSchema=globalSchema={};dbStoreNames=[].slice.call(idbdb.objectStoreNames,0);if(dbStoreNames.length===0)return;var trans=idbdb.transaction(safariMultiStoreFix(dbStoreNames),"readonly");dbStoreNames.forEach(function(storeName){var store=trans.objectStore(storeName),keyPath=store.keyPath,dotted=keyPath&&typeof keyPath==="string"&&keyPath.indexOf(".")!==-1;var primKey=new IndexSpec(keyPath,keyPath||"",false,false,!!store.autoIncrement,keyPath&&typeof keyPath!=="string",dotted);var indexes=[];for(var j=0;j<store.indexNames.length;++j){var idbindex=store.index(store.indexNames[j]);keyPath=idbindex.keyPath;dotted=keyPath&&typeof keyPath==="string"&&keyPath.indexOf(".")!==-1;var index=new IndexSpec(idbindex.name,keyPath,!!idbindex.unique,!!idbindex.multiEntry,false,keyPath&&typeof keyPath!=="string",dotted);indexes.push(index)}globalSchema[storeName]=new TableSchema(storeName,primKey,indexes,{})});setApiOnPlace([allTables],db._transPromiseFactory,Object.keys(globalSchema),READWRITE,globalSchema)}function adjustToExistingIndexNames(schema,idbtrans){var storeNames=idbtrans.db.objectStoreNames;for(var i=0;i<storeNames.length;++i){var storeName=storeNames[i];var store=idbtrans.objectStore(storeName);for(var j=0;j<store.indexNames.length;++j){var indexName=store.indexNames[j];var keyPath=store.index(indexName).keyPath;var dexieName=typeof keyPath==="string"?keyPath:"["+[].slice.call(keyPath).join("+")+"]";if(schema[storeName]){var indexSpec=schema[storeName].idxByName[dexieName];if(indexSpec)indexSpec.name=indexName}}}}extend(this,{Collection:Collection,Table:Table,Transaction:Transaction,Version:Version,WhereClause:WhereClause,WriteableCollection:WriteableCollection,WriteableTable:WriteableTable});init();Dexie.addons.forEach(function(fn){fn(db)})}var Promise=function(){var _slice=[].slice;var _asap=typeof setImmediate==="undefined"?function(fn,arg1,arg2,argN){var args=arguments;setTimeout(function(){fn.apply(window,_slice.call(args,1))},0)}:setImmediate;var asap=_asap,isRootExecution=true;var operationsQueue=[];function enqueueImmediate(fn,args){operationsQueue.push([fn,_slice.call(arguments,1)])}function executeOperationsQueue(){var queue=operationsQueue;operationsQueue=[];for(var i=0,l=queue.length;i<l;++i){var item=queue[i];item[0].apply(window,item[1])}}function Promise(fn){if(typeof this!=="object")throw new TypeError("Promises must be constructed via new");if(typeof fn!=="function")throw new TypeError("not a function");this._state=null;this._value=null;this._deferreds=[];this._catched=false;var self=this;var constructing=true;this._PSD=Promise.PSD;try{doResolve(this,fn,function(data){if(constructing)asap(resolve,self,data);else resolve(self,data)},function(reason){if(constructing){asap(reject,self,reason);return false}else{return reject(self,reason)}})}finally{constructing=false}}function handle(self,deferred){if(self._state===null){self._deferreds.push(deferred);return}var cb=self._state?deferred.onFulfilled:deferred.onRejected;if(cb===null){return(self._state?deferred.resolve:deferred.reject)(self._value)}var ret,isRootExec=isRootExecution;isRootExecution=false;asap=enqueueImmediate;try{ret=cb(self._value);if(!self._state&&(!ret||typeof ret.then!=="function"||ret._state!==false))setCatched(self)}catch(e){var catched=deferred.reject(e);if(!catched&&self.onuncatched){try{self.onuncatched(e)}catch(e){}}return}deferred.resolve(ret);if(isRootExec){while(operationsQueue.length>0)executeOperationsQueue();asap=_asap;isRootExecution=true}}function setCatched(promise){promise._catched=true;if(promise._parent)setCatched(promise._parent)}function resolve(promise,newValue){var outerPSD=Promise.PSD;Promise.PSD=promise._PSD;try{if(newValue===promise)throw new TypeError("A promise cannot be resolved with itself.");if(newValue&&(typeof newValue==="object"||typeof newValue==="function")){if(typeof newValue.then==="function"){doResolve(promise,function(resolve,reject){newValue.then(resolve,reject)},function(data){resolve(promise,data)},function(reason){reject(promise,reason)});return}}promise._state=true;promise._value=newValue;finale.call(promise)}catch(e){reject(e)}finally{Promise.PSD=outerPSD}}function reject(promise,newValue){var outerPSD=Promise.PSD;Promise.PSD=promise._PSD;promise._state=false;promise._value=newValue;finale.call(promise);if(!promise._catched&&promise.onuncatched){try{promise.onuncatched(promise._value)}catch(e){}}Promise.PSD=outerPSD;return promise._catched}function finale(){for(var i=0,len=this._deferreds.length;i<len;i++){handle(this,this._deferreds[i])}this._deferreds=[]}function Deferred(onFulfilled,onRejected,resolve,reject){this.onFulfilled=typeof onFulfilled==="function"?onFulfilled:null;this.onRejected=typeof onRejected==="function"?onRejected:null;this.resolve=resolve;this.reject=reject}function doResolve(promise,fn,onFulfilled,onRejected){var done=false;try{fn(function Promise_resolve(value){if(done)return;done=true;onFulfilled(value)},function Promise_reject(reason){if(done)return promise._catched;done=true;return onRejected(reason)})}catch(ex){if(done)return;return onRejected(ex)}}Promise.all=function(){var args=Array.prototype.slice.call(arguments.length===1&&Array.isArray(arguments[0])?arguments[0]:arguments);return new Promise(function(resolve,reject){if(args.length===0)return resolve([]);var remaining=args.length;function res(i,val){try{if(val&&(typeof val==="object"||typeof val==="function")){var then=val.then;if(typeof then==="function"){then.call(val,function(val){res(i,val)},reject);return}}args[i]=val;if(--remaining===0){resolve(args)}}catch(ex){reject(ex)}}for(var i=0;i<args.length;i++){res(i,args[i])}})};Promise.prototype.then=function(onFulfilled,onRejected){var self=this;var p=new Promise(function(resolve,reject){if(self._state===null)handle(self,new Deferred(onFulfilled,onRejected,resolve,reject));else asap(handle,self,new Deferred(onFulfilled,onRejected,resolve,reject))});p._PSD=this._PSD;p.onuncatched=this.onuncatched;p._parent=this;return p};Promise.prototype["catch"]=function(onRejected){if(arguments.length===1)return this.then(null,onRejected);var type=arguments[0],callback=arguments[1];if(typeof type==="function")return this.then(null,function(e){if(e instanceof type)return callback(e);else return Promise.reject(e)});else return this.then(null,function(e){if(e&&e.name===type)return callback(e);else return Promise.reject(e)})};Promise.prototype["finally"]=function(onFinally){return this.then(function(value){onFinally();return value},function(err){onFinally();return Promise.reject(err)})};Promise.prototype.onuncatched=null;Promise.resolve=function(value){var p=new Promise(function(){});p._state=true;p._value=value;return p};Promise.reject=function(value){var p=new Promise(function(){});p._state=false;p._value=value;return p};Promise.race=function(values){return new Promise(function(resolve,reject){values.map(function(value){value.then(resolve,reject)})})};Promise.PSD=null;Promise.newPSD=function(fn){var outerScope=Promise.PSD;Promise.PSD=outerScope?Object.create(outerScope):{};try{return fn()}finally{Promise.PSD=outerScope}};return Promise}();function nop(){}function mirror(val){return val}function pureFunctionChain(f1,f2){if(f1===mirror)return f2;return function(val){return f2(f1(val))}}function callBoth(on1,on2){return function(){on1.apply(this,arguments);on2.apply(this,arguments)}}function hookCreatingChain(f1,f2){if(f1===nop)return f2;return function(){var res=f1.apply(this,arguments);if(res!==undefined)arguments[0]=res;var onsuccess=this.onsuccess,onerror=this.onerror;delete this.onsuccess;delete this.onerror;var res2=f2.apply(this,arguments);if(onsuccess)this.onsuccess=this.onsuccess?callBoth(onsuccess,this.onsuccess):onsuccess;if(onerror)this.onerror=this.onerror?callBoth(onerror,this.onerror):onerror;return res2!==undefined?res2:res}}function hookUpdatingChain(f1,f2){if(f1===nop)return f2;return function(){var res=f1.apply(this,arguments);if(res!==undefined)extend(arguments[0],res);var onsuccess=this.onsuccess,onerror=this.onerror;delete this.onsuccess;delete this.onerror;var res2=f2.apply(this,arguments);if(onsuccess)this.onsuccess=this.onsuccess?callBoth(onsuccess,this.onsuccess):onsuccess;if(onerror)this.onerror=this.onerror?callBoth(onerror,this.onerror):onerror;return res===undefined?res2===undefined?undefined:res2:res2===undefined?res:extend(res,res2)}}function stoppableEventChain(f1,f2){if(f1===nop)return f2;return function(){if(f1.apply(this,arguments)===false)return false;return f2.apply(this,arguments)}}function reverseStoppableEventChain(f1,f2){if(f1===nop)return f2;return function(){if(f2.apply(this,arguments)===false)return false;return f1.apply(this,arguments)}}function nonStoppableEventChain(f1,f2){if(f1===nop)return f2;return function(){f1.apply(this,arguments);f2.apply(this,arguments)}}function promisableChain(f1,f2){if(f1===nop)return f2;return function(){var res=f1.apply(this,arguments);if(res&&typeof res.then==="function"){var thiz=this,args=arguments;return res.then(function(){return f2.apply(thiz,args)})}return f2.apply(this,arguments)}}function events(ctx,eventNames){var args=arguments;var evs={};var rv=function(eventName,subscriber){if(subscriber){var args=[].slice.call(arguments,1);var ev=evs[eventName];ev.subscribe.apply(ev,args);return ctx}else if(typeof eventName==="string"){return evs[eventName]}};rv.addEventType=add;function add(eventName,chainFunction,defaultFunction){if(Array.isArray(eventName))return addEventGroup(eventName);if(typeof eventName==="object")return addConfiguredEvents(eventName);if(!chainFunction)chainFunction=stoppableEventChain;if(!defaultFunction)defaultFunction=nop;var context={subscribers:[],fire:defaultFunction,subscribe:function(cb){context.subscribers.push(cb);context.fire=chainFunction(context.fire,cb)},unsubscribe:function(cb){context.subscribers=context.subscribers.filter(function(fn){return fn!==cb});context.fire=context.subscribers.reduce(chainFunction,defaultFunction)}};evs[eventName]=rv[eventName]=context;return context}function addConfiguredEvents(cfg){Object.keys(cfg).forEach(function(eventName){var args=cfg[eventName];if(Array.isArray(args)){add(eventName,cfg[eventName][0],cfg[eventName][1])}else if(args==="asap"){var context=add(eventName,null,function fire(){var args=arguments;context.subscribers.forEach(function(fn){asap(function fireEvent(){fn.apply(window,args)})})});context.subscribe=function(fn){if(context.subscribers.indexOf(fn)===-1)context.subscribers.push(fn)};context.unsubscribe=function(fn){var idxOfFn=context.subscribers.indexOf(fn);if(idxOfFn!==-1)context.subscribers.splice(idxOfFn,1)}}else throw new Error("Invalid event config")})}function addEventGroup(eventGroup){var done=false;eventGroup.forEach(function(name){add(name).subscribe(checkDone)});function checkDone(){if(done)return false;done=true}}for(var i=1,l=args.length;i<l;++i){add(args[i])}return rv}function assert(b){if(!b)throw new Error("Assertion failed")}function asap(fn){if(window.setImmediate)setImmediate(fn);else setTimeout(fn,0)}function fakeAutoComplete(fn){var to=setTimeout(fn,1e3);clearTimeout(to)}function trycatch(fn,reject,psd){return function(){var outerPSD=Promise.PSD;Promise.PSD=psd;try{fn.apply(this,arguments)}catch(e){reject(e)}finally{Promise.PSD=outerPSD}}}function getByKeyPath(obj,keyPath){if(obj.hasOwnProperty(keyPath))return obj[keyPath];if(!keyPath)return obj;if(typeof keyPath!=="string"){var rv=[];for(var i=0,l=keyPath.length;i<l;++i){var val=getByKeyPath(obj,keyPath[i]);rv.push(val)}return rv}var period=keyPath.indexOf(".");if(period!==-1){var innerObj=obj[keyPath.substr(0,period)];return innerObj===undefined?undefined:getByKeyPath(innerObj,keyPath.substr(period+1))}return undefined}function setByKeyPath(obj,keyPath,value){if(!obj||keyPath===undefined)return;if(typeof keyPath!=="string"&&"length"in keyPath){assert(typeof value!=="string"&&"length"in value);for(var i=0,l=keyPath.length;i<l;++i){setByKeyPath(obj,keyPath[i],value[i])}}else{var period=keyPath.indexOf(".");if(period!==-1){var currentKeyPath=keyPath.substr(0,period);var remainingKeyPath=keyPath.substr(period+1);if(remainingKeyPath==="")if(value===undefined)delete obj[currentKeyPath];else obj[currentKeyPath]=value;else{var innerObj=obj[currentKeyPath];if(!innerObj)innerObj=obj[currentKeyPath]={};setByKeyPath(innerObj,remainingKeyPath,value)}}else{if(value===undefined)delete obj[keyPath];else obj[keyPath]=value}}}function delByKeyPath(obj,keyPath){setByKeyPath(obj,keyPath,undefined)}function shallowClone(obj){var rv={};for(var m in obj){if(obj.hasOwnProperty(m))rv[m]=obj[m]}return rv}function deepClone(any){if(!any||typeof any!=="object")return any;var rv;if(Array.isArray(any)){rv=[];for(var i=0,l=any.length;i<l;++i){rv.push(deepClone(any[i]))}}else if(any instanceof Date){rv=new Date;rv.setTime(any.getTime())}else{rv=any.constructor?Object.create(any.constructor.prototype):{};for(var prop in any){if(any.hasOwnProperty(prop)){rv[prop]=deepClone(any[prop])}}}return rv}function getObjectDiff(a,b){var rv={};for(var prop in a)if(a.hasOwnProperty(prop)){if(!b.hasOwnProperty(prop))rv[prop]=undefined;else if(a[prop]!==b[prop]&&JSON.stringify(a[prop])!=JSON.stringify(b[prop]))rv[prop]=b[prop]}for(var prop in b)if(b.hasOwnProperty(prop)&&!a.hasOwnProperty(prop)){rv[prop]=b[prop]}return rv}function parseType(type){if(typeof type==="function"){return new type}else if(Array.isArray(type)){return[parseType(type[0])]}else if(type&&typeof type==="object"){var rv={};applyStructure(rv,type);return rv}else{return type}}function applyStructure(obj,structure){Object.keys(structure).forEach(function(member){var value=parseType(structure[member]);obj[member]=value})}function eventRejectHandler(reject,sentance){return function(event){var errObj=event&&event.target.error||new Error;if(sentance){var occurredWhen=" occured when "+sentance.map(function(word){switch(typeof word){case"function":return word();case"string":return word;default:return JSON.stringify(word)}}).join(" ");if(errObj.name){errObj.toString=function toString(){return errObj.name+occurredWhen+(errObj.message?". "+errObj.message:"")}}else{errObj=errObj+occurredWhen}}reject(errObj);event.stopPropagation();event.preventDefault();return false}}function stack(error){try{throw error}catch(e){return e}}function preventDefault(e){e.preventDefault()}function globalDatabaseList(cb){var val;try{val=JSON.parse(localStorage.getItem("Dexie.DatabaseNames")||"[]")}catch(e){val=[]}if(cb(val)){localStorage.setItem("Dexie.DatabaseNames",JSON.stringify(val))}}function IndexSpec(name,keyPath,unique,multi,auto,compound,dotted){this.name=name;this.keyPath=keyPath;this.unique=unique;this.multi=multi;this.auto=auto;this.compound=compound;this.dotted=dotted;var keyPathSrc=typeof keyPath==="string"?keyPath:keyPath&&"["+[].join.call(keyPath,"+")+"]";this.src=(unique?"&":"")+(multi?"*":"")+(auto?"++":"")+keyPathSrc}function TableSchema(name,primKey,indexes,instanceTemplate){this.name=name;this.primKey=primKey||new IndexSpec;this.indexes=indexes||[new IndexSpec];this.instanceTemplate=instanceTemplate;this.mappedClass=null;this.idxByName=indexes.reduce(function(hashSet,index){hashSet[index.name]=index;return hashSet},{})}function ModifyError(msg,failures,successCount,failedKeys){this.name="ModifyError";this.failures=failures;this.failedKeys=failedKeys;this.successCount=successCount;this.message=failures.join("\n")}derive(ModifyError).from(Error);Dexie.delete=function(databaseName){var db=new Dexie(databaseName),promise=db.delete();promise.onblocked=function(fn){db.on("blocked",fn);return this};return promise};Dexie.getDatabaseNames=function(cb){return new Promise(function(resolve,reject){if("webkitGetDatabaseNames"in indexedDB||"getDatabaseNames"in indexedDB){var req="getDatabaseNames"in indexedDB?indexedDB.getDatabaseNames():indexedDB.webkitGetDatabaseNames();req.onsuccess=function(event){resolve([].slice.call(event.target.result,0))};req.onerror=eventRejectHandler(reject)}else{globalDatabaseList(function(val){resolve(val);return false})}}).then(cb)};Dexie.defineClass=function(structure){function Class(properties){if(properties)extend(this,properties)}applyStructure(Class.prototype,structure);return Class};Dexie.spawn=function(scopeFunc){return Promise.newPSD(function(){Promise.PSD.trans=null;return scopeFunc()})};Dexie.vip=function(fn){return Promise.newPSD(function(){Promise.PSD.letThrough=true;return fn()})};Object.defineProperty(Dexie,"currentTransaction",{get:function(){return Promise.PSD&&Promise.PSD.trans||null}});function safariMultiStoreFix(storeNames){return storeNames.length===1?storeNames[0]:storeNames}Dexie.Promise=Promise;Dexie.derive=derive;Dexie.extend=extend;Dexie.override=override;Dexie.events=events;Dexie.getByKeyPath=getByKeyPath;Dexie.setByKeyPath=setByKeyPath;Dexie.delByKeyPath=delByKeyPath;Dexie.shallowClone=shallowClone;Dexie.deepClone=deepClone;Dexie.addons=[];Dexie.fakeAutoComplete=fakeAutoComplete;Dexie.asap=asap;Dexie.ModifyError=ModifyError;Dexie.MultiModifyError=ModifyError;Dexie.IndexSpec=IndexSpec;Dexie.TableSchema=TableSchema;Dexie.dependencies={indexedDB:window._indexedDB||window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,IDBKeyRange:window._IDBKeyRange||window.IDBKeyRange||window.webkitIDBKeyRange,IDBTransaction:window._IDBTransaction||window.IDBTransaction||window.webkitIDBTransaction,Error:window.Error||String,SyntaxError:window.SyntaxError||String,TypeError:window.TypeError||String,DOMError:window.DOMError||String};Dexie.version=1.03;publish("Dexie",Dexie)}).apply(this,typeof module==="undefined"||typeof window!=="undefined"&&this==window?[window,function(name,value){window[name]=value},true]:[global,function(name,value){module.exports=value},false])}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}]},{},[]);var Dexie=require("dexie");var db=new Dexie("articles2");db.version(1).stores({articles:"id++,title,archived"});db.open();db.on("error",function(err){console.error(err)});db.articles.add({title:"plop",archived:"true"}).catch(console.error.bind(console)).then(function(id){console.log(id);db.articles.where("archived").equals("true").each(function(article){console.log(article)})});
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"dexie": "1.0.3"
}
}
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment