made with requirebin
Last active
August 29, 2015 14:16
-
-
Save n1k0/e3b249bdee2cc15184e3 to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)})}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"dexie": "1.0.3" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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