!function(e,t){"function"==typeof define&&define.amd?define(["backbone"],t):"object"==typeof module&&module.exports?module.exports=t(require("backbone")):e.ModelDecorator=t(e.Backbone)}(this,function(e){var t=function(){"use strict";function t(e,t,r,i,n){var o=!1;if(i||n||!t.hasOwnProperty(r)){var a={get:n?n.bind(e):c.createPropertyGetter(e,r),enumerable:!0,configurable:!0};i!==!0&&(a.set=i?i.bind(e):c.createPropertySetter(e,r)),Object.defineProperty(t,r,a),o=!0}return o}function r(e,r,i){if(i)for(var n in i)t(e,r,n)}function i(e,r,i,n){return t(this,this.properties,e,i,n)||1!==arguments.length?(r=r||{},this.propertyOptions[e]=r):r=this.propertyOptions[e],r}function n(e){e=e||this.attributes;var t=a(this,this.properties);r(this,t,e)}function o(e){var t=a(e,this);r(e,t,e.attributes),r(e,t,e.propertyOptions),r(e,t,e.defaults)}function a(e,t){var r;switch(c.facadeType){case c.USE_MODEL:r=e;break;case c.USE_FACADE:default:r=t}return r}function u(){Object.defineProperty(this,"propertyOptions",{value:this.propertyOptions||{},writable:!1,enumerable:!1,configurable:!1});var e=new o(this);c.facadeType!==c.USE_MODEL&&Object.defineProperty(this,c.facadeFieldName,{value:e,writable:!1,enumerable:!1,configurable:!1})}var c=e.Model.extend({initialize:u,property:i,validateProperties:n});Object.defineProperties(c,{USE_MODEL:{value:"model"},USE_FACADE:{value:"facade"},facadeType:{value:"facade",writable:!0},DEFAULT_FACADE_FIELD_NAME:{value:"properties"},facadeFieldName:{get:function(){return f},set:function(e){if(e=String(e),!e)throw new Error("Value for ModelDecorator.facadeFieldName must be proper identifier.");f=e}}});var f=c.DEFAULT_FACADE_FIELD_NAME;return c.createPropertyGetter=function(e,t){return function(){return e.get(t)}},c.createPropertySetter=function(e,t){return function(r){var i={};i[t]=r,e.set(i,e.propertyOptions[t])}},c}();return t});