Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

js-data

Package Overview
Dependencies
Maintainers
1
Versions
144
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

js-data - npm Package Compare versions

Comparing version 0.2.0 to 0.3.0

2

bower.json
{
"name": "js-data",
"description": "Data store.",
"version": "0.2.0",
"version": "0.3.0",
"homepage": "http://www.js-data.io/",

@@ -6,0 +6,0 @@ "repository": {

@@ -0,1 +1,7 @@

##### 0.3.0 - 22 September 2014
###### Backwards compatible API changes
- Added `beforeDestroy` and `afterDestroy` to `DS#destroyAll`
- Added `eagerEject` option to `DS#destroyAll` and `DS#destroy`
##### 0.2.0 - 20 September 2014

@@ -2,0 +8,0 @@

@@ -10,3 +10,3 @@ /**

*/
!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.JSData=a()}}(function(){var define,module,exports;return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(require,module,exports){!function(global){"use strict";function detectObjectObserve(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={},d=[];return Object.observe(c,a),Array.observe(d,a),c.id=1,c.id=2,delete c.id,d.push(1,2),d.length=0,Object.deliverChangeRecords(a),5!==b.length?!1:"add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type||"splice"!=b[3].type||"splice"!=b[4].type?!1:(Object.unobserve(c,a),Array.unobserve(d,a),!0)}function detectEval(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;try{var a=new Function("","return true;");return a()}catch(b){return!1}}function dirtyCheck(a){for(var b=0;MAX_DIRTY_CHECK_CYCLES>b&&a.check_();)b++;return global.testingExposeCycleCount&&(global.dirtyCheckCycleCount=b),b>0}function objectIsEmpty(a){for(var b in a)return!1;return!0}function diffIsEmpty(a){return objectIsEmpty(a.added)&&objectIsEmpty(a.removed)&&objectIsEmpty(a.changed)}function diffObjectFromOldObject(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function runEOMTasks(){if(!eomTasks.length)return!1;for(var a=0;a<eomTasks.length;a++)eomTasks[a]();return eomTasks.length=0,!0}function newObservedObject(){function a(a){b&&b.state_===OPENED&&!d&&b.check_(a)}var b,c,d=!1,e=!0;return{open:function(c){if(b)throw Error("ObservedObject in use");e||Object.deliverChangeRecords(a),b=c,e=!1},observe:function(b,d){c=b,d?Array.observe(c,a):Object.observe(c,a)},deliver:function(b){d=b,Object.deliverChangeRecords(a),d=!1},close:function(){b=void 0,Object.unobserve(c,a),observedObjectCache.push(this)}}}function getObservedObject(a,b,c){var d=observedObjectCache.pop()||newObservedObject();return d.open(a),d.observe(b,c),d}function Observer(){this.state_=UNOPENED,this.callback_=void 0,this.target_=void 0,this.directObserver_=void 0,this.value_=void 0,this.id_=nextObserverId++}function addToAll(a){Observer._allObserversCount++,collectObservers&&allObservers.push(a)}function removeFromAll(){Observer._allObserversCount--}function ObjectObserver(a){Observer.call(this),this.value_=a,this.oldObject_=void 0}function diffObjectFromChangeRecords(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];expectedRecordTypes[g.type]?(g.name in c||(c[g.name]=g.oldValue),"update"!=g.type&&("add"!=g.type?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}var hasObserve=detectObjectObserve(),hasEval=detectEval(),createObject="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},MAX_DIRTY_CHECK_CYCLES=1e3,eomTasks=[],runEOM=hasObserve?function(){var a={pingPong:!0},b=!1;return Object.observe(a,function(){runEOMTasks(),b=!1}),function(c){eomTasks.push(c),b||(b=!0,a.pingPong=!a.pingPong)}}():function(){return function(a){eomTasks.push(a)}}(),observedObjectCache=[],UNOPENED=0,OPENED=1,CLOSED=2,nextObserverId=1;Observer.prototype={open:function(a,b){if(this.state_!=UNOPENED)throw Error("Observer has already been opened.");return addToAll(this),this.callback_=a,this.target_=b,this.connect_(),this.state_=OPENED,this.value_},close:function(){this.state_==OPENED&&(removeFromAll(this),this.disconnect_(),this.value_=void 0,this.callback_=void 0,this.target_=void 0,this.state_=CLOSED)},deliver:function(){this.state_==OPENED&&dirtyCheck(this)},report_:function(a){try{this.callback_.apply(this.target_,a)}catch(b){Observer._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},discardChanges:function(){return this.check_(void 0,!0),this.value_}};var collectObservers=!hasObserve,allObservers;Observer._allObserversCount=0,collectObservers&&(allObservers=[]);var runningMicrotaskCheckpoint=!1,hasDebugForceFullDelivery=hasObserve&&hasEval&&function(){try{return eval("%RunMicrotasks()"),!0}catch(ex){return!1}}();global.Platform=global.Platform||{},global.Platform.performMicrotaskCheckpoint=function(){if(!runningMicrotaskCheckpoint){if(hasDebugForceFullDelivery)return void eval("%RunMicrotasks()");if(collectObservers){runningMicrotaskCheckpoint=!0;var cycles=0,anyChanged,toCheck;do{cycles++,toCheck=allObservers,allObservers=[],anyChanged=!1;for(var i=0;i<toCheck.length;i++){var observer=toCheck[i];observer.state_==OPENED&&(observer.check_()&&(anyChanged=!0),allObservers.push(observer))}runEOMTasks()&&(anyChanged=!0)}while(MAX_DIRTY_CHECK_CYCLES>cycles&&anyChanged);global.testingExposeCycleCount&&(global.dirtyCheckCycleCount=cycles),runningMicrotaskCheckpoint=!1}}},collectObservers&&(global.Platform.clearObservers=function(){allObservers=[]}),ObjectObserver.prototype=createObject({__proto__:Observer.prototype,arrayObserve:!1,connect_:function(){hasObserve?this.directObserver_=getObservedObject(this,this.value_,this.arrayObserve):this.oldObject_=this.copyObject(this.value_)},copyObject:function(a){var b=Array.isArray(a)?[]:{};for(var c in a)b[c]=a[c];return Array.isArray(a)&&(b.length=a.length),b},check_:function(a){var b,c;if(hasObserve){if(!a)return!1;c={},b=diffObjectFromChangeRecords(this.value_,a,c)}else c=this.oldObject_,b=diffObjectFromOldObject(this.value_,this.oldObject_);return diffIsEmpty(b)?!1:(hasObserve||(this.oldObject_=this.copyObject(this.value_)),this.report_([b.added||{},b.removed||{},b.changed||{},function(a){return c[a]}]),!0)},disconnect_:function(){hasObserve?(this.directObserver_.close(),this.directObserver_=void 0):this.oldObject_=void 0},deliver:function(){this.state_==OPENED&&(hasObserve?this.directObserver_.deliver(!1):dirtyCheck(this))},discardChanges:function(){return this.directObserver_?this.directObserver_.deliver(!0):this.oldObject_=this.copyObject(this.value_),this.value_}});var observerSentinel={},expectedRecordTypes={add:!0,update:!0,"delete":!0};global.Observer=Observer,global.Observer.runEOM_=runEOM,global.Observer.observerSentinel_=observerSentinel,global.Observer.hasObjectObserve=hasObserve,global.ObjectObserver=ObjectObserver}((exports.Number={isNaN:window.isNaN})?exports:exports)},{}],2:[function(a,b,c){"use strict";var d=a("./promise/promise").Promise,e=a("./promise/polyfill").polyfill;c.Promise=d,c.polyfill=e},{"./promise/polyfill":6,"./promise/promise":7}],3:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to all.");return new b(function(b,c){function d(a){return function(b){e(a,b)}}function e(a,c){h[a]=c,0===--i&&b(h)}var g,h=[],i=a.length;0===i&&b([]);for(var j=0;j<a.length;j++)g=a[j],g&&f(g.then)?g.then(d(j),c):e(j,g)})}var e=a("./utils").isArray,f=a("./utils").isFunction;c.all=d},{"./utils":11}],4:[function(a,b,c){(function(a,b){"use strict";function d(){return function(){a.nextTick(g)}}function e(){var a=0,b=new k(g),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function f(){return function(){l.setTimeout(g,1)}}function g(){for(var a=0;a<m.length;a++){var b=m[a],c=b[0],d=b[1];c(d)}m=[]}function h(a,b){var c=m.push([a,b]);1===c&&i()}var i,j="undefined"!=typeof window?window:{},k=j.MutationObserver||j.WebKitMutationObserver,l="undefined"!=typeof b?b:void 0===this?window:this,m=[];i="undefined"!=typeof a&&"[object process]"==={}.toString.call(a)?d():k?e():f(),c.asap=h}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:12}],5:[function(a,b,c){"use strict";function d(a,b){return 2!==arguments.length?e[a]:void(e[a]=b)}var e={instrument:!1};c.config=e,c.configure=d},{}],6:[function(a,b,c){(function(b){"use strict";function d(){var a;a="undefined"!=typeof b?b:"undefined"!=typeof window&&window.document?window:self;var c="Promise"in a&&"resolve"in a.Promise&&"reject"in a.Promise&&"all"in a.Promise&&"race"in a.Promise&&function(){var b;return new a.Promise(function(a){b=a}),f(b)}();c||(a.Promise=e)}var e=a("./promise").Promise,f=a("./utils").isFunction;c.polyfill=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./promise":7,"./utils":11}],7:[function(a,b,c){"use strict";function d(a){if(!q(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof d))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._subscribers=[],e(a,this)}function e(a,b){function c(a){j(b,a)}function d(a){l(b,a)}try{a(c,d)}catch(e){d(e)}}function f(a,b,c,d){var e,f,g,h,k=q(c);if(k)try{e=c(d),g=!0}catch(m){h=!0,f=m}else e=d,g=!0;i(b,e)||(k&&g?j(b,e):h?l(b,f):a===y?j(b,e):a===z&&l(b,e))}function g(a,b,c,d){var e=a._subscribers,f=e.length;e[f]=b,e[f+y]=c,e[f+z]=d}function h(a,b){for(var c,d,e=a._subscribers,g=a._detail,h=0;h<e.length;h+=3)c=e[h],d=e[h+b],f(b,c,d,g);a._subscribers=null}function i(a,b){var c,d=null;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(p(b)&&(d=b.then,q(d)))return d.call(b,function(d){return c?!0:(c=!0,void(b!==d?j(a,d):k(a,d)))},function(b){return c?!0:(c=!0,void l(a,b))}),!0}catch(e){return c?!0:(l(a,e),!0)}return!1}function j(a,b){a===b?k(a,b):i(a,b)||k(a,b)}function k(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(m,a))}function l(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(n,a))}function m(a){h(a,a._state=y)}function n(a){h(a,a._state=z)}var o=a("./config").config,p=(a("./config").configure,a("./utils").objectOrFunction),q=a("./utils").isFunction,r=(a("./utils").now,a("./all").all),s=a("./race").race,t=a("./resolve").resolve,u=a("./reject").reject,v=a("./asap").asap;o.async=v;var w=void 0,x=0,y=1,z=2;d.prototype={constructor:d,_state:void 0,_detail:void 0,_subscribers:void 0,then:function(a,b){var c=this,d=new this.constructor(function(){});if(this._state){var e=arguments;o.async(function(){f(c._state,d,e[c._state-1],c._detail)})}else g(this,d,a,b);return d},"catch":function(a){return this.then(null,a)}},d.all=r,d.race=s,d.resolve=t,d.reject=u,c.Promise=d},{"./all":3,"./asap":4,"./config":5,"./race":8,"./reject":9,"./resolve":10,"./utils":11}],8:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to race.");return new b(function(b,c){for(var d,e=0;e<a.length;e++)d=a[e],d&&"function"==typeof d.then?d.then(b,c):b(d)})}var e=a("./utils").isArray;c.race=d},{"./utils":11}],9:[function(a,b,c){"use strict";function d(a){var b=this;return new b(function(b,c){c(a)})}c.reject=d},{}],10:[function(a,b,c){"use strict";function d(a){if(a&&"object"==typeof a&&a.constructor===this)return a;var b=this;return new b(function(b){b(a)})}c.resolve=d},{}],11:[function(a,b,c){"use strict";function d(a){return e(a)||"object"==typeof a&&null!==a}function e(a){return"function"==typeof a}function f(a){return"[object Array]"===Object.prototype.toString.call(a)}var g=Date.now||function(){return(new Date).getTime()};c.objectOrFunction=d,c.isFunction=e,c.isArray=f,c.now=g},{}],12:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],13:[function(a,b){function c(a,b){return-1!==d(a,b)}var d=a("./indexOf");b.exports=c},{"./indexOf":16}],14:[function(a,b){function c(a,b,c){b=d(b,c);var e=[];if(null==a)return e;for(var f,g=-1,h=a.length;++g<h;)f=a[g],b(f,g,a)&&e.push(f);return e}var d=a("../function/makeIterator_");b.exports=c},{"../function/makeIterator_":23}],15:[function(a,b){function c(a,b,c){if(null!=a)for(var d=-1,e=a.length;++d<e&&b.call(c,a[d],d,a)!==!1;);}b.exports=c},{}],16:[function(a,b){function c(a,b,c){if(c=c||0,null==a)return-1;for(var d=a.length,e=0>c?d+c:c;d>e;){if(a[e]===b)return e;e++}return-1}b.exports=c},{}],17:[function(a,b){function c(a){return null!=a&&""!==a}function d(a,b){return b=b||"",e(a,c).join(b)}var e=a("./filter");b.exports=d},{"./filter":14}],18:[function(a,b){function c(a,b){var c=d(a,b);-1!==c&&a.splice(c,1)}var d=a("./indexOf");b.exports=c},{"./indexOf":16}],19:[function(a,b){function c(a,b,c){var d=a.length;b=null==b?0:0>b?Math.max(d+b,0):Math.min(b,d),c=null==c?d:0>c?Math.max(d+c,0):Math.min(c,d);for(var e=[];c>b;)e.push(a[b++]);return e}b.exports=c},{}],20:[function(a,b){function c(a,b){if(null==a)return[];if(a.length<2)return a;null==b&&(b=d);var f,g,h;return f=~~(a.length/2),g=c(a.slice(0,f),b),h=c(a.slice(f,a.length),b),e(g,h,b)}function d(a,b){return b>a?-1:a>b?1:0}function e(a,b,c){for(var d=[];a.length&&b.length;)d.push(c(a[0],b[0])<=0?a.shift():b.shift());return a.length&&d.push.apply(d,a),b.length&&d.push.apply(d,b),d}b.exports=c},{}],21:[function(a,b){function c(a,b){var c={};if(null==a)return c;var e,f=-1,g=a.length;if(d(b))for(;++f<g;)e=a[f],c[b(e)]=e;else for(;++f<g;)e=a[f],c[e[b]]=e;return c}var d=a("../lang/isFunction");b.exports=c},{"../lang/isFunction":30}],22:[function(a,b){function c(a){return a}b.exports=c},{}],23:[function(a,b){function c(a,b){if(null==a)return d;switch(typeof a){case"function":return"undefined"!=typeof b?function(c,d,e){return a.call(b,c,d,e)}:a;case"object":return function(b){return f(b,a)};case"string":case"number":return e(a)}}var d=a("./identity"),e=a("./prop"),f=a("../object/deepMatches");b.exports=c},{"../object/deepMatches":38,"./identity":22,"./prop":24}],24:[function(a,b){function c(a){return function(b){return b[a]}}b.exports=c},{}],25:[function(a,b){function c(a){switch(h(a)){case"Object":return d(a);case"Array":return g(a);case"RegExp":return e(a);case"Date":return f(a);default:return a}}function d(a){return i(a)?j({},a):a}function e(a){var b="";return b+=a.multiline?"m":"",b+=a.global?"g":"",b+=a.ignorecase?"i":"",new RegExp(a.source,b)}function f(a){return new Date(+a)}function g(a){return a.slice()}var h=a("./kindOf"),i=a("./isPlainObject"),j=a("../object/mixIn");b.exports=c},{"../object/mixIn":44,"./isPlainObject":34,"./kindOf":36}],26:[function(a,b){function c(a,b){switch(h(a)){case"Object":return d(a,b);case"Array":return e(a,b);default:return f(a)}}function d(a,b){if(i(a)){var d={};return g(a,function(a,d){this[d]=c(a,b)},d),d}return b?b(a):a}function e(a,b){for(var d=[],e=-1,f=a.length;++e<f;)d[e]=c(a[e],b);return d}var f=a("./clone"),g=a("../object/forOwn"),h=a("./kindOf"),i=a("./isPlainObject");b.exports=c},{"../object/forOwn":41,"./clone":25,"./isPlainObject":34,"./kindOf":36}],27:[function(a,b){var c=a("./isKind"),d=Array.isArray||function(a){return c(a,"Array")};b.exports=d},{"./isKind":31}],28:[function(a,b){function c(a){return d(a,"Boolean")}var d=a("./isKind");b.exports=c},{"./isKind":31}],29:[function(a,b){function c(a){if(null==a)return!0;if("string"==typeof a||e(a))return!a.length;if("object"==typeof a){var b=!0;return d(a,function(){return b=!1,!1}),b}return!0}var d=a("../object/forOwn"),e=a("./isArray");b.exports=c},{"../object/forOwn":41,"./isArray":27}],30:[function(a,b){function c(a){return d(a,"Function")}var d=a("./isKind");b.exports=c},{"./isKind":31}],31:[function(a,b){function c(a,b){return d(a)===b}var d=a("./kindOf");b.exports=c},{"./kindOf":36}],32:[function(a,b){function c(a){return d(a,"Number")}var d=a("./isKind");b.exports=c},{"./isKind":31}],33:[function(a,b){function c(a){return d(a,"Object")}var d=a("./isKind");b.exports=c},{"./isKind":31}],34:[function(a,b){function c(a){return!!a&&"object"==typeof a&&a.constructor===Object}b.exports=c},{}],35:[function(a,b){function c(a){return d(a,"String")}var d=a("./isKind");b.exports=c},{"./isKind":31}],36:[function(a,b){function c(a){return null===a?"Null":a===d?"Undefined":e.exec(f.call(a))[1]}var d,e=/^\[object (.*)\]$/,f=Object.prototype.toString;b.exports=c},{}],37:[function(a,b){function c(a){return null==a?"":a.toString()}b.exports=c},{}],38:[function(a,b){function c(a,b){for(var c=-1,d=a.length;++c<d;)if(f(a[c],b))return!0;return!1}function d(a,b){for(var d=-1,e=b.length;++d<e;)if(!c(a,b[d]))return!1;return!0}function e(a,b){var c=!0;return g(b,function(b,d){return f(a[d],b)?void 0:c=!1}),c}function f(a,b){return a&&"object"==typeof a?h(a)&&h(b)?d(a,b):e(a,b):a===b}var g=a("./forOwn"),h=a("../lang/isArray");b.exports=f},{"../lang/isArray":27,"./forOwn":41}],39:[function(a,b){function c(a){for(var b,c=0,f=arguments.length;++c<f;)b=arguments[c],b&&e(b,d,a);return a}function d(a,b){var d=this[b];f(a)&&f(d)?c(d,a):this[b]=a}var e=a("./forOwn"),f=a("../lang/isPlainObject");b.exports=c},{"../lang/isPlainObject":34,"./forOwn":41}],40:[function(a,b){function c(){g=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],f=!0;for(var a in{toString:null})f=!1}function d(a,b,d){var i,j=0;null==f&&c();for(i in a)if(e(b,a,i,d)===!1)break;if(f)for(var k=a.constructor,l=!!k&&a===k.prototype;(i=g[j++])&&("constructor"===i&&(l||!h(a,i))||a[i]===Object.prototype[i]||e(b,a,i,d)!==!1););}function e(a,b,c,d){return a.call(d,b[c],c,b)}var f,g,h=a("./hasOwn");b.exports=d},{"./hasOwn":42}],41:[function(a,b){function c(a,b,c){e(a,function(e,f){return d(a,f)?b.call(c,a[f],f,a):void 0})}var d=a("./hasOwn"),e=a("./forIn");b.exports=c},{"./forIn":40,"./hasOwn":42}],42:[function(a,b){function c(a,b){return Object.prototype.hasOwnProperty.call(a,b)}b.exports=c},{}],43:[function(a,b){function c(){var a,b,g,h,i=1;for(h=e(arguments[0]);g=arguments[i++];)for(a in g)d(g,a)&&(b=g[a],h[a]=f(b)&&f(h[a])?c(h[a],b):e(b));return h}var d=a("./hasOwn"),e=a("../lang/deepClone"),f=a("../lang/isObject");b.exports=c},{"../lang/deepClone":26,"../lang/isObject":33,"./hasOwn":42}],44:[function(a,b){function c(a){for(var b,c=0,f=arguments.length;++c<f;)b=arguments[c],null!=b&&e(b,d,a);return a}function d(a,b){this[b]=a}var e=a("./forOwn");b.exports=c},{"./forOwn":41}],45:[function(a,b){function c(a,b){return b?(d(b.split("."),function(b){a[b]||(a[b]={}),a=a[b]}),a):a}var d=a("../array/forEach");b.exports=c},{"../array/forEach":15}],46:[function(a,b){function c(a){for(var b,c="string"!=typeof arguments[1]?arguments[1]:d(arguments,1),e={},f=0;b=c[f++];)e[b]=a[b];return e}var d=a("../array/slice");b.exports=c},{"../array/slice":19}],47:[function(a,b){function c(a,b,c){var e=/^(.+)\.(.+)$/.exec(b);e?d(a,e[1])[e[2]]=c:a[b]=c}var d=a("./namespace");b.exports=c},{"./namespace":45}],48:[function(a,b){function c(a){return a=d(a),a=e(a),a=f(a).replace(/[\-_]/g," ").replace(/\s[a-z]/g,g).replace(/\s+/g,"").replace(/^[A-Z]/g,h)}var d=a("../lang/toString"),e=a("./replaceAccents"),f=a("./removeNonWord"),g=a("./upperCase"),h=a("./lowerCase");b.exports=c},{"../lang/toString":37,"./lowerCase":49,"./removeNonWord":52,"./replaceAccents":53,"./upperCase":54}],49:[function(a,b){function c(a){return a=d(a),a.toLowerCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":37}],50:[function(a,b){function c(){var a=d(e(arguments),"/");return a.replace(/([^:\/]|^)\/{2,}/g,"$1/")}var d=a("../array/join"),e=a("../array/slice");b.exports=c},{"../array/join":17,"../array/slice":19}],51:[function(a,b){function c(a){return a=d(a),e(a).replace(/^[a-z]/,f)}var d=a("../lang/toString"),e=a("./camelCase"),f=a("./upperCase");b.exports=c},{"../lang/toString":37,"./camelCase":48,"./upperCase":54}],52:[function(a,b){function c(a){return a=d(a),a.replace(e,"")}var d=a("../lang/toString"),e=/[^\x20\x2D0-9A-Z\x5Fa-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/g;b.exports=c},{"../lang/toString":37}],53:[function(a,b){function c(a){return a=d(a),a.search(/[\xC0-\xFF]/g)>-1&&(a=a.replace(/[\xC0-\xC5]/g,"A").replace(/[\xC6]/g,"AE").replace(/[\xC7]/g,"C").replace(/[\xC8-\xCB]/g,"E").replace(/[\xCC-\xCF]/g,"I").replace(/[\xD0]/g,"D").replace(/[\xD1]/g,"N").replace(/[\xD2-\xD6\xD8]/g,"O").replace(/[\xD9-\xDC]/g,"U").replace(/[\xDD]/g,"Y").replace(/[\xDE]/g,"P").replace(/[\xE0-\xE5]/g,"a").replace(/[\xE6]/g,"ae").replace(/[\xE7]/g,"c").replace(/[\xE8-\xEB]/g,"e").replace(/[\xEC-\xEF]/g,"i").replace(/[\xF1]/g,"n").replace(/[\xF2-\xF6\xF8]/g,"o").replace(/[\xF9-\xFC]/g,"u").replace(/[\xFE]/g,"p").replace(/[\xFD\xFF]/g,"y")),a}var d=a("../lang/toString");b.exports=c},{"../lang/toString":37}],54:[function(a,b){function c(a){return a=d(a),a.toUpperCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":37}],55:[function(a,b){function c(a,b,c){var g=this,h=g.definitions[a],i=new d.Promise(function(d,f){c=c||{},h?("cacheResponse"in c||(c.cacheResponse=!0),"upsert"in c||(c.upsert=!0),d(b)):f(new e.NER(a))});return c.upsert&&b[h.idAttribute]?g.update(a,b[h.idAttribute],b,c):i.then(function(b){var d=c.beforeValidate?f(c.beforeValidate):h.beforeValidate;return d.call(b,a,b)}).then(function(b){var d=c.validate?f(c.validate):h.validate;return d.call(b,a,b)}).then(function(b){var d=c.afterValidate?f(c.afterValidate):h.afterValidate;return d.call(b,a,b)}).then(function(b){var d=c.beforeCreate?f(c.beforeCreate):h.beforeCreate;return d.call(b,a,b)}).then(function(a){return g.notify(h,"beforeCreate",d.merge({},a)),g.getAdapter(h,c).create(h,a,c)}).then(function(b){var d=c.afterCreate?f(c.afterCreate):h.afterCreate;return d.call(b,a,b)}).then(function(b){if(g.notify(h,"afterCreate",d.merge({},b)),c.cacheResponse){var e=g.store[a],f=g.inject(h.name,b,c),i=f[h.idAttribute];return e.completedQueries[i]=(new Date).getTime(),e.previousAttributes[i]=d.deepMixIn({},f),e.saved[i]=d.updateTimestamp(e.saved[i]),g.get(h.name,i)}return g.createInstance(a,b,c)})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],56:[function(a,b){function c(a,b,c){var g,h=this,i=h.definitions[a];return new d.Promise(function(f,j){c=c||{},b=d.resolveId(i,b),i?d.isString(b)||d.isNumber(b)?h.get(a,b)?(g=h.get(a,b),f(g)):j(new e.R('id "'+b+'" not found in cache!')):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(b){var d=c.beforeDestroy?f(c.beforeDestroy):i.beforeDestroy;return d.call(b,a,b)}).then(function(a){return h.notify(i,"beforeDestroy",d.merge({},a)),h.getAdapter(i,c).destroy(i,b,c)}).then(function(){var b=c.afterDestroy?f(c.afterDestroy):i.afterDestroy;return b.call(g,a,g)}).then(function(c){return h.notify(i,"afterDestroy",d.merge({},c)),h.eject(a,b),b})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],57:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];return new d.Promise(function(b,c){g?b():c(new e.NER(a))}).then(function(){return f.getAdapter(g,c).destroyAll(g,b,c)}).then(function(){return f.ejectAll(a,b)})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],58:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a],h=f.store[a];return new d.Promise(function(i,j){c=c||{},g?d.isString(b)||d.isNumber(b)?d.isObject(c)?("cacheResponse"in c||(c.cacheResponse=!0),(c.bypassCache||!c.cacheResponse)&&delete h.completedQueries[b],b in h.completedQueries?i(f.get(a,b)):i()):j(new e.IA('"options" must be an object!')):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(d){return b in h.completedQueries?d:(b in h.pendingQueries||(h.pendingQueries[b]=f.getAdapter(g,c).find(g,b,c).then(function(d){return c.cacheResponse?(delete h.pendingQueries[b],h.completedQueries[b]=(new Date).getTime(),f.inject(a,d,c)):f.createInstance(a,d,c)})),h.pendingQueries[b])}).catch(function(a){throw delete h.pendingQueries[b],a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],59:[function(a,b){function c(a,b,c,d){var f=this,g=f.store[b],h=f.definitions[b].idAttribute,i=(new Date).getTime();a=a||[],delete g.pendingQueries[c],g.completedQueries[c]=i,g.collectionModified=e.updateTimestamp(g.collectionModified);var j=f.inject(b,a,d);return e.isArray(j)?e.forEach(j,function(a){a&&a[h]&&(g.completedQueries[a[h]]=i)}):(console.warn(errorPrefix(b)+"response is expected to be an array!"),g.completedQueries[j[h]]=i),j}function d(a,b,d){var g,h=this,i=h.definitions[a],j=h.store[a];return new e.Promise(function(c,i){d=d||{},b=b||{},h.definitions[a]?e.isObject(b)?e.isObject(d)?("cacheResponse"in d||(d.cacheResponse=!0),g=e.toJson(b),(d.bypassCache||!d.cacheResponse)&&delete j.completedQueries[g],g in j.completedQueries?c(h.filter(a,b,d)):c()):i(new f.IA('"options" must be an object!')):i(new f.IA('"params" must be an object!')):i(new f.NER(a))}).then(function(f){return g in j.completedQueries?f:(g in j.pendingQueries||(j.pendingQueries[g]=h.getAdapter(i,d).findAll(i,b,d).then(function(b){return delete j.pendingQueries[g],d.cacheResponse?c.call(h,b,a,g,d):(e.forEach(b,function(c,e){b[e]=h.createInstance(a,c,d)}),b)})),j.pendingQueries[g])}).catch(function(a){throw delete j.pendingQueries[g],a})}var e=a("../../utils"),f=a("../../errors");b.exports=d},{"../../errors":76,"../../utils":78}],60:[function(a,b){function c(a,b,c){var f=this;return new d.Promise(function(g,h){c=c||{},b=d.resolveId(f.definitions[a],b),f.definitions[a]?d.isString(b)||d.isNumber(b)?d.isObject(c)?(c.bypassCache=!0,g(f.get(a,b))):h(new e.IA('"options" must be an object!')):h(new e.IA('"id" must be a string or a number!')):h(new f.errors.NER(a))}).then(function(d){return d?f.find(a,b,c):d})}var d=a("../../utils"),e=a("../../errors");b.exports={create:a("./create"),destroy:a("./destroy"),destroyAll:a("./destroyAll"),find:a("./find"),findAll:a("./findAll"),loadRelations:a("./loadRelations"),refresh:c,save:a("./save"),update:a("./update"),updateAll:a("./updateAll")}},{"../../errors":76,"../../utils":78,"./create":55,"./destroy":56,"./destroyAll":57,"./find":58,"./findAll":59,"./loadRelations":61,"./save":62,"./update":63,"./updateAll":64}],61:[function(a,b){function c(a,b,c,f){var g=this,h=g.definitions[a],i=[];return new d.Promise(function(j,k){if(f=f||{},(d.isString(b)||d.isNumber(b))&&(b=g.get(a,b)),d.isString(c)&&(c=[c]),h)if(d.isObject(b))if(d.isArray(c))if(d.isObject(f)){"findBelongsTo"in f||(f.findBelongsTo=!0),"findHasMany"in f||(f.findHasMany=!0);var l=[];d.forEach(h.relationList,function(a){var e=a.relation;if(d.contains(c,e)){var j,k={};k[a.foreignKey]=b[h.idAttribute],"hasMany"===a.type&&k[a.foreignKey]?j=g.findAll(e,k,f):"hasOne"===a.type?a.localKey&&b[a.localKey]?j=g.find(e,b[a.localKey],f):a.foreignKey&&k[a.foreignKey]&&(j=g.findAll(e,k,f).then(function(a){return a.length?a[0]:null})):b[a.localKey]&&(j=g.find(e,b[a.localKey],f)),j&&(l.push(j),i.push(a.localField))}}),j(l)}else k(new e.IA('"options" must be an object!'));else k(new e.IA('"relations" must be a string or an array!'));else k(new e.IA('"instance(id)" must be a string, number or object!'));else k(new e.NER(a))}).then(function(a){return d.Promise.all(a)}).then(function(a){return d.forEach(i,function(c,d){b[c]=a[d]}),b})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],62:[function(a,b){function c(a,b,c){var g,h=this,i=h.definitions[a];return new d.Promise(function(f,j){c=c||{},b=d.resolveId(i,b),i?d.isString(b)||d.isNumber(b)?d.isObject(c)?h.get(a,b)?(g=h.get(a,b),"cacheResponse"in c||(c.cacheResponse=!0),f(g)):j(new e.R('id "'+b+'" not found in cache!')):j(new e.IA('"options" must be an object!')):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(b){var d=c.beforeValidate?f(c.beforeValidate):i.beforeValidate;return d.call(b,a,b)}).then(function(b){var d=c.validate?f(c.validate):i.validate;return d.call(b,a,b)}).then(function(b){var d=c.afterValidate?f(c.afterValidate):i.afterValidate;return d.call(b,a,b)}).then(function(b){var d=c.beforeUpdate?f(c.beforeUpdate):i.beforeUpdate;return d.call(b,a,b)}).then(function(e){if(h.notify(i,"beforeUpdate",d.merge({},e)),c.changesOnly){var f=h.store[a];f.observers[b].deliver();var g=[],j=h.changes(a,b);for(var k in j.added)g.push(k);for(k in j.changed)g.push(k);if(j=d.pick(e,g),d.isEmpty(j))return e;e=j}return h.getAdapter(i,c).update(i,b,e,c)}).then(function(b){var d=c.afterUpdate?f(c.afterUpdate):i.afterUpdate;return d.call(b,a,b)}).then(function(e){if(h.notify(i,"afterUpdate",d.merge({},e)),c.cacheResponse){var f=h.store[a],g=h.inject(i.name,e,c);return f.previousAttributes[b]=d.deepMixIn({},g),f.saved[b]=d.updateTimestamp(f.saved[b]),f.observers[b].discardChanges(),h.get(a,b)}return e})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],63:[function(a,b){function c(a,b,c,g){var h=this,i=h.definitions[a];return new d.Promise(function(f,h){g=g||{},b=d.resolveId(i,b),i?d.isString(b)||d.isNumber(b)?d.isObject(g)?("cacheResponse"in g||(g.cacheResponse=!0),f(c)):h(new e.IA('"options" must be an object!')):h(new e.IA('"id" must be a string or a number!')):h(new e.NER(a))}).then(function(b){var c=g.beforeValidate?f(g.beforeValidate):i.beforeValidate;return c.call(b,a,b)}).then(function(b){var c=g.validate?f(g.validate):i.validate;return c.call(b,a,b)}).then(function(b){var c=g.afterValidate?f(g.afterValidate):i.afterValidate;return c.call(b,a,b)}).then(function(b){var c=g.beforeUpdate?f(g.beforeUpdate):i.beforeUpdate;return c.call(b,a,b)}).then(function(a){return h.notify(i,"beforeUpdate",d.merge({},a)),h.getAdapter(i,g).update(i,b,a,g)}).then(function(b){var c=g.afterUpdate?f(g.afterUpdate):i.afterUpdate;return c.call(b,a,b)}).then(function(b){if(h.notify(i,"afterUpdate",d.merge({},b)),g.cacheResponse){var c=h.store[a],e=h.inject(i.name,b,g),f=e[i.idAttribute];return c.previousAttributes[f]=d.deepMixIn({},e),c.saved[f]=d.updateTimestamp(c.saved[f]),c.observers[f].discardChanges(),h.get(i.name,f)}return b})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],64:[function(a,b){function c(a,b,c,g){var h=this,i=h.definitions[a];return new d.Promise(function(c,f){g=g||{},i?d.isObject(g)?("cacheResponse"in g||(g.cacheResponse=!0),c(b)):f(new e.IA('"options" must be an object!')):f(new e.NER(a))}).then(function(b){var c=g.beforeValidate?f(g.beforeValidate):i.beforeValidate;return c.call(b,a,b)}).then(function(b){var c=g.validate?f(g.validate):i.validate;return c.call(b,a,b)
}).then(function(b){var c=g.afterValidate?f(g.afterValidate):i.afterValidate;return c.call(b,a,b)}).then(function(b){var c=g.beforeUpdate?f(g.beforeUpdate):i.beforeUpdate;return c.call(b,a,b)}).then(function(a){return h.notify(i,"beforeUpdate",d.merge({},a)),h.getAdapter(i,g).updateAll(i,a,c,g)}).then(function(b){var c=g.afterUpdate?f(g.afterUpdate):i.afterUpdate;return c.call(b,a,b)}).then(function(a){return h.notify(i,"afterUpdate",d.merge({},b)),g.cacheResponse?h.inject(i.name,a,g):a})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],65:[function(a,b){function c(a,b,c){c(null,b)}function d(a,b){return b}function e(){}function f(a){this.store={},this.definitions={},this.adapters={},this.defaults=new e,g.deepMixIn(this.defaults,a)}var g=a("../utils"),h=a("../errors"),i=a("./sync_methods"),j=a("./async_methods");g.deepFreeze(i),g.deepFreeze(j),g.deepFreeze(h),g.deepFreeze(g);var k=e.prototype;k.idAttribute="id",k.defaultAdapter="DSHttpAdapter",k.defaultFilter=function(a,b,c,d){var e=this,f=a,h=null,i={skip:"",offset:"",where:"",limit:"",orderBy:"",sort:""};h=g.isObject(c.where)?c.where:{},d.allowSimpleWhere&&g.forOwn(c,function(a,b){b in i||b in h||(h[b]={"==":a})}),g.isEmpty(h)&&(h=null),h&&(f=g.filter(f,function(a){var b=!0,c=!0;return g.forOwn(h,function(d,e){g.isString(d)?d={"===":d}:(g.isNumber(d)||g.isBoolean(d))&&(d={"==":d}),g.isObject(d)&&g.forOwn(d,function(d,f){"=="===f?c=b?a[e]==d:c&&a[e]==d:"==="===f?c=b?a[e]===d:c&&a[e]===d:"!="===f?c=b?a[e]!=d:c&&a[e]!=d:"!=="===f?c=b?a[e]!==d:c&&a[e]!==d:">"===f?c=b?a[e]>d:c&&a[e]>d:">="===f?c=b?a[e]>=d:c&&a[e]>=d:"<"===f?c=b?a[e]<d:c&&a[e]<d:"<="===f?c=b?a[e]<=d:c&&a[e]<=d:"in"===f?c=b?g.contains(d,a[e]):c&&g.contains(d,a[e]):"notIn"===f?c=b?!g.contains(d,a[e]):c&&!g.contains(d,a[e]):"|=="===f?c=b?a[e]==d:c||a[e]==d:"|==="===f?c=b?a[e]===d:c||a[e]===d:"|!="===f?c=b?a[e]!=d:c||a[e]!=d:"|!=="===f?c=b?a[e]!==d:c||a[e]!==d:"|>"===f?c=b?a[e]>d:c||a[e]>d:"|>="===f?c=b?a[e]>=d:c||a[e]>=d:"|<"===f?c=b?a[e]<d:c||a[e]<d:"|<="===f?c=b?a[e]<=d:c||a[e]<=d:"|in"===f?c=b?g.contains(d,a[e]):c||g.contains(d,a[e]):"|notIn"===f&&(c=b?!g.contains(d,a[e]):c||!g.contains(d,a[e])),b=!1})}),c}));var j=null;g.isString(c.orderBy)?j=[[c.orderBy,"ASC"]]:g.isArray(c.orderBy)&&(j=c.orderBy),!j&&g.isString(c.sort)?j=[[c.sort,"ASC"]]:!j&&g.isArray(c.sort)&&(j=c.sort),j&&g.forEach(j,function(a){if(g.isString(a))a=[a,"ASC"];else if(!g.isArray(a))throw new e.errors.IllegalArgumentError("DS.filter(resourceName[, params][, options]): "+g.toJson(a)+": Must be a string or an array!",{params:{"orderBy[i]":{actual:typeof a,expected:"string|array"}}});f=g.sort(f,function(b,c){var d=b[a[0]],e=c[a[0]];return g.isString(d)&&(d=g.upperCase(d)),g.isString(e)&&(e=g.upperCase(e)),"DESC"===a[1]?d>e?-1:e>d?1:0:e>d?-1:d>e?1:0})});var k=g.isNumber(c.limit)?c.limit:null,l=null;return g.isNumber(c.skip)?l=c.skip:g.isNumber(c.offset)&&(l=c.offset),k&&l?f=g.slice(f,l,Math.min(f.length,l+k)):g.isNumber(k)?f=g.slice(f,0,Math.min(f.length,k)):g.isNumber(l)&&(f=l<f.length?g.slice(f,l):[]),f},k.baseUrl="",k.endpoint="",k.useClass=!0,k.keepChangeHistory=!1,k.resetHistoryOnInject=!0,k.beforeValidate=c,k.validate=c,k.afterValidate=c,k.beforeCreate=c,k.afterCreate=c,k.beforeUpdate=c,k.afterUpdate=c,k.beforeDestroy=c,k.afterDestroy=c,k.beforeInject=d,k.afterInject=d;var l=f.prototype;l.getAdapter=function(a,b){return b=b||{},this.adapters[b.adapter]||this.adapters[a.defaultAdapter]},l.notify=function(a,b){var c=Array.prototype.slice.call(arguments,2);c.unshift(a.name),c.unshift("DS."+b),a.emit.apply(a,c)},l.errors=a("../errors"),l.utils=g,g.deepMixIn(l,i),g.deepMixIn(l,j),b.exports=f},{"../errors":76,"../utils":78,"./async_methods":60,"./sync_methods":70}],66:[function(require,module,exports){function Resource(a){DSUtils.deepMixIn(this,a),this.endpoint="endpoint"in a?a.endpoint:this.name}function defineResource(definition){var _this=this,definitions=_this.definitions;if(DSUtils.isString(definition)&&(definition={name:definition.replace(/\s/gi,"")}),!DSUtils.isObject(definition))throw new DSErrors.IA('"definition" must be an object!');if(!DSUtils.isString(definition.name))throw new DSErrors.IA('"name" must be a string!');if(_this.store[definition.name])throw new DSErrors.R(definition.name+" is already registered!");try{Resource.prototype=_this.defaults,definitions[definition.name]=new Resource(definition);var def=definitions[definition.name];if(!DSUtils.isString(def.idAttribute))throw new DSErrors.IA('"idAttribute" must be a string!');return def.relations&&(def.relationList=[],def.relationFields=[],DSUtils.forOwn(def.relations,function(a,b){DSUtils.forOwn(a,function(c,d){DSUtils.isArray(c)||(a[d]=[c]),DSUtils.forEach(a[d],function(a){a.type=b,a.relation=d,a.name=def.name,def.relationList.push(a),def.relationFields.push(a.localField)})})}),def.relations.belongsTo&&DSUtils.forOwn(def.relations.belongsTo,function(a,b){DSUtils.forEach(a,function(a){a.parent&&(def.parent=b,def.parentKey=a.localKey)})}),DSUtils.deepFreeze(def.relations),DSUtils.deepFreeze(def.relationList)),def.getEndpoint=function(a,b){var c,d,e=this.parent,f=this.parentKey,g=b.endpoint||this.endpoint,h=definitions[e];return delete b.endpoint,b=b||{},b.params=b.params||{},e&&f&&h&&b.params[f]!==!1&&((DSUtils.isNumber(a)||DSUtils.isString(a))&&(c=_this.get(this.name,a)),DSUtils.isObject(a)&&f in a?(delete b.params[f],d=DSUtils.makePath(h.getEndpoint(a,b),a[f],g)):c&&f in c?(delete b.params[f],d=DSUtils.makePath(h.getEndpoint(a,b),c[f],g)):b&&b.params[f]&&(d=DSUtils.makePath(h.getEndpoint(a,b),b.params[f],g),delete b.params[f])),b.params[f]===!1&&delete b.params[f],d||g},def.filter&&(def.defaultFilter=def.filter,delete def.filter),def.class=DSUtils.pascalCase(definition.name),eval("function "+def.class+"() {}"),def[def.class]=eval(def.class),def.methods&&DSUtils.deepMixIn(def[def.class].prototype,def.methods),def.computed&&(DSUtils.forOwn(def.computed,function(a,b){DSUtils.isFunction(a)&&(def.computed[b]=[a],a=def.computed[b]),def.methods&&b in def.methods&&console.warn('Computed property "'+b+'" conflicts with previously defined prototype method!');var c;if(1===a.length){var d=a[0].toString().match(/function.*?\(([\s\S]*?)\)/);c=d[1].split(","),def.computed[b]=c.concat(a),a=def.computed[b],c.length&&console.warn("Use the computed property array syntax for compatibility with minified code!")}c=a.slice(0,a.length-1),DSUtils.forEach(c,function(a,b){c[b]=a.trim()}),a.deps=DSUtils.filter(c,function(a){return!!a})}),def[def.class].prototype.DSCompute=function(){return _this.compute(def.name,this)}),_this.store[def.name]={collection:[],completedQueries:{},pendingQueries:{},index:{},modified:{},saved:{},previousAttributes:{},observers:{},changeHistories:{},changeHistory:[],collectionModified:0},DSUtils.forEach(methodsToProxy,function(a){def[a]=function(){var b=Array.prototype.slice.call(arguments);return b.unshift(def.name),_this[a].apply(_this,b)}}),def.beforeValidate=DSUtils.promisify(def.beforeValidate),def.validate=DSUtils.promisify(def.validate),def.afterValidate=DSUtils.promisify(def.afterValidate),def.beforeCreate=DSUtils.promisify(def.beforeCreate),def.afterCreate=DSUtils.promisify(def.afterCreate),def.beforeUpdate=DSUtils.promisify(def.beforeUpdate),def.afterUpdate=DSUtils.promisify(def.afterUpdate),def.beforeDestroy=DSUtils.promisify(def.beforeDestroy),def.afterDestroy=DSUtils.promisify(def.afterDestroy),DSUtils.Events(def),def}catch(err){throw console.error(err),delete definitions[definition.name],delete _this.store[definition.name],err}}var DSUtils=require("../../utils"),DSErrors=require("../../errors"),methodsToProxy=["changes","changeHistory","create","createInstance","destroy","destroyAll","eject","ejectAll","filter","find","findAll","get","hasChanges","inject","lastModified","lastSaved","link","linkAll","linkInverse","loadRelations","previous","refresh","save","unlinkInverse","update","updateAll"];module.exports=defineResource},{"../../errors":76,"../../utils":78}],67:[function(a,b){function c(a,b){var c,f=this,g=f.definitions[a],h=f.store[a],i=!1;if(b=d.resolveId(g,b),!g)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');for(var j=0;j<h.collection.length;j++)if(h.collection[j][g.idAttribute]==b){c=h.collection[j],i=!0;break}return i?(f.unlinkInverse(g.name,b),h.collection.splice(j,1),h.observers[b].close(),delete h.observers[b],delete h.index[b],delete h.previousAttributes[b],delete h.completedQueries[b],delete h.pendingQueries[b],d.forEach(h.changeHistories[b],function(a){d.remove(h.changeHistory,a)}),delete h.changeHistories[b],delete h.modified[b],delete h.saved[b],h.collectionModified=d.updateTimestamp(h.collectionModified),f.notify(g,"eject",c),c):void 0}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],68:[function(a,b){function c(a,b){var c=this,f=c.definitions[a];if(b=b||{},!f)throw new e.NER(a);if(!d.isObject(b))throw new e.IA('"params" must be an object!');var g=c.store[a];d.isEmpty(b)&&(g.completedQueries={});var h=d.toJson(b),i=c.filter(f.name,b),j=d.toLookup(i,f.idAttribute);return d.forOwn(j,function(a,b){c.eject(f.name,b)}),delete g.completedQueries[h],g.collectionModified=d.updateTimestamp(g.collectionModified),c.notify(f,"eject",i),i}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],69:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||{},!g)throw new e.NER(a);if(b&&!d.isObject(b))throw new e.IA('"params" must be an object!');if(!d.isObject(c))throw new e.IA('"options" must be an object!');var h=f.store[a];b=b||{},"allowSimpleWhere"in c||(c.allowSimpleWhere=!0);var i=d.toJson(b);return i in h.completedQueries||!c.loadFromServer||h.pendingQueries[i]||f.findAll(a,b,c),g.defaultFilter.call(f,h.collection,a,b,c)}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],70:[function(a,b){function c(a,b){var c=this,d=c.definitions[a];if(b=o.resolveId(d,b),!d)throw new p.NER(a);if(!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');var e=c.get(a,b);if(e){c.store[a].observers[b].deliver();var f=o.diffObjectFromOldObject(e,c.store[a].previousAttributes[b]);return o.forOwn(f,function(a,b){var c=[];o.forOwn(a,function(a,b){o.isFunction(a)||c.push(b)}),f[b]=o.pick(f[b],c)}),o.forEach(d.relationFields,function(a){delete f.added[a],delete f.removed[a],delete f.changed[a]}),f}}function d(a,b){var c=this,d=c.definitions[a],e=c.store[a];if(b=o.resolveId(d,b),a&&!c.definitions[a])throw new p.NER(a);if(b&&!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');if(d.keepChangeHistory){if(!a)return e.changeHistory;var f=c.get(a,b);if(f)return e.changeHistories[b]}else console.warn("changeHistory is disabled for this resource!")}function e(a,b,c){var d=this.definitions[a];if(b=b||{},c=c||{},!d)throw new p.NER(a);if(b&&!o.isObject(b))throw new p.IA('"attrs" must be an object!');if(!o.isObject(c))throw new p.IA('"options" must be an object!');"useClass"in c||(c.useClass=d.useClass);var e;if(c.useClass){var f=d[d.class];e=new f}else e={};return o.deepMixIn(e,b)}function f(a){return!(o.isEmpty(a.added)&&o.isEmpty(a.removed)&&o.isEmpty(a.changed))}function g(){n.Platform.performMicrotaskCheckpoint()}function h(a,b){var c=this,d=c.definitions[a];if(b=o.resolveItem(c.store[a],b),!d)throw new p.NER(a);if(!o.isObject(b)&&!o.isString(b)&&!o.isNumber(b))throw new p.IA('"instance" must be an object, string or number!');return(o.isString(b)||o.isNumber(b))&&(b=c.get(a,b)),o.forOwn(d.computed,function(a,c){o.compute.call(b,a,c,o)}),b}function i(a,b,c){var d=this;if(c=c||{},!d.definitions[a])throw new p.NER(a);if(!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');if(!o.isObject(c))throw new p.IA('"options" must be an object!');var e=d.store[a].index[b];return!e&&c.loadFromServer&&d.find(a,b,c),e}function j(a,b){var c=this;if(b=o.resolveId(c.definitions[a],b),!c.definitions[a])throw new p.NER(a);return c.get(a,b)?f(c.changes(a,b)):!1}function k(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new p.NER(a);return b?(b in d.modified||(d.modified[b]=0),d.modified[b]):d.collectionModified}function l(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new p.NER(a);return b in d.saved||(d.saved[b]=0),d.saved[b]}function m(a,b){var c=this,d=c.definitions[a],e=c.store[a];if(b=o.resolveId(d,b),!d)throw new p.NER(a);if(!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');return e.previousAttributes[b]?o.merge({},e.previousAttributes[b]):void 0}var n=a("../../../lib/observe-js/observe-js"),o=a("../../utils"),p=a("../../errors");b.exports={changes:c,changeHistory:d,compute:h,createInstance:e,defineResource:a("./defineResource"),digest:g,eject:a("./eject"),ejectAll:a("./ejectAll"),filter:a("./filter"),get:i,hasChanges:j,inject:a("./inject"),lastModified:k,lastSaved:l,link:a("./link"),linkAll:a("./linkAll"),linkInverse:a("./linkInverse"),previous:m,unlinkInverse:a("./unlinkInverse")}},{"../../../lib/observe-js/observe-js":1,"../../errors":76,"../../utils":78,"./defineResource":66,"./eject":67,"./ejectAll":68,"./filter":69,"./inject":71,"./link":72,"./linkAll":73,"./linkInverse":74,"./unlinkInverse":75}],71:[function(a,b){function c(a,b,c){return function(d,e,f,h,i){var j,k=this,l=h&&h(b.idAttribute)?h(b.idAttribute):k[b.idAttribute];if(g.forEach(b.relationFields,function(a){delete d[a],delete e[a],delete f[a]}),(!g.isEmpty(d)||!g.isEmpty(e)||!g.isEmpty(f)||i)&&(j=a.get(b.name,l),c.modified[l]=g.updateTimestamp(c.modified[l]),c.collectionModified=g.updateTimestamp(c.collectionModified),b.keepChangeHistory)){var m={resourceName:b.name,target:j,added:d,removed:e,changed:f,timestamp:c.modified[l]};c.changeHistories[l].push(m),c.changeHistory.push(m)}b.computed&&(j=j||a.get(b.name,l),g.forOwn(b.computed,function(a,b){var c=!1;g.forEach(a.deps,function(a){(a in d||a in e||a in f||!(b in j))&&(c=!0)}),c=c||!a.deps.length,c&&g.compute.call(j,a,b,g)})),b.relations&&(j=j||a.get(b.name,l),g.forEach(b.relationList,function(c){j[c.localField]&&(c.localKey in d||c.localKey in e||c.localKey in f)&&a.link(b.name,j[b.idAttribute],[c.relation])})),b.idAttribute in f&&console.error("Doh! You just changed the primary key of an object! I don't know how to handle this yet, so your data for the \""+b.name+'" resource is now in an undefined (probably broken) state.')}}function d(a,b,e,f){var j,k=this,l=c(k,a,b,e,f);if(g.isArray(e)){j=[];for(var m=0;m<e.length;m++)j.push(d.call(k,a,b,e[m],f))}else{var n=a.computed,o=a.idAttribute;if(n&&n[o]){var p=[];g.forEach(n[o].deps,function(a){p.push(e[a])}),e[o]=n[o][n[o].length-1].apply(e,p)}if(!(o in e)){var q=new h.R(a.name+'.inject: "attrs" must contain the property specified by `idAttribute`!');throw console.error(q),q}try{a.beforeInject(a.name,e);var r=e[o],s=k.get(a.name,r);s?(g.deepMixIn(s,e),a.resetHistoryOnInject&&(b.previousAttributes[r]={},g.deepMixIn(b.previousAttributes[r],e),b.changeHistories[r].length&&(g.forEach(b.changeHistories[r],function(a){g.remove(b.changeHistory,a)}),b.changeHistories[r].splice(0,b.changeHistories[r].length))),b.observers[r].deliver()):(s=f.useClass?e instanceof a[a.class]?e:new a[a.class]:{},b.previousAttributes[r]={},g.deepMixIn(s,e),g.deepMixIn(b.previousAttributes[r],e),b.collection.push(s),b.changeHistories[r]=[],b.observers[r]=new i.ObjectObserver(s),b.observers[r].open(l,s),b.index[r]=s,l.call(s,{},{},{},null,!0)),b.saved[r]=g.updateTimestamp(b.saved[r]),a.afterInject(a.name,s),j=s}catch(t){console.error(t),console.error("inject failed!",a.name,e)}}return j}function e(a,b,c){function d(b,d,f){var h=e.definitions[d];if(h&&f[b.localField]&&!k.injectedSoFar[d+f[b.localField][h.idAttribute]])try{k.injectedSoFar[d+f[b.localField][h.idAttribute]]=1,f[b.localField]=e.inject(d,f[b.localField],c)}catch(i){console.error(a.name+": Failed to inject "+b.type+' relation: "'+d+'"!',i)}else c.findBelongsTo&&"belongsTo"===b.type?g.isArray(f)?g.forEach(f,function(b){e.link(a.name,b[a.idAttribute],[d])}):e.link(a.name,f[a.idAttribute],[d]):(c.findHasMany&&"hasMany"===b.type||c.findHasOne&&"hasOne"===b.type)&&(g.isArray(f)?g.forEach(f,function(b){e.link(a.name,b[a.idAttribute],[d])}):e.link(a.name,f[a.idAttribute],[d]))}var e=this;g.forEach(a.relationList,function(a){g.isArray(b)?g.forEach(b,function(b){d(a,a.relation,b)}):d(a,a.relation,b)})}function f(a,b,c){var f=this,i=f.definitions[a];if(c=c||{},!i)throw new h.NER(a);if(!g.isObject(b)&&!g.isArray(b))throw new h.IA(a+'.inject: "attrs" must be an object or an array!');if(!g.isObject(c))throw new h.IA('"options" must be an object!');var l;j++;try{"useClass"in c||(c.useClass=i.useClass),l=d.call(f,i,f.store[a],b,c),i.relations&&e.call(f,i,l,c),c.linkInverse&&(g.isArray(l)&&l.length?f.linkInverse(i.name,l[0][i.idAttribute]):f.linkInverse(i.name,l[i.idAttribute])),f.notify(i,"inject",l),j--}catch(m){throw j--,m}return j||(k.injectedSoFar={}),l}var g=a("../../utils"),h=a("../../errors"),i=a("../../../lib/observe-js/observe-js"),j=0,k={injectedSoFar:{}};b.exports=f},{"../../../lib/observe-js/observe-js":1,"../../errors":76,"../../utils":78}],72:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],b=d.resolveId(g,b),!g)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.get(a,b);return h&&d.forEach(g.relationList,function(a){var b=a.relation;if(!c.length||d.contains(c,b)){var e={};if("belongsTo"===a.type){var i=h[a.localKey]?f.get(b,h[a.localKey]):null;i&&(h[a.localField]=i)}else if("hasMany"===a.type)e[a.foreignKey]=h[g.idAttribute],h[a.localField]=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,e,{allowSimpleWhere:!0});else if("hasOne"===a.type){e[a.foreignKey]=h[g.idAttribute];var j=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,e,{allowSimpleWhere:!0});j.length&&(h[a.localField]=j[0])}}}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],73:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],!g)throw new e.NER(a);if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.filter(a,b);return h&&d.forEach(g.relationList,function(a){var b=a.relation;(!c.length||d.contains(c,b))&&("belongsTo"===a.type?d.forEach(h,function(c){var d=c[a.localKey]?f.get(b,c[a.localKey]):null;d&&(c[a.localField]=d)}):"hasMany"===a.type?d.forEach(h,function(c){var d={};d[a.foreignKey]=c[g.idAttribute],c[a.localField]=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,d,{allowSimpleWhere:!0})}):"hasOne"===a.type&&d.forEach(h,function(c){var d={};d[a.foreignKey]=c[g.idAttribute];var e=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,d,{allowSimpleWhere:!0});e.length&&(c[a.localField]=e[0])}))}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],74:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],b=d.resolveId(g,b),!g)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.get(a,b);return h&&d.forOwn(f.definitions,function(a){d.forOwn(a.relations,function(b){d.forOwn(b,function(b,e){(!c.length||d.contains(c,a.name))&&g.name===e&&f.linkAll(a.name,{},[g.name])})})}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],75:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],b=d.resolveId(g,b),!g)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.get(a,b);return h&&d.forOwn(f.definitions,function(a){d.forOwn(a.relations,function(a){d.forOwn(a,function(a,b){g.name===b&&d.forEach(a,function(a){d.forEach(f.store[a.name].collection,function(b){if("hasMany"===a.type&&b[a.localField]){var c;d.forEach(b[a.localField],function(a,b){a===h&&(c=b)}),b[a.localField].splice(c,1)}else b[a.localField]===h&&delete b[a.localField]})})})})}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],76:[function(a,b){function c(a){Error.call(this),"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.type=this.constructor.name,this.message=a||"Illegal Argument!"}function d(a){Error.call(this),"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.type=this.constructor.name,this.message=a||"RuntimeError Error!"}function e(a){Error.call(this),"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.type=this.constructor.name,this.message=(a||"")+" is not a registered resource!"}c.prototype=Object.create(Error.prototype),c.prototype.constructor=c,d.prototype=Object.create(Error.prototype),d.prototype.constructor=d,e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,b.exports={IllegalArgumentError:c,IA:c,RuntimeError:d,R:d,NonexistentResourceError:e,NER:e}},{}],77:[function(a,b){var c=a("./datastore");b.exports={DS:c,createStore:function(){return new c},DSUtils:a("./utils"),DSErrors:a("./errors")}},{"./datastore":65,"./errors":76,"./utils":78}],78:[function(a,b){function c(a){var b={};a=a||this,a.on=function(a,c,d){b[a]=b[a]||[],b[a].push({f:c,c:d})},a.off=function(a,c){var d=b[a];if(d)if(c){for(var e=0;e<d.length;e++)if(d[e]===c){d.splice(e,1);break}}else d.splice(0,d.length);else b={}},a.emit=function(){var a=Array.prototype.slice.call(arguments),c=b[a.shift()]||[];if(c)for(var d=0;d<c.length;d++)c[d].f.apply(c[d].c,a)}}b.exports={isBoolean:a("mout/lang/isBoolean"),isString:a("mout/lang/isString"),isArray:a("mout/lang/isArray"),isObject:a("mout/lang/isObject"),isNumber:a("mout/lang/isNumber"),isFunction:a("mout/lang/isFunction"),isEmpty:a("mout/lang/isEmpty"),toJson:JSON.stringify,fromJson:JSON.parse,makePath:a("mout/string/makePath"),upperCase:a("mout/string/upperCase"),pascalCase:a("mout/string/pascalCase"),deepMixIn:a("mout/object/deepMixIn"),forOwn:a("mout/object/forOwn"),forEach:a("mout/array/forEach"),pick:a("mout/object/pick"),set:a("mout/object/set"),merge:a("mout/object/merge"),contains:a("mout/array/contains"),filter:a("mout/array/filter"),toLookup:a("mout/array/toLookup"),remove:a("mout/array/remove"),slice:a("mout/array/slice"),sort:a("mout/array/sort"),resolveItem:function(a,b){return a&&(this.isString(b)||this.isNumber(b))?a.index[b]||b:b},resolveId:function(a,b){return this.isString(b)||this.isNumber(b)?b:b&&a?b[a.idAttribute]||b:b},updateTimestamp:function(a){var b="function"==typeof Date.now?Date.now():(new Date).getTime();return a&&a>=b?a+1:b},Promise:a("es6-promise").Promise,deepFreeze:function d(a){if("function"==typeof Object.freeze){var b,c;Object.freeze(a);for(c in a)b=a[c],a.hasOwnProperty(c)&&"object"==typeof b&&!Object.isFrozen(b)&&d(b)}},compute:function(a,b,c){var d=this,e=[];c.forEach(a.deps,function(a){e.push(d[a])}),this[b]=a[a.length-1].apply(this,e)},diffObjectFromOldObject:function(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var h in a)h in b||(c[h]=a[h]);return{added:c,removed:d,changed:e}},promisify:function(a,b){var c=this.Promise;if(a){if("function"!=typeof a)throw new Error("Can only promisify functions!");return function(){var d=Array.prototype.slice.apply(arguments);return new c(function(c,e){d.push(function(a,b){a?e(a):c(b)});try{var f=a.apply(b||this,d);f&&f.then&&f.then(c,e)}catch(g){e(g)}})}}},Events:c}},{"es6-promise":2,"mout/array/contains":13,"mout/array/filter":14,"mout/array/forEach":15,"mout/array/remove":18,"mout/array/slice":19,"mout/array/sort":20,"mout/array/toLookup":21,"mout/lang/isArray":27,"mout/lang/isBoolean":28,"mout/lang/isEmpty":29,"mout/lang/isFunction":30,"mout/lang/isNumber":32,"mout/lang/isObject":33,"mout/lang/isString":35,"mout/object/deepMixIn":39,"mout/object/forOwn":41,"mout/object/merge":43,"mout/object/pick":46,"mout/object/set":47,"mout/string/makePath":50,"mout/string/pascalCase":51,"mout/string/upperCase":54}]},{},[77])(77)});
!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.JSData=a()}}(function(){var define,module,exports;return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(require,module,exports){!function(global){"use strict";function detectObjectObserve(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={},d=[];return Object.observe(c,a),Array.observe(d,a),c.id=1,c.id=2,delete c.id,d.push(1,2),d.length=0,Object.deliverChangeRecords(a),5!==b.length?!1:"add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type||"splice"!=b[3].type||"splice"!=b[4].type?!1:(Object.unobserve(c,a),Array.unobserve(d,a),!0)}function detectEval(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;try{var a=new Function("","return true;");return a()}catch(b){return!1}}function dirtyCheck(a){for(var b=0;MAX_DIRTY_CHECK_CYCLES>b&&a.check_();)b++;return global.testingExposeCycleCount&&(global.dirtyCheckCycleCount=b),b>0}function objectIsEmpty(a){for(var b in a)return!1;return!0}function diffIsEmpty(a){return objectIsEmpty(a.added)&&objectIsEmpty(a.removed)&&objectIsEmpty(a.changed)}function diffObjectFromOldObject(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function runEOMTasks(){if(!eomTasks.length)return!1;for(var a=0;a<eomTasks.length;a++)eomTasks[a]();return eomTasks.length=0,!0}function newObservedObject(){function a(a){b&&b.state_===OPENED&&!d&&b.check_(a)}var b,c,d=!1,e=!0;return{open:function(c){if(b)throw Error("ObservedObject in use");e||Object.deliverChangeRecords(a),b=c,e=!1},observe:function(b,d){c=b,d?Array.observe(c,a):Object.observe(c,a)},deliver:function(b){d=b,Object.deliverChangeRecords(a),d=!1},close:function(){b=void 0,Object.unobserve(c,a),observedObjectCache.push(this)}}}function getObservedObject(a,b,c){var d=observedObjectCache.pop()||newObservedObject();return d.open(a),d.observe(b,c),d}function Observer(){this.state_=UNOPENED,this.callback_=void 0,this.target_=void 0,this.directObserver_=void 0,this.value_=void 0,this.id_=nextObserverId++}function addToAll(a){Observer._allObserversCount++,collectObservers&&allObservers.push(a)}function removeFromAll(){Observer._allObserversCount--}function ObjectObserver(a){Observer.call(this),this.value_=a,this.oldObject_=void 0}function diffObjectFromChangeRecords(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];expectedRecordTypes[g.type]?(g.name in c||(c[g.name]=g.oldValue),"update"!=g.type&&("add"!=g.type?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}var hasObserve=detectObjectObserve(),hasEval=detectEval(),createObject="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},MAX_DIRTY_CHECK_CYCLES=1e3,eomTasks=[],runEOM=hasObserve?function(){var a={pingPong:!0},b=!1;return Object.observe(a,function(){runEOMTasks(),b=!1}),function(c){eomTasks.push(c),b||(b=!0,a.pingPong=!a.pingPong)}}():function(){return function(a){eomTasks.push(a)}}(),observedObjectCache=[],UNOPENED=0,OPENED=1,CLOSED=2,nextObserverId=1;Observer.prototype={open:function(a,b){if(this.state_!=UNOPENED)throw Error("Observer has already been opened.");return addToAll(this),this.callback_=a,this.target_=b,this.connect_(),this.state_=OPENED,this.value_},close:function(){this.state_==OPENED&&(removeFromAll(this),this.disconnect_(),this.value_=void 0,this.callback_=void 0,this.target_=void 0,this.state_=CLOSED)},deliver:function(){this.state_==OPENED&&dirtyCheck(this)},report_:function(a){try{this.callback_.apply(this.target_,a)}catch(b){Observer._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},discardChanges:function(){return this.check_(void 0,!0),this.value_}};var collectObservers=!hasObserve,allObservers;Observer._allObserversCount=0,collectObservers&&(allObservers=[]);var runningMicrotaskCheckpoint=!1,hasDebugForceFullDelivery=hasObserve&&hasEval&&function(){try{return eval("%RunMicrotasks()"),!0}catch(ex){return!1}}();global.Platform=global.Platform||{},global.Platform.performMicrotaskCheckpoint=function(){if(!runningMicrotaskCheckpoint){if(hasDebugForceFullDelivery)return void eval("%RunMicrotasks()");if(collectObservers){runningMicrotaskCheckpoint=!0;var cycles=0,anyChanged,toCheck;do{cycles++,toCheck=allObservers,allObservers=[],anyChanged=!1;for(var i=0;i<toCheck.length;i++){var observer=toCheck[i];observer.state_==OPENED&&(observer.check_()&&(anyChanged=!0),allObservers.push(observer))}runEOMTasks()&&(anyChanged=!0)}while(MAX_DIRTY_CHECK_CYCLES>cycles&&anyChanged);global.testingExposeCycleCount&&(global.dirtyCheckCycleCount=cycles),runningMicrotaskCheckpoint=!1}}},collectObservers&&(global.Platform.clearObservers=function(){allObservers=[]}),ObjectObserver.prototype=createObject({__proto__:Observer.prototype,arrayObserve:!1,connect_:function(){hasObserve?this.directObserver_=getObservedObject(this,this.value_,this.arrayObserve):this.oldObject_=this.copyObject(this.value_)},copyObject:function(a){var b=Array.isArray(a)?[]:{};for(var c in a)b[c]=a[c];return Array.isArray(a)&&(b.length=a.length),b},check_:function(a){var b,c;if(hasObserve){if(!a)return!1;c={},b=diffObjectFromChangeRecords(this.value_,a,c)}else c=this.oldObject_,b=diffObjectFromOldObject(this.value_,this.oldObject_);return diffIsEmpty(b)?!1:(hasObserve||(this.oldObject_=this.copyObject(this.value_)),this.report_([b.added||{},b.removed||{},b.changed||{},function(a){return c[a]}]),!0)},disconnect_:function(){hasObserve?(this.directObserver_.close(),this.directObserver_=void 0):this.oldObject_=void 0},deliver:function(){this.state_==OPENED&&(hasObserve?this.directObserver_.deliver(!1):dirtyCheck(this))},discardChanges:function(){return this.directObserver_?this.directObserver_.deliver(!0):this.oldObject_=this.copyObject(this.value_),this.value_}});var observerSentinel={},expectedRecordTypes={add:!0,update:!0,"delete":!0};global.Observer=Observer,global.Observer.runEOM_=runEOM,global.Observer.observerSentinel_=observerSentinel,global.Observer.hasObjectObserve=hasObserve,global.ObjectObserver=ObjectObserver}((exports.Number={isNaN:window.isNaN})?exports:exports)},{}],2:[function(a,b,c){"use strict";var d=a("./promise/promise").Promise,e=a("./promise/polyfill").polyfill;c.Promise=d,c.polyfill=e},{"./promise/polyfill":6,"./promise/promise":7}],3:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to all.");return new b(function(b,c){function d(a){return function(b){e(a,b)}}function e(a,c){h[a]=c,0===--i&&b(h)}var g,h=[],i=a.length;0===i&&b([]);for(var j=0;j<a.length;j++)g=a[j],g&&f(g.then)?g.then(d(j),c):e(j,g)})}var e=a("./utils").isArray,f=a("./utils").isFunction;c.all=d},{"./utils":11}],4:[function(a,b,c){(function(a,b){"use strict";function d(){return function(){a.nextTick(g)}}function e(){var a=0,b=new k(g),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function f(){return function(){l.setTimeout(g,1)}}function g(){for(var a=0;a<m.length;a++){var b=m[a],c=b[0],d=b[1];c(d)}m=[]}function h(a,b){var c=m.push([a,b]);1===c&&i()}var i,j="undefined"!=typeof window?window:{},k=j.MutationObserver||j.WebKitMutationObserver,l="undefined"!=typeof b?b:void 0===this?window:this,m=[];i="undefined"!=typeof a&&"[object process]"==={}.toString.call(a)?d():k?e():f(),c.asap=h}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:12}],5:[function(a,b,c){"use strict";function d(a,b){return 2!==arguments.length?e[a]:void(e[a]=b)}var e={instrument:!1};c.config=e,c.configure=d},{}],6:[function(a,b,c){(function(b){"use strict";function d(){var a;a="undefined"!=typeof b?b:"undefined"!=typeof window&&window.document?window:self;var c="Promise"in a&&"resolve"in a.Promise&&"reject"in a.Promise&&"all"in a.Promise&&"race"in a.Promise&&function(){var b;return new a.Promise(function(a){b=a}),f(b)}();c||(a.Promise=e)}var e=a("./promise").Promise,f=a("./utils").isFunction;c.polyfill=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./promise":7,"./utils":11}],7:[function(a,b,c){"use strict";function d(a){if(!q(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof d))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._subscribers=[],e(a,this)}function e(a,b){function c(a){j(b,a)}function d(a){l(b,a)}try{a(c,d)}catch(e){d(e)}}function f(a,b,c,d){var e,f,g,h,k=q(c);if(k)try{e=c(d),g=!0}catch(m){h=!0,f=m}else e=d,g=!0;i(b,e)||(k&&g?j(b,e):h?l(b,f):a===y?j(b,e):a===z&&l(b,e))}function g(a,b,c,d){var e=a._subscribers,f=e.length;e[f]=b,e[f+y]=c,e[f+z]=d}function h(a,b){for(var c,d,e=a._subscribers,g=a._detail,h=0;h<e.length;h+=3)c=e[h],d=e[h+b],f(b,c,d,g);a._subscribers=null}function i(a,b){var c,d=null;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(p(b)&&(d=b.then,q(d)))return d.call(b,function(d){return c?!0:(c=!0,void(b!==d?j(a,d):k(a,d)))},function(b){return c?!0:(c=!0,void l(a,b))}),!0}catch(e){return c?!0:(l(a,e),!0)}return!1}function j(a,b){a===b?k(a,b):i(a,b)||k(a,b)}function k(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(m,a))}function l(a,b){a._state===w&&(a._state=x,a._detail=b,o.async(n,a))}function m(a){h(a,a._state=y)}function n(a){h(a,a._state=z)}var o=a("./config").config,p=(a("./config").configure,a("./utils").objectOrFunction),q=a("./utils").isFunction,r=(a("./utils").now,a("./all").all),s=a("./race").race,t=a("./resolve").resolve,u=a("./reject").reject,v=a("./asap").asap;o.async=v;var w=void 0,x=0,y=1,z=2;d.prototype={constructor:d,_state:void 0,_detail:void 0,_subscribers:void 0,then:function(a,b){var c=this,d=new this.constructor(function(){});if(this._state){var e=arguments;o.async(function(){f(c._state,d,e[c._state-1],c._detail)})}else g(this,d,a,b);return d},"catch":function(a){return this.then(null,a)}},d.all=r,d.race=s,d.resolve=t,d.reject=u,c.Promise=d},{"./all":3,"./asap":4,"./config":5,"./race":8,"./reject":9,"./resolve":10,"./utils":11}],8:[function(a,b,c){"use strict";function d(a){var b=this;if(!e(a))throw new TypeError("You must pass an array to race.");return new b(function(b,c){for(var d,e=0;e<a.length;e++)d=a[e],d&&"function"==typeof d.then?d.then(b,c):b(d)})}var e=a("./utils").isArray;c.race=d},{"./utils":11}],9:[function(a,b,c){"use strict";function d(a){var b=this;return new b(function(b,c){c(a)})}c.reject=d},{}],10:[function(a,b,c){"use strict";function d(a){if(a&&"object"==typeof a&&a.constructor===this)return a;var b=this;return new b(function(b){b(a)})}c.resolve=d},{}],11:[function(a,b,c){"use strict";function d(a){return e(a)||"object"==typeof a&&null!==a}function e(a){return"function"==typeof a}function f(a){return"[object Array]"===Object.prototype.toString.call(a)}var g=Date.now||function(){return(new Date).getTime()};c.objectOrFunction=d,c.isFunction=e,c.isArray=f,c.now=g},{}],12:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],13:[function(a,b){function c(a,b){return-1!==d(a,b)}var d=a("./indexOf");b.exports=c},{"./indexOf":16}],14:[function(a,b){function c(a,b,c){b=d(b,c);var e=[];if(null==a)return e;for(var f,g=-1,h=a.length;++g<h;)f=a[g],b(f,g,a)&&e.push(f);return e}var d=a("../function/makeIterator_");b.exports=c},{"../function/makeIterator_":23}],15:[function(a,b){function c(a,b,c){if(null!=a)for(var d=-1,e=a.length;++d<e&&b.call(c,a[d],d,a)!==!1;);}b.exports=c},{}],16:[function(a,b){function c(a,b,c){if(c=c||0,null==a)return-1;for(var d=a.length,e=0>c?d+c:c;d>e;){if(a[e]===b)return e;e++}return-1}b.exports=c},{}],17:[function(a,b){function c(a){return null!=a&&""!==a}function d(a,b){return b=b||"",e(a,c).join(b)}var e=a("./filter");b.exports=d},{"./filter":14}],18:[function(a,b){function c(a,b){var c=d(a,b);-1!==c&&a.splice(c,1)}var d=a("./indexOf");b.exports=c},{"./indexOf":16}],19:[function(a,b){function c(a,b,c){var d=a.length;b=null==b?0:0>b?Math.max(d+b,0):Math.min(b,d),c=null==c?d:0>c?Math.max(d+c,0):Math.min(c,d);for(var e=[];c>b;)e.push(a[b++]);return e}b.exports=c},{}],20:[function(a,b){function c(a,b){if(null==a)return[];if(a.length<2)return a;null==b&&(b=d);var f,g,h;return f=~~(a.length/2),g=c(a.slice(0,f),b),h=c(a.slice(f,a.length),b),e(g,h,b)}function d(a,b){return b>a?-1:a>b?1:0}function e(a,b,c){for(var d=[];a.length&&b.length;)d.push(c(a[0],b[0])<=0?a.shift():b.shift());return a.length&&d.push.apply(d,a),b.length&&d.push.apply(d,b),d}b.exports=c},{}],21:[function(a,b){function c(a,b){var c={};if(null==a)return c;var e,f=-1,g=a.length;if(d(b))for(;++f<g;)e=a[f],c[b(e)]=e;else for(;++f<g;)e=a[f],c[e[b]]=e;return c}var d=a("../lang/isFunction");b.exports=c},{"../lang/isFunction":30}],22:[function(a,b){function c(a){return a}b.exports=c},{}],23:[function(a,b){function c(a,b){if(null==a)return d;switch(typeof a){case"function":return"undefined"!=typeof b?function(c,d,e){return a.call(b,c,d,e)}:a;case"object":return function(b){return f(b,a)};case"string":case"number":return e(a)}}var d=a("./identity"),e=a("./prop"),f=a("../object/deepMatches");b.exports=c},{"../object/deepMatches":38,"./identity":22,"./prop":24}],24:[function(a,b){function c(a){return function(b){return b[a]}}b.exports=c},{}],25:[function(a,b){function c(a){switch(h(a)){case"Object":return d(a);case"Array":return g(a);case"RegExp":return e(a);case"Date":return f(a);default:return a}}function d(a){return i(a)?j({},a):a}function e(a){var b="";return b+=a.multiline?"m":"",b+=a.global?"g":"",b+=a.ignorecase?"i":"",new RegExp(a.source,b)}function f(a){return new Date(+a)}function g(a){return a.slice()}var h=a("./kindOf"),i=a("./isPlainObject"),j=a("../object/mixIn");b.exports=c},{"../object/mixIn":44,"./isPlainObject":34,"./kindOf":36}],26:[function(a,b){function c(a,b){switch(h(a)){case"Object":return d(a,b);case"Array":return e(a,b);default:return f(a)}}function d(a,b){if(i(a)){var d={};return g(a,function(a,d){this[d]=c(a,b)},d),d}return b?b(a):a}function e(a,b){for(var d=[],e=-1,f=a.length;++e<f;)d[e]=c(a[e],b);return d}var f=a("./clone"),g=a("../object/forOwn"),h=a("./kindOf"),i=a("./isPlainObject");b.exports=c},{"../object/forOwn":41,"./clone":25,"./isPlainObject":34,"./kindOf":36}],27:[function(a,b){var c=a("./isKind"),d=Array.isArray||function(a){return c(a,"Array")};b.exports=d},{"./isKind":31}],28:[function(a,b){function c(a){return d(a,"Boolean")}var d=a("./isKind");b.exports=c},{"./isKind":31}],29:[function(a,b){function c(a){if(null==a)return!0;if("string"==typeof a||e(a))return!a.length;if("object"==typeof a){var b=!0;return d(a,function(){return b=!1,!1}),b}return!0}var d=a("../object/forOwn"),e=a("./isArray");b.exports=c},{"../object/forOwn":41,"./isArray":27}],30:[function(a,b){function c(a){return d(a,"Function")}var d=a("./isKind");b.exports=c},{"./isKind":31}],31:[function(a,b){function c(a,b){return d(a)===b}var d=a("./kindOf");b.exports=c},{"./kindOf":36}],32:[function(a,b){function c(a){return d(a,"Number")}var d=a("./isKind");b.exports=c},{"./isKind":31}],33:[function(a,b){function c(a){return d(a,"Object")}var d=a("./isKind");b.exports=c},{"./isKind":31}],34:[function(a,b){function c(a){return!!a&&"object"==typeof a&&a.constructor===Object}b.exports=c},{}],35:[function(a,b){function c(a){return d(a,"String")}var d=a("./isKind");b.exports=c},{"./isKind":31}],36:[function(a,b){function c(a){return null===a?"Null":a===d?"Undefined":e.exec(f.call(a))[1]}var d,e=/^\[object (.*)\]$/,f=Object.prototype.toString;b.exports=c},{}],37:[function(a,b){function c(a){return null==a?"":a.toString()}b.exports=c},{}],38:[function(a,b){function c(a,b){for(var c=-1,d=a.length;++c<d;)if(f(a[c],b))return!0;return!1}function d(a,b){for(var d=-1,e=b.length;++d<e;)if(!c(a,b[d]))return!1;return!0}function e(a,b){var c=!0;return g(b,function(b,d){return f(a[d],b)?void 0:c=!1}),c}function f(a,b){return a&&"object"==typeof a?h(a)&&h(b)?d(a,b):e(a,b):a===b}var g=a("./forOwn"),h=a("../lang/isArray");b.exports=f},{"../lang/isArray":27,"./forOwn":41}],39:[function(a,b){function c(a){for(var b,c=0,f=arguments.length;++c<f;)b=arguments[c],b&&e(b,d,a);return a}function d(a,b){var d=this[b];f(a)&&f(d)?c(d,a):this[b]=a}var e=a("./forOwn"),f=a("../lang/isPlainObject");b.exports=c},{"../lang/isPlainObject":34,"./forOwn":41}],40:[function(a,b){function c(){g=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],f=!0;for(var a in{toString:null})f=!1}function d(a,b,d){var i,j=0;null==f&&c();for(i in a)if(e(b,a,i,d)===!1)break;if(f)for(var k=a.constructor,l=!!k&&a===k.prototype;(i=g[j++])&&("constructor"===i&&(l||!h(a,i))||a[i]===Object.prototype[i]||e(b,a,i,d)!==!1););}function e(a,b,c,d){return a.call(d,b[c],c,b)}var f,g,h=a("./hasOwn");b.exports=d},{"./hasOwn":42}],41:[function(a,b){function c(a,b,c){e(a,function(e,f){return d(a,f)?b.call(c,a[f],f,a):void 0})}var d=a("./hasOwn"),e=a("./forIn");b.exports=c},{"./forIn":40,"./hasOwn":42}],42:[function(a,b){function c(a,b){return Object.prototype.hasOwnProperty.call(a,b)}b.exports=c},{}],43:[function(a,b){function c(){var a,b,g,h,i=1;for(h=e(arguments[0]);g=arguments[i++];)for(a in g)d(g,a)&&(b=g[a],h[a]=f(b)&&f(h[a])?c(h[a],b):e(b));return h}var d=a("./hasOwn"),e=a("../lang/deepClone"),f=a("../lang/isObject");b.exports=c},{"../lang/deepClone":26,"../lang/isObject":33,"./hasOwn":42}],44:[function(a,b){function c(a){for(var b,c=0,f=arguments.length;++c<f;)b=arguments[c],null!=b&&e(b,d,a);return a}function d(a,b){this[b]=a}var e=a("./forOwn");b.exports=c},{"./forOwn":41}],45:[function(a,b){function c(a,b){return b?(d(b.split("."),function(b){a[b]||(a[b]={}),a=a[b]}),a):a}var d=a("../array/forEach");b.exports=c},{"../array/forEach":15}],46:[function(a,b){function c(a){for(var b,c="string"!=typeof arguments[1]?arguments[1]:d(arguments,1),e={},f=0;b=c[f++];)e[b]=a[b];return e}var d=a("../array/slice");b.exports=c},{"../array/slice":19}],47:[function(a,b){function c(a,b,c){var e=/^(.+)\.(.+)$/.exec(b);e?d(a,e[1])[e[2]]=c:a[b]=c}var d=a("./namespace");b.exports=c},{"./namespace":45}],48:[function(a,b){function c(a){return a=d(a),a=e(a),a=f(a).replace(/[\-_]/g," ").replace(/\s[a-z]/g,g).replace(/\s+/g,"").replace(/^[A-Z]/g,h)}var d=a("../lang/toString"),e=a("./replaceAccents"),f=a("./removeNonWord"),g=a("./upperCase"),h=a("./lowerCase");b.exports=c},{"../lang/toString":37,"./lowerCase":49,"./removeNonWord":52,"./replaceAccents":53,"./upperCase":54}],49:[function(a,b){function c(a){return a=d(a),a.toLowerCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":37}],50:[function(a,b){function c(){var a=d(e(arguments),"/");return a.replace(/([^:\/]|^)\/{2,}/g,"$1/")}var d=a("../array/join"),e=a("../array/slice");b.exports=c},{"../array/join":17,"../array/slice":19}],51:[function(a,b){function c(a){return a=d(a),e(a).replace(/^[a-z]/,f)}var d=a("../lang/toString"),e=a("./camelCase"),f=a("./upperCase");b.exports=c},{"../lang/toString":37,"./camelCase":48,"./upperCase":54}],52:[function(a,b){function c(a){return a=d(a),a.replace(e,"")}var d=a("../lang/toString"),e=/[^\x20\x2D0-9A-Z\x5Fa-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/g;b.exports=c},{"../lang/toString":37}],53:[function(a,b){function c(a){return a=d(a),a.search(/[\xC0-\xFF]/g)>-1&&(a=a.replace(/[\xC0-\xC5]/g,"A").replace(/[\xC6]/g,"AE").replace(/[\xC7]/g,"C").replace(/[\xC8-\xCB]/g,"E").replace(/[\xCC-\xCF]/g,"I").replace(/[\xD0]/g,"D").replace(/[\xD1]/g,"N").replace(/[\xD2-\xD6\xD8]/g,"O").replace(/[\xD9-\xDC]/g,"U").replace(/[\xDD]/g,"Y").replace(/[\xDE]/g,"P").replace(/[\xE0-\xE5]/g,"a").replace(/[\xE6]/g,"ae").replace(/[\xE7]/g,"c").replace(/[\xE8-\xEB]/g,"e").replace(/[\xEC-\xEF]/g,"i").replace(/[\xF1]/g,"n").replace(/[\xF2-\xF6\xF8]/g,"o").replace(/[\xF9-\xFC]/g,"u").replace(/[\xFE]/g,"p").replace(/[\xFD\xFF]/g,"y")),a}var d=a("../lang/toString");b.exports=c},{"../lang/toString":37}],54:[function(a,b){function c(a){return a=d(a),a.toUpperCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":37}],55:[function(a,b){function c(a,b,c){var g=this,h=g.definitions[a],i=new d.Promise(function(d,f){c=c||{},h?("cacheResponse"in c||(c.cacheResponse=!0),"upsert"in c||(c.upsert=!0),d(b)):f(new e.NER(a))});return c.upsert&&b[h.idAttribute]?g.update(a,b[h.idAttribute],b,c):i.then(function(b){var d=c.beforeValidate?f(c.beforeValidate):h.beforeValidate;return d.call(b,a,b)}).then(function(b){var d=c.validate?f(c.validate):h.validate;return d.call(b,a,b)}).then(function(b){var d=c.afterValidate?f(c.afterValidate):h.afterValidate;return d.call(b,a,b)}).then(function(b){var d=c.beforeCreate?f(c.beforeCreate):h.beforeCreate;return d.call(b,a,b)}).then(function(a){return g.notify(h,"beforeCreate",d.merge({},a)),g.getAdapter(h,c).create(h,a,c)}).then(function(b){var d=c.afterCreate?f(c.afterCreate):h.afterCreate;return d.call(b,a,b)}).then(function(b){if(g.notify(h,"afterCreate",d.merge({},b)),c.cacheResponse){var e=g.store[a],f=g.inject(h.name,b,c),i=f[h.idAttribute];return e.completedQueries[i]=(new Date).getTime(),e.previousAttributes[i]=d.deepMixIn({},f),e.saved[i]=d.updateTimestamp(e.saved[i]),g.get(h.name,i)}return g.createInstance(a,b,c)})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],56:[function(a,b){function c(a,b,c){var g,h=this,i=h.definitions[a];return new d.Promise(function(f,j){c=c||{},b=d.resolveId(i,b),i?d.isString(b)||d.isNumber(b)?h.get(a,b)?(g=h.get(a,b),"notify"in c||(c.notify=!0),f(g)):j(new e.R('id "'+b+'" not found in cache!')):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(b){if(c.notify){var d=c.beforeDestroy?f(c.beforeDestroy):i.beforeDestroy;return d.call(b,a,b)}return b}).then(function(e){return c.notify&&h.notify(i,"beforeDestroy",d.merge({},e)),c.eagerEject&&h.eject(a,b),h.getAdapter(i,c).destroy(i,b,c)}).then(function(){if(c.notify){var b=c.afterDestroy?f(c.afterDestroy):i.afterDestroy;return b.call(g,a,g)}return g}).then(function(e){return c.notify&&h.notify(i,"afterDestroy",d.merge({},e)),h.eject(a,b),b}).catch(function(b){throw c.eagerEject&&g&&h.inject(a,g,{notify:!1}),b})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],57:[function(a,b){function c(a,b,c){var f,g,h=this,i=h.definitions[a];return new d.Promise(function(b,d){i?(c=c||{},b()):d(new e.NER(a))}).then(function(){var d=c.beforeDestroy?promisify(c.beforeDestroy):i.beforeDestroy;return g=h.defaults.defaultFilter.call(h,a,b),d(a,g)}).then(function(){return c.notify&&h.notify(i,"beforeDestroy",g),c.eagerEject&&(f=h.ejectAll(a,b)),h.getAdapter(i,c).destroyAll(i,b,c)}).then(function(){var b=c.afterDestroy?promisify(c.afterDestroy):i.afterDestroy;return b(a,g)}).then(function(){return c.notify&&h.notify(i,"afterDestroy",g),f||h.ejectAll(a,b)}).catch(function(b){throw c.eagerEject&&f&&h.inject(a,f,{notify:!1}),b})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],58:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a],h=f.store[a];return new d.Promise(function(i,j){c=c||{},g?d.isString(b)||d.isNumber(b)?d.isObject(c)?("cacheResponse"in c||(c.cacheResponse=!0),(c.bypassCache||!c.cacheResponse)&&delete h.completedQueries[b],b in h.completedQueries?i(f.get(a,b)):i()):j(new e.IA('"options" must be an object!')):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(d){return b in h.completedQueries?d:(b in h.pendingQueries||(h.pendingQueries[b]=f.getAdapter(g,c).find(g,b,c).then(function(d){return c.cacheResponse?(delete h.pendingQueries[b],h.completedQueries[b]=(new Date).getTime(),f.inject(a,d,c)):f.createInstance(a,d,c)})),h.pendingQueries[b])}).catch(function(a){throw delete h.pendingQueries[b],a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],59:[function(a,b){function c(a,b,c,d){var f=this,g=f.store[b],h=f.definitions[b].idAttribute,i=(new Date).getTime();a=a||[],delete g.pendingQueries[c],g.completedQueries[c]=i,g.collectionModified=e.updateTimestamp(g.collectionModified);var j=f.inject(b,a,d);return e.isArray(j)?e.forEach(j,function(a){a&&a[h]&&(g.completedQueries[a[h]]=i)}):(console.warn(errorPrefix(b)+"response is expected to be an array!"),g.completedQueries[j[h]]=i),j}function d(a,b,d){var g,h=this,i=h.definitions[a],j=h.store[a];return new e.Promise(function(c,i){d=d||{},b=b||{},h.definitions[a]?e.isObject(b)?e.isObject(d)?("cacheResponse"in d||(d.cacheResponse=!0),g=e.toJson(b),(d.bypassCache||!d.cacheResponse)&&delete j.completedQueries[g],g in j.completedQueries?c(h.filter(a,b,d)):c()):i(new f.IA('"options" must be an object!')):i(new f.IA('"params" must be an object!')):i(new f.NER(a))}).then(function(f){return g in j.completedQueries?f:(g in j.pendingQueries||(j.pendingQueries[g]=h.getAdapter(i,d).findAll(i,b,d).then(function(b){return delete j.pendingQueries[g],d.cacheResponse?c.call(h,b,a,g,d):(e.forEach(b,function(c,e){b[e]=h.createInstance(a,c,d)}),b)})),j.pendingQueries[g])}).catch(function(a){throw delete j.pendingQueries[g],a})}var e=a("../../utils"),f=a("../../errors");b.exports=d},{"../../errors":76,"../../utils":78}],60:[function(a,b){function c(a,b,c){var f=this;return new d.Promise(function(g,h){c=c||{},b=d.resolveId(f.definitions[a],b),f.definitions[a]?d.isString(b)||d.isNumber(b)?d.isObject(c)?(c.bypassCache=!0,g(f.get(a,b))):h(new e.IA('"options" must be an object!')):h(new e.IA('"id" must be a string or a number!')):h(new f.errors.NER(a))}).then(function(d){return d?f.find(a,b,c):d})}var d=a("../../utils"),e=a("../../errors");b.exports={create:a("./create"),destroy:a("./destroy"),destroyAll:a("./destroyAll"),find:a("./find"),findAll:a("./findAll"),loadRelations:a("./loadRelations"),refresh:c,save:a("./save"),update:a("./update"),updateAll:a("./updateAll")}},{"../../errors":76,"../../utils":78,"./create":55,"./destroy":56,"./destroyAll":57,"./find":58,"./findAll":59,"./loadRelations":61,"./save":62,"./update":63,"./updateAll":64}],61:[function(a,b){function c(a,b,c,f){var g=this,h=g.definitions[a],i=[];return new d.Promise(function(j,k){if(f=f||{},(d.isString(b)||d.isNumber(b))&&(b=g.get(a,b)),d.isString(c)&&(c=[c]),h)if(d.isObject(b))if(d.isArray(c))if(d.isObject(f)){"findBelongsTo"in f||(f.findBelongsTo=!0),"findHasMany"in f||(f.findHasMany=!0);var l=[];d.forEach(h.relationList,function(a){var e=a.relation;if(d.contains(c,e)){var j,k={};k[a.foreignKey]=b[h.idAttribute],"hasMany"===a.type&&k[a.foreignKey]?j=g.findAll(e,k,f):"hasOne"===a.type?a.localKey&&b[a.localKey]?j=g.find(e,b[a.localKey],f):a.foreignKey&&k[a.foreignKey]&&(j=g.findAll(e,k,f).then(function(a){return a.length?a[0]:null})):b[a.localKey]&&(j=g.find(e,b[a.localKey],f)),j&&(l.push(j),i.push(a.localField))}}),j(l)}else k(new e.IA('"options" must be an object!'));else k(new e.IA('"relations" must be a string or an array!'));else k(new e.IA('"instance(id)" must be a string, number or object!'));else k(new e.NER(a))}).then(function(a){return d.Promise.all(a)}).then(function(a){return d.forEach(i,function(c,d){b[c]=a[d]}),b})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],62:[function(a,b){function c(a,b,c){var g,h=this,i=h.definitions[a];return new d.Promise(function(f,j){c=c||{},b=d.resolveId(i,b),i?d.isString(b)||d.isNumber(b)?d.isObject(c)?h.get(a,b)?(g=h.get(a,b),"cacheResponse"in c||(c.cacheResponse=!0),f(g)):j(new e.R('id "'+b+'" not found in cache!')):j(new e.IA('"options" must be an object!')):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(b){var d=c.beforeValidate?f(c.beforeValidate):i.beforeValidate;return d.call(b,a,b)}).then(function(b){var d=c.validate?f(c.validate):i.validate;return d.call(b,a,b)}).then(function(b){var d=c.afterValidate?f(c.afterValidate):i.afterValidate;return d.call(b,a,b)}).then(function(b){var d=c.beforeUpdate?f(c.beforeUpdate):i.beforeUpdate;return d.call(b,a,b)}).then(function(e){if(h.notify(i,"beforeUpdate",d.merge({},e)),c.changesOnly){var f=h.store[a];f.observers[b].deliver();var g=[],j=h.changes(a,b);for(var k in j.added)g.push(k);for(k in j.changed)g.push(k);if(j=d.pick(e,g),d.isEmpty(j))return e;e=j}return h.getAdapter(i,c).update(i,b,e,c)}).then(function(b){var d=c.afterUpdate?f(c.afterUpdate):i.afterUpdate;return d.call(b,a,b)}).then(function(e){if(h.notify(i,"afterUpdate",d.merge({},e)),c.cacheResponse){var f=h.store[a],g=h.inject(i.name,e,c);return f.previousAttributes[b]=d.deepMixIn({},g),f.saved[b]=d.updateTimestamp(f.saved[b]),f.observers[b].discardChanges(),h.get(a,b)}return e})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],63:[function(a,b){function c(a,b,c,g){var h=this,i=h.definitions[a];return new d.Promise(function(f,h){g=g||{},b=d.resolveId(i,b),i?d.isString(b)||d.isNumber(b)?d.isObject(g)?("cacheResponse"in g||(g.cacheResponse=!0),f(c)):h(new e.IA('"options" must be an object!')):h(new e.IA('"id" must be a string or a number!')):h(new e.NER(a))}).then(function(b){var c=g.beforeValidate?f(g.beforeValidate):i.beforeValidate;return c.call(b,a,b)}).then(function(b){var c=g.validate?f(g.validate):i.validate;return c.call(b,a,b)}).then(function(b){var c=g.afterValidate?f(g.afterValidate):i.afterValidate;return c.call(b,a,b)}).then(function(b){var c=g.beforeUpdate?f(g.beforeUpdate):i.beforeUpdate;return c.call(b,a,b)}).then(function(a){return h.notify(i,"beforeUpdate",d.merge({},a)),h.getAdapter(i,g).update(i,b,a,g)}).then(function(b){var c=g.afterUpdate?f(g.afterUpdate):i.afterUpdate;return c.call(b,a,b)}).then(function(b){if(h.notify(i,"afterUpdate",d.merge({},b)),g.cacheResponse){var c=h.store[a],e=h.inject(i.name,b,g),f=e[i.idAttribute];return c.previousAttributes[f]=d.deepMixIn({},e),c.saved[f]=d.updateTimestamp(c.saved[f]),c.observers[f].discardChanges(),h.get(i.name,f)
}return b})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],64:[function(a,b){function c(a,b,c,g){var h=this,i=h.definitions[a];return new d.Promise(function(c,f){g=g||{},i?d.isObject(g)?("cacheResponse"in g||(g.cacheResponse=!0),c(b)):f(new e.IA('"options" must be an object!')):f(new e.NER(a))}).then(function(b){var c=g.beforeValidate?f(g.beforeValidate):i.beforeValidate;return c.call(b,a,b)}).then(function(b){var c=g.validate?f(g.validate):i.validate;return c.call(b,a,b)}).then(function(b){var c=g.afterValidate?f(g.afterValidate):i.afterValidate;return c.call(b,a,b)}).then(function(b){var c=g.beforeUpdate?f(g.beforeUpdate):i.beforeUpdate;return c.call(b,a,b)}).then(function(a){return h.notify(i,"beforeUpdate",d.merge({},a)),h.getAdapter(i,g).updateAll(i,a,c,g)}).then(function(b){var c=g.afterUpdate?f(g.afterUpdate):i.afterUpdate;return c.call(b,a,b)}).then(function(a){return h.notify(i,"afterUpdate",d.merge({},b)),g.cacheResponse?h.inject(i.name,a,g):a})}var d=a("../../utils"),e=a("../../errors"),f=d.promisify;b.exports=c},{"../../errors":76,"../../utils":78}],65:[function(a,b){function c(a,b,c){c(null,b)}function d(a,b){return b}function e(){}function f(a){this.store={},this.definitions={},this.adapters={},this.defaults=new e,g.deepMixIn(this.defaults,a)}var g=a("../utils"),h=a("../errors"),i=a("./sync_methods"),j=a("./async_methods");g.deepFreeze(i),g.deepFreeze(j),g.deepFreeze(h),g.deepFreeze(g);var k=e.prototype;k.idAttribute="id",k.defaultAdapter="DSHttpAdapter",k.defaultFilter=function(a,b,c,d){var e=this,f=a,h=null,i={skip:"",offset:"",where:"",limit:"",orderBy:"",sort:""};c=c||{},d=d||{},h=g.isObject(c.where)?c.where:{},d.allowSimpleWhere&&g.forOwn(c,function(a,b){b in i||b in h||(h[b]={"==":a})}),g.isEmpty(h)&&(h=null),h&&(f=g.filter(f,function(a){var b=!0,c=!0;return g.forOwn(h,function(d,e){g.isString(d)?d={"===":d}:(g.isNumber(d)||g.isBoolean(d))&&(d={"==":d}),g.isObject(d)&&g.forOwn(d,function(d,f){"=="===f?c=b?a[e]==d:c&&a[e]==d:"==="===f?c=b?a[e]===d:c&&a[e]===d:"!="===f?c=b?a[e]!=d:c&&a[e]!=d:"!=="===f?c=b?a[e]!==d:c&&a[e]!==d:">"===f?c=b?a[e]>d:c&&a[e]>d:">="===f?c=b?a[e]>=d:c&&a[e]>=d:"<"===f?c=b?a[e]<d:c&&a[e]<d:"<="===f?c=b?a[e]<=d:c&&a[e]<=d:"in"===f?c=b?g.contains(d,a[e]):c&&g.contains(d,a[e]):"notIn"===f?c=b?!g.contains(d,a[e]):c&&!g.contains(d,a[e]):"|=="===f?c=b?a[e]==d:c||a[e]==d:"|==="===f?c=b?a[e]===d:c||a[e]===d:"|!="===f?c=b?a[e]!=d:c||a[e]!=d:"|!=="===f?c=b?a[e]!==d:c||a[e]!==d:"|>"===f?c=b?a[e]>d:c||a[e]>d:"|>="===f?c=b?a[e]>=d:c||a[e]>=d:"|<"===f?c=b?a[e]<d:c||a[e]<d:"|<="===f?c=b?a[e]<=d:c||a[e]<=d:"|in"===f?c=b?g.contains(d,a[e]):c||g.contains(d,a[e]):"|notIn"===f&&(c=b?!g.contains(d,a[e]):c||!g.contains(d,a[e])),b=!1})}),c}));var j=null;g.isString(c.orderBy)?j=[[c.orderBy,"ASC"]]:g.isArray(c.orderBy)&&(j=c.orderBy),!j&&g.isString(c.sort)?j=[[c.sort,"ASC"]]:!j&&g.isArray(c.sort)&&(j=c.sort),j&&g.forEach(j,function(a){if(g.isString(a))a=[a,"ASC"];else if(!g.isArray(a))throw new e.errors.IllegalArgumentError("DS.filter(resourceName[, params][, options]): "+g.toJson(a)+": Must be a string or an array!",{params:{"orderBy[i]":{actual:typeof a,expected:"string|array"}}});f=g.sort(f,function(b,c){var d=b[a[0]],e=c[a[0]];return g.isString(d)&&(d=g.upperCase(d)),g.isString(e)&&(e=g.upperCase(e)),"DESC"===a[1]?d>e?-1:e>d?1:0:e>d?-1:d>e?1:0})});var k=g.isNumber(c.limit)?c.limit:null,l=null;return g.isNumber(c.skip)?l=c.skip:g.isNumber(c.offset)&&(l=c.offset),k&&l?f=g.slice(f,l,Math.min(f.length,l+k)):g.isNumber(k)?f=g.slice(f,0,Math.min(f.length,k)):g.isNumber(l)&&(f=l<f.length?g.slice(f,l):[]),f},k.baseUrl="",k.endpoint="",k.useClass=!0,k.keepChangeHistory=!1,k.resetHistoryOnInject=!0,k.beforeValidate=c,k.validate=c,k.afterValidate=c,k.beforeCreate=c,k.afterCreate=c,k.beforeUpdate=c,k.afterUpdate=c,k.beforeDestroy=c,k.afterDestroy=c,k.beforeInject=d,k.afterInject=d,k.beforeEject=d,k.afterEject=d;var l=f.prototype;l.getAdapter=function(a,b){return b=b||{},this.adapters[b.adapter]||this.adapters[a.defaultAdapter]},l.notify=function(a,b){var c=Array.prototype.slice.call(arguments,2);c.unshift(a.name),c.unshift("DS."+b),a.emit.apply(a,c)},l.errors=a("../errors"),l.utils=g,g.deepMixIn(l,i),g.deepMixIn(l,j),b.exports=f},{"../errors":76,"../utils":78,"./async_methods":60,"./sync_methods":70}],66:[function(require,module,exports){function Resource(a){DSUtils.deepMixIn(this,a),this.endpoint="endpoint"in a?a.endpoint:this.name}function defineResource(definition){var _this=this,definitions=_this.definitions;if(DSUtils.isString(definition)&&(definition={name:definition.replace(/\s/gi,"")}),!DSUtils.isObject(definition))throw new DSErrors.IA('"definition" must be an object!');if(!DSUtils.isString(definition.name))throw new DSErrors.IA('"name" must be a string!');if(_this.store[definition.name])throw new DSErrors.R(definition.name+" is already registered!");try{Resource.prototype=_this.defaults,definitions[definition.name]=new Resource(definition);var def=definitions[definition.name];if(!DSUtils.isString(def.idAttribute))throw new DSErrors.IA('"idAttribute" must be a string!');return def.relations&&(def.relationList=[],def.relationFields=[],DSUtils.forOwn(def.relations,function(a,b){DSUtils.forOwn(a,function(c,d){DSUtils.isArray(c)||(a[d]=[c]),DSUtils.forEach(a[d],function(a){a.type=b,a.relation=d,a.name=def.name,def.relationList.push(a),def.relationFields.push(a.localField)})})}),def.relations.belongsTo&&DSUtils.forOwn(def.relations.belongsTo,function(a,b){DSUtils.forEach(a,function(a){a.parent&&(def.parent=b,def.parentKey=a.localKey)})}),DSUtils.deepFreeze(def.relations),DSUtils.deepFreeze(def.relationList)),def.getEndpoint=function(a,b){var c,d,e=this.parent,f=this.parentKey,g=b.endpoint||this.endpoint,h=definitions[e];return delete b.endpoint,b=b||{},b.params=b.params||{},e&&f&&h&&b.params[f]!==!1&&((DSUtils.isNumber(a)||DSUtils.isString(a))&&(c=_this.get(this.name,a)),DSUtils.isObject(a)&&f in a?(delete b.params[f],d=DSUtils.makePath(h.getEndpoint(a,b),a[f],g)):c&&f in c?(delete b.params[f],d=DSUtils.makePath(h.getEndpoint(a,b),c[f],g)):b&&b.params[f]&&(d=DSUtils.makePath(h.getEndpoint(a,b),b.params[f],g),delete b.params[f])),b.params[f]===!1&&delete b.params[f],d||g},def.filter&&(def.defaultFilter=def.filter,delete def.filter),def.class=DSUtils.pascalCase(definition.name),eval("function "+def.class+"() {}"),def[def.class]=eval(def.class),def.methods&&DSUtils.deepMixIn(def[def.class].prototype,def.methods),def.computed&&(DSUtils.forOwn(def.computed,function(a,b){DSUtils.isFunction(a)&&(def.computed[b]=[a],a=def.computed[b]),def.methods&&b in def.methods&&console.warn('Computed property "'+b+'" conflicts with previously defined prototype method!');var c;if(1===a.length){var d=a[0].toString().match(/function.*?\(([\s\S]*?)\)/);c=d[1].split(","),def.computed[b]=c.concat(a),a=def.computed[b],c.length&&console.warn("Use the computed property array syntax for compatibility with minified code!")}c=a.slice(0,a.length-1),DSUtils.forEach(c,function(a,b){c[b]=a.trim()}),a.deps=DSUtils.filter(c,function(a){return!!a})}),def[def.class].prototype.DSCompute=function(){return _this.compute(def.name,this)}),_this.store[def.name]={collection:[],completedQueries:{},pendingQueries:{},index:{},modified:{},saved:{},previousAttributes:{},observers:{},changeHistories:{},changeHistory:[],collectionModified:0},DSUtils.forEach(methodsToProxy,function(a){def[a]=function(){var b=Array.prototype.slice.call(arguments);return b.unshift(def.name),_this[a].apply(_this,b)}}),def.beforeValidate=DSUtils.promisify(def.beforeValidate),def.validate=DSUtils.promisify(def.validate),def.afterValidate=DSUtils.promisify(def.afterValidate),def.beforeCreate=DSUtils.promisify(def.beforeCreate),def.afterCreate=DSUtils.promisify(def.afterCreate),def.beforeUpdate=DSUtils.promisify(def.beforeUpdate),def.afterUpdate=DSUtils.promisify(def.afterUpdate),def.beforeDestroy=DSUtils.promisify(def.beforeDestroy),def.afterDestroy=DSUtils.promisify(def.afterDestroy),DSUtils.Events(def),def}catch(err){throw console.error(err),delete definitions[definition.name],delete _this.store[definition.name],err}}var DSUtils=require("../../utils"),DSErrors=require("../../errors"),methodsToProxy=["changes","changeHistory","create","createInstance","destroy","destroyAll","eject","ejectAll","filter","find","findAll","get","hasChanges","inject","lastModified","lastSaved","link","linkAll","linkInverse","loadRelations","previous","refresh","save","unlinkInverse","update","updateAll"];module.exports=defineResource},{"../../errors":76,"../../utils":78}],67:[function(a,b){function c(a,b,c){var f,g=this,h=g.definitions[a],i=g.store[a],j=!1;if(c=c||{},b=d.resolveId(h,b),!h)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');if(!d.isObject(c))throw new e.IA('"options" must be an object!');for(var k=0;k<i.collection.length;k++)if(i.collection[k][h.idAttribute]==b){f=i.collection[k],j=!0;break}return j?("notify"in c||(c.notify=!0),c.notify&&h.beforeEject(h.name,f),g.unlinkInverse(h.name,b),i.collection.splice(k,1),i.observers[b].close(),delete i.observers[b],delete i.index[b],delete i.previousAttributes[b],delete i.completedQueries[b],delete i.pendingQueries[b],d.forEach(i.changeHistories[b],function(a){d.remove(i.changeHistory,a)}),delete i.changeHistories[b],delete i.modified[b],delete i.saved[b],i.collectionModified=d.updateTimestamp(i.collectionModified),c.notify&&(h.afterEject(h.name,f),g.notify(h,"eject",f)),f):void 0}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],68:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(b=b||{},!g)throw new e.NER(a);if(!d.isObject(b))throw new e.IA('"params" must be an object!');var h=f.store[a];d.isEmpty(b)&&(h.completedQueries={});var i=d.toJson(b),j=f.filter(g.name,b),k=d.toLookup(j,g.idAttribute);return d.forOwn(k,function(a,b){f.eject(g.name,b,c)}),delete h.completedQueries[i],h.collectionModified=d.updateTimestamp(h.collectionModified),j}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],69:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||{},!g)throw new e.NER(a);if(b&&!d.isObject(b))throw new e.IA('"params" must be an object!');if(!d.isObject(c))throw new e.IA('"options" must be an object!');var h=f.store[a];b=b||{},"allowSimpleWhere"in c||(c.allowSimpleWhere=!0);var i=d.toJson(b);return i in h.completedQueries||!c.loadFromServer||h.pendingQueries[i]||f.findAll(a,b,c),g.defaultFilter.call(f,h.collection,a,b,c)}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],70:[function(a,b){function c(a,b){var c=this,d=c.definitions[a];if(b=o.resolveId(d,b),!d)throw new p.NER(a);if(!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');var e=c.get(a,b);if(e){c.store[a].observers[b].deliver();var f=o.diffObjectFromOldObject(e,c.store[a].previousAttributes[b]);return o.forOwn(f,function(a,b){var c=[];o.forOwn(a,function(a,b){o.isFunction(a)||c.push(b)}),f[b]=o.pick(f[b],c)}),o.forEach(d.relationFields,function(a){delete f.added[a],delete f.removed[a],delete f.changed[a]}),f}}function d(a,b){var c=this,d=c.definitions[a],e=c.store[a];if(b=o.resolveId(d,b),a&&!c.definitions[a])throw new p.NER(a);if(b&&!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');if(d.keepChangeHistory){if(!a)return e.changeHistory;var f=c.get(a,b);if(f)return e.changeHistories[b]}else console.warn("changeHistory is disabled for this resource!")}function e(a,b,c){var d=this.definitions[a];if(b=b||{},c=c||{},!d)throw new p.NER(a);if(b&&!o.isObject(b))throw new p.IA('"attrs" must be an object!');if(!o.isObject(c))throw new p.IA('"options" must be an object!');"useClass"in c||(c.useClass=d.useClass);var e;if(c.useClass){var f=d[d.class];e=new f}else e={};return o.deepMixIn(e,b)}function f(a){return!(o.isEmpty(a.added)&&o.isEmpty(a.removed)&&o.isEmpty(a.changed))}function g(){n.Platform.performMicrotaskCheckpoint()}function h(a,b){var c=this,d=c.definitions[a];if(b=o.resolveItem(c.store[a],b),!d)throw new p.NER(a);if(!o.isObject(b)&&!o.isString(b)&&!o.isNumber(b))throw new p.IA('"instance" must be an object, string or number!');return(o.isString(b)||o.isNumber(b))&&(b=c.get(a,b)),o.forOwn(d.computed,function(a,c){o.compute.call(b,a,c,o)}),b}function i(a,b,c){var d=this;if(c=c||{},!d.definitions[a])throw new p.NER(a);if(!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');if(!o.isObject(c))throw new p.IA('"options" must be an object!');var e=d.store[a].index[b];return!e&&c.loadFromServer&&d.find(a,b,c),e}function j(a,b){var c=this;if(b=o.resolveId(c.definitions[a],b),!c.definitions[a])throw new p.NER(a);return c.get(a,b)?f(c.changes(a,b)):!1}function k(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new p.NER(a);return b?(b in d.modified||(d.modified[b]=0),d.modified[b]):d.collectionModified}function l(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new p.NER(a);return b in d.saved||(d.saved[b]=0),d.saved[b]}function m(a,b){var c=this,d=c.definitions[a],e=c.store[a];if(b=o.resolveId(d,b),!d)throw new p.NER(a);if(!o.isString(b)&&!o.isNumber(b))throw new p.IA('"id" must be a string or a number!');return e.previousAttributes[b]?o.merge({},e.previousAttributes[b]):void 0}var n=a("../../../lib/observe-js/observe-js"),o=a("../../utils"),p=a("../../errors");b.exports={changes:c,changeHistory:d,compute:h,createInstance:e,defineResource:a("./defineResource"),digest:g,eject:a("./eject"),ejectAll:a("./ejectAll"),filter:a("./filter"),get:i,hasChanges:j,inject:a("./inject"),lastModified:k,lastSaved:l,link:a("./link"),linkAll:a("./linkAll"),linkInverse:a("./linkInverse"),previous:m,unlinkInverse:a("./unlinkInverse")}},{"../../../lib/observe-js/observe-js":1,"../../errors":76,"../../utils":78,"./defineResource":66,"./eject":67,"./ejectAll":68,"./filter":69,"./inject":71,"./link":72,"./linkAll":73,"./linkInverse":74,"./unlinkInverse":75}],71:[function(a,b){function c(a,b,c){return function(d,e,f,h,i){var j,k=this,l=h&&h(b.idAttribute)?h(b.idAttribute):k[b.idAttribute];if(g.forEach(b.relationFields,function(a){delete d[a],delete e[a],delete f[a]}),(!g.isEmpty(d)||!g.isEmpty(e)||!g.isEmpty(f)||i)&&(j=a.get(b.name,l),c.modified[l]=g.updateTimestamp(c.modified[l]),c.collectionModified=g.updateTimestamp(c.collectionModified),b.keepChangeHistory)){var m={resourceName:b.name,target:j,added:d,removed:e,changed:f,timestamp:c.modified[l]};c.changeHistories[l].push(m),c.changeHistory.push(m)}b.computed&&(j=j||a.get(b.name,l),g.forOwn(b.computed,function(a,b){var c=!1;g.forEach(a.deps,function(a){(a in d||a in e||a in f||!(b in j))&&(c=!0)}),c=c||!a.deps.length,c&&g.compute.call(j,a,b,g)})),b.relations&&(j=j||a.get(b.name,l),g.forEach(b.relationList,function(c){j[c.localField]&&(c.localKey in d||c.localKey in e||c.localKey in f)&&a.link(b.name,j[b.idAttribute],[c.relation])})),b.idAttribute in f&&console.error("Doh! You just changed the primary key of an object! I don't know how to handle this yet, so your data for the \""+b.name+'" resource is now in an undefined (probably broken) state.')}}function d(a,b,e,f){var j,k=this,l=c(k,a,b,e,f);if(g.isArray(e)){j=[];for(var m=0;m<e.length;m++)j.push(d.call(k,a,b,e[m],f))}else{var n=a.computed,o=a.idAttribute;if(n&&n[o]){var p=[];g.forEach(n[o].deps,function(a){p.push(e[a])}),e[o]=n[o][n[o].length-1].apply(e,p)}if(!(o in e)){var q=new h.R(a.name+'.inject: "attrs" must contain the property specified by `idAttribute`!');throw console.error(q),q}try{var r=e[o],s=k.get(a.name,r);s?(g.deepMixIn(s,e),a.resetHistoryOnInject&&(b.previousAttributes[r]={},g.deepMixIn(b.previousAttributes[r],e),b.changeHistories[r].length&&(g.forEach(b.changeHistories[r],function(a){g.remove(b.changeHistory,a)}),b.changeHistories[r].splice(0,b.changeHistories[r].length))),b.observers[r].deliver()):(s=f.useClass?e instanceof a[a.class]?e:new a[a.class]:{},b.previousAttributes[r]={},g.deepMixIn(s,e),g.deepMixIn(b.previousAttributes[r],e),b.collection.push(s),b.changeHistories[r]=[],b.observers[r]=new i.ObjectObserver(s),b.observers[r].open(l,s),b.index[r]=s,l.call(s,{},{},{},null,!0)),b.saved[r]=g.updateTimestamp(b.saved[r]),j=s}catch(t){console.error(t),console.error("inject failed!",a.name,e)}}return j}function e(a,b,c){function d(b,d,f){var h=e.definitions[d];if(h&&f[b.localField]&&!k.injectedSoFar[d+f[b.localField][h.idAttribute]])try{k.injectedSoFar[d+f[b.localField][h.idAttribute]]=1,f[b.localField]=e.inject(d,f[b.localField],c)}catch(i){console.error(a.name+": Failed to inject "+b.type+' relation: "'+d+'"!',i)}else c.findBelongsTo&&"belongsTo"===b.type?g.isArray(f)?g.forEach(f,function(b){e.link(a.name,b[a.idAttribute],[d])}):e.link(a.name,f[a.idAttribute],[d]):(c.findHasMany&&"hasMany"===b.type||c.findHasOne&&"hasOne"===b.type)&&(g.isArray(f)?g.forEach(f,function(b){e.link(a.name,b[a.idAttribute],[d])}):e.link(a.name,f[a.idAttribute],[d]))}var e=this;g.forEach(a.relationList,function(a){g.isArray(b)?g.forEach(b,function(b){d(a,a.relation,b)}):d(a,a.relation,b)})}function f(a,b,c){var f=this,i=f.definitions[a];if(c=c||{},!i)throw new h.NER(a);if(!g.isObject(b)&&!g.isArray(b))throw new h.IA(a+'.inject: "attrs" must be an object or an array!');if(!g.isObject(c))throw new h.IA('"options" must be an object!');var l;j++;try{"useClass"in c||(c.useClass=i.useClass),"notify"in c||(c.notify=!0),c.notify&&i.beforeInject(i.name,b),l=d.call(f,i,f.store[a],b,c),i.relations&&e.call(f,i,l,c),c.linkInverse&&(g.isArray(l)&&l.length?f.linkInverse(i.name,l[0][i.idAttribute]):f.linkInverse(i.name,l[i.idAttribute])),c.notify&&(i.afterInject(i.name,l),f.notify(i,"inject",l)),j--}catch(m){throw j--,m}return j||(k.injectedSoFar={}),l}var g=a("../../utils"),h=a("../../errors"),i=a("../../../lib/observe-js/observe-js"),j=0,k={injectedSoFar:{}};b.exports=f},{"../../../lib/observe-js/observe-js":1,"../../errors":76,"../../utils":78}],72:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],b=d.resolveId(g,b),!g)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.get(a,b);return h&&d.forEach(g.relationList,function(a){var b=a.relation;if(!c.length||d.contains(c,b)){var e={};if("belongsTo"===a.type){var i=h[a.localKey]?f.get(b,h[a.localKey]):null;i&&(h[a.localField]=i)}else if("hasMany"===a.type)e[a.foreignKey]=h[g.idAttribute],h[a.localField]=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,e,{allowSimpleWhere:!0});else if("hasOne"===a.type){e[a.foreignKey]=h[g.idAttribute];var j=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,e,{allowSimpleWhere:!0});j.length&&(h[a.localField]=j[0])}}}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],73:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],!g)throw new e.NER(a);if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.filter(a,b);return h&&d.forEach(g.relationList,function(a){var b=a.relation;(!c.length||d.contains(c,b))&&("belongsTo"===a.type?d.forEach(h,function(c){var d=c[a.localKey]?f.get(b,c[a.localKey]):null;d&&(c[a.localField]=d)}):"hasMany"===a.type?d.forEach(h,function(c){var d={};d[a.foreignKey]=c[g.idAttribute],c[a.localField]=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,d,{allowSimpleWhere:!0})}):"hasOne"===a.type&&d.forEach(h,function(c){var d={};d[a.foreignKey]=c[g.idAttribute];var e=f.defaults.constructor.prototype.defaultFilter.call(f,f.store[b].collection,b,d,{allowSimpleWhere:!0});e.length&&(c[a.localField]=e[0])}))}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],74:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],b=d.resolveId(g,b),!g)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.get(a,b);return h&&d.forOwn(f.definitions,function(a){d.forOwn(a.relations,function(b){d.forOwn(b,function(b,e){(!c.length||d.contains(c,a.name))&&g.name===e&&f.linkAll(a.name,{},[g.name])})})}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],75:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];if(c=c||[],b=d.resolveId(g,b),!g)throw new e.NER(a);if(!d.isString(b)&&!d.isNumber(b))throw new e.IA('"id" must be a string or a number!');if(!d.isArray(c))throw new e.IA('"relations" must be an array!');var h=f.get(a,b);return h&&d.forOwn(f.definitions,function(a){d.forOwn(a.relations,function(a){d.forOwn(a,function(a,b){g.name===b&&d.forEach(a,function(a){d.forEach(f.store[a.name].collection,function(b){if("hasMany"===a.type&&b[a.localField]){var c;d.forEach(b[a.localField],function(a,b){a===h&&(c=b)}),b[a.localField].splice(c,1)}else b[a.localField]===h&&delete b[a.localField]})})})})}),h}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":76,"../../utils":78}],76:[function(a,b){function c(a){Error.call(this),"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.type=this.constructor.name,this.message=a||"Illegal Argument!"}function d(a){Error.call(this),"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.type=this.constructor.name,this.message=a||"RuntimeError Error!"}function e(a){Error.call(this),"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.type=this.constructor.name,this.message=(a||"")+" is not a registered resource!"}c.prototype=Object.create(Error.prototype),c.prototype.constructor=c,d.prototype=Object.create(Error.prototype),d.prototype.constructor=d,e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,b.exports={IllegalArgumentError:c,IA:c,RuntimeError:d,R:d,NonexistentResourceError:e,NER:e}},{}],77:[function(a,b){var c=a("./datastore");b.exports={DS:c,createStore:function(){return new c},DSUtils:a("./utils"),DSErrors:a("./errors")}},{"./datastore":65,"./errors":76,"./utils":78}],78:[function(a,b){function c(a){var b={};a=a||this,a.on=function(a,c,d){b[a]=b[a]||[],b[a].push({f:c,c:d})},a.off=function(a,c){var d=b[a];if(d)if(c){for(var e=0;e<d.length;e++)if(d[e]===c){d.splice(e,1);break}}else d.splice(0,d.length);else b={}},a.emit=function(){var a=Array.prototype.slice.call(arguments),c=b[a.shift()]||[];if(c)for(var d=0;d<c.length;d++)c[d].f.apply(c[d].c,a)}}b.exports={isBoolean:a("mout/lang/isBoolean"),isString:a("mout/lang/isString"),isArray:a("mout/lang/isArray"),isObject:a("mout/lang/isObject"),isNumber:a("mout/lang/isNumber"),isFunction:a("mout/lang/isFunction"),isEmpty:a("mout/lang/isEmpty"),toJson:JSON.stringify,fromJson:JSON.parse,makePath:a("mout/string/makePath"),upperCase:a("mout/string/upperCase"),pascalCase:a("mout/string/pascalCase"),deepMixIn:a("mout/object/deepMixIn"),forOwn:a("mout/object/forOwn"),forEach:a("mout/array/forEach"),pick:a("mout/object/pick"),set:a("mout/object/set"),merge:a("mout/object/merge"),contains:a("mout/array/contains"),filter:a("mout/array/filter"),toLookup:a("mout/array/toLookup"),remove:a("mout/array/remove"),slice:a("mout/array/slice"),sort:a("mout/array/sort"),resolveItem:function(a,b){return a&&(this.isString(b)||this.isNumber(b))?a.index[b]||b:b},resolveId:function(a,b){return this.isString(b)||this.isNumber(b)?b:b&&a?b[a.idAttribute]||b:b},updateTimestamp:function(a){var b="function"==typeof Date.now?Date.now():(new Date).getTime();return a&&a>=b?a+1:b},Promise:a("es6-promise").Promise,deepFreeze:function d(a){if("function"==typeof Object.freeze){var b,c;Object.freeze(a);for(c in a)b=a[c],a.hasOwnProperty(c)&&"object"==typeof b&&!Object.isFrozen(b)&&d(b)}},compute:function(a,b,c){var d=this,e=[];c.forEach(a.deps,function(a){e.push(d[a])}),this[b]=a[a.length-1].apply(this,e)},diffObjectFromOldObject:function(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var h in a)h in b||(c[h]=a[h]);return{added:c,removed:d,changed:e}},promisify:function(a,b){var c=this.Promise;if(a){if("function"!=typeof a)throw new Error("Can only promisify functions!");return function(){var d=Array.prototype.slice.apply(arguments);return new c(function(c,e){d.push(function(a,b){a?e(a):c(b)});try{var f=a.apply(b||this,d);f&&f.then&&f.then(c,e)}catch(g){e(g)}})}}},Events:c}},{"es6-promise":2,"mout/array/contains":13,"mout/array/filter":14,"mout/array/forEach":15,"mout/array/remove":18,"mout/array/slice":19,"mout/array/sort":20,"mout/array/toLookup":21,"mout/lang/isArray":27,"mout/lang/isBoolean":28,"mout/lang/isEmpty":29,"mout/lang/isFunction":30,"mout/lang/isNumber":32,"mout/lang/isObject":33,"mout/lang/isString":35,"mout/object/deepMixIn":39,"mout/object/forOwn":41,"mout/object/merge":43,"mout/object/pick":46,"mout/object/set":47,"mout/string/makePath":50,"mout/string/pascalCase":51,"mout/string/upperCase":54}]},{},[77])(77)});

@@ -71,2 +71,3 @@ // Setup global test variables

lifecycle.beforeDestroy = function (resourceName, attrs, cb) {
console.log(resourceName, attrs, cb);
lifecycle.beforeDestroy.callCount += 1;

@@ -73,0 +74,0 @@ cb(null, attrs);

{
"name": "js-data",
"description": "Data store.",
"version": "0.2.0",
"version": "0.3.0",
"homepage": "http://www.js-data.io",

@@ -6,0 +6,0 @@ "repository": {

@@ -13,3 +13,3 @@ <img src="https://raw.githubusercontent.com/js-data/js-data/master/js-data.png" alt="js-data logo" title="js-data" align="right" width="64" height="64" />

__Latest Release:__ [0.2.0](https://github.com/js-data/js-data/releases/tag/0.2.0)
__Latest Release:__ [0.3.0](https://github.com/js-data/js-data/releases/tag/0.3.0)

@@ -16,0 +16,0 @@ JSData is pre-alpha. The API is subject to change, though the current api is well tested.

@@ -22,2 +22,5 @@ var DSUtils = require('../../utils');

item = _this.get(resourceName, id);
if (!('notify' in options)) {
options.notify = true;
}
resolve(item);

@@ -27,17 +30,37 @@ }

.then(function (attrs) {
var func = options.beforeDestroy ? promisify(options.beforeDestroy) : definition.beforeDestroy;
return func.call(attrs, resourceName, attrs);
if (options.notify) {
var func = options.beforeDestroy ? promisify(options.beforeDestroy) : definition.beforeDestroy;
return func.call(attrs, resourceName, attrs);
} else {
return attrs;
}
})
.then(function (attrs) {
_this.notify(definition, 'beforeDestroy', DSUtils.merge({}, attrs));
if (options.notify) {
_this.notify(definition, 'beforeDestroy', DSUtils.merge({}, attrs));
}
if (options.eagerEject) {
_this.eject(resourceName, id);
}
return _this.getAdapter(definition, options).destroy(definition, id, options);
})
.then(function () {
var func = options.afterDestroy ? promisify(options.afterDestroy) : definition.afterDestroy;
return func.call(item, resourceName, item);
if (options.notify) {
var func = options.afterDestroy ? promisify(options.afterDestroy) : definition.afterDestroy;
return func.call(item, resourceName, item);
} else {
return item;
}
})
.then(function (item) {
_this.notify(definition, 'afterDestroy', DSUtils.merge({}, item));
if (options.notify) {
_this.notify(definition, 'afterDestroy', DSUtils.merge({}, item));
}
_this.eject(resourceName, id);
return id;
}).catch(function (err) {
if (options.eagerEject && item) {
_this.inject(resourceName, item, { notify: false });
}
throw err;
});

@@ -44,0 +67,0 @@ }

@@ -7,2 +7,3 @@ var DSUtils = require('../../utils');

var definition = _this.definitions[resourceName];
var ejected, toEject;

@@ -13,8 +14,30 @@ return new DSUtils.Promise(function (resolve, reject) {

} else {
options = options || {};
resolve();
}
}).then(function () {
var func = options.beforeDestroy ? promisify(options.beforeDestroy) : definition.beforeDestroy;
toEject = _this.defaults.defaultFilter.call(_this, resourceName, params);
return func(resourceName, toEject);
}).then(function () {
if (options.notify) {
_this.notify(definition, 'beforeDestroy', toEject);
}
if (options.eagerEject) {
ejected = _this.ejectAll(resourceName, params);
}
return _this.getAdapter(definition, options).destroyAll(definition, params, options);
}).then(function () {
return _this.ejectAll(resourceName, params);
var func = options.afterDestroy ? promisify(options.afterDestroy) : definition.afterDestroy;
return func(resourceName, toEject);
}).then(function () {
if (options.notify) {
_this.notify(definition, 'afterDestroy', toEject);
}
return ejected || _this.ejectAll(resourceName, params);
}).catch(function (err) {
if (options.eagerEject && ejected) {
_this.inject(resourceName, ejected, { notify: false });
}
throw err;
});

@@ -21,0 +44,0 @@ }

@@ -39,2 +39,5 @@ var DSUtils = require('../utils');

params = params || {};
options = options || {};
if (DSUtils.isObject(params.where)) {

@@ -220,2 +223,4 @@ where = params.where;

defaultsPrototype.afterInject = lifecycleNoop;
defaultsPrototype.beforeEject = lifecycleNoop;
defaultsPrototype.afterEject = lifecycleNoop;

@@ -222,0 +227,0 @@ function DS(options) {

var DSUtils = require('../../utils');
var DSErrors = require('../../errors');
function eject(resourceName, id) {
function eject(resourceName, id, options) {
var _this = this;

@@ -11,2 +11,4 @@ var definition = _this.definitions[resourceName];

options = options || {};
id = DSUtils.resolveId(definition, id);

@@ -17,2 +19,4 @@ if (!definition) {

throw new DSErrors.IA('"id" must be a string or a number!');
} else if (!DSUtils.isObject(options)) {
throw new DSErrors.IA('"options" must be an object!');
}

@@ -28,2 +32,8 @@

if (found) {
if (!('notify' in options)) {
options.notify = true;
}
if (options.notify) {
definition.beforeEject(definition.name, item);
}
_this.unlinkInverse(definition.name, id);

@@ -46,3 +56,6 @@ resource.collection.splice(i, 1);

_this.notify(definition, 'eject', item);
if (options.notify) {
definition.afterEject(definition.name, item);
_this.notify(definition, 'eject', item);
}

@@ -49,0 +62,0 @@ return item;

var DSUtils = require('../../utils');
var DSErrors = require('../../errors');
function ejectAll(resourceName, params) {
function ejectAll(resourceName, params, options) {
var _this = this;

@@ -23,3 +23,3 @@ var definition = _this.definitions[resourceName];

DSUtils.forOwn(ids, function (item, id) {
_this.eject(definition.name, id);
_this.eject(definition.name, id, options);
});

@@ -30,4 +30,2 @@

_this.notify(definition, 'eject', items);
return items;

@@ -34,0 +32,0 @@ }

@@ -100,3 +100,2 @@ var DSUtils = require('../../utils');

try {
definition.beforeInject(definition.name, attrs);
var id = attrs[idA];

@@ -143,3 +142,2 @@ var item = _this.get(definition.name, id);

resource.saved[id] = DSUtils.updateTimestamp(resource.saved[id]);
definition.afterInject(definition.name, item);
injected = item;

@@ -218,2 +216,9 @@ } catch (err) {

}
if (!('notify' in options)) {
options.notify = true;
}
if (options.notify) {
definition.beforeInject(definition.name, attrs);
}
injected = _inject.call(_this, definition, _this.store[resourceName], attrs, options);

@@ -232,3 +237,6 @@ if (definition.relations) {

_this.notify(definition, 'inject', injected);
if (options.notify) {
definition.afterInject(definition.name, injected);
_this.notify(definition, 'inject', injected);
}

@@ -235,0 +243,0 @@ stack--;

@@ -25,9 +25,13 @@ describe('DS.destroy(resourceName, id)', function () {

datastore.destroy('post', 5).then(function (id) {
assert.equal(id, '5', 'post 5 should have been deleted');
assert.equal(lifecycle.beforeDestroy.callCount, 1, 'beforeDestroy should have been called');
assert.equal(lifecycle.afterDestroy.callCount, 1, 'afterDestroy should have been called');
assert.isUndefined(datastore.get('post', 5));
assert.equal(datastore.lastModified('post', 5), 0);
assert.equal(datastore.lastSaved('post', 5), 0);
done();
try {
assert.equal(id, '5', 'post 5 should have been deleted');
assert.equal(lifecycle.beforeDestroy.callCount, 1, 'beforeDestroy should have been called');
assert.equal(lifecycle.afterDestroy.callCount, 1, 'afterDestroy should have been called');
assert.isUndefined(datastore.get('post', 5));
assert.equal(datastore.lastModified('post', 5), 0);
assert.equal(datastore.lastSaved('post', 5), 0);
done();
} catch (e) {
done(e);
}
}).catch(function (err) {

@@ -39,6 +43,10 @@ console.error(err.stack);

setTimeout(function () {
assert.equal(1, _this.requests.length);
assert.equal(_this.requests[0].url, 'http://test.js-data.io/posts/5');
assert.equal(_this.requests[0].method, 'delete');
_this.requests[0].respond(200, {'Content-Type': 'text/plain'}, '5');
try {
assert.equal(1, _this.requests.length);
assert.equal(_this.requests[0].url, 'http://test.js-data.io/posts/5');
assert.equal(_this.requests[0].method, 'delete');
_this.requests[0].respond(200, {'Content-Type': 'text/plain'}, '5');
} catch (e) {
done(e);
}
}, 30);

@@ -109,2 +117,38 @@ });

});
it('should eager eject', function (done) {
var _this = this;
datastore.inject('post', p1);
datastore.destroy('post', 5, { eagerEject: true }).then(function (id) {
try {
assert.equal(id, '5', 'post 5 should have been deleted');
assert.equal(lifecycle.beforeDestroy.callCount, 1, 'beforeDestroy should have been called');
assert.equal(lifecycle.afterDestroy.callCount, 1, 'afterDestroy should have been called');
assert.isUndefined(datastore.get('post', 5));
assert.equal(datastore.lastModified('post', 5), 0);
assert.equal(datastore.lastSaved('post', 5), 0);
done();
} catch (e) {
done(e);
}
}).catch(function (err) {
console.error(err.stack);
done('should not have rejected');
});
setTimeout(function () {
assert.isUndefined(datastore.get('post', 5));
setTimeout(function () {
try {
assert.equal(1, _this.requests.length);
assert.equal(_this.requests[0].url, 'http://test.js-data.io/posts/5');
assert.equal(_this.requests[0].method, 'delete');
_this.requests[0].respond(200, {'Content-Type': 'text/plain'}, '5');
} catch (e) {
done(e);
}
}, 30);
}, 30);
});
});

@@ -63,4 +63,4 @@ describe('DS.findAll(resourceName, params[, options]): ', function () {

assert.deepEqual(data, [p1, p2, p3, p4]);
assert.equal(lifecycle.beforeInject.callCount, 8, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 8, 'afterInject should have been called');
assert.equal(lifecycle.beforeInject.callCount, 2, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 2, 'afterInject should have been called');
assert.equal(lifecycle.serialize.callCount, 0, 'serialize should have been called');

@@ -97,8 +97,12 @@ assert.equal(lifecycle.deserialize.callCount, 2, 'deserialize should have been called');

done('Should not have succeeded!');
}).catch(function (err) {
assert(err.message, 'DS.inject(resourceName, attrs[, options]): attrs: Must contain the property specified by `idAttribute`!');
assert.deepEqual(datastore.filter('post', {}), [], 'The posts should not be in the store');
assert.equal(lifecycle.beforeInject.callCount, 0, 'beforeInject should not have been called');
assert.equal(lifecycle.afterInject.callCount, 0, 'afterInject should not have been called');
done();
}, function (err) {
try {
assert(err.message, 'post.inject: "attrs" must contain the property specified by `idAttribute`!');
assert.deepEqual(datastore.filter('post', {}), [], 'The posts should not be in the store');
assert.equal(lifecycle.beforeInject.callCount, 1, 'beforeInject should have been called once');
assert.equal(lifecycle.afterInject.callCount, 0, 'afterInject should not have been called');
done();
} catch (e) {
done(e.message);
}
});

@@ -169,4 +173,4 @@

assert.equal(lifecycle.beforeInject.callCount, 4, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 4, 'afterInject should have been called');
assert.equal(lifecycle.beforeInject.callCount, 1, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 1, 'afterInject should have been called');
assert.equal(lifecycle.serialize.callCount, 0, 'serialize should have been called');

@@ -206,4 +210,4 @@ assert.equal(lifecycle.deserialize.callCount, 1, 'deserialize should have been called');

assert.equal(lifecycle.beforeInject.callCount, 2, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 2, 'afterInject should have been called');
assert.equal(lifecycle.beforeInject.callCount, 1, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 1, 'afterInject should have been called');
assert.equal(lifecycle.serialize.callCount, 0, 'serialize should have been called');

@@ -258,4 +262,4 @@ assert.equal(lifecycle.deserialize.callCount, 1, 'deserialize should have been called');

assert.equal(lifecycle.beforeInject.callCount, 2, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 2, 'afterInject should have been called');
assert.equal(lifecycle.beforeInject.callCount, 1, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 1, 'afterInject should have been called');
assert.equal(lifecycle.serialize.callCount, 0, 'serialize should have been called');

@@ -262,0 +266,0 @@ assert.equal(lifecycle.deserialize.callCount, 1, 'deserialize should have been called');

@@ -46,4 +46,4 @@ describe('DS.updateAll(resourceName, attrs, params[, options])', function () {

assert.deepEqual(ps[0], { author: 'Jane', age: 5, id: 6 });
assert.equal(lifecycle.beforeInject.callCount, 5, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 5, 'afterInject should have been called');
assert.equal(lifecycle.beforeInject.callCount, 4, 'beforeInject should have been called');
assert.equal(lifecycle.afterInject.callCount, 4, 'afterInject should have been called');
assert.equal(lifecycle.serialize.callCount, 2, 'serialize should have been called');

@@ -50,0 +50,0 @@ assert.equal(lifecycle.deserialize.callCount, 2, 'deserialize should have been called');

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc