New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.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 1.0.0-alpha.5-8 to 1.0.0-beta.1

dist/js-data-debug.js

10

CHANGELOG.md

@@ -0,1 +1,11 @@

##### 1.0.0-beta.1 - 10 January 2015
###### Breaking API changes
- #30 - Issue with offset. To solve this a `useFilter` option was added, which defaults to `false`. Previously `DS#filter` was used to return cached `findAll` queries, but that had problems. Now, cached items are also tracked by the query that retrieved them, so when you make a query again you consistently get the right data.
###### Backwards compatible API changes
- #6 - Allow logging to be configurable
- #29 - Add version to JSData export
- #31 - Add build for js-data-debug.js which contains lots of debugging statements and a configurable logger.
##### 1.0.0-alpha.5-8 - 05 December 2014

@@ -2,0 +12,0 @@

6

dist/js-data.min.js
/**
* @author Jason Dobry <jason.dobry@gmail.com>
* @file js-data.min.js
* @version 1.0.0-alpha.5-8 - Homepage <http://www.js-data.io/>
* @version 1.0.0-beta.1 - Homepage <http://www.js-data.io/>
* @copyright (c) 2014 Jason Dobry

@@ -10,3 +10,3 @@ * @license MIT <https://github.com/js-data/js-data/blob/master/LICENSE>

*/
!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 isBlacklisted(a,b){if(!b||!b.length)return!1;for(var c,d=0;d<b.length;d++)if("[object RegExp]"===Object.prototype.toString.call(b[d])&&b[d].test(a)||b[d]===a)return c=a;return!!c}function diffObjectFromOldObject(a,b,c,d){var e={},f={},g={};for(var h in b){var i=a[h];isBlacklisted(h,d)||void 0!==i&&(c?c(i,b[h]):i===b[h])||(h in a?(c?c(i,b[h]):i===b[h])||(g[h]=i):f[h]=void 0)}for(var h in a)h in b||isBlacklisted(h,d)||(e[h]=a[h]);return Array.isArray(a)&&a.length!==b.length&&(g.length=a.length),{added:e,removed:f,changed:g}}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 equalityFn=function(a,b){return a===b},blacklist=[],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_,equalityFn,blacklist);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.diffObjectFromOldObject=diffObjectFromOldObject,global.setEqualityFn=function(a){equalityFn=a},global.setBlacklist=function(a){blacklist=a},global.Observer.runEOM_=runEOM,global.Observer.observerSentinel_=observerSentinel,global.Observer.hasObjectObserve=hasObserve,global.ObjectObserver=ObjectObserver}(exports)},{}],2:[function(a,b){(function(a,c){(function(){"use strict";function d(a){return"function"==typeof a||"object"==typeof a&&null!==a}function e(a){return"function"==typeof a}function f(a){return"object"==typeof a&&null!==a}function g(){}function h(){return function(){a.nextTick(l)}}function i(){var a=0,b=new O(l),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function j(){var a=new MessageChannel;return a.port1.onmessage=l,function(){a.port2.postMessage(0)}}function k(){return function(){setTimeout(l,1)}}function l(){for(var a=0;L>a;a+=2){var b=Q[a],c=Q[a+1];b(c),Q[a]=void 0,Q[a+1]=void 0}L=0}function m(){}function n(){return new TypeError("You cannot resolve a promise with itself")}function o(){return new TypeError("A promises callback cannot return that same promise.")}function p(a){try{return a.then}catch(b){return U.error=b,U}}function q(a,b,c,d){try{a.call(b,c,d)}catch(e){return e}}function r(a,b,c){M(function(a){var d=!1,e=q(c,b,function(c){d||(d=!0,b!==c?u(a,c):w(a,c))},function(b){d||(d=!0,x(a,b))},"Settle: "+(a._label||" unknown promise"));!d&&e&&(d=!0,x(a,e))},a)}function s(a,b){b._state===S?w(a,b._result):a._state===T?x(a,b._result):y(b,void 0,function(b){u(a,b)},function(b){x(a,b)})}function t(a,b){if(b.constructor===a.constructor)s(a,b);else{var c=p(b);c===U?x(a,U.error):void 0===c?w(a,b):e(c)?r(a,b,c):w(a,b)}}function u(a,b){a===b?x(a,n()):d(b)?t(a,b):w(a,b)}function v(a){a._onerror&&a._onerror(a._result),z(a)}function w(a,b){a._state===R&&(a._result=b,a._state=S,0===a._subscribers.length||M(z,a))}function x(a,b){a._state===R&&(a._state=T,a._result=b,M(v,a))}function y(a,b,c,d){var e=a._subscribers,f=e.length;a._onerror=null,e[f]=b,e[f+S]=c,e[f+T]=d,0===f&&a._state&&M(z,a)}function z(a){var b=a._subscribers,c=a._state;if(0!==b.length){for(var d,e,f=a._result,g=0;g<b.length;g+=3)d=b[g],e=b[g+c],d?C(c,d,e,f):e(f);a._subscribers.length=0}}function A(){this.error=null}function B(a,b){try{return a(b)}catch(c){return V.error=c,V}}function C(a,b,c,d){var f,g,h,i,j=e(c);if(j){if(f=B(c,d),f===V?(i=!0,g=f.error,f=null):h=!0,b===f)return void x(b,o())}else f=d,h=!0;b._state!==R||(j&&h?u(b,f):i?x(b,g):a===S?w(b,f):a===T&&x(b,f))}function D(a,b){try{b(function(b){u(a,b)},function(b){x(a,b)})}catch(c){x(a,c)}}function E(a,b,c,d){this._instanceConstructor=a,this.promise=new a(m,d),this._abortOnReject=c,this._validateInput(b)?(this._input=b,this.length=b.length,this._remaining=b.length,this._init(),0===this.length?w(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&w(this.promise,this._result))):x(this.promise,this._validationError())}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function G(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function H(a,b){this._id=_++,this._label=b,this._state=void 0,this._result=void 0,this._subscribers=[],m!==a&&(e(a)||F(),this instanceof H||G(),D(this,a))}var I;I=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};var J,K=I,L=(Date.now||function(){return(new Date).getTime()},Object.create||function(a){if(arguments.length>1)throw new Error("Second argument not supported");if("object"!=typeof a)throw new TypeError("Argument must be an object");return g.prototype=a,new g},0),M=function(a,b){Q[L]=a,Q[L+1]=b,L+=2,2===L&&J()},N="undefined"!=typeof window?window:{},O=N.MutationObserver||N.WebKitMutationObserver,P="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,Q=new Array(1e3);J="undefined"!=typeof a&&"[object process]"==={}.toString.call(a)?h():O?i():P?j():k();var R=void 0,S=1,T=2,U=new A,V=new A;E.prototype._validateInput=function(a){return K(a)},E.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},E.prototype._init=function(){this._result=new Array(this.length)};var W=E;E.prototype._enumerate=function(){for(var a=this.length,b=this.promise,c=this._input,d=0;b._state===R&&a>d;d++)this._eachEntry(c[d],d)},E.prototype._eachEntry=function(a,b){var c=this._instanceConstructor;f(a)?a.constructor===c&&a._state!==R?(a._onerror=null,this._settledAt(a._state,b,a._result)):this._willSettleAt(c.resolve(a),b):(this._remaining--,this._result[b]=this._makeResult(S,b,a))},E.prototype._settledAt=function(a,b,c){var d=this.promise;d._state===R&&(this._remaining--,this._abortOnReject&&a===T?x(d,c):this._result[b]=this._makeResult(a,b,c)),0===this._remaining&&w(d,this._result)},E.prototype._makeResult=function(a,b,c){return c},E.prototype._willSettleAt=function(a,b){var c=this;y(a,void 0,function(a){c._settledAt(S,b,a)},function(a){c._settledAt(T,b,a)})};var X=function(a,b){return new W(this,a,!0,b).promise},Y=function(a,b){function c(a){u(f,a)}function d(a){x(f,a)}var e=this,f=new e(m,b);if(!K(a))return x(f,new TypeError("You must pass an array to race.")),f;for(var g=a.length,h=0;f._state===R&&g>h;h++)y(e.resolve(a[h]),void 0,c,d);return f},Z=function(a,b){var c=this;if(a&&"object"==typeof a&&a.constructor===c)return a;var d=new c(m,b);return u(d,a),d},$=function(a,b){var c=this,d=new c(m,b);return x(d,a),d},_=0,ab=H;H.all=X,H.race=Y,H.resolve=Z,H.reject=$,H.prototype={constructor:H,then:function(a,b,c){var d=this,e=d._state;if(e===S&&!a||e===T&&!b)return this;d._onerror=null;var f=new this.constructor(m,c),g=d._result;if(e){var h=arguments[e-1];M(function(){C(e,f,h,g)})}else y(d,f,a,b);return f},"catch":function(a,b){return this.then(null,a,b)}};var bb=function(){var a;a="undefined"!=typeof c?c:"undefined"!=typeof window&&window.document?window:self;var b="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}),e(b)}();b||(a.Promise=ab)},cb={Promise:ab,polyfill:bb};"function"==typeof define&&define.amd?define(function(){return cb}):"undefined"!=typeof b&&b.exports?b.exports=cb:"undefined"!=typeof this&&(this.ES6Promise=cb)}).call(this)}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:3}],3:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.MutationObserver,c="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};var d=[];if(b){var e=document.createElement("div"),f=new MutationObserver(function(){var a=d.slice();d.length=0,a.forEach(function(a){a()})});return f.observe(e,{attributes:!0}),function(a){d.length||e.setAttribute("yes","no"),d.push(a)}}return c?(window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),d.length>0)){var c=d.shift();c()}},!0),function(a){d.push(a),window.postMessage("process-tick","*")}):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")}},{}],4:[function(a,b){function c(a,b){return-1!==d(a,b)}var d=a("./indexOf");b.exports=c},{"./indexOf":6}],5:[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},{}],6:[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},{}],7:[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":6}],8:[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},{}],9:[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},{}],10:[function(a,b){function c(a){return!!a&&"object"==typeof a&&a.constructor===Object}b.exports=c},{}],11:[function(a,b){function c(a){return null==a?"":a.toString()}b.exports=c},{}],12:[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":10,"./forOwn":14}],13:[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":15}],14:[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":13,"./hasOwn":15}],15:[function(a,b){function c(a,b){return Object.prototype.hasOwnProperty.call(a,b)}b.exports=c},{}],16:[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":5}],17:[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":8}],18:[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":16}],19:[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":11,"./lowerCase":20,"./removeNonWord":22,"./replaceAccents":23,"./upperCase":24}],20:[function(a,b){function c(a){return a=d(a),a.toLowerCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":11}],21:[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":11,"./camelCase":19,"./upperCase":24}],22:[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":11}],23:[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":11}],24:[function(a,b){function c(a){return a=d(a),a.toUpperCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":11}],25:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];c=c||{},b=b||{};var h;if(g)if(d.isObject(b)){if(c=d._(g,c),c.upsert&&(d.isString(b[g.idAttribute])||d.isNumber(b[g.idAttribute])))return f.update(a,b[g.idAttribute],b,c)}else h=new e.IA('"attrs" must be an object!');else h=new e.NER(a);return new d.Promise(function(a,c){h?c(h):a(b)}).then(function(a){return c.beforeValidate.call(a,c,a)}).then(function(a){return c.validate.call(a,c,a)}).then(function(a){return c.afterValidate.call(a,c,a)}).then(function(a){return c.beforeCreate.call(a,c,a)}).then(function(a){return c.notify&&f.emit(c,"beforeCreate",d.copy(a)),f.getAdapter(c).create(g,a,c)}).then(function(a){return c.afterCreate.call(a,c,a)}).then(function(b){if(c.notify&&f.emit(c,"afterCreate",d.copy(b)),c.cacheResponse){var e=f.inject(g.name,b,c),h=e[g.idAttribute];return f.store[a].completedQueries[h]=(new Date).getTime(),e}return f.createInstance(a,b,c)})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],26:[function(a,b){function c(a,b,c){var f,g=this,h=g.definitions[a];return new d.Promise(function(i,j){b=d.resolveId(h,b),h?d.isString(b)||d.isNumber(b)?(f=g.get(a,b)||{id:b},c=d._(h,c),i(f)):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(a){return c.beforeDestroy.call(a,c,a)}).then(function(e){return c.notify&&g.emit(c,"beforeDestroy",d.copy(e)),c.eagerEject&&g.eject(a,b),g.getAdapter(c).destroy(h,b,c)}).then(function(){return c.afterDestroy.call(f,c,f)}).then(function(e){return c.notify&&g.emit(c,"afterDestroy",d.copy(e)),g.eject(a,b),b})["catch"](function(b){throw c&&c.eagerEject&&f&&g.inject(a,f,{notify:!1}),b})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],27:[function(a,b){function c(a,b,c){var f,g,h=this,i=h.definitions[a];return b=b||{},new d.Promise(function(f,g){i?d.isObject(b)?(c=d._(i,c),f()):g(new e.IA('"params" must be an object!')):g(new e.NER(a))}).then(function(){return g=h.defaults.defaultFilter.call(h,a,b),c.beforeDestroy(c,g)}).then(function(){return c.notify&&h.emit(c,"beforeDestroy",d.copy(g)),c.eagerEject&&(f=h.ejectAll(a,b)),h.getAdapter(c).destroyAll(i,b,c)}).then(function(){return c.afterDestroy(c,g)}).then(function(){return c.notify&&h.emit(c,"afterDestroy",d.copy(g)),f||h.ejectAll(a,b)})["catch"](function(b){throw c&&c.eagerEject&&f&&h.inject(a,f,{notify:!1}),b})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],28:[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){g?d.isString(b)||d.isNumber(b)?(c=d._(g,c),c.params&&(c.params=d.copy(c.params)),(c.bypassCache||!c.cacheResponse)&&delete h.completedQueries[b],b in h.completedQueries?i(f.get(a,b)):i()):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(c).find(g,b,c).then(function(d){return delete h.pendingQueries[b],c.cacheResponse?(h.completedQueries[b]=(new Date).getTime(),f.inject(a,d,c)):f.createInstance(a,d,c)})),h.pendingQueries[b])})["catch"](function(a){throw h&&delete h.pendingQueries[b],a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],29:[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("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,k){b=b||{},h.definitions[a]?e.isObject(b)?(d=e._(i,d),g=e.toJson(b),d.params&&(d.params=e.copy(d.params)),(d.bypassCache||!d.cacheResponse)&&delete j.completedQueries[g],g in j.completedQueries?c(h.filter(a,b,d)):c()):k(new f.IA('"params" must be an object!')):k(new f.NER(a))}).then(function(f){return g in j.completedQueries?f:(g in j.pendingQueries||(j.pendingQueries[g]=h.getAdapter(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 j&&delete j.pendingQueries[g],a})}var e=a("../../utils"),f=a("../../errors");b.exports=d},{"../../errors":46,"../../utils":48}],30:[function(a,b){function c(a,b){var c=this,d=c.definitions[a],f=c.store[a];return new e.Promise(function(g,h){if(d){b=e._(d,b),b.hasOwnProperty("notify")||(b.notify=!1);for(var i,j=[],k=(new Date).getTime();(i=f.expiresHeap.peek())&&i.expires<k;)j.push(i.item),delete i.item,f.expiresHeap.pop();g(j)}else h(new c.errors.NER(a))}).then(function(g){if((b.isInterval||b.notify)&&(d.beforeReap(b,g),c.emit(b,"beforeReap",e.copy(g))),"inject"===b.reapAction)e.forEach(g,function(a){var b=a[d.idAttribute];f.expiresHeap.push({item:a,timestamp:f.saved[b],expires:d.maxAge?f.saved[b]+d.maxAge:Number.MAX_VALUE})});else if("eject"===b.reapAction)e.forEach(g,function(b){c.eject(a,b[d.idAttribute])});else if("refresh"===b.reapAction){var h=[];return e.forEach(g,function(b){h.push(c.refresh(a,b[d.idAttribute]))}),e.Promise.all(h)}return g}).then(function(a){return(b.isInterval||b.notify)&&(d.afterReap(b,a),c.emit(b,"afterReap",e.copy(a))),a})}function d(a,b,c){var d=this;return new e.Promise(function(g,h){var i=d.definitions[a];b=e.resolveId(d.definitions[a],b),i?e.isString(b)||e.isNumber(b)?(c=e._(i,c),c.bypassCache=!0,g(d.get(a,b))):h(new f.IA('"id" must be a string or a number!')):h(new d.errors.NER(a))}).then(function(e){return e?d.find(a,b,c):e})}var e=a("../../utils"),f=a("../../errors");b.exports={create:a("./create"),destroy:a("./destroy"),destroyAll:a("./destroyAll"),find:a("./find"),findAll:a("./findAll"),loadRelations:a("./loadRelations"),reap:c,refresh:d,save:a("./save"),update:a("./update"),updateAll:a("./updateAll")}},{"../../errors":46,"../../utils":48,"./create":25,"./destroy":26,"./destroyAll":27,"./find":28,"./findAll":29,"./loadRelations":31,"./save":32,"./update":33,"./updateAll":34}],31:[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((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)){f=d._(h,f),f.hasOwnProperty("findBelongsTo")||(f.findBelongsTo=!0),f.hasOwnProperty("findHasMany")||(f.findHasMany=!0);var l=[];d.forEach(h.relationList,function(a){var e=a.relation;if(d.contains(c,e)){var j,k={};f.allowSimpleWhere?k[a.foreignKey]=b[h.idAttribute]:(k.where={},k.where[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('"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":46,"../../utils":48}],32:[function(a,b){function c(a,b,c){var f,g=this,h=g.definitions[a];return new d.Promise(function(i,j){b=d.resolveId(h,b),h?d.isString(b)||d.isNumber(b)?g.get(a,b)?(f=g.get(a,b),c=d._(h,c),i(f)):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(a){return c.beforeValidate.call(a,c,a)}).then(function(a){return c.validate.call(a,c,a)}).then(function(a){return c.afterValidate.call(a,c,a)}).then(function(a){return c.beforeUpdate.call(a,c,a)}).then(function(e){if(c.notify&&g.emit(c,"beforeUpdate",d.copy(e)),c.changesOnly){var f=g.store[a];d.w&&f.observers[b].deliver();var i=[],j=g.changes(a,b);for(var k in j.added)i.push(k);for(k in j.changed)i.push(k);if(j=d.pick(e,i),d.isEmpty(j))return e;e=j}return g.getAdapter(c).update(h,b,e,c)}).then(function(a){return c.afterUpdate.call(a,c,a)}).then(function(a){return c.notify&&g.emit(c,"afterUpdate",d.copy(a)),c.cacheResponse?g.inject(h.name,a,c):a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],33:[function(a,b){function c(a,b,c,f){var g=this,h=g.definitions[a];return new d.Promise(function(g,i){b=d.resolveId(h,b),h?d.isString(b)||d.isNumber(b)?(f=d._(h,f),g(c)):i(new e.IA('"id" must be a string or a number!')):i(new e.NER(a))}).then(function(a){return f.beforeValidate.call(a,f,a)}).then(function(a){return f.validate.call(a,f,a)}).then(function(a){return f.afterValidate.call(a,f,a)}).then(function(a){return f.beforeUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"beforeUpdate",d.copy(a)),g.getAdapter(f).update(h,b,a,f)}).then(function(a){return f.afterUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"afterUpdate",d.copy(a)),f.cacheResponse?g.inject(h.name,a,f):a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],34:[function(a,b){function c(a,b,c,f){var g=this,h=g.definitions[a];return new d.Promise(function(c,g){h?(f=d._(h,f),c(b)):g(new e.NER(a))}).then(function(a){return f.beforeValidate.call(a,f,a)}).then(function(a){return f.validate.call(a,f,a)}).then(function(a){return f.afterValidate.call(a,f,a)}).then(function(a){return f.beforeUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"beforeUpdate",d.copy(a)),g.getAdapter(f).updateAll(h,a,c,f)}).then(function(a){return f.afterUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"afterUpdate",d.copy(b)),f.cacheResponse?g.inject(h.name,a,f):a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],35:[function(a,b){function c(a,b,c){c(null,b)}function d(a,b){return b}function e(a,b,c,d){var f=a[b],g=c[f[0]],h=d[f[0]];return i.isString(g)&&(g=i.upperCase(g)),i.isString(h)&&(h=i.upperCase(h)),"DESC"===f[1]?g>h?-1:h>g?1:b<a.length-1?e(a,b+1,c,d):0:h>g?-1:g>h?1:b<a.length-1?e(a,b+1,c,d):0}function f(){}function g(b){b=b||{};try{h=a("js-data-schema")}catch(c){}if(!h)try{h=window.Schemator}catch(c){}(h||b.schemator)&&(this.schemator=b.schemator||new h),this.store={},this.definitions={},this.adapters={},this.defaults=new f,this.observe=i.observe,i.deepMixIn(this.defaults,b)}var h,i=a("../utils"),j=(a("../errors"),a("./sync_methods")),k=a("./async_methods"),l=f.prototype;l.idAttribute="id",l.basePath="",l.endpoint="",l.useClass=!0,l.keepChangeHistory=!1,l.resetHistoryOnInject=!0,l.eagerEject=!1,l.eagerInject=!1,l.allowSimpleWhere=!0,l.defaultAdapter="http",l.loadFromServer=!1,l.notify=!!i.w,l.upsert=!!i.w,l.cacheResponse=!!i.w,l.bypassCache=!1,l.ignoreMissing=!1,l.findInverseLinks=!0,l.findBelongsTo=!0,l.findHasOne=!0,l.findHasMany=!0,l.reapInterval=i.w?3e4:!1,l.reapAction=i.w?"inject":"none",l.maxAge=!1,l.ignoredChanges=[/\$/],l.beforeValidate=c,l.validate=c,l.afterValidate=c,l.beforeCreate=c,l.afterCreate=c,l.beforeUpdate=c,l.afterUpdate=c,l.beforeDestroy=c,l.afterDestroy=c,l.beforeCreateInstance=d,l.afterCreateInstance=d,l.beforeInject=d,l.afterInject=d,l.beforeEject=d,l.afterEject=d,l.beforeReap=d,l.afterReap=d,l.defaultFilter=function(a,b,c,d){var f=this,g=a,h=null,j={skip:"",offset:"",where:"",limit:"",orderBy:"",sort:""};c=c||{},d=d||{},h=i.isObject(c.where)?c.where:{},d.allowSimpleWhere&&i.forOwn(c,function(a,b){b in j||b in h||(h[b]={"==":a})}),i.isEmpty(h)&&(h=null),h&&(g=i.filter(g,function(a){var b=!0,c=!0;return i.forOwn(h,function(d,e){i.isString(d)?d={"===":d}:(i.isNumber(d)||i.isBoolean(d))&&(d={"==":d}),i.isObject(d)&&i.forOwn(d,function(d,f){var g,h="|"===f[0],j=a[e];f=h?f.substr(1):f,"=="===f?g=j==d:"==="===f?g=j===d:"!="===f?g=j!=d:"!=="===f?g=j!==d:">"===f?g=j>d:">="===f?g=j>=d:"<"===f?g=d>j:"<="===f?g=d>=j:"isectEmpty"===f?g=!i.intersection(j||[],d||[]).length:"isectNotEmpty"===f?g=i.intersection(j||[],d||[]).length:"in"===f?g=i.isString(d)?-1!==d.indexOf(j):i.contains(d,j):"notIn"===f&&(g=i.isString(d)?-1===d.indexOf(j):!i.contains(d,j)),void 0!==g&&(c=b?g:h?c||g:c&&g),b=!1
})}),c}));var k=null;if(i.isString(c.orderBy)?k=[[c.orderBy,"ASC"]]:i.isArray(c.orderBy)&&(k=c.orderBy),!k&&i.isString(c.sort)?k=[[c.sort,"ASC"]]:!k&&i.isArray(c.sort)&&(k=c.sort),k){var l=0;i.forEach(k,function(a,b){if(i.isString(a))k[b]=[a,"ASC"];else if(!i.isArray(a))throw new f.errors.IllegalArgumentError("DS.filter(resourceName[, params][, options]): "+i.toJson(a)+": Must be a string or an array!",{params:{"orderBy[i]":{actual:typeof a,expected:"string|array"}}})}),g=i.sort(g,function(a,b){return e(k,l,a,b)})}var m=i.isNumber(c.limit)?c.limit:null,n=null;return i.isNumber(c.skip)?n=c.skip:i.isNumber(c.offset)&&(n=c.offset),m&&n?g=i.slice(g,n,Math.min(g.length,n+m)):i.isNumber(m)?g=i.slice(g,0,Math.min(g.length,m)):i.isNumber(n)&&(g=n<g.length?i.slice(g,n):[]),g};var m=g.prototype;m.getAdapter=function(a){return a=a||{},this.adapters[a.adapter]||this.adapters[a.defaultAdapter]},m.registerAdapter=function(a,b,c){c=c||{},this.adapters[a]=i.isFunction(b)?new b(c):b,c.default&&(this.defaults.defaultAdapter=a)},m.emit=function(a,b){var c=Array.prototype.slice.call(arguments,2);c.unshift(a.name),c.unshift("DS."+b),a.emit.apply(a,c)},m.errors=a("../errors"),m.utils=i,i.deepMixIn(m,j),i.deepMixIn(m,k),b.exports=g},{"../errors":46,"../utils":48,"./async_methods":30,"./sync_methods":40,"js-data-schema":"js-data-schema"}],36:[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!');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,def.parentField=a.localField)})}),"function"==typeof Object.freeze&&(Object.freeze(def.relations),Object.freeze(def.relationList))),def.getEndpoint=function(a,b){b.params=b.params||{};var c,d=def.parentKey,e=b.hasOwnProperty("endpoint")?b.endpoint:def.endpoint,f=def.parentField,g=definitions[def.parent],h=b.params[d];if(h!==!1&&d&&g){if(delete b.params[d],DSUtils.isNumber(a)||DSUtils.isString(a)?c=def.get(a):DSUtils.isObject(a)&&(c=a),c&&(h=h||c[d]||(c[f]?c[f][g.idAttribute]:null)),h){delete b.endpoint;var i={};DSUtils.forOwn(b,function(a,b){i[b]=a});var j=DSUtils.makePath(g.getEndpoint(h,DSUtils._(g,i)),h,e);return j}return e}return h===!1&&delete b.params[d],e},def.filter&&(def.defaultFilter=def.filter,delete def.filter),def["class"]=DSUtils.pascalCase(definition.name);try{eval("function "+def["class"]+"() {}"),def[def["class"]]=eval(def["class"])}catch(e){def[def["class"]]=function(){}}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})}),definition.schema&&_this.schemator&&(def.schema=_this.schemator.defineSchema(def.name,definition.schema),definition.hasOwnProperty("validate")||(def.validate=function(a,b,c){def.schema.validate(b,{ignoreMissing:def.ignoreMissing},function(a){return a?c(a):c(null,b)})})),DSUtils.forEach(instanceMethods,function(a){def[def["class"]].prototype["DS"+DSUtils.pascalCase(a)]=function(){var b=Array.prototype.slice.call(arguments);return b.unshift(this[def.idAttribute]||this),b.unshift(def.name),_this[a].apply(_this,b)}}),def[def["class"]].prototype.DSCreate=function(){var a=Array.prototype.slice.call(arguments);return a.unshift(this),a.unshift(def.name),_this.create.apply(_this,a)},_this.store[def.name]={collection:[],expiresHeap:new DSUtils.DSBinaryHeap(function(a){return a.expires},function(a,b){return a.item===b}),completedQueries:{},pendingQueries:{},index:{},modified:{},saved:{},previousAttributes:{},observers:{},changeHistories:{},changeHistory:[],collectionModified:0},def.reapInterval&&setInterval(function(){_this.reap(def.name,{isInterval:!0})},def.reapInterval);for(var key in _this)"function"==typeof _this[key]&&"defineResource"!==key&&!function(a){def[a]=function(){var b=Array.prototype.slice.call(arguments);return b.unshift(def.name),_this[a].apply(_this,b)}}(key);return 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 delete definitions[definition.name],delete _this.store[definition.name],err}}var DSUtils=require("../../utils"),DSErrors=require("../../errors"),instanceMethods=["compute","refresh","save","update","destroy","loadRelations","changeHistory","changes","hasChanges","lastModified","lastSaved","link","linkInverse","previous","unlinkInverse"];module.exports=defineResource},{"../../errors":46,"../../utils":48}],37:[function(a,b){function c(a,b,c){var f,g=this,h=g.definitions[a],i=g.store[a],j=!1;if(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!');c=d._(h,c);for(var k=0;k<i.collection.length;k++)if(i.collection[k][h.idAttribute]==b){f=i.collection[k],i.expiresHeap.remove(f),j=!0;break}return j?(c.notify&&(h.beforeEject(c,f),g.emit(c,"beforeEject",d.copy(f))),g.unlinkInverse(h.name,b),i.collection.splice(k,1),d.w&&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(c,f),g.emit(c,"afterEject",d.copy(f))),f):void 0}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],38:[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=[];return d.forEach(j,function(a){a&&a[g.idAttribute]&&k.push(a[g.idAttribute])}),d.forEach(k,function(a){f.eject(g.name,a,c)}),delete h.completedQueries[i],h.collectionModified=d.updateTimestamp(h.collectionModified),j}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],39:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a],h=f.store[a];if(!g)throw new e.NER(a);if(b&&!d.isObject(b))throw new e.IA('"params" must be an object!');c=d._(g,c),b=b||{};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":46,"../../utils":48}],40:[function(a,b){function c(a,b,c){var d=this,e=d.definitions[a];if(c=c||{},b=o.resolveId(e,b),!e)throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');c=o._(e,c);var f=d.get(a,b);if(f){o.w&&d.store[a].observers[b].deliver();var g=o.diffObjectFromOldObject(f,d.store[a].previousAttributes[b],o.equals,c.ignoredChanges);return o.forOwn(g,function(a,b){var c=[];o.forOwn(a,function(a,b){o.isFunction(a)||c.push(b)}),g[b]=o.pick(g[b],c)}),o.forEach(e.relationFields,function(a){delete g.added[a],delete g.removed[a],delete g.changed[a]}),g}}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 q(a);if(b&&!o.isString(b)&&!o.isNumber(b))throw new r('"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){var c=this,d=c.definitions[a];if(b=o.resolveItem(c.store[a],b),!d)throw new q(a);if(!o.isObject(b)&&!o.isString(b)&&!o.isNumber(b))throw new r('"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)}),b}function f(a,b,c){var d,e=this.definitions[a];if(b=b||{},!e)throw new q(a);if(b&&!o.isObject(b))throw new r('"attrs" must be an object!');if(c=o._(e,c),c.notify&&c.beforeCreateInstance(c,b),c.useClass){var f=e[e.class];d=new f}else d={};return o.deepMixIn(d,b),c.notify&&c.afterCreateInstance(c,b),d}function g(a){return!(o.isEmpty(a.added)&&o.isEmpty(a.removed)&&o.isEmpty(a.changed))}function h(){this.observe.Platform.performMicrotaskCheckpoint()}function i(a,b,c){var d=this,e=d.definitions[a];if(!e)throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');c=o._(e,c);var f=d.store[a].index[b];return!f&&c.loadFromServer&&d.find(a,b,c),f}function j(a,b){var c=this,d=c.store[a],e=[];if(!c.definitions[a])throw new q(a);if(b&&!o.isArray(b))throw new r('"ids" must be an array!');if(o.isArray(b))for(var f=b.length,g=0;f>g;g++)d.index[b[g]]&&e.push(d.index[b[g]]);else e=d.collection.slice();return e}function k(a,b){var c=this;if(b=o.resolveId(c.definitions[a],b),!c.definitions[a])throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');return c.get(a,b)?g(c.changes(a,b)):!1}function l(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new q(a);return b?(b in d.modified||(d.modified[b]=0),d.modified[b]):d.collectionModified}function m(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new q(a);return b in d.saved||(d.saved[b]=0),d.saved[b]}function n(a,b){var c=this,d=c.definitions[a],e=c.store[a];if(b=o.resolveId(d,b),!d)throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');return e.previousAttributes[b]?o.copy(e.previousAttributes[b]):void 0}var o=a("../../utils"),p=a("../../errors"),q=p.NER,r=p.IA;b.exports={changes:c,changeHistory:d,compute:e,createInstance:f,defineResource:a("./defineResource"),digest:h,eject:a("./eject"),ejectAll:a("./ejectAll"),filter:a("./filter"),get:i,getAll:j,hasChanges:k,inject:a("./inject"),lastModified:l,lastSaved:m,link:a("./link"),linkAll:a("./linkAll"),linkInverse:a("./linkInverse"),previous:n,unlinkInverse:a("./unlinkInverse")}},{"../../errors":46,"../../utils":48,"./defineResource":36,"./eject":37,"./ejectAll":38,"./filter":39,"./inject":41,"./link":42,"./linkAll":43,"./linkInverse":44,"./unlinkInverse":45}],41:[function(a,b){function c(a,b,c){var d=b.name;return function(e,f,h,i,j){var k,l=this,m=i&&i(b.idAttribute)?i(b.idAttribute):l[b.idAttribute];if(g.forEach(b.relationFields,function(a){delete e[a],delete f[a],delete h[a]}),(!g.isEmpty(e)||!g.isEmpty(f)||!g.isEmpty(h)||j)&&(k=a.get(d,m),c.modified[m]=g.updateTimestamp(c.modified[m]),c.collectionModified=g.updateTimestamp(c.collectionModified),b.keepChangeHistory)){var n={resourceName:d,target:k,added:e,removed:f,changed:h,timestamp:c.modified[m]};c.changeHistories[m].push(n),c.changeHistory.push(n)}b.computed&&(k=k||a.get(d,m),g.forOwn(b.computed,function(a,b){var c=!1;g.forEach(a.deps,function(a){(a in e||a in f||a in h||!(b in k))&&(c=!0)}),c=c||!a.deps.length,c&&g.compute.call(k,a,b)})),b.relations&&(k=k||a.get(d,m),g.forEach(b.relationList,function(c){k[c.localField]&&(c.localKey in e||c.localKey in f||c.localKey in h)&&a.link(d,k[b.idAttribute],[c.relation])})),b.idAttribute in h&&console.error("Doh! You just changed the primary key of an object! Your data for the"+d+'" resource is now in an undefined (probably broken) state.')}}function d(a,b,e,f){var i,j=this,k=c(j,a,b,e,f);if(g.isArray(e)){i=[];for(var l=0;l<e.length;l++)i.push(d.call(j,a,b,e[l],f))}else{var m=a.computed,n=a.idAttribute;if(m&&m[n]){var o=[];g.forEach(m[n].deps,function(a){o.push(e[a])}),e[n]=m[n][m[n].length-1].apply(e,o)}if(!(n in e)){var p=new h.R(a.name+'.inject: "attrs" must contain the property specified by `idAttribute`!');throw console.error(p),p}try{g.forEach(a.relationList,function(b){var c=b.relation,d=j.definitions[c],i=e[b.localField];if(i){if(!d)throw new h.R(a.name+" relation is defined but the resource is not!");if(g.isArray(i)){var k=[];g.forEach(i,function(g){if(g!==j.store[c][g[d.idAttribute]])try{var h=j.inject(c,g,f);b.foreignKey&&(h[b.foreignKey]=e[a.idAttribute]),k.push(h)}catch(i){console.error(a.name+": Failed to inject "+b.type+' relation: "'+c+'"!',i)}}),e[b.localField]=k}else if(i!==j.store[c][i[d.idAttribute]])try{e[b.localField]=j.inject(c,e[b.localField],f),b.foreignKey&&(e[b.localField][b.foreignKey]=e[a.idAttribute])}catch(l){console.error(a.name+": Failed to inject "+b.type+' relation: "'+c+'"!',l)}}});var q=e[n],r=j.get(a.name,q),s=r?b.modified[q]:0;r?(g.deepMixIn(r,e),a.resetHistoryOnInject&&(b.previousAttributes[q]={},g.deepMixIn(b.previousAttributes[q],e),b.changeHistories[q].length&&(g.forEach(b.changeHistories[q],function(a){g.remove(b.changeHistory,a)}),b.changeHistories[q].splice(0,b.changeHistories[q].length))),g.w&&b.observers[q].deliver()):(r=f.useClass?e instanceof a[a["class"]]?e:new a[a["class"]]:{},b.previousAttributes[q]=g.copy(e),g.deepMixIn(r,e),b.collection.push(r),b.changeHistories[q]=[],g.w&&(b.observers[q]=new j.observe.ObjectObserver(r),b.observers[q].open(k,r)),b.index[q]=r,k.call(r,{},{},{},null,!0)),b.saved[q]=g.updateTimestamp(b.saved[q]),b.modified[q]=s&&b.modified[q]===s?g.updateTimestamp(b.modified[q]):b.modified[q],b.expiresHeap.remove(r),b.expiresHeap.push({item:r,timestamp:b.saved[q],expires:a.maxAge?b.saved[q]+a.maxAge:Number.MAX_VALUE}),i=r}catch(t){console.error(t.stack),console.error("inject failed!",a.name,e)}}return i}function e(a,b,c){var d=this;g.forEach(a.relationList,function(e){c.findBelongsTo&&"belongsTo"===e.type&&b[a.idAttribute]?d.link(a.name,b[a.idAttribute],[e.relation]):(c.findHasMany&&"hasMany"===e.type||c.findHasOne&&"hasOne"===e.type)&&d.link(a.name,b[a.idAttribute],[e.relation])})}function f(a,b,c){var f,i=this,j=i.definitions[a],k=i.store[a];if(!j)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!');var l=j.name;return c=g._(j,c),c.notify&&(c.beforeInject(c,b),i.emit(c,"beforeInject",g.copy(b))),f=d.call(i,j,k,b,c),k.collectionModified=g.updateTimestamp(k.collectionModified),c.findInverseLinks&&(g.isArray(f)?f.length&&i.linkInverse(l,f[0][j.idAttribute]):i.linkInverse(l,f[j.idAttribute])),g.isArray(f)?g.forEach(f,function(a){e.call(i,j,a,c)}):e.call(i,j,f,c),c.notify&&(c.afterInject(c,f),i.emit(c,"afterInject",g.copy(f))),f}var g=a("../../utils"),h=a("../../errors");b.exports=f},{"../../errors":46,"../../utils":48}],42:[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":46,"../../utils":48}],43:[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":46,"../../utils":48}],44:[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":46,"../../utils":48}],45:[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":46,"../../utils":48}],46:[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=new Error,c.prototype.constructor=c,d.prototype=new Error,d.prototype.constructor=d,e.prototype=new Error,e.prototype.constructor=e,b.exports={IllegalArgumentError:c,IA:c,RuntimeError:d,R:d,NonexistentResourceError:e,NER:e}},{}],47:[function(a,b){var c=a("./datastore");b.exports={DS:c,createStore:function(a){return new c(a)},DSUtils:a("./utils"),DSErrors:a("./errors")}},{"./datastore":35,"./errors":46,"./utils":48}],48:[function(a,b){function c(a){return"[object RegExp]"==C.call(a)||!1}function d(a){return a===!0||a===!1||a&&"object"==typeof a&&"[object Boolean]"==C.call(a)||!1}function e(a){return"string"==typeof a||a&&"object"==typeof a&&"[object String]"==C.call(a)||!1}function f(a){return"[object Object]"==C.call(a)||!1}function g(a){return a&&"object"==typeof a&&"[object Date]"==C.call(a)||!1}function h(a){var b=typeof a;return"number"==b||a&&"object"==b&&"[object Number]"==C.call(a)||!1}function i(a){return"function"==typeof a||a&&"[object Function]"===C.call(a)||!1}function j(a){if(null==a)return!0;if("string"==typeof a||J(a))return!a.length;if("object"==typeof a){var b=!0;return G(a,function(){return b=!1,!1}),b}return!0}function k(a,b){if(!a||!b)return[];for(var c,d=[],e=0,f=a.length;f>e;e++)c=a[e],N.contains(d,c)||N.contains(b,c)&&d.push(c);return d}function l(a,b,c){var d=[];return E(a,function(a,c,e){b(a,c,e)&&d.push(a)},c),d}function m(a){var b=this.constructor;return this.then(function(c){return b.resolve(a()).then(function(){return c})},function(c){return b.resolve(a()).then(function(){throw c})})}function n(a){var b="function"==typeof Date.now?Date.now():(new Date).getTime();return a&&a>=b?a+1:b}function o(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)}}function p(a,b,c){for(var d=a[c],e=b(d);c>0;){var f=Math.floor((c+1)/2)-1,g=a[f];if(e>=b(g))break;a[f]=d,a[c]=g,c=f}}function q(a,b,c){for(var d=a.length,e=a[c],f=b(e);;){var g=2*(c+1),h=g-1,i=null;if(d>h){var j=a[h],k=b(j);f>k&&(i=h)}if(d>g){var l=a[g],m=b(l);m<(null===i?f:b(a[h]))&&(i=g)}if(null===i)break;a[c]=a[i],a[i]=e,c=i}}function r(a,b){if(a&&!i(a))throw new Error("DSBinaryHeap(weightFunc): weightFunc: must be a function!");a=a||function(a){return a},b=b||function(a,b){return a===b},this.weightFunc=a,this.compareFunc=b,this.heap=[]}function s(a,b,d,e){if(b){if(a===b)throw new Error("Cannot copy! Source and destination are identical.");if(d=d||[],e=e||[],f(a)){var h=d.indexOf(a);if(-1!==h)return e[h];d.push(a),e.push(b)}var i;if(J(a)){b.length=0;for(var j=0;j<a.length;j++)i=s(a[j],null,d,e),f(a[j])&&(d.push(a[j]),e.push(i)),b.push(i)}else{J(b)?b.length=0:E(b,function(a,c){delete b[c]});for(var k in a)a.hasOwnProperty(k)&&(i=s(a[k],null,d,e),f(a[k])&&(d.push(a[k]),e.push(i)),b[k]=i)}}else if(b=a,a)if(J(a))b=s(a,[],d,e);else if(g(a))b=new Date(a.getTime());else if(c(a))b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex;else if(f(a)){var l=Object.create(Object.getPrototypeOf(a));b=s(a,l,d,e)}return b}function t(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d,e,f,h=typeof a,j=typeof b;if(h==j&&"object"==h){if(!J(a)){if(g(a))return g(b)?t(a.getTime(),b.getTime()):!1;if(c(a)&&c(b))return a.toString()==b.toString();if(J(b))return!1;f={};for(e in a)if("$"!==e.charAt(0)&&!i(a[e])){if(!t(a[e],b[e]))return!1;f[e]=!0}for(e in b)if(!f.hasOwnProperty(e)&&"$"!==e.charAt(0)&&void 0!==b[e]&&!i(b[e]))return!1;return!0}if(!J(b))return!1;if((d=a.length)==b.length){for(e=0;d>e;e++)if(!t(a[e],b[e]))return!1;return!0}}return!1}function u(a,b){return this.isString(b)||h(b)?b:b&&a?b[a.idAttribute]||b:b}function v(a,b){return a&&(e(b)||h(b))?a.index[b]||b:b}function w(a){return null!=a&&""!==a}function x(a,b){return b=b||"",l(a,w).join(b)}function y(){var a=x(F(arguments),"/");return a.replace(/([^:\/]|^)\/{2,}/g,"$1/")}var z,A,B=Object.prototype,C=B.toString,D=a("./errors"),E=a("mout/array/forEach"),F=a("mout/array/slice"),G=a("mout/object/forOwn"),H=a("../lib/observe-js/observe-js"),I=a("es6-promise");I.polyfill();var J=Array.isArray||function(a){return"[object Array]"==C.call(a)||!1};try{z=window,z.Promise.prototype["finally"]||(z.Promise.prototype["finally"]=m),A=z.Promise,z={}}catch(K){z=null,A=a("bluebird")}var L=r.prototype;L.push=function(a){this.heap.push(a),p(this.heap,this.weightFunc,this.heap.length-1)},L.peek=function(){return this.heap[0]},L.pop=function(){var a=this.heap[0],b=this.heap.pop();return this.heap.length>0&&(this.heap[0]=b,q(this.heap,this.weightFunc,0)),a},L.remove=function(a){for(var b=this.heap.length,c=0;b>c;c++)if(this.compareFunc(this.heap[c],a)){var d=this.heap[c],e=this.heap.pop();return c!==b-1&&(this.heap[c]=e,p(this.heap,this.weightFunc,c),q(this.heap,this.weightFunc,c)),d}return null},L.removeAll=function(){this.heap=[]},L.size=function(){return this.heap.length};var M=["beforeValidate","validate","afterValidate","beforeCreate","afterCreate","beforeUpdate","afterUpdate","beforeDestroy","afterDestroy"];H.setEqualityFn(t);var N={_:function(a,b){var c=this;if(b=b||{},b&&b.constructor===a.constructor)return b;if(!f(b))throw new D.IA('"options" must be an object!');E(M,function(a){"function"==typeof b[a]&&-1===b[a].toString().indexOf("var args = Array")&&(b[a]=c.promisify(b[a]))});var d=function(a){var b=this;G(a,function(a,c){b[c]=a})};return d.prototype=a,new d(b)},compute:function(a,b){var c=this,d=[];E(a.deps,function(a){d.push(c[a])}),c[b]=a[a.length-1].apply(c,d)},contains:a("mout/array/contains"),copy:s,deepMixIn:a("mout/object/deepMixIn"),diffObjectFromOldObject:H.diffObjectFromOldObject,DSBinaryHeap:r,equals:t,Events:o,filter:l,forEach:E,forOwn:G,fromJson:function(a){return e(a)?JSON.parse(a):a},intersection:k,isArray:J,isBoolean:d,isDate:g,isEmpty:j,isFunction:i,isObject:f,isNumber:h,isRegExp:c,isString:e,makePath:y,observe:H,pascalCase:a("mout/string/pascalCase"),pick:a("mout/object/pick"),Promise:A,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)}})}}},remove:a("mout/array/remove"),set:a("mout/object/set"),slice:F,sort:a("mout/array/sort"),toJson:JSON.stringify,updateTimestamp:n,upperCase:a("mout/string/upperCase"),resolveItem:v,resolveId:u,w:z};b.exports=N},{"../lib/observe-js/observe-js":1,"./errors":46,bluebird:"bluebird","es6-promise":2,"mout/array/contains":4,"mout/array/forEach":5,"mout/array/remove":7,"mout/array/slice":8,"mout/array/sort":9,"mout/object/deepMixIn":12,"mout/object/forOwn":14,"mout/object/pick":17,"mout/object/set":18,"mout/string/pascalCase":21,"mout/string/upperCase":24}]},{},[47])(47)});
!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 isBlacklisted(a,b){if(!b||!b.length)return!1;for(var c,d=0;d<b.length;d++)if("[object RegExp]"===Object.prototype.toString.call(b[d])&&b[d].test(a)||b[d]===a)return c=a;return!!c}function diffObjectFromOldObject(a,b,c,d){var e={},f={},g={};for(var h in b){var i=a[h];isBlacklisted(h,d)||void 0!==i&&(c?c(i,b[h]):i===b[h])||(h in a?(c?c(i,b[h]):i===b[h])||(g[h]=i):f[h]=void 0)}for(var h in a)h in b||isBlacklisted(h,d)||(e[h]=a[h]);return Array.isArray(a)&&a.length!==b.length&&(g.length=a.length),{added:e,removed:f,changed:g}}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 equalityFn=function(a,b){return a===b},blacklist=[],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_,equalityFn,blacklist);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.diffObjectFromOldObject=diffObjectFromOldObject,global.setEqualityFn=function(a){equalityFn=a},global.setBlacklist=function(a){blacklist=a},global.Observer.runEOM_=runEOM,global.Observer.observerSentinel_=observerSentinel,global.Observer.hasObjectObserve=hasObserve,global.ObjectObserver=ObjectObserver}(exports)},{}],2:[function(a,b){(function(a,c){(function(){"use strict";function d(a){return"function"==typeof a||"object"==typeof a&&null!==a}function e(a){return"function"==typeof a}function f(a){return"object"==typeof a&&null!==a}function g(){}function h(){return function(){a.nextTick(l)}}function i(){var a=0,b=new O(l),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function j(){var a=new MessageChannel;return a.port1.onmessage=l,function(){a.port2.postMessage(0)}}function k(){return function(){setTimeout(l,1)}}function l(){for(var a=0;L>a;a+=2){var b=Q[a],c=Q[a+1];b(c),Q[a]=void 0,Q[a+1]=void 0}L=0}function m(){}function n(){return new TypeError("You cannot resolve a promise with itself")}function o(){return new TypeError("A promises callback cannot return that same promise.")}function p(a){try{return a.then}catch(b){return U.error=b,U}}function q(a,b,c,d){try{a.call(b,c,d)}catch(e){return e}}function r(a,b,c){M(function(a){var d=!1,e=q(c,b,function(c){d||(d=!0,b!==c?u(a,c):w(a,c))},function(b){d||(d=!0,x(a,b))},"Settle: "+(a._label||" unknown promise"));!d&&e&&(d=!0,x(a,e))},a)}function s(a,b){b._state===S?w(a,b._result):a._state===T?x(a,b._result):y(b,void 0,function(b){u(a,b)},function(b){x(a,b)})}function t(a,b){if(b.constructor===a.constructor)s(a,b);else{var c=p(b);c===U?x(a,U.error):void 0===c?w(a,b):e(c)?r(a,b,c):w(a,b)}}function u(a,b){a===b?x(a,n()):d(b)?t(a,b):w(a,b)}function v(a){a._onerror&&a._onerror(a._result),z(a)}function w(a,b){a._state===R&&(a._result=b,a._state=S,0===a._subscribers.length||M(z,a))}function x(a,b){a._state===R&&(a._state=T,a._result=b,M(v,a))}function y(a,b,c,d){var e=a._subscribers,f=e.length;a._onerror=null,e[f]=b,e[f+S]=c,e[f+T]=d,0===f&&a._state&&M(z,a)}function z(a){var b=a._subscribers,c=a._state;if(0!==b.length){for(var d,e,f=a._result,g=0;g<b.length;g+=3)d=b[g],e=b[g+c],d?C(c,d,e,f):e(f);a._subscribers.length=0}}function A(){this.error=null}function B(a,b){try{return a(b)}catch(c){return V.error=c,V}}function C(a,b,c,d){var f,g,h,i,j=e(c);if(j){if(f=B(c,d),f===V?(i=!0,g=f.error,f=null):h=!0,b===f)return void x(b,o())}else f=d,h=!0;b._state!==R||(j&&h?u(b,f):i?x(b,g):a===S?w(b,f):a===T&&x(b,f))}function D(a,b){try{b(function(b){u(a,b)},function(b){x(a,b)})}catch(c){x(a,c)}}function E(a,b,c,d){this._instanceConstructor=a,this.promise=new a(m,d),this._abortOnReject=c,this._validateInput(b)?(this._input=b,this.length=b.length,this._remaining=b.length,this._init(),0===this.length?w(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&w(this.promise,this._result))):x(this.promise,this._validationError())}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function G(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function H(a){this._id=_++,this._state=void 0,this._result=void 0,this._subscribers=[],m!==a&&(e(a)||F(),this instanceof H||G(),D(this,a))}var I;I=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};var J,K=I,L=(Date.now||function(){return(new Date).getTime()},Object.create||function(a){if(arguments.length>1)throw new Error("Second argument not supported");if("object"!=typeof a)throw new TypeError("Argument must be an object");return g.prototype=a,new g},0),M=function(a,b){Q[L]=a,Q[L+1]=b,L+=2,2===L&&J()},N="undefined"!=typeof window?window:{},O=N.MutationObserver||N.WebKitMutationObserver,P="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,Q=new Array(1e3);J="undefined"!=typeof a&&"[object process]"==={}.toString.call(a)?h():O?i():P?j():k();var R=void 0,S=1,T=2,U=new A,V=new A;E.prototype._validateInput=function(a){return K(a)},E.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},E.prototype._init=function(){this._result=new Array(this.length)};var W=E;E.prototype._enumerate=function(){for(var a=this.length,b=this.promise,c=this._input,d=0;b._state===R&&a>d;d++)this._eachEntry(c[d],d)},E.prototype._eachEntry=function(a,b){var c=this._instanceConstructor;f(a)?a.constructor===c&&a._state!==R?(a._onerror=null,this._settledAt(a._state,b,a._result)):this._willSettleAt(c.resolve(a),b):(this._remaining--,this._result[b]=this._makeResult(S,b,a))},E.prototype._settledAt=function(a,b,c){var d=this.promise;d._state===R&&(this._remaining--,this._abortOnReject&&a===T?x(d,c):this._result[b]=this._makeResult(a,b,c)),0===this._remaining&&w(d,this._result)},E.prototype._makeResult=function(a,b,c){return c},E.prototype._willSettleAt=function(a,b){var c=this;y(a,void 0,function(a){c._settledAt(S,b,a)},function(a){c._settledAt(T,b,a)})};var X=function(a,b){return new W(this,a,!0,b).promise},Y=function(a,b){function c(a){u(f,a)}function d(a){x(f,a)}var e=this,f=new e(m,b);if(!K(a))return x(f,new TypeError("You must pass an array to race.")),f;for(var g=a.length,h=0;f._state===R&&g>h;h++)y(e.resolve(a[h]),void 0,c,d);return f},Z=function(a,b){var c=this;if(a&&"object"==typeof a&&a.constructor===c)return a;var d=new c(m,b);return u(d,a),d},$=function(a,b){var c=this,d=new c(m,b);return x(d,a),d},_=0,ab=H;H.all=X,H.race=Y,H.resolve=Z,H.reject=$,H.prototype={constructor:H,then:function(a,b){var c=this,d=c._state;if(d===S&&!a||d===T&&!b)return this;var e=new this.constructor(m),f=c._result;if(d){var g=arguments[d-1];M(function(){C(d,e,g,f)})}else y(c,e,a,b);return e},"catch":function(a){return this.then(null,a)}};var bb=function(){var a;a="undefined"!=typeof c?c:"undefined"!=typeof window&&window.document?window:self;var b="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}),e(b)}();b||(a.Promise=ab)},cb={Promise:ab,polyfill:bb};"function"==typeof define&&define.amd?define(function(){return cb}):"undefined"!=typeof b&&b.exports?b.exports=cb:"undefined"!=typeof this&&(this.ES6Promise=cb)}).call(this)}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:3}],3:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.MutationObserver,c="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};var d=[];if(b){var e=document.createElement("div"),f=new MutationObserver(function(){var a=d.slice();d.length=0,a.forEach(function(a){a()})});return f.observe(e,{attributes:!0}),function(a){d.length||e.setAttribute("yes","no"),d.push(a)}}return c?(window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),d.length>0)){var c=d.shift();c()}},!0),function(a){d.push(a),window.postMessage("process-tick","*")}):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")}},{}],4:[function(a,b){function c(a,b){return-1!==d(a,b)}var d=a("./indexOf");b.exports=c},{"./indexOf":6}],5:[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},{}],6:[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},{}],7:[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":6}],8:[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},{}],9:[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},{}],10:[function(a,b){function c(a){return!!a&&"object"==typeof a&&a.constructor===Object}b.exports=c},{}],11:[function(a,b){function c(a){return null==a?"":a.toString()}b.exports=c},{}],12:[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":10,"./forOwn":14}],13:[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":15}],14:[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":13,"./hasOwn":15}],15:[function(a,b){function c(a,b){return Object.prototype.hasOwnProperty.call(a,b)}b.exports=c},{}],16:[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":5}],17:[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":8}],18:[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":16}],19:[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":11,"./lowerCase":20,"./removeNonWord":22,"./replaceAccents":23,"./upperCase":24}],20:[function(a,b){function c(a){return a=d(a),a.toLowerCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":11}],21:[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":11,"./camelCase":19,"./upperCase":24}],22:[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":11}],23:[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":11}],24:[function(a,b){function c(a){return a=d(a),a.toUpperCase()}var d=a("../lang/toString");b.exports=c},{"../lang/toString":11}],25:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a];c=c||{},b=b||{};var h;if(g)if(d.isObject(b)){if(c=d._(g,c),c.upsert&&(d.isString(b[g.idAttribute])||d.isNumber(b[g.idAttribute])))return f.update(a,b[g.idAttribute],b,c)}else h=new e.IA('"attrs" must be an object!');else h=new e.NER(a);return new d.Promise(function(a,c){h?c(h):a(b)}).then(function(a){return c.beforeValidate.call(a,c,a)}).then(function(a){return c.validate.call(a,c,a)}).then(function(a){return c.afterValidate.call(a,c,a)}).then(function(a){return c.beforeCreate.call(a,c,a)}).then(function(a){return c.notify&&f.emit(c,"beforeCreate",d.copy(a)),f.getAdapter(c).create(g,a,c)}).then(function(a){return c.afterCreate.call(a,c,a)}).then(function(b){if(c.notify&&f.emit(c,"afterCreate",d.copy(b)),c.cacheResponse){var e=f.inject(g.name,b,c),h=e[g.idAttribute];return f.store[a].completedQueries[h]=(new Date).getTime(),e}return f.createInstance(a,b,c)})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],26:[function(a,b){function c(a,b,c){var f,g=this,h=g.definitions[a];return new d.Promise(function(i,j){b=d.resolveId(h,b),h?d.isString(b)||d.isNumber(b)?(f=g.get(a,b)||{id:b},c=d._(h,c),i(f)):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(a){return c.beforeDestroy.call(a,c,a)}).then(function(e){return c.notify&&g.emit(c,"beforeDestroy",d.copy(e)),c.eagerEject&&g.eject(a,b),g.getAdapter(c).destroy(h,b,c)}).then(function(){return c.afterDestroy.call(f,c,f)}).then(function(e){return c.notify&&g.emit(c,"afterDestroy",d.copy(e)),g.eject(a,b),b})["catch"](function(b){throw c&&c.eagerEject&&f&&g.inject(a,f,{notify:!1}),b})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],27:[function(a,b){function c(a,b,c){var f,g,h=this,i=h.definitions[a];return b=b||{},new d.Promise(function(f,g){i?d.isObject(b)?(c=d._(i,c),f()):g(new e.IA('"params" must be an object!')):g(new e.NER(a))}).then(function(){return g=h.defaults.defaultFilter.call(h,a,b),c.beforeDestroy(c,g)}).then(function(){return c.notify&&h.emit(c,"beforeDestroy",d.copy(g)),c.eagerEject&&(f=h.ejectAll(a,b)),h.getAdapter(c).destroyAll(i,b,c)}).then(function(){return c.afterDestroy(c,g)}).then(function(){return c.notify&&h.emit(c,"afterDestroy",d.copy(g)),f||h.ejectAll(a,b)})["catch"](function(b){throw c&&c.eagerEject&&f&&h.inject(a,f,{notify:!1}),b})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],28:[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){g?d.isString(b)||d.isNumber(b)?(c=d._(g,c),c.params&&(c.params=d.copy(c.params)),(c.bypassCache||!c.cacheResponse)&&delete h.completedQueries[b],b in h.completedQueries?i(f.get(a,b)):i()):j(new e.IA('"id" must be a string or a number!')):j(new e.NER(a))}).then(function(d){function e(a){return f.getAdapter((c.findFallbackAdapters||c.fallbackAdapters)[a]).find(g,b,c)["catch"](function(b){return a++,a<c.fallbackAdapters.length?e(a):Promise.reject(b)})}if(b in h.completedQueries)return d;if(!(b in h.pendingQueries)){var i,j=c.findStrategy||c.strategy;i="fallback"===j?e(0):f.getAdapter(c).find(g,b,c),h.pendingQueries[b]=i.then(function(d){return delete h.pendingQueries[b],c.cacheResponse?(h.completedQueries[b]=(new Date).getTime(),f.inject(a,d,c)):f.createInstance(a,d,c)})}return h.pendingQueries[b]})["catch"](function(a){throw h&&delete h.pendingQueries[b],a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],29:[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)}):(d.errorFn("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,k){b=b||{},h.definitions[a]?e.isObject(b)?(d=e._(i,d),g=e.toJson(b),d.params&&(d.params=e.copy(d.params)),(d.bypassCache||!d.cacheResponse)&&(delete j.completedQueries[g],delete j.queryData[g]),g in j.completedQueries?c(d.useFilter?h.filter(a,b,d):j.queryData[g]):c()):k(new f.IA('"params" must be an object!')):k(new f.NER(a))}).then(function(f){function k(a){return h.getAdapter((d.findAllFallbackAdapters||d.fallbackAdapters)[a]).findAll(i,b,d)["catch"](function(b){return a++,a<d.fallbackAdapters.length?k(a):Promise.reject(b)})}if(g in j.completedQueries)return f;if(!(g in j.pendingQueries)){var l,m=d.findAllStrategy||d.strategy;l="fallback"===m?k(0):h.getAdapter(d).findAll(i,b,d),j.pendingQueries[g]=l.then(function(b){return delete j.pendingQueries[g],d.cacheResponse?(j.queryData[g]=c.call(h,b,a,g,d),j.queryData[g].$$injected=!0,j.queryData[g]):(e.forEach(b,function(c,e){b[e]=h.createInstance(a,c,d)}),b)})}return j.pendingQueries[g]})["catch"](function(a){throw j&&delete j.pendingQueries[g],a})}var e=a("../../utils"),f=a("../../errors");b.exports=d},{"../../errors":46,"../../utils":48}],30:[function(a,b){function c(a,b){var c=this,d=c.definitions[a],f=c.store[a];return new e.Promise(function(g,h){if(d){b=e._(d,b),b.hasOwnProperty("notify")||(b.notify=!1);for(var i,j=[],k=(new Date).getTime();(i=f.expiresHeap.peek())&&i.expires<k;)j.push(i.item),delete i.item,f.expiresHeap.pop();g(j)}else h(new c.errors.NER(a))}).then(function(g){if((b.isInterval||b.notify)&&(d.beforeReap(b,g),c.emit(b,"beforeReap",e.copy(g))),"inject"===b.reapAction)e.forEach(g,function(a){var b=a[d.idAttribute];f.expiresHeap.push({item:a,timestamp:f.saved[b],expires:d.maxAge?f.saved[b]+d.maxAge:Number.MAX_VALUE})});else if("eject"===b.reapAction)e.forEach(g,function(b){c.eject(a,b[d.idAttribute])});else if("refresh"===b.reapAction){var h=[];return e.forEach(g,function(b){h.push(c.refresh(a,b[d.idAttribute]))}),e.Promise.all(h)}return g}).then(function(a){return(b.isInterval||b.notify)&&(d.afterReap(b,a),c.emit(b,"afterReap",e.copy(a))),a})}function d(a,b,c){var d=this;return new e.Promise(function(g,h){var i=d.definitions[a];b=e.resolveId(d.definitions[a],b),i?e.isString(b)||e.isNumber(b)?(c=e._(i,c),c.bypassCache=!0,g(d.get(a,b))):h(new f.IA('"id" must be a string or a number!')):h(new d.errors.NER(a))}).then(function(e){return e?d.find(a,b,c):e})}var e=a("../../utils"),f=a("../../errors");b.exports={create:a("./create"),destroy:a("./destroy"),destroyAll:a("./destroyAll"),find:a("./find"),findAll:a("./findAll"),loadRelations:a("./loadRelations"),reap:c,refresh:d,save:a("./save"),update:a("./update"),updateAll:a("./updateAll")}},{"../../errors":46,"../../utils":48,"./create":25,"./destroy":26,"./destroyAll":27,"./find":28,"./findAll":29,"./loadRelations":31,"./save":32,"./update":33,"./updateAll":34}],31:[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((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)){f=d._(h,f),f.hasOwnProperty("findBelongsTo")||(f.findBelongsTo=!0),f.hasOwnProperty("findHasMany")||(f.findHasMany=!0);var l=[];d.forEach(h.relationList,function(a){var e=a.relation;if(d.contains(c,e)){var j,k={};f.allowSimpleWhere?k[a.foreignKey]=b[h.idAttribute]:(k.where={},k.where[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('"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":46,"../../utils":48}],32:[function(a,b){function c(a,b,c){var f,g=this,h=g.definitions[a];return new d.Promise(function(i,j){b=d.resolveId(h,b),h?d.isString(b)||d.isNumber(b)?g.get(a,b)?(f=g.get(a,b),c=d._(h,c),i(f)):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(a){return c.beforeValidate.call(a,c,a)}).then(function(a){return c.validate.call(a,c,a)}).then(function(a){return c.afterValidate.call(a,c,a)}).then(function(a){return c.beforeUpdate.call(a,c,a)}).then(function(e){if(c.notify&&g.emit(c,"beforeUpdate",d.copy(e)),c.changesOnly){var f=g.store[a];d.w&&f.observers[b].deliver();var i=[],j=g.changes(a,b);for(var k in j.added)i.push(k);for(k in j.changed)i.push(k);if(j=d.pick(e,i),d.isEmpty(j))return e;e=j}return g.getAdapter(c).update(h,b,e,c)}).then(function(a){return c.afterUpdate.call(a,c,a)}).then(function(a){return c.notify&&g.emit(c,"afterUpdate",d.copy(a)),c.cacheResponse?g.inject(h.name,a,c):a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],33:[function(a,b){function c(a,b,c,f){var g=this,h=g.definitions[a];return new d.Promise(function(g,i){b=d.resolveId(h,b),h?d.isString(b)||d.isNumber(b)?(f=d._(h,f),g(c)):i(new e.IA('"id" must be a string or a number!')):i(new e.NER(a))}).then(function(a){return f.beforeValidate.call(a,f,a)}).then(function(a){return f.validate.call(a,f,a)}).then(function(a){return f.afterValidate.call(a,f,a)}).then(function(a){return f.beforeUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"beforeUpdate",d.copy(a)),g.getAdapter(f).update(h,b,a,f)}).then(function(a){return f.afterUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"afterUpdate",d.copy(a)),f.cacheResponse?g.inject(h.name,a,f):a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],34:[function(a,b){function c(a,b,c,f){var g=this,h=g.definitions[a];return new d.Promise(function(c,g){h?(f=d._(h,f),c(b)):g(new e.NER(a))}).then(function(a){return f.beforeValidate.call(a,f,a)}).then(function(a){return f.validate.call(a,f,a)}).then(function(a){return f.afterValidate.call(a,f,a)}).then(function(a){return f.beforeUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"beforeUpdate",d.copy(a)),g.getAdapter(f).updateAll(h,a,c,f)}).then(function(a){return f.afterUpdate.call(a,f,a)}).then(function(a){return f.notify&&g.emit(f,"afterUpdate",d.copy(b)),f.cacheResponse?g.inject(h.name,a,f):a})}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],35:[function(a,b){function c(a,b,c){c(null,b)}function d(a,b){return b}function e(a,b,c,d){var f=a[b],g=c[f[0]],h=d[f[0]];return i.isString(g)&&(g=i.upperCase(g)),i.isString(h)&&(h=i.upperCase(h)),"DESC"===f[1]?g>h?-1:h>g?1:b<a.length-1?e(a,b+1,c,d):0:h>g?-1:g>h?1:b<a.length-1?e(a,b+1,c,d):0}function f(){}function g(b){var c=this;b=b||{};try{h=a("js-data-schema")}catch(d){}if(!h)try{h=window.Schemator}catch(d){}(h||b.schemator)&&(c.schemator=b.schemator||new h),c.store={},c.definitions={},c.adapters={},c.defaults=new f,c.observe=i.observe,i.deepMixIn(c.defaults,b)}var h,i=a("../utils"),j=(a("../errors"),a("./sync_methods")),k=a("./async_methods"),l=f.prototype;l.actions={},l.afterCreate=c,l.afterCreateInstance=d,l.afterDestroy=c,l.afterEject=d,l.afterInject=d,l.afterReap=d,l.afterUpdate=c,l.afterValidate=c,l.allowSimpleWhere=!0,l.basePath="",l.beforeCreate=c,l.beforeCreateInstance=d,l.beforeDestroy=c,l.beforeEject=d,l.beforeInject=d,l.beforeReap=d,l.beforeUpdate=c,l.beforeValidate=c,l.bypassCache=!1,l.cacheResponse=!!i.w,l.defaultAdapter="http",l.debug=!0,l.eagerEject=!1,l.eagerInject=!1,l.endpoint="",l.error=console?function(a,b,c){console["function"==typeof console.error?"error":"log"](a,b,c)}:!1,l.errorFn=function(a,b){if(this.error&&"function"==typeof this.error){try{throw"string"==typeof a?new Error(a):a}catch(c){a=c}this.error(this.name||null,a||null,b||null)}},l.fallbackAdapters=["http"],l.findBelongsTo=!0,l.findHasOne=!0,l.findHasMany=!0,l.findInverseLinks=!0,l.idAttribute="id",l.ignoredChanges=[/\$/],l.ignoreMissing=!1,l.keepChangeHistory=!1,l.loadFromServer=!1,l.log=console?function(a,b,c,d,e){console["function"==typeof console.info?"info":"log"](a,b,c,d,e)
}:!1,l.logFn=function(a,b,c,d){this.debug&&this.log&&"function"==typeof this.log&&this.log(this.name||null,a||null,b||null,c||null,d||null)},l.maxAge=!1,l.notify=!!i.w,l.reapAction=i.w?"inject":"none",l.reapInterval=i.w?3e4:!1,l.resetHistoryOnInject=!0,l.strategy="single",l.upsert=!!i.w,l.useClass=!0,l.useFilter=!1,l.validate=c,l.defaultFilter=function(a,b,c,d){var f=this,g=a,h=null,j={skip:"",offset:"",where:"",limit:"",orderBy:"",sort:""};c=c||{},d=d||{},h=i.isObject(c.where)?c.where:{},d.allowSimpleWhere&&i.forOwn(c,function(a,b){b in j||b in h||(h[b]={"==":a})}),i.isEmpty(h)&&(h=null),h&&(g=i.filter(g,function(a){var b=!0,c=!0;return i.forOwn(h,function(d,e){i.isString(d)?d={"===":d}:(i.isNumber(d)||i.isBoolean(d))&&(d={"==":d}),i.isObject(d)&&i.forOwn(d,function(d,f){var g,h="|"===f[0],j=a[e];f=h?f.substr(1):f,"=="===f?g=j==d:"==="===f?g=j===d:"!="===f?g=j!=d:"!=="===f?g=j!==d:">"===f?g=j>d:">="===f?g=j>=d:"<"===f?g=d>j:"<="===f?g=d>=j:"isectEmpty"===f?g=!i.intersection(j||[],d||[]).length:"isectNotEmpty"===f?g=i.intersection(j||[],d||[]).length:"in"===f?g=i.isString(d)?-1!==d.indexOf(j):i.contains(d,j):"notIn"===f&&(g=i.isString(d)?-1===d.indexOf(j):!i.contains(d,j)),void 0!==g&&(c=b?g:h?c||g:c&&g),b=!1})}),c}));var k=null;if(i.isString(c.orderBy)?k=[[c.orderBy,"ASC"]]:i.isArray(c.orderBy)&&(k=c.orderBy),!k&&i.isString(c.sort)?k=[[c.sort,"ASC"]]:!k&&i.isArray(c.sort)&&(k=c.sort),k){var l=0;i.forEach(k,function(a,b){if(i.isString(a))k[b]=[a,"ASC"];else if(!i.isArray(a))throw new f.errors.IllegalArgumentError("DS.filter(resourceName[, params][, options]): "+i.toJson(a)+": Must be a string or an array!",{params:{"orderBy[i]":{actual:typeof a,expected:"string|array"}}})}),g=i.sort(g,function(a,b){return e(k,l,a,b)})}var m=i.isNumber(c.limit)?c.limit:null,n=null;return i.isNumber(c.skip)?n=c.skip:i.isNumber(c.offset)&&(n=c.offset),m&&n?g=i.slice(g,n,Math.min(g.length,n+m)):i.isNumber(m)?g=i.slice(g,0,Math.min(g.length,m)):i.isNumber(n)&&(g=n<g.length?i.slice(g,n):[]),g};var m=g.prototype;m.getAdapter=function(a){var b=!1;a=a||{},i.isString(a)&&(b=!0,a={adapter:a});var c=this.adapters[a.adapter];if(c)return c;if(b)throw new Error(a.adapter+" is not a registered adapter!");return this.adapters[a.defaultAdapter]},m.registerAdapter=function(a,b,c){var d=this;c=c||{},d.adapters[a]=i.isFunction(b)?new b(c):b,c["default"]&&(d.defaults.defaultAdapter=a)},m.emit=function(a,b){var c=Array.prototype.slice.call(arguments,2);c.unshift(a.name),c.unshift("DS."+b),a.emit.apply(a,c)},m.errors=a("../errors"),m.utils=i,i.deepMixIn(m,j),i.deepMixIn(m,k),b.exports=g},{"../errors":46,"../utils":48,"./async_methods":30,"./sync_methods":40,"js-data-schema":"js-data-schema"}],36:[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!');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,def.parentField=a.localField)})}),"function"==typeof Object.freeze&&(Object.freeze(def.relations),Object.freeze(def.relationList))),def.getEndpoint=function(a,b){b.params=b.params||{};var c,d=def.parentKey,e=b.hasOwnProperty("endpoint")?b.endpoint:def.endpoint,f=def.parentField,g=definitions[def.parent],h=b.params[d];if(h!==!1&&d&&g){if(delete b.params[d],DSUtils.isNumber(a)||DSUtils.isString(a)?c=def.get(a):DSUtils.isObject(a)&&(c=a),c&&(h=h||c[d]||(c[f]?c[f][g.idAttribute]:null)),h){delete b.endpoint;var i={};DSUtils.forOwn(b,function(a,b){i[b]=a});var j=DSUtils.makePath(g.getEndpoint(h,DSUtils._(g,i)),h,e);return j}return e}return h===!1&&delete b.params[d],e},def.filter&&(def.defaultFilter=def.filter,delete def.filter),def["class"]=DSUtils.pascalCase(definition.name);try{eval("function "+def["class"]+"() {}"),def[def["class"]]=eval(def["class"])}catch(e){def[def["class"]]=function(){}}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&&def.errorFn('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&&def.errorFn("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})}),definition.schema&&_this.schemator&&(def.schema=_this.schemator.defineSchema(def.name,definition.schema),definition.hasOwnProperty("validate")||(def.validate=function(a,b,c){def.schema.validate(b,{ignoreMissing:def.ignoreMissing},function(a){return a?c(a):c(null,b)})})),DSUtils.forEach(instanceMethods,function(a){def[def["class"]].prototype["DS"+DSUtils.pascalCase(a)]=function(){var b=Array.prototype.slice.call(arguments);return b.unshift(this[def.idAttribute]||this),b.unshift(def.name),_this[a].apply(_this,b)}}),def[def["class"]].prototype.DSCreate=function(){var a=Array.prototype.slice.call(arguments);return a.unshift(this),a.unshift(def.name),_this.create.apply(_this,a)},_this.store[def.name]={collection:[],expiresHeap:new DSUtils.DSBinaryHeap(function(a){return a.expires},function(a,b){return a.item===b}),completedQueries:{},queryData:{},pendingQueries:{},index:{},modified:{},saved:{},previousAttributes:{},observers:{},changeHistories:{},changeHistory:[],collectionModified:0},def.reapInterval&&setInterval(function(){_this.reap(def.name,{isInterval:!0})},def.reapInterval);for(var key in _this)"function"==typeof _this[key]&&"defineResource"!==key&&!function(a){def[a]=function(){var b=Array.prototype.slice.call(arguments);return b.unshift(def.name),_this[a].apply(_this,b)}}(key);return 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.forOwn(def.actions,function(a,b){if(def[b])throw new Error('Cannot override existing method "'+b+'"!');def[b]=function(c){c=c||{};var d=DSUtils.deepMixIn({},a);return d.url=DSUtils.makePath(def.getEndpoint(null,c),b),d.method=d.method||"GET",DSUtils.deepMixIn(d,c),_this.getAdapter(a.adapter||"http").HTTP(d)}}),DSUtils.Events(def),def}catch(err){throw delete definitions[definition.name],delete _this.store[definition.name],err}}var DSUtils=require("../../utils"),DSErrors=require("../../errors"),instanceMethods=["compute","refresh","save","update","destroy","loadRelations","changeHistory","changes","hasChanges","lastModified","lastSaved","link","linkInverse","previous","unlinkInverse"];module.exports=defineResource},{"../../errors":46,"../../utils":48}],37:[function(a,b){function c(a,b,c){var f,g=this,h=g.definitions[a],i=g.store[a],j=!1;if(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!');c=d._(h,c);for(var k=0;k<i.collection.length;k++)if(i.collection[k][h.idAttribute]==b){f=i.collection[k],i.expiresHeap.remove(f),j=!0;break}return j?(c.notify&&(h.beforeEject(c,f),g.emit(c,"beforeEject",d.copy(f))),g.unlinkInverse(h.name,b),i.collection.splice(k,1),d.w&&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)}),d.forOwn(i.queryData,function(a){a.$$injected&&d.remove(a,f)}),delete i.changeHistories[b],delete i.modified[b],delete i.saved[b],i.collectionModified=d.updateTimestamp(i.collectionModified),c.notify&&(h.afterEject(c,f),g.emit(c,"afterEject",d.copy(f))),f):void 0}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],38:[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=[];return d.forEach(j,function(a){a&&a[g.idAttribute]&&k.push(a[g.idAttribute])}),d.forEach(k,function(a){f.eject(g.name,a,c)}),delete h.completedQueries[i],h.collectionModified=d.updateTimestamp(h.collectionModified),j}var d=a("../../utils"),e=a("../../errors");b.exports=c},{"../../errors":46,"../../utils":48}],39:[function(a,b){function c(a,b,c){var f=this,g=f.definitions[a],h=f.store[a];if(!g)throw new e.NER(a);if(b&&!d.isObject(b))throw new e.IA('"params" must be an object!');c=d._(g,c),b=b||{};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":46,"../../utils":48}],40:[function(a,b){function c(a,b,c){var d=this,e=d.definitions[a];if(c=c||{},b=o.resolveId(e,b),!e)throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');c=o._(e,c);var f=d.get(a,b);if(f){o.w&&d.store[a].observers[b].deliver();var g=o.diffObjectFromOldObject(f,d.store[a].previousAttributes[b],o.equals,c.ignoredChanges);return o.forOwn(g,function(a,b){var c=[];o.forOwn(a,function(a,b){o.isFunction(a)||c.push(b)}),g[b]=o.pick(g[b],c)}),o.forEach(e.relationFields,function(a){delete g.added[a],delete g.removed[a],delete g.changed[a]}),g}}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 q(a);if(b&&!o.isString(b)&&!o.isNumber(b))throw new r('"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 d.errorFn("changeHistory is disabled for this resource!")}function e(a,b){var c=this,d=c.definitions[a];if(b=o.resolveItem(c.store[a],b),!d)throw new q(a);if(!b)throw new s("Item not in the store!");if(!o.isObject(b)&&!o.isString(b)&&!o.isNumber(b))throw new r('"instance" must be an object, string or number!');return o.forOwn(d.computed,function(a,c){o.compute.call(b,a,c)}),b}function f(a,b,c){var d,e=this.definitions[a];if(b=b||{},!e)throw new q(a);if(b&&!o.isObject(b))throw new r('"attrs" must be an object!');if(c=o._(e,c),c.notify&&c.beforeCreateInstance(c,b),c.useClass){var f=e[e["class"]];d=new f}else d={};return o.deepMixIn(d,b),c.notify&&c.afterCreateInstance(c,b),d}function g(a){return!(o.isEmpty(a.added)&&o.isEmpty(a.removed)&&o.isEmpty(a.changed))}function h(){this.observe.Platform.performMicrotaskCheckpoint()}function i(a,b,c){var d=this,e=d.definitions[a];if(!e)throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');c=o._(e,c);var f=d.store[a].index[b];return!f&&c.loadFromServer&&d.find(a,b,c),f}function j(a,b){var c=this,d=c.definitions[a],e=c.store[a],f=[];if(!d)throw new q(a);if(b&&!o.isArray(b))throw new r('"ids" must be an array!');if(o.isArray(b))for(var g=b.length,h=0;g>h;h++)e.index[b[h]]&&f.push(e.index[b[h]]);else f=e.collection.slice();return f}function k(a,b){var c=this,d=c.definitions[a];if(b=o.resolveId(d,b),!d)throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');return c.get(a,b)?g(c.changes(a,b)):!1}function l(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new q(a);return b?(b in d.modified||(d.modified[b]=0),d.modified[b]):d.collectionModified}function m(a,b){var c=this.definitions[a],d=this.store[a];if(b=o.resolveId(c,b),!c)throw new q(a);return b in d.saved||(d.saved[b]=0),d.saved[b]}function n(a,b){var c=this,d=c.definitions[a],e=c.store[a];if(b=o.resolveId(d,b),!d)throw new q(a);if(!o.isString(b)&&!o.isNumber(b))throw new r('"id" must be a string or a number!');return e.previousAttributes[b]?o.copy(e.previousAttributes[b]):void 0}var o=a("../../utils"),p=a("../../errors"),q=p.NER,r=p.IA,s=p.R;b.exports={changes:c,changeHistory:d,compute:e,createInstance:f,defineResource:a("./defineResource"),digest:h,eject:a("./eject"),ejectAll:a("./ejectAll"),filter:a("./filter"),get:i,getAll:j,hasChanges:k,inject:a("./inject"),lastModified:l,lastSaved:m,link:a("./link"),linkAll:a("./linkAll"),linkInverse:a("./linkInverse"),previous:n,unlinkInverse:a("./unlinkInverse")}},{"../../errors":46,"../../utils":48,"./defineResource":36,"./eject":37,"./ejectAll":38,"./filter":39,"./inject":41,"./link":42,"./linkAll":43,"./linkInverse":44,"./unlinkInverse":45}],41:[function(a,b){function c(a,b,c){var d=b.name;return function(e,f,h,i,j){var k,l=this,m=i&&i(b.idAttribute)?i(b.idAttribute):l[b.idAttribute];if(g.forEach(b.relationFields,function(a){delete e[a],delete f[a],delete h[a]}),(!g.isEmpty(e)||!g.isEmpty(f)||!g.isEmpty(h)||j)&&(k=a.get(d,m),c.modified[m]=g.updateTimestamp(c.modified[m]),c.collectionModified=g.updateTimestamp(c.collectionModified),b.keepChangeHistory)){var n={resourceName:d,target:k,added:e,removed:f,changed:h,timestamp:c.modified[m]};c.changeHistories[m].push(n),c.changeHistory.push(n)}b.computed&&(k=k||a.get(d,m),g.forOwn(b.computed,function(a,b){var c=!1;g.forEach(a.deps,function(a){(a in e||a in f||a in h||!(b in k))&&(c=!0)}),c=c||!a.deps.length,c&&g.compute.call(k,a,b)})),b.relations&&(k=k||a.get(d,m),g.forEach(b.relationList,function(c){k[c.localField]&&(c.localKey in e||c.localKey in f||c.localKey in h)&&a.link(d,k[b.idAttribute],[c.relation])})),b.idAttribute in h&&b.errorFn('Doh! You just changed the primary key of an object! Your data for the "'+d+'" resource is now in an undefined (probably broken) state.')}}function d(a,b,e,f){var i,j=this,k=c(j,a,b,e,f);if(g.isArray(e)){i=[];for(var l=0;l<e.length;l++)i.push(d.call(j,a,b,e[l],f))}else{var m=a.computed,n=a.idAttribute;if(m&&m[n]){var o=[];g.forEach(m[n].deps,function(a){o.push(e[a])}),e[n]=m[n][m[n].length-1].apply(e,o)}if(!(n in e)){var p=new h.R(a.name+'.inject: "attrs" must contain the property specified by `idAttribute`!');throw f.errorFn(p),p}try{g.forEach(a.relationList,function(b){var c=b.relation,d=j.definitions[c],i=e[b.localField];if(i){if(!d)throw new h.R(a.name+" relation is defined but the resource is not!");if(g.isArray(i)){var k=[];g.forEach(i,function(g){if(g!==j.store[c][g[d.idAttribute]])try{var h=j.inject(c,g,f);b.foreignKey&&(h[b.foreignKey]=e[a.idAttribute]),k.push(h)}catch(i){f.errorFn(i,"Failed to inject "+b.type+' relation: "'+c+'"!')}}),e[b.localField]=k}else if(i!==j.store[c][i[d.idAttribute]])try{e[b.localField]=j.inject(c,e[b.localField],f),b.foreignKey&&(e[b.localField][b.foreignKey]=e[a.idAttribute])}catch(l){f.errorFn(l,"Failed to inject "+b.type+' relation: "'+c+'"!')}}});var q=e[n],r=j.get(a.name,q),s=r?b.modified[q]:0;r?(g.deepMixIn(r,e),a.resetHistoryOnInject&&(b.previousAttributes[q]={},g.deepMixIn(b.previousAttributes[q],e),b.changeHistories[q].length&&(g.forEach(b.changeHistories[q],function(a){g.remove(b.changeHistory,a)}),b.changeHistories[q].splice(0,b.changeHistories[q].length))),g.w&&b.observers[q].deliver()):(r=f.useClass?e instanceof a[a["class"]]?e:new a[a["class"]]:{},b.previousAttributes[q]=g.copy(e),g.deepMixIn(r,e),b.collection.push(r),b.changeHistories[q]=[],g.w&&(b.observers[q]=new j.observe.ObjectObserver(r),b.observers[q].open(k,r)),b.index[q]=r,k.call(r,{},{},{},null,!0)),b.saved[q]=g.updateTimestamp(b.saved[q]),b.modified[q]=s&&b.modified[q]===s?g.updateTimestamp(b.modified[q]):b.modified[q],b.expiresHeap.remove(r),b.expiresHeap.push({item:r,timestamp:b.saved[q],expires:a.maxAge?b.saved[q]+a.maxAge:Number.MAX_VALUE}),i=r}catch(t){f.errorFn(t,e)}}return i}function e(a,b,c){var d=this;g.forEach(a.relationList,function(e){c.findBelongsTo&&"belongsTo"===e.type&&b[a.idAttribute]?d.link(a.name,b[a.idAttribute],[e.relation]):(c.findHasMany&&"hasMany"===e.type||c.findHasOne&&"hasOne"===e.type)&&d.link(a.name,b[a.idAttribute],[e.relation])})}function f(a,b,c){var f,i=this,j=i.definitions[a],k=i.store[a];if(!j)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!');var l=j.name;return c=g._(j,c),c.notify&&(c.beforeInject(c,b),i.emit(c,"beforeInject",g.copy(b))),f=d.call(i,j,k,b,c),k.collectionModified=g.updateTimestamp(k.collectionModified),c.findInverseLinks&&(g.isArray(f)?f.length&&i.linkInverse(l,f[0][j.idAttribute]):i.linkInverse(l,f[j.idAttribute])),g.isArray(f)?g.forEach(f,function(a){e.call(i,j,a,c)}):e.call(i,j,f,c),c.notify&&(c.afterInject(c,f),i.emit(c,"afterInject",g.copy(f))),f}var g=a("../../utils"),h=a("../../errors");b.exports=f},{"../../errors":46,"../../utils":48}],42:[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":46,"../../utils":48}],43:[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":46,"../../utils":48}],44:[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":46,"../../utils":48}],45:[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":46,"../../utils":48}],46:[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=new Error,c.prototype.constructor=c,d.prototype=new Error,d.prototype.constructor=d,e.prototype=new Error,e.prototype.constructor=e,b.exports={IllegalArgumentError:c,IA:c,RuntimeError:d,R:d,NonexistentResourceError:e,NER:e}},{}],47:[function(a,b){var c=a("./datastore");b.exports={DS:c,createStore:function(a){return new c(a)},DSUtils:a("./utils"),DSErrors:a("./errors"),version:{full:"1.0.0-beta.1",major:parseInt("1",10),minor:parseInt("0",10),patch:parseInt("0",10),alpha:!1,beta:"1"}}},{"./datastore":35,"./errors":46,"./utils":48}],48:[function(a,b){function c(a){return"[object RegExp]"==C.call(a)||!1}function d(a){return a===!0||a===!1||a&&"object"==typeof a&&"[object Boolean]"==C.call(a)||!1}function e(a){return"string"==typeof a||a&&"object"==typeof a&&"[object String]"==C.call(a)||!1}function f(a){return"[object Object]"==C.call(a)||!1}function g(a){return a&&"object"==typeof a&&"[object Date]"==C.call(a)||!1}function h(a){var b=typeof a;return"number"==b||a&&"object"==b&&"[object Number]"==C.call(a)||!1}function i(a){return"function"==typeof a||a&&"[object Function]"===C.call(a)||!1}function j(a){if(null==a)return!0;if("string"==typeof a||J(a))return!a.length;if("object"==typeof a){var b=!0;return G(a,function(){return b=!1,!1}),b}return!0}function k(a,b){if(!a||!b)return[];for(var c,d=[],e=0,f=a.length;f>e;e++)c=a[e],N.contains(d,c)||N.contains(b,c)&&d.push(c);return d}function l(a,b,c){var d=[];return E(a,function(a,c,e){b(a,c,e)&&d.push(a)},c),d}function m(a){var b=this.constructor;return this.then(function(c){return b.resolve(a()).then(function(){return c})},function(c){return b.resolve(a()).then(function(){throw c})})}function n(a){var b="function"==typeof Date.now?Date.now():(new Date).getTime();return a&&a>=b?a+1:b}function o(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)}}function p(a,b,c){for(var d=a[c],e=b(d);c>0;){var f=Math.floor((c+1)/2)-1,g=a[f];if(e>=b(g))break;a[f]=d,a[c]=g,c=f}}function q(a,b,c){for(var d=a.length,e=a[c],f=b(e);;){var g=2*(c+1),h=g-1,i=null;if(d>h){var j=a[h],k=b(j);f>k&&(i=h)}if(d>g){var l=a[g],m=b(l);m<(null===i?f:b(a[h]))&&(i=g)}if(null===i)break;a[c]=a[i],a[i]=e,c=i}}function r(a,b){if(a&&!i(a))throw new Error("DSBinaryHeap(weightFunc): weightFunc: must be a function!");a=a||function(a){return a},b=b||function(a,b){return a===b},this.weightFunc=a,this.compareFunc=b,this.heap=[]}function s(a,b,d,e){if(b){if(a===b)throw new Error("Cannot copy! Source and destination are identical.");if(d=d||[],e=e||[],f(a)){var h=d.indexOf(a);if(-1!==h)return e[h];d.push(a),e.push(b)}var i;if(J(a)){b.length=0;for(var j=0;j<a.length;j++)i=s(a[j],null,d,e),f(a[j])&&(d.push(a[j]),e.push(i)),b.push(i)}else{J(b)?b.length=0:E(b,function(a,c){delete b[c]});for(var k in a)a.hasOwnProperty(k)&&(i=s(a[k],null,d,e),f(a[k])&&(d.push(a[k]),e.push(i)),b[k]=i)}}else if(b=a,a)if(J(a))b=s(a,[],d,e);else if(g(a))b=new Date(a.getTime());else if(c(a))b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex;else if(f(a)){var l=Object.create(Object.getPrototypeOf(a));b=s(a,l,d,e)}return b}function t(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d,e,f,h=typeof a,j=typeof b;if(h==j&&"object"==h){if(!J(a)){if(g(a))return g(b)?t(a.getTime(),b.getTime()):!1;if(c(a)&&c(b))return a.toString()==b.toString();if(J(b))return!1;f={};for(e in a)if("$"!==e.charAt(0)&&!i(a[e])){if(!t(a[e],b[e]))return!1;f[e]=!0}for(e in b)if(!f.hasOwnProperty(e)&&"$"!==e.charAt(0)&&void 0!==b[e]&&!i(b[e]))return!1;return!0}if(!J(b))return!1;if((d=a.length)==b.length){for(e=0;d>e;e++)if(!t(a[e],b[e]))return!1;return!0}}return!1}function u(a,b){return this.isString(b)||h(b)?b:b&&a?b[a.idAttribute]||b:b}function v(a,b){return a&&(e(b)||h(b))?a.index[b]||b:b}function w(a){return null!=a&&""!==a}function x(a,b){return b=b||"",l(a,w).join(b)}function y(){var a=x(F(arguments),"/");return a.replace(/([^:\/]|^)\/{2,}/g,"$1/")}var z,A,B=Object.prototype,C=B.toString,D=a("./errors"),E=a("mout/array/forEach"),F=a("mout/array/slice"),G=a("mout/object/forOwn"),H=a("../lib/observe-js/observe-js"),I=a("es6-promise");I.polyfill();var J=Array.isArray||function(a){return"[object Array]"==C.call(a)||!1};try{z=window,z.Promise.prototype["finally"]||(z.Promise.prototype["finally"]=m),A=z.Promise,z={}}catch(K){z=null,A=a("bluebird")}var L=r.prototype;L.push=function(a){this.heap.push(a),p(this.heap,this.weightFunc,this.heap.length-1)},L.peek=function(){return this.heap[0]},L.pop=function(){var a=this.heap[0],b=this.heap.pop();return this.heap.length>0&&(this.heap[0]=b,q(this.heap,this.weightFunc,0)),a},L.remove=function(a){for(var b=this.heap.length,c=0;b>c;c++)if(this.compareFunc(this.heap[c],a)){var d=this.heap[c],e=this.heap.pop();return c!==b-1&&(this.heap[c]=e,p(this.heap,this.weightFunc,c),q(this.heap,this.weightFunc,c)),d}return null},L.removeAll=function(){this.heap=[]},L.size=function(){return this.heap.length};var M=["beforeValidate","validate","afterValidate","beforeCreate","afterCreate","beforeUpdate","afterUpdate","beforeDestroy","afterDestroy"];H.setEqualityFn(t);var N={_:function(a,b){var c=this;if(b=b||{},b&&b.constructor===a.constructor)return b;if(!f(b))throw new D.IA('"options" must be an object!');E(M,function(a){"function"==typeof b[a]&&-1===b[a].toString().indexOf("var args = Array")&&(b[a]=c.promisify(b[a]))});var d=function(a){var b=this;G(a,function(a,c){b[c]=a})};return d.prototype=a,new d(b)},compute:function(a,b){var c=this,d=[];E(a.deps,function(a){d.push(c[a])}),c[b]=a[a.length-1].apply(c,d)},contains:a("mout/array/contains"),copy:s,deepMixIn:a("mout/object/deepMixIn"),diffObjectFromOldObject:H.diffObjectFromOldObject,DSBinaryHeap:r,equals:t,Events:o,filter:l,forEach:E,forOwn:G,fromJson:function(a){return e(a)?JSON.parse(a):a},intersection:k,isArray:J,isBoolean:d,isDate:g,isEmpty:j,isFunction:i,isObject:f,isNumber:h,isRegExp:c,isString:e,makePath:y,observe:H,pascalCase:a("mout/string/pascalCase"),pick:a("mout/object/pick"),Promise:A,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)}})}}},remove:a("mout/array/remove"),set:a("mout/object/set"),slice:F,sort:a("mout/array/sort"),toJson:JSON.stringify,updateTimestamp:n,upperCase:a("mout/string/upperCase"),resolveItem:v,resolveId:u,w:z};b.exports=N},{"../lib/observe-js/observe-js":1,"./errors":46,bluebird:"bluebird","es6-promise":2,"mout/array/contains":4,"mout/array/forEach":5,"mout/array/remove":7,"mout/array/slice":8,"mout/array/sort":9,"mout/object/deepMixIn":12,"mout/object/forOwn":14,"mout/object/pick":17,"mout/object/set":18,"mout/string/pascalCase":21,"mout/string/upperCase":24}]},{},[47])(47)});

@@ -73,3 +73,3 @@ /*

files: {
'dist/js-data.js': ['src/index.js']
'dist/js-data-debug.js': ['src/index.js']
}

@@ -123,8 +123,8 @@ }

grunt.registerTask('banner', function () {
var file = grunt.file.read('dist/js-data.js');
grunt.registerTask('banner', function (filename) {
var file = grunt.file.read(filename);
var banner = '/**\n' +
'* @author Jason Dobry <jason.dobry@gmail.com>\n' +
'* @file js-data.js\n' +
'* @file ' + filename + '\n' +
'* @version ' + pkg.version + ' - Homepage <http://www.js-data.io/>\n' +

@@ -139,5 +139,52 @@ '* @copyright (c) 2014 Jason Dobry \n' +

grunt.file.write('dist/js-data.js', file);
grunt.file.write(filename, file);
});
grunt.registerTask('version', function (filePath) {
var file = grunt.file.read(filePath);
file = file.replace(/<%= pkg\.version %>/gi, pkg.version);
var parts = pkg.version.split('-');
var numbers = parts[0].split('.');
file = file.replace(/<%= major %>/gi, numbers[0]);
file = file.replace(/<%= minor %>/gi, numbers[1]);
file = file.replace(/<%= patch %>/gi, numbers[2]);
if (pkg.version.indexOf('alpha') !== -1) {
file = file.replace(/<%= alpha %>/gi, parts[1].replace('alpha.', '') + (parts.length > 2 ? '-' + parts[2] : ''));
} else {
file = file.replace(/<%= alpha %>/gi, false);
}
if (pkg.version.indexOf('beta') !== -1) {
file = file.replace(/<%= beta %>/gi, parts[1].replace('beta.', '') + (parts.length > 2 ? '-' + parts[2] : ''));
} else {
file = file.replace(/<%= beta %>/gi, false);
}
grunt.file.write(filePath, file);
});
grunt.registerTask('debug', function (filePath) {
var file = grunt.file.read(filePath);
var lines = file.split('\n');
var newLines = [];
lines.forEach(function (line) {
if (line.indexOf('logFn(') === -1) {
newLines.push(line);
}
});
file = newLines.join('\n');
file += '\n';
grunt.file.write(filePath.replace('-debug', ''), file);
});
grunt.registerTask('n', ['mochaTest']);

@@ -152,3 +199,7 @@ grunt.registerTask('b', ['karma:ci', 'karma:min']);

'browserify',
'banner',
'debug:dist/js-data-debug.js',
'version:dist/js-data-debug.js',
'version:dist/js-data.js',
'banner:dist/js-data-debug.js',
'banner:dist/js-data.js',
'uglify:main'

@@ -155,0 +206,0 @@ ]);

@@ -19,2 +19,3 @@ // an example karma.conf.js

autoWatch: false,
autoWatchBatchDelay: 4000,
browsers: ['Chrome'],

@@ -24,3 +25,3 @@

files: [
'dist/js-data.js',
'dist/js-data-debug.js',
'bower_components/js-data-http/dist/js-data-http.js',

@@ -37,3 +38,3 @@ 'bower_components/js-data-schema/dist/js-data-schema.js',

preprocessors: {
'dist/js-data.js': ['coverage']
'dist/js-data-debug.js': ['coverage']
},

@@ -40,0 +41,0 @@

@@ -108,3 +108,4 @@ // Setup global test variables

beforeInject: lifecycle.beforeInject,
afterInject: lifecycle.afterInject
afterInject: lifecycle.afterInject,
log: false
});

@@ -111,0 +112,0 @@ dsHttpAdapter = new DSHttpAdapter({

@@ -124,3 +124,4 @@ /*global assert:true */

beforeInject: lifecycle.beforeInject,
afterInject: lifecycle.afterInject
afterInject: lifecycle.afterInject,
log: false
});

@@ -127,0 +128,0 @@ DSUtils = JSData.DSUtils;

{
"name": "js-data",
"description": "Robust, framework-agnostic in-memory data store.",
"version": "1.0.0-alpha.5-8",
"version": "1.0.0-beta.1",
"homepage": "http://www.js-data.io",

@@ -45,20 +45,20 @@ "repository": {

"grunt-contrib-jshint": "0.10.0",
"grunt-contrib-uglify": "0.6.0",
"grunt-contrib-uglify": "0.7.0",
"grunt-contrib-watch": "0.6.1",
"grunt-karma": "0.9.0",
"grunt-karma": "0.10.1",
"grunt-karma-coveralls": "2.5.3",
"grunt-mocha-test": "0.12.4",
"grunt-mocha-test": "0.12.6",
"jit-grunt": "0.9.0",
"js-data-schema": "^1.0.0-alpha.1",
"karma": "0.12.28",
"karma": "0.12.31",
"karma-chai": "0.1.0",
"karma-chrome-launcher": "0.1.6",
"karma-chrome-launcher": "0.1.7",
"karma-coverage": "0.2.7",
"karma-firefox-launcher": "0.1.3",
"karma-mocha": "0.1.9",
"karma-firefox-launcher": "0.1.4",
"karma-mocha": "0.1.10",
"karma-phantomjs-launcher": "0.1.4",
"karma-script-launcher": "0.1.0",
"karma-sinon": "1.0.4",
"karma-spec-reporter": "0.0.13",
"sinon": "1.12.1",
"karma-spec-reporter": "0.0.16",
"sinon": "1.12.2",
"time-grunt": "1.0.0"

@@ -70,6 +70,6 @@ },

"dependencies": {
"bluebird": "2.3.11",
"es6-promise": "2.0.0",
"bluebird": "2.6.2",
"es6-promise": "2.0.1",
"mout": "0.11.0"
}
}
<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" />
## js-data [![Stories in Backlog](https://badge.waffle.io/js-data/js-data.svg?label=backlog&title=Backlog)](http://waffle.io/js-data/js-data) [![Stories in Ready](https://badge.waffle.io/js-data/js-data.svg?label=ready&title=Ready)](http://waffle.io/js-data/js-data) [![Stories in progress](https://badge.waffle.io/js-data/js-data.svg?label=in%20progress&title=In%20Progress)](http://waffle.io/js-data/js-data)
## JSData [![Bower version](https://badge.fury.io/bo/js-data.png)](http://badge.fury.io/bo/js-data) [![NPM version](https://badge.fury.io/js/js-data.png)](http://badge.fury.io/js/js-data)

@@ -9,11 +9,11 @@ Inspired by [Ember Data](https://github.com/emberjs/data), js-data is the model layer you've been craving. It consists of a convenient framework-agnostic, in-memory cache for managing your data, which users adapters to communicate with various persistence layers.

Unlike Backbone and Ember Models, js-data does not require the use of getters and setters, and doesn't wrap your data with custom classes if you don't want it to. js-data's internal dirty-checking (via [observe-js](https://github.com/Polymer/observe-js) or `Object.observe` in supporting browsers) allows for powerful use cases and an easy avenue for implementing your own [3-way data-binding](https://www.firebase.com/blog/2013-10-04-firebase-angular-data-binding.html).
Unlike Backbone and Ember Models, JSData does not require the use of getters and setters, and doesn't wrap your data with custom classes if you don't want it to. JSData's internal dirty-checking (via [observe-js](https://github.com/Polymer/observe-js) or `Object.observe` in supporting browsers) allows for powerful use cases and an easy avenue for implementing your own [3-way data-binding](https://www.firebase.com/blog/2013-10-04-firebase-angular-data-binding.html).
Supporting relations, computed properties, model lifecycle control and a slew of other features, js-data is the tool for giving your data the respect it deserves.
Supporting relations, computed properties, model lifecycle control and a slew of other features, JSData is the tool for giving your data the respect it deserves.
__Latest Release:__ [1.0.0-alpha.5-8](https://github.com/js-data/js-data/releases/tag/1.0.0-alpha.5-8)
__See Latest Release:__ [JSData Releases](https://github.com/js-data/js-data/releases)
js-data is pre-release. The API is subject to change, though the current api is well tested.
JSData is in beta. The API is subject to change, though the current api is well tested.
If you want to use js-data, keep a close eye on the changelog. 1.0.0 will introduce strict semver (until then, minor number is bumped for breaking changes).
If you want to use JSData, keep a close eye on the changelog. 1.0.0 will introduce strict semver (until then, minor number is bumped for breaking changes).

@@ -24,2 +24,3 @@ ## Project Status

| ------ | ------ |
| Tasks | [![Stories in Backlog](https://badge.waffle.io/js-data/js-data.svg?label=backlog&title=Backlog)](http://waffle.io/js-data/js-data) [![Stories in Ready](https://badge.waffle.io/js-data/js-data.svg?label=ready&title=Ready)](http://waffle.io/js-data/js-data) [![Stories in progress](https://badge.waffle.io/js-data/js-data.svg?label=in%20progress&title=In%20Progress)](http://waffle.io/js-data/js-data) |
| Bower | [![Bower version](https://badge.fury.io/bo/js-data.png)](http://badge.fury.io/bo/js-data) |

@@ -61,3 +62,3 @@ | NPM | [![NPM version](https://badge.fury.io/js/js-data.png)](http://badge.fury.io/js/js-data) |

- [Getting Started with js-data](http://www.js-data.io/docs/home)
- [Resources](http://www.js-data.io/docs/resources)
- [Resources/Models](http://www.js-data.io/docs/resources)
- [Working with the Data Store](http://www.js-data.io/docs/working-with-the-data-store)

@@ -70,2 +71,3 @@ - [Adapters](http://www.js-data.io/docs/working-with-adapters)

- [Schemata & Validation](http://www.js-data.io/docs/schemata--validation)
- [Angular + JSData](http://www.js-data.io/docs/js-data-angular)
- [FAQ](http://www.js-data.io/docs/faq)

@@ -86,9 +88,6 @@

## Version Migration
[TRANSITION.md](https://github.com/js-data/js-data/blob/master/TRANSITION.md)
## Community
- [Mailing List](https://groups.io/org/groupsio/jsdata) - Ask your questions!
- [Issues](https://github.com/js-data/js-data/issues) - Found a bug? Feature request? Submit an issue!
- [GitHub](https://github.com/js-data/js-data) - View the source code for js-data.
- [GitHub](https://github.com/js-data/js-data) - View the source code for JSData.
- [Contributing Guide](https://github.com/js-data/js-data/blob/master/CONTRIBUTING.md)

@@ -98,3 +97,3 @@

First, feel free to contact me with questions. [Mailing List](https://groups.io/org/groupsio/jsdata). [Issues](https://github.com/js-data/js-data/issues).
First, feel free to contact me with questions. [Mailing List](https://groups.io/org/groupsio/jsdata).

@@ -115,3 +114,3 @@ 1. Contribute to the issue that is the reason you'll be developing in the first place

Copyright (c) 2014 Jason Dobry
Copyright (c) 2014-2015 Jason Dobry

@@ -118,0 +117,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy

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

}
options.logFn('create', attrs, options);
}

@@ -23,0 +24,0 @@

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

options = DSUtils._(definition, options);
options.logFn('destroy', id, options);
resolve(item);

@@ -20,0 +21,0 @@ }

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

options = DSUtils._(definition, options);
options.logFn('destroyAll', params, options);
resolve();

@@ -20,0 +21,0 @@ }

@@ -0,1 +1,2 @@

/* jshint -W082 */
var DSUtils = require('../../utils');

@@ -16,2 +17,3 @@ var DSErrors = require('../../errors');

options = DSUtils._(definition, options);
options.logFn('find', id, options);

@@ -34,13 +36,31 @@ if (options.params) {

if (!(id in resource.pendingQueries)) {
resource.pendingQueries[id] = _this.getAdapter(options).find(definition, id, options)
.then(function (data) {
// Query is no longer pending
delete resource.pendingQueries[id];
if (options.cacheResponse) {
resource.completedQueries[id] = new Date().getTime();
return _this.inject(resourceName, data, options);
} else {
return _this.createInstance(resourceName, data, options);
}
});
var promise;
var strategy = options.findStrategy || options.strategy;
if (strategy === 'fallback') {
function makeFallbackCall(index) {
return _this.getAdapter((options.findFallbackAdapters || options.fallbackAdapters)[index]).find(definition, id, options)['catch'](function (err) {
index++;
if (index < options.fallbackAdapters.length) {
return makeFallbackCall(index);
} else {
return Promise.reject(err);
}
});
}
promise = makeFallbackCall(0);
} else {
promise = _this.getAdapter(options).find(definition, id, options);
}
resource.pendingQueries[id] = promise.then(function (data) {
// Query is no longer pending
delete resource.pendingQueries[id];
if (options.cacheResponse) {
resource.completedQueries[id] = new Date().getTime();
return _this.inject(resourceName, data, options);
} else {
return _this.createInstance(resourceName, data, options);
}
});
}

@@ -47,0 +67,0 @@ return resource.pendingQueries[id];

@@ -0,1 +1,2 @@

/* jshint -W082 */
var DSUtils = require('../../utils');

@@ -30,3 +31,3 @@ var DSErrors = require('../../errors');

} else {
console.warn('response is expected to be an array!');
options.errorFn('response is expected to be an array!');
resource.completedQueries[injected[idAttribute]] = date;

@@ -54,2 +55,3 @@ }

queryHash = DSUtils.toJson(params);
options.logFn('findAll', params, options);

@@ -62,5 +64,10 @@ if (options.params) {

delete resource.completedQueries[queryHash];
delete resource.queryData[queryHash];
}
if (queryHash in resource.completedQueries) {
resolve(_this.filter(resourceName, params, options));
if (options.useFilter) {
resolve(_this.filter(resourceName, params, options));
} else {
resolve(resource.queryData[queryHash]);
}
} else {

@@ -73,14 +80,34 @@ resolve();

if (!(queryHash in resource.pendingQueries)) {
resource.pendingQueries[queryHash] = _this.getAdapter(options).findAll(definition, params, options)
.then(function (data) {
delete resource.pendingQueries[queryHash];
if (options.cacheResponse) {
return processResults.call(_this, data, resourceName, queryHash, options);
} else {
DSUtils.forEach(data, function (item, i) {
data[i] = _this.createInstance(resourceName, item, options);
});
return data;
}
});
var promise;
var strategy = options.findAllStrategy || options.strategy;
if (strategy === 'fallback') {
function makeFallbackCall(index) {
return _this.getAdapter((options.findAllFallbackAdapters || options.fallbackAdapters)[index]).findAll(definition, params, options)['catch'](function (err) {
index++;
if (index < options.fallbackAdapters.length) {
return makeFallbackCall(index);
} else {
return Promise.reject(err);
}
});
}
promise = makeFallbackCall(0);
} else {
promise = _this.getAdapter(options).findAll(definition, params, options);
}
resource.pendingQueries[queryHash] = promise.then(function (data) {
delete resource.pendingQueries[queryHash];
if (options.cacheResponse) {
resource.queryData[queryHash] = processResults.call(_this, data, resourceName, queryHash, options);
resource.queryData[queryHash].$$injected = true;
return resource.queryData[queryHash];
} else {
DSUtils.forEach(data, function (item, i) {
data[i] = _this.createInstance(resourceName, item, options);
});
return data;
}
});
}

@@ -87,0 +114,0 @@

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

}
options.logFn('reap', options);
var items = [];

@@ -77,2 +78,3 @@ var now = new Date().getTime();

options.bypassCache = true;
options.logFn('refresh', id, options);
resolve(_this.get(resourceName, id));

@@ -79,0 +81,0 @@ }

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

}
options.logFn('loadRelations', instance, relations, options);

@@ -34,0 +35,0 @@ var tasks = [];

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

options = DSUtils._(definition, options);
options.logFn('save', id, options);
resolve(item);

@@ -22,0 +23,0 @@ }

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

options = DSUtils._(definition, options);
options.logFn('update', id, attrs, options);
resolve(attrs);

@@ -18,0 +19,0 @@ }

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

options = DSUtils._(definition, options);
options.logFn('updateAll', attrs, params, options);
resolve(attrs);

@@ -15,0 +16,0 @@ }

@@ -56,44 +56,74 @@ var DSUtils = require('../utils');

defaultsPrototype.idAttribute = 'id';
defaultsPrototype.actions = {};
defaultsPrototype.afterCreate = lifecycleNoopCb;
defaultsPrototype.afterCreateInstance = lifecycleNoop;
defaultsPrototype.afterDestroy = lifecycleNoopCb;
defaultsPrototype.afterEject = lifecycleNoop;
defaultsPrototype.afterInject = lifecycleNoop;
defaultsPrototype.afterReap = lifecycleNoop;
defaultsPrototype.afterUpdate = lifecycleNoopCb;
defaultsPrototype.afterValidate = lifecycleNoopCb;
defaultsPrototype.allowSimpleWhere = true;
defaultsPrototype.basePath = '';
defaultsPrototype.endpoint = '';
defaultsPrototype.useClass = true;
defaultsPrototype.keepChangeHistory = false;
defaultsPrototype.resetHistoryOnInject = true;
defaultsPrototype.beforeCreate = lifecycleNoopCb;
defaultsPrototype.beforeCreateInstance = lifecycleNoop;
defaultsPrototype.beforeDestroy = lifecycleNoopCb;
defaultsPrototype.beforeEject = lifecycleNoop;
defaultsPrototype.beforeInject = lifecycleNoop;
defaultsPrototype.beforeReap = lifecycleNoop;
defaultsPrototype.beforeUpdate = lifecycleNoopCb;
defaultsPrototype.beforeValidate = lifecycleNoopCb;
defaultsPrototype.bypassCache = false;
defaultsPrototype.cacheResponse = !!DSUtils.w;
defaultsPrototype.defaultAdapter = 'http';
defaultsPrototype.debug = true;
defaultsPrototype.eagerEject = false;
// TODO: Implement eagerInject in DS#create
defaultsPrototype.eagerInject = false;
defaultsPrototype.allowSimpleWhere = true;
defaultsPrototype.defaultAdapter = 'http';
defaultsPrototype.loadFromServer = false;
defaultsPrototype.notify = !!DSUtils.w;
defaultsPrototype.upsert = !!DSUtils.w;
defaultsPrototype.cacheResponse = !!DSUtils.w;
defaultsPrototype.bypassCache = false;
defaultsPrototype.ignoreMissing = false;
defaultsPrototype.findInverseLinks = true;
defaultsPrototype.endpoint = '';
defaultsPrototype.error = console ? function (a, b, c) {
console[typeof console.error === 'function' ? 'error' : 'log'](a, b, c);
} : false;
defaultsPrototype.errorFn = function (a, b) {
if (this.error && typeof this.error === 'function') {
try {
if (typeof a === 'string') {
throw new Error(a);
} else {
throw a;
}
} catch (err) {
a = err;
}
this.error(this.name || null, a || null, b || null);
}
};
defaultsPrototype.fallbackAdapters = ['http'];
defaultsPrototype.findBelongsTo = true;
defaultsPrototype.findHasOne = true;
defaultsPrototype.findHasMany = true;
defaultsPrototype.findInverseLinks = true;
defaultsPrototype.idAttribute = 'id';
defaultsPrototype.ignoredChanges = [/\$/];
defaultsPrototype.ignoreMissing = false;
defaultsPrototype.keepChangeHistory = false;
defaultsPrototype.loadFromServer = false;
defaultsPrototype.log = console ? function (a, b, c, d, e) {
console[typeof console.info === 'function' ? 'info' : 'log'](a, b, c, d, e);
} : false;
defaultsPrototype.logFn = function (a, b, c, d) {
if (this.debug && this.log && typeof this.log === 'function') {
this.log(this.name || null, a || null, b || null, c || null, d || null);
}
};
defaultsPrototype.maxAge = false;
defaultsPrototype.notify = !!DSUtils.w;
defaultsPrototype.reapAction = !!DSUtils.w ? 'inject' : 'none';
defaultsPrototype.reapInterval = !!DSUtils.w ? 30000 : false;
defaultsPrototype.reapAction = !!DSUtils.w ? 'inject' : 'none';
defaultsPrototype.maxAge = false;
defaultsPrototype.ignoredChanges = [/\$/];
defaultsPrototype.beforeValidate = lifecycleNoopCb;
defaultsPrototype.resetHistoryOnInject = true;
defaultsPrototype.strategy = 'single';
defaultsPrototype.upsert = !!DSUtils.w;
defaultsPrototype.useClass = true;
defaultsPrototype.useFilter = false;
defaultsPrototype.validate = lifecycleNoopCb;
defaultsPrototype.afterValidate = lifecycleNoopCb;
defaultsPrototype.beforeCreate = lifecycleNoopCb;
defaultsPrototype.afterCreate = lifecycleNoopCb;
defaultsPrototype.beforeUpdate = lifecycleNoopCb;
defaultsPrototype.afterUpdate = lifecycleNoopCb;
defaultsPrototype.beforeDestroy = lifecycleNoopCb;
defaultsPrototype.afterDestroy = lifecycleNoopCb;
defaultsPrototype.beforeCreateInstance = lifecycleNoop;
defaultsPrototype.afterCreateInstance = lifecycleNoop;
defaultsPrototype.beforeInject = lifecycleNoop;
defaultsPrototype.afterInject = lifecycleNoop;
defaultsPrototype.beforeEject = lifecycleNoop;
defaultsPrototype.afterEject = lifecycleNoop;
defaultsPrototype.beforeReap = lifecycleNoop;
defaultsPrototype.afterReap = lifecycleNoop;
defaultsPrototype.defaultFilter = function (collection, resourceName, params, options) {

@@ -265,2 +295,3 @@ var _this = this;

function DS(options) {
var _this = this;
options = options || {};

@@ -281,11 +312,12 @@

if (Schemator || options.schemator) {
this.schemator = options.schemator || new Schemator();
_this.schemator = options.schemator || new Schemator();
}
this.store = {};
this.definitions = {};
this.adapters = {};
this.defaults = new Defaults();
this.observe = DSUtils.observe;
DSUtils.deepMixIn(this.defaults, options);
_this.store = {};
_this.definitions = {};
_this.adapters = {};
_this.defaults = new Defaults();
_this.observe = DSUtils.observe;
DSUtils.deepMixIn(_this.defaults, options);
_this.defaults.logFn('new data store created', _this.defaults);
}

@@ -296,16 +328,34 @@

dsPrototype.getAdapter = function (options) {
var errorIfNotExist = false;
options = options || {};
return this.adapters[options.adapter] || this.adapters[options.defaultAdapter];
this.defaults.logFn('getAdapter', options);
if (DSUtils.isString(options)) {
errorIfNotExist = true;
options = {
adapter: options
};
}
var adapter = this.adapters[options.adapter];
if (adapter) {
return adapter;
} else if (errorIfNotExist) {
throw new Error(options.adapter + ' is not a registered adapter!');
} else {
return this.adapters[options.defaultAdapter];
}
};
dsPrototype.registerAdapter = function (name, Adapter, options) {
var _this = this;
options = options || {};
_this.defaults.logFn('registerAdapter', name, Adapter, options);
if (DSUtils.isFunction(Adapter)) {
this.adapters[name] = new Adapter(options);
_this.adapters[name] = new Adapter(options);
} else {
this.adapters[name] = Adapter;
_this.adapters[name] = Adapter;
}
if (options.default) {
this.defaults.defaultAdapter = name;
_this.defaults.defaultAdapter = name;
}
_this.defaults.logFn('default adapter is ' + _this.defaults.defaultAdapter);
};

@@ -312,0 +362,0 @@

@@ -58,2 +58,4 @@ /*jshint evil:true, loopfunc:true*/

def.logFn('Preparing resource.');
if (!DSUtils.isString(def.idAttribute)) {

@@ -170,3 +172,3 @@ throw new DSErrors.IA('"idAttribute" must be a string!');

if (def.methods && field in def.methods) {
console.warn('Computed property "' + field + '" conflicts with previously defined prototype method!');
def.errorFn('Computed property "' + field + '" conflicts with previously defined prototype method!');
}

@@ -180,3 +182,3 @@ var deps;

if (deps.length) {
console.warn('Use the computed property array syntax for compatibility with minified code!');
def.errorFn('Use the computed property array syntax for compatibility with minified code!');
}

@@ -237,2 +239,3 @@ }

completedQueries: {},
queryData: {},
pendingQueries: {},

@@ -278,5 +281,21 @@ index: {},

DSUtils.forOwn(def.actions, function addAction(action, name) {
if (def[name]) {
throw new Error('Cannot override existing method "' + name + '"!');
}
def[name] = function (options) {
options = options || {};
var config = DSUtils.deepMixIn({}, action);
config.url = DSUtils.makePath(def.getEndpoint(null, options), name);
config.method = config.method || 'GET';
DSUtils.deepMixIn(config, options);
return _this.getAdapter(action.adapter || 'http').HTTP(config);
};
});
// Mix-in events
DSUtils.Events(def);
def.logFn('Done preparing resource.');
return def;

@@ -283,0 +302,0 @@ } catch (err) {

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

options.logFn('eject', id, options);
for (var i = 0; i < resource.collection.length; i++) {

@@ -49,2 +51,7 @@ if (resource.collection[i][definition.idAttribute] == id) {

});
DSUtils.forOwn(resource.queryData, function (items) {
if (items.$$injected) {
DSUtils.remove(items, item);
}
});
delete resource.changeHistories[id];

@@ -51,0 +58,0 @@ delete resource.modified[id];

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

}
definition.logFn('ejectAll', params, options);
var resource = _this.store[resourceName];

@@ -16,0 +19,0 @@ if (DSUtils.isEmpty(params)) {

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

options.logFn('filter', params, options);
// Protect against null

@@ -19,0 +21,0 @@ params = params || {};

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

var IA = DSErrors.IA;
var R = DSErrors.R;

@@ -20,2 +21,4 @@ function changes(resourceName, id, options) {

options.logFn('changes', id, options);
var item = _this.get(resourceName, id);

@@ -57,4 +60,6 @@ if (item) {

definition.logFn('changeHistory', id);
if (!definition.keepChangeHistory) {
console.warn('changeHistory is disabled for this resource!');
definition.errorFn('changeHistory is disabled for this resource!');
} else {

@@ -79,2 +84,4 @@ if (resourceName) {

throw new NER(resourceName);
} else if (!instance) {
throw new R('Item not in the store!');
} else if (!DSUtils.isObject(instance) && !DSUtils.isString(instance) && !DSUtils.isNumber(instance)) {

@@ -84,5 +91,3 @@ throw new IA('"instance" must be an object, string or number!');

if (DSUtils.isString(instance) || DSUtils.isNumber(instance)) {
instance = _this.get(resourceName, instance);
}
definition.logFn('compute', instance);

@@ -110,2 +115,4 @@ DSUtils.forOwn(definition.computed, function (fn, field) {

options.logFn('createInstance', attrs, options);
if (options.notify) {

@@ -150,2 +157,4 @@ options.beforeCreateInstance(options, attrs);

options.logFn('get', id, options);
// cache miss, request resource from server

@@ -163,6 +172,7 @@ var item = _this.store[resourceName].index[id];

var _this = this;
var definition = _this.definitions[resourceName];
var resource = _this.store[resourceName];
var collection = [];
if (!_this.definitions[resourceName]) {
if (!definition) {
throw new NER(resourceName);

@@ -173,2 +183,4 @@ } else if (ids && !DSUtils.isArray(ids)) {

definition.logFn('getAll', ids);
if (DSUtils.isArray(ids)) {

@@ -190,6 +202,7 @@ var length = ids.length;

var _this = this;
var definition = _this.definitions[resourceName];
id = DSUtils.resolveId(_this.definitions[resourceName], id);
id = DSUtils.resolveId(definition, id);
if (!_this.definitions[resourceName]) {
if (!definition) {
throw new NER(resourceName);

@@ -200,2 +213,4 @@ } else if (!DSUtils.isString(id) && !DSUtils.isNumber(id)) {

definition.logFn('hasChanges', id);
// return resource from cache

@@ -217,2 +232,5 @@ if (_this.get(resourceName, id)) {

}
definition.logFn('lastModified', id);
if (id) {

@@ -235,2 +253,5 @@ if (!(id in resource.modified)) {

}
definition.logFn('lastSaved', id);
if (!(id in resource.saved)) {

@@ -254,2 +275,4 @@ resource.saved[id] = 0;

definition.logFn('previous', id);
// return resource from cache

@@ -256,0 +279,0 @@ return resource.previousAttributes[id] ? DSUtils.copy(resource.previousAttributes[id]) : undefined;

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

if (definition.idAttribute in changed) {
console.error('Doh! You just changed the primary key of an object! Your data for the' + name +
definition.errorFn('Doh! You just changed the primary key of an object! Your data for the "' + name +
'" resource is now in an undefined (probably broken) state.');

@@ -92,3 +92,3 @@ }

var error = new DSErrors.R(definition.name + '.inject: "attrs" must contain the property specified by `idAttribute`!');
console.error(error);
options.errorFn(error);
throw error;

@@ -116,3 +116,3 @@ } else {

} catch (err) {
console.error(definition.name + ': Failed to inject ' + def.type + ' relation: "' + relationName + '"!', err);
options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!');
}

@@ -130,3 +130,3 @@ }

} catch (err) {
console.error(definition.name + ': Failed to inject ' + def.type + ' relation: "' + relationName + '"!', err);
options.errorFn(err, 'Failed to inject ' + def.type + ' relation: "' + relationName + '"!');
}

@@ -192,4 +192,3 @@ }

} catch (err) {
console.error(err.stack);
console.error('inject failed!', definition.name, attrs);
options.errorFn(err, attrs);
}

@@ -228,2 +227,4 @@ }

options.logFn('inject', attrs, options);
if (options.notify) {

@@ -230,0 +231,0 @@ options.beforeInject(options, attrs);

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

}
definition.logFn('link', id, relations);
var linked = _this.get(resourceName, id);

@@ -20,0 +23,0 @@

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

}
definition.logFn('linkAll', params, relations);
var linked = _this.filter(resourceName, params);

@@ -17,0 +20,0 @@

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

}
definition.logFn('linkInverse', id, relations);
var linked = _this.get(resourceName, id);

@@ -20,0 +23,0 @@

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

}
definition.logFn('unlinkInverse', id, relations);
var linked = _this.get(resourceName, id);

@@ -20,0 +23,0 @@

@@ -9,3 +9,11 @@ var DS = require('./datastore');

DSUtils: require('./utils'),
DSErrors: require('./errors')
DSErrors: require('./errors'),
version: {
full: '<%= pkg.version %>',
major: parseInt('<%= major %>', 10),
minor: parseInt('<%= minor %>', 10),
patch: parseInt('<%= patch %>', 10),
alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,
beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false
}
};

@@ -46,3 +46,3 @@ describe('DS#find', function () {

assert.equal(_this.requests[1].url, 'http://test.js-data.io/posts/5');
_this.requests[1].respond(200, {'Content-Type': 'application/json'}, JSON.stringify(p1));
_this.requests[1].respond(200, { 'Content-Type': 'application/json' }, JSON.stringify(p1));
}, 30);

@@ -62,3 +62,3 @@ }).catch(function (err) {

assert.equal(_this.requests[0].url, 'http://test.js-data.io/posts/5');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify(p1));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, JSON.stringify(p1));
}, 30);

@@ -87,3 +87,3 @@ });

assert.equal(_this.requests[0].url, 'http://test.js-data.io/posts/5');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify(p1));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, JSON.stringify(p1));
}, 30);

@@ -107,3 +107,3 @@ });

assert.equal(_this.requests[0].url, 'http://test.js-data.io/posts/5');
_this.requests[0].respond(404, {'Content-Type': 'text/plain'}, 'Not Found');
_this.requests[0].respond(404, { 'Content-Type': 'text/plain' }, 'Not Found');
}, 30);

@@ -164,3 +164,3 @@ });

assert.equal(_this.requests[3].method, 'get');
_this.requests[3].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson(comment19));
_this.requests[3].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson(comment19));
}, 30);

@@ -176,3 +176,3 @@ }).catch(function (err) {

assert.equal(_this.requests[2].method, 'get');
_this.requests[2].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson(testComment));
_this.requests[2].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson(testComment));
}, 30);

@@ -187,3 +187,3 @@ }).catch(function () {

assert.equal(_this.requests[1].method, 'get');
_this.requests[1].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson(testComment));
_this.requests[1].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson(testComment));
}, 30);

@@ -198,5 +198,59 @@ }).catch(function () {

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson(testComment));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson(testComment));
}, 30);
});
it('should use the fallback strategy', function (done) {
var _this = this;
var Thing = store.defineResource({
name: 'thing',
strategy: 'fallback',
fallbackAdapters: ['localstorage', 'http']
});
Thing.find(1).then(function (thing) {
localStorage.setItem(store.adapters.localstorage.getIdPath(Thing, Thing, 2), JSON.stringify({
stuff: 'thing',
id: 2
}));
Thing.find(2, {
fallbackAdapters: ['http', 'localstorage']
}).then(function (thing) {
assert.equal(localStorage.getItem(store.adapters.localstorage.getIdPath(Thing, Thing, thing.id)), DSUtils.toJson(thing));
done();
}).catch(function (err) {
console.log(err.stack);
done('Should not have failed!');
});
setTimeout(function () {
try {
assert.equal(2, _this.requests.length);
assert.equal(_this.requests[1].url, 'http://test.js-data.io/thing/2');
assert.equal(_this.requests[1].method, 'get');
_this.requests[1].respond(500, { 'Content-Type': 'application/json' }, '500 - Internal Servier Error');
} catch (err) {
console.error(err.stack);
}
}, 30);
}).catch(function (err) {
console.log(err.stack);
done('Should not have failed!');
});
setTimeout(function () {
try {
assert.equal(1, _this.requests.length);
assert.equal(_this.requests[0].url, 'http://test.js-data.io/thing/1');
assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, JSON.stringify({
thing: 'stuff',
id: 1
}));
} catch (err) {
console.error(err.stack);
}
}, 30);
});
});

@@ -47,3 +47,3 @@ describe('DS#findAll', function () {

assert.equal(_this.requests[1].method, 'get');
_this.requests[1].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([p1, p2, p3, p4]));
_this.requests[1].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([p1, p2, p3, p4]));
}, 30);

@@ -59,3 +59,3 @@ }).catch(function (err) {

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([p1, p2, p3, p4]));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([p1, p2, p3, p4]));
}, 30);

@@ -84,3 +84,3 @@ });

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([
{ author: 'John', age: 30 },

@@ -114,3 +114,3 @@ { author: 'Sally', age: 31 }

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([p1, p2, p3, p4]));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([p1, p2, p3, p4]));
}, 30);

@@ -135,3 +135,3 @@ });

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(404, {'Content-Type': 'text/plain'}, 'Not Found');
_this.requests[0].respond(404, { 'Content-Type': 'text/plain' }, 'Not Found');
}, 30);

@@ -160,3 +160,3 @@ });

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([p1, p2, p3, p4]));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([p1, p2, p3, p4]));
}, 30);

@@ -197,3 +197,3 @@ });

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([p4, p5]));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([p4, p5]));
}, 30);

@@ -249,3 +249,3 @@ });

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([u1, u2]));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([u1, u2]));
}, 30);

@@ -311,3 +311,3 @@ });

assert.equal(_this.requests[2].method, 'get');
_this.requests[2].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([testComment, testComment2]));
_this.requests[2].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([testComment, testComment2]));
}, 30);

@@ -322,3 +322,3 @@ }).catch(function () {

assert.equal(_this.requests[1].method, 'get');
_this.requests[1].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([testComment, testComment2]));
_this.requests[1].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([testComment, testComment2]));
}, 30);

@@ -333,5 +333,80 @@ }).catch(function () {

assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, {'Content-Type': 'application/json'}, DSUtils.toJson([testComment, testComment2]));
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([testComment, testComment2]));
}, 30);
});
it('should use the fallback strategy', function (done) {
var _this = this;
var Thing = store.defineResource({
name: 'thing',
strategy: 'fallback',
fallbackAdapters: ['http', 'localstorage']
});
store.adapters.localstorage.update(Thing, 1, {
thing: 'stuff',
id: 1
}).then(function (thing) {
Thing.findAll({ thing: 'stuff' }).then(function (things) {
console.log(things);
assert.deepEqual(DSUtils.toJson([{
thing: 'stuff',
id: 1
}]), DSUtils.toJson(things));
done();
}).catch(function (err) {
console.log(err.stack);
done('Should not have failed!');
});
setTimeout(function () {
try {
assert.equal(1, _this.requests.length);
assert.equal(_this.requests[0].url, 'http://test.js-data.io/thing?thing=stuff');
assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(500, { 'Content-Type': 'text/plain' }, '500 - Internal Server Error');
} catch (err) {
console.error(err.stack);
}
}, 30);
});
});
it('should "useFilter" and not "useFilter"', function (done) {
var _this = this;
store.findAll('post', {}).then(function (data) {
assert.deepEqual(JSON.stringify(data), JSON.stringify([p1, p2, p3, p4]));
store.eject('post', p1.id);
assert.deepEqual(JSON.stringify(store.store.post.queryData['{}']), JSON.stringify([p2, p3, p4]));
store.findAll('post', {}).then(function (data) {
assert.isTrue(data === store.store.post.queryData['{}']);
assert.deepEqual(JSON.stringify(data), JSON.stringify([p2, p3, p4]));
store.findAll('post', {}, { useFilter: true }).then(function (data) {
assert.isFalse(data === store.store.post.queryData);
assert.deepEqual(JSON.stringify(data), JSON.stringify([p2, p3, p4]));
done();
}).catch(function (err) {
console.error(err.stack);
done(err);
});
}).catch(function (err) {
console.error(err.stack);
done(err);
});
}).catch(function (err) {
console.error(err.stack);
done(err);
});
setTimeout(function () {
assert.equal(1, _this.requests.length);
assert.equal(_this.requests[0].url, 'http://test.js-data.io/posts');
assert.equal(_this.requests[0].method, 'get');
_this.requests[0].respond(200, { 'Content-Type': 'application/json' }, DSUtils.toJson([p1, p2, p3, p4]));
}, 30);
});
});

@@ -223,2 +223,49 @@ describe('DS#defineResource', function () {

});
it('should allow definition of "actions"', function (done) {
var _this = this;
var newStore = new JSData.DS({
debug: false,
actions: {
test: {
method: 'POST'
}
}
});
newStore.registerAdapter('http', dsHttpAdapter, { default: true });
var Thing = newStore.defineResource({
name: 'thing',
actions: {
count: {
method: 'GET'
}
}
});
Thing.test().then(function (data) {
assert.equal(data.data, 'stuff');
Thing.count().then(function (data) {
assert.equal(data.data, 'stuff2');
done();
});
setTimeout(function () {
assert.equal(2, _this.requests.length);
assert.equal(_this.requests[1].url, 'thing/count');
assert.equal(_this.requests[1].method, 'GET');
_this.requests[1].respond(200, {'Content-Type': 'text/plain'}, 'stuff2');
}, 30);
});
setTimeout(function () {
assert.equal(1, _this.requests.length);
assert.equal(_this.requests[0].url, 'thing/test');
assert.equal(_this.requests[0].method, 'POST');
_this.requests[0].respond(200, {'Content-Type': 'text/plain'}, 'stuff');
}, 30);
});
});

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