/* chotadb.js v0.3.6 file generated on Thu Jun 16 2016 19:19:28 (c) 2016 Moin Uddin (https://moin.im) Available under MIT license - https://chotadb.moin.im */ !function(a){"use strict";function b(){r(v.getItem(d("Meta"))?A(d("Meta")):B(d("Meta"),{}))}function c(a){v=a,A=function(a){return D.parse(v.getItem(a))},B=function(a,b){var c=D.stringify(b);try{v.setItem(a,c)}catch(d){f("error",{code:3,reason:"Unable to store data."})}return D.parse(c)},C=function(a){v.removeItem(a)},b()}function d(a,b){return"ChotaDB"+(b?x+b:"")+x+a}function e(a,b){return y[a].push(b),z}function f(a,b){b=b||{},y[a].forEach(function(a){a(b)})}function g(a,b){return a==b?!0:"string"==typeof a?"string"==typeof b&&a.toLowerCase()==b.toLowerCase()||Array.isArray(b)&&b.indexOf(a)>-1:Array.isArray(a)?!Array.isArray(b)&&a.indexOf(b)>-1||Array.isArray(b)&&b.containsArray(a):null!==a&&"object"==typeof a?a.exec&&null!==a.exec(b)||a.$ne&&b!==a.$ne||ba.$gt||b>=a.$gte:!1}function h(a){return a.length||Object.keys(a).length}function i(a){return void 0!==u[a]}function j(){return s(function(a){null===A(d(a,"Data"))&&m(a)}),z}function k(a){return i(a)?new t(a):(f("error",{code:2,reason:"Collection does not exists."}),z)}function l(a){return a?i(a)?new t(a):z.hasOwnProperty(a)?(f("error",{code:1,reason:"Collection cannot be created with this name."}),z):(u[a]={total:0,nextKey:1},B(d(a,"Data"),[]),n(),f("created",{collection:a}),z[a]=new t(a)):z}function m(a){return a?i(a)?(delete u[a],delete z[a],C(d(a,"Data")),n(),f("dropped",{collection:a}),z):(f("error",{code:2,reason:"Collection does not exists."}),z):z}function n(){return u=B(d("Meta"),u)}function o(a,b){var c=[],d=[];return a.forEach(function(a){void 0!==a[b]&&void 0===c[a[b]]&&(c[a[b]]=1,d.push(a))}),d}function p(a,b){if(b){if(1===b||-1===b)b={key:"_id",type:b};else if("string"==typeof b)b={key:b,type:1};else if("object"==typeof b){var c=Object.keys(b)[0];b={key:c,type:b[c]}}}else b={key:"_id",type:1};return a.sort(function(a,c){return a[b.key]c[b.key]?1*b.type:0})}function q(a,b){return b&&"object"==typeof b&&null!==b?(b.unique&&(a=o(a,b.unique)),(b.sort||b.orderBy)&&(a=p(a,b.sort||b.orderBy)),b.skip&&b.skip>0&&b.limit&&b.limit>0&&(b.limit+=b.skip),a.slice(b.skip,b.limit)):a}function r(a){u=a,s(function(a){z[a]=this})}function s(a){if(!a)return z;for(var b in u)a.call(new t(b),b);return z}function t(a){function b(b){s=B(d(a,"Data"),s),b&&(w=s)}function c(a,b){s.forEach(function(c,d){c._id===a&&b(c,d)})}function e(a,b,c){return a&&"function"==typeof a?(a(b),c):b}function i(a,b){return c(a._id,function(c,d){for(var e in b)"_id"!==e&&(a[e]=b[e]);s[d]=a}),a}function j(a){c(a._id,function(a,b){s.splice(b,1),r.total--})}function k(c){var d={get data(){return c},get keys(){return Object.keys(c)},update:function(d){return c=i(c,d),b(),f("updated",{collection:a,change:d,affected:[c._id]}),this},increment:function(a){if(!isNaN(c[a])){var b={};b[a]=++c[a],this.update(b)}return this},decrement:function(a){if(!isNaN(c[a])){var b={};b[a]=--c[a],this.update(b)}return this},remove:function(){return j(c),u[a]=r,n(),b(!0),f("removed",{collection:a,removed:[c._id]}),this}};return d}var r=u[a],s=A(d(a,"Data")),v=!1,w=s,x={get data(){return A(d(a,"Data"))},get info(){var b=r;return b.name=a,b},get all(){return w=s,this},get keys(){var a=[];return s.forEach(function(b){Object.keys(b).forEach(function(b){a.push(b)})}),a.unique()},insert:function(c){return c._id=r.nextKey++,s.push(c),r.total++,u[a]=r,n(),b(!0),f("inserted",{collection:a,data:c}),this},bulkInsert:function(a){return Array.isArray(a)?a.forEach(this.insert):f("error",{reason:"bulkInsert expects an array, '"+typeof a+"' was given instead."}),this},updateOrInsert:function(a,b){return this.find(a).count()>0?this.update(b):(Object.assign(b,a),this.insert(b)),this},replicateTo:function(a){return a="string"==typeof a?new t(a):a,a.bulkInsert(this.all.get()),this},replicateFrom:function(a){return a="string"==typeof a?new t(a):a,this.bulkInsert(a.all.get()),this},or:function(a,b){var c=w;return w=s,this.find(a,b)&&(w=c.concat(w)),this},and:function(a,b){return v=!0,this.find(a,b),v=!1,this},find:function(a,b){if(v||(w=s),b=b||{},!a||null===a||null!==a&&"object"==typeof a&&0===h(a))return w=q(s,b),this;var c=w;w=[];var d=h(a),e=0;return c.forEach(function(b){e=0;for(var c in a)void 0===b[c]||a[c]!==1/0&&!g(a[c],b[c])||e++,e==d&&w.push(b)}),w=q(w,b),this},join:function(a,b,c){return a="string"==typeof a?new t(a):a,a.find(b,c).each(function(a){w.push(a)}),this},only:function(a){if(!a||0===a.length)return this;"string"==typeof a&&(a=[a]);var b=w,c={};return w=[],b.forEach(function(b){c={};for(var d in b)b.hasOwnProperty(d)&&(a.indexOf(d)>-1||"_id"==d)&&(c[d]=b[d]);w.push(c)}),this},update:function(c){if(c&&"object"==typeof c){var d=[];return w.forEach(function(a,b){w[b]=i(a,c),d.push(a._id)}),b(),f("updated",{collection:a,affected:d,change:c}),this}},remove:function(){var c=[];return w.forEach(function(a){j(a),c.push(a._id)}),u[a]=r,n(),b(!0),f("removed",{collection:a,removed:c}),this},empty:function(){return m(a),l(a)},findById:function(a){return this.find({_id:a},{limit:a.length})},findOne:function(a,b){return b=b||{},b.limit=1,this.find(a,b)},each:function(a){return w.forEach(function(b,c){a.call(new k(b),b)}),this},filter:function(a){var b=w;return w=[],b.forEach(function(b){a.call(this,b)===!0&&w.push(b)}),this},get first(){return w=[w[0]],this},get last(){return w=[w[w.length-1]],this},sort:function(a){return w=p(w,a),this},unique:function(a){return w=o(w,a),this},skip:function(a){return w=w.slice(a),this},limit:function(a){return w=w.slice(0,a),this},count:function(a){return e(a,h(w),this)},then:function(a){return a&&"function"==typeof a?(a.call(this,w),this):this},get:function(a){return e(a,w,this)}};return x.where=x.find,x.orderBy=x.sort,x.groupBy=x.unique,x}var u={},v=null,w=null,x="/",y={error:[],created:[],dropped:[],inserted:[],updated:[],removed:[]},z={ANY:1/0,SORT:{ASC:1,DSC:-1},create:l,drop:m,each:s,hasCollection:i,match:RegExp,on:e,repair:j,select:k,gt:function(a){return{$gt:a}},gte:function(a){return{$gte:a}},lt:function(a){return{$lt:a}},lte:function(a){return{$lte:a}},ne:function(a){return{$ne:a}}},A=null,B=null,C=null,D={parse:JSON.parse,stringify:JSON.stringify},E=function(){return c(w),z};Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c,d;if(null===this)throw new TypeError("this is null or not defined");var e=Object(this),f=e.length>>>0;if("function"!=typeof a)throw new TypeError(a+" is not a function");for(arguments.length>1&&(c=b),d=0;f>d;){var g;d in e&&(g=e[d],a.call(c,g,d,e)),d++}}),Array.prototype.containsArray=function(a){var b=null,c=null;return arguments[1]?(b=arguments[1],c=arguments[2]):(b=0,c=0,this.sort(),a.sort()),b===a.length||(c=this.indexOf(a[b],c))>-1&&this.containsArray(a,++b,++c)},Array.prototype.unique=function(){for(var a={},b=[],c=0,d=this.length;d>c;++c)a.hasOwnProperty(this[c])||(b.push(this[c]),a[this[c]]=1);return b},"function"!=typeof Object.assign&&(Object.assign=function(a){if(null==a)throw new TypeError("Cannot convert undefined or null to object");a=Object(a);for(var b=1;b