UNPKG

ko-mapping

Version:
3 lines (2 loc) 9.52 kB
(e=>{if("function"==typeof require&&"object"==typeof exports&&"object"==typeof module)e(require("knockout"),exports);else if("function"==typeof define&&define.amd)define(["knockout","exports"],e);else{if("undefined"==typeof ko)throw new Error("Knockout is required, please ensure it is loaded before loading this mapping plug-in");e(ko,ko.mapping={})}})(function(W,D){W.mapping=D;let s=!1;var S,A,N="__ko_mapping__",p=W.dependentObservable,i=0,o=["create","update","key","arrayChanged"],M={},e={include:["_destroy"],ignore:[],copy:[],observe:[]},u=e;function a(e,r){var t,n;for(t in r)r.hasOwnProperty(t)&&r[t]&&(n=D.getType(e[t]),t&&e[t]&&"array"!==n&&"string"!==n?a(e[t],r[t]):(n="array"===D.getType(e[t])&&"array"===D.getType(r[t]),e[t]=n?function(){for(var e,r,t,n=arguments,a=n.length,i={},o=[];a--;)for(e=(t=n[a]).length;e--;)i[r=t[e]]||(i[r]=1,o.push(r));return o}(e[t],r[t]):r[t]))}function C(e,r){var t={};return a(t,e),a(t,r),t}function c(e,r){for(var t=C({},e),n=o.length-1;0<=n;n--){var a=o[n];t[a]&&(t[""]instanceof Object||(t[""]={}),t[""][a]=t[a],delete t[a])}return r&&(t.ignore=l(r.ignore,t.ignore),t.include=l(r.include,t.include),t.copy=l(r.copy,t.copy),t.observe=l(r.observe,t.observe)),t.ignore=l(t.ignore,u.ignore),t.include=l(t.include,u.include),t.copy=l(t.copy,u.copy),t.observe=l(t.observe,u.observe),t.mappedProperties=t.mappedProperties||{},t.copiedProperties=t.copiedProperties||{},t}function l(e,r){return void 0===e?e=[]:"array"!==D.getType(e)&&(e=[e]),void 0===r?r=[]:"array"!==D.getType(r)&&(r=[r]),W.utils.arrayGetDistinctValues(e.concat(r))}function q(u,e){var r=W.dependentObservable,e=(W.dependentObservable=function(e,r,t){t=t||{};var n,a=(t=e&&"object"==typeof e?e:t).deferEvaluation,i=t.pure,o=!1,e=(t.deferEvaluation=!0,p(e,r,t));return a||i||(n=e,r=W.dependentObservable,W.dependentObservable=p,t=W.isWriteableObservable(n),W.dependentObservable=r,r=p({read:function(){return o||(W.utils.arrayRemoveItem(u,n),o=!0),n.apply(n,arguments)},write:t&&function(e){return n(e)},deferEvaluation:!0}),s&&(r._wrapper=!0),r.__DO=n,e=r,u.push(e)),e},W.dependentObservable.fn=p.fn,W.computed=W.dependentObservable,e());return W.dependentObservable=r,W.computed=W.dependentObservable,e}function F(e,r,t){for(var n=0,a=e.length;n<a;n++)if(!0!==t[n]&&e[n]===r)return n;return null}function f(e,r){var t;return r&&(t=r(e)),"undefined"===D.getType(t)&&(t=e),W.utils.unwrapObservable(t)}function R(e,r,t){for(var n=0,a=(e=W.utils.unwrapObservable(e)).length;n<a;n++){var i=e[n];if(f(i,t)===r)return i}throw new Error("When calling ko.update*, the key '"+r+"' was not found!")}function $(e,r){return W.utils.arrayMap(W.utils.unwrapObservable(e),function(e){return r?f(e,r):e})}function G(e,r){if("array"===D.getType(e))for(var t=0;t<e.length;t++)r(t);else for(var n in e)r(n)}function K(e){return null!==e&&("object"===(e=D.getType(e))||"array"===e)}function V(e){return(""+e).replace(/~/g,"~~").replace(/\[/g,"~[").replace(/]/g,"~]").replace(/\./g,"~.")}function v(){var n=[],a=[];this.save=function(e,r){var t=W.utils.arrayIndexOf(n,e);0<=t?a[t]=r:(n.push(e),a.push(r))},this.get=function(e){e=W.utils.arrayIndexOf(n,e);return 0<=e?a[e]:void 0}}function d(){function t(e){var r;try{r=e}catch(e){r="$$$"}return e=n[r],n.hasOwnProperty(r)||(e=new v,n[r]=e),e}var n={};this.save=function(e,r){t(e).save(e,r)},this.get=function(e){return t(e).get(e)}}D.isMapped=function(e){e=W.utils.unwrapObservable(e);return e&&e[N]},D.fromJS=function(e){if(0===arguments.length)throw new Error("When calling ko.fromJS, pass the object you want to convert.");try{i||(S=[],A=new d),i++,2===arguments.length&&(arguments[1][N]?t=arguments[1]:r=arguments[1]),3===arguments.length&&(r=arguments[1],t=arguments[2]);var r,t,n=function a(i,o,u,t,r,s,e){var n="array"===D.getType(W.utils.unwrapObservable(o));s=s||"";D.isMapped(i)&&(d=W.utils.unwrapObservable(i)[N],u=C(d,u));var p={data:o,parent:e||r};var l=function(){return u[t]&&u[t].create instanceof Function};var f=function(e){return q(S,function(){return W.utils.unwrapObservable(r)instanceof Array?u[t].create({data:e||p.data,parent:p.parent,skip:M}):u[t].create({data:e||p.data,parent:p.parent})})};var c=function(){return u[t]&&u[t].update instanceof Function};var v=function(e,r){r={data:r||p.data,parent:p.parent,target:W.utils.unwrapObservable(e)};return W.isWriteableObservable(e)&&(r.observable=e),u[t].update(r)};var d=A.get(o);if(d)return d;t=t||"";if(n){var b,y,g,O=[],e=!1,h=function(e){return e},d=(u[t]&&u[t].key&&(h=u[t].key,e=!0),W.isObservable(i)||((i=W.observableArray([])).mappedRemove=function(r){var t="function"==typeof r?r:function(e){return e===h(r)};return i.remove(function(e){return t(h(e))})},i.mappedRemoveAll=function(e){var r=$(e,h);return i.remove(function(e){return-1!==W.utils.arrayIndexOf(r,h(e))})},i.mappedDestroy=function(r){var t="function"==typeof r?r:function(e){return e===h(r)};return i.destroy(function(e){return t(h(e))})},i.mappedDestroyAll=function(e){var r=$(e,h);return i.destroy(function(e){return-1!==W.utils.arrayIndexOf(r,h(e))})},i.mappedIndexOf=function(e){var r=$(i(),h),e=h(e);return W.utils.arrayIndexOf(r,e)},i.mappedGet=function(e){return i()[i.mappedIndexOf(e)]},i.mappedCreate=function(e){if(-1!==i.mappedIndexOf(e))throw new Error("There already is an object with the key that you specified.");var r=l()?f(e):e;return c()&&(e=v(r,e),W.isWriteableObservable(r)?r(e):r=e),i.push(r),r}),$(W.utils.unwrapObservable(i),h).sort()),n=$(o,h),w=(e&&n.sort(),W.utils.compareArrays(d,n)),m={},k=W.utils.unwrapObservable(o),T={},x=!0;for(b=0,y=k.length;b<y;b++){if(void 0===(g=h(k[b]))||g instanceof Object){x=!1;break}T[g]=k[b]}var j,I,E=[],P=0;for(b=0,y=w.length;b<y;b++){g=w[b];var _,J=s+"["+V(b)+"]";switch(g.status){case"added":j=x?T[g.value]:R(W.utils.unwrapObservable(o),g.value,h),_=a(void 0,j,u,t,i,J,r),l()||(_=W.utils.unwrapObservable(_)),I=F(W.utils.unwrapObservable(o),j,m),_===M?P++:E[I-P]=_,m[I]=!0;break;case"retained":j=x?T[g.value]:R(W.utils.unwrapObservable(o),g.value,h),_=R(i,g.value,h),a(_,j,u,t,i,J,r),I=F(W.utils.unwrapObservable(o),j,m),E[I]=_,m[I]=!0;break;case"deleted":_=R(i,g.value,h)}O.push({event:g.status,item:_})}i(E),u[t]&&u[t].arrayChanged&&W.utils.arrayForEach(O,function(e){u[t].arrayChanged(e.event,e.item)})}else if(K(o)){if(!(i=W.utils.unwrapObservable(i))){if(l())return e=f(),e=c()?v(e):e;if(c())return v();i={}}if(c()&&(i=v(i)),A.save(o,i),c())return i;G(o,function(e){var r,t,n=s.length?s+"."+V(e):V(e);-1===W.utils.arrayIndexOf(u.ignore,n)&&(-1!==W.utils.arrayIndexOf(u.copy,n)?i[e]=o[e]:"object"!=typeof o[e]&&"array"!==D.getType(o[e])&&0<u.observe.length&&-1===W.utils.arrayIndexOf(u.observe,n)?(i[e]=o[e],u.copiedProperties[n]=!0):(t=A.get(o[e]),r=a(i[e],o[e],u,e,i,n,i),t=t||r,0<u.observe.length&&-1===W.utils.arrayIndexOf(u.observe,n)?(i[e]=W.utils.unwrapObservable(t),u.copiedProperties[n]=!0):(W.isWriteableObservable(i[e])?(t=W.utils.unwrapObservable(t),i[e]()!==t&&i[e](t)):(t=void 0===i[e]?t:W.utils.unwrapObservable(t),i[e]=t),u.mappedProperties[n]=!0)))})}else if("function"===D.getType(o))i=c()?W.isWriteableObservable(o)?(o(v(o)),o):v(o):o;else{if(W.isWriteableObservable(i))return d=c()?v(i):W.utils.unwrapObservable(o),i(d),d;n=l()||c();if(i=l()?f():W.observable(W.utils.unwrapObservable(o)),c()&&i(v(i)),n)return i}return i}(t,e,r=c(r=t?C(r,t[N]):r));if(t&&(n=t),!--i)for(;S.length;){var a=S.pop();a&&(a(),a.__DO.throttleEvaluation=a.throttleEvaluation)}return n[N]=C(n[N],r),n}catch(e){throw i=0,e}},D.fromJSON=function(e){var r=Array.prototype.slice.call(arguments,0);return r[0]=W.utils.parseJson(e),D.fromJS.apply(this,r)},D.toJS=function(e,r){if(u||D.resetDefaultOptions(),0===arguments.length)throw new Error("When calling ko.mapping.toJS, pass the object you want to convert.");if("array"!==D.getType(u.ignore))throw new Error("ko.mapping.defaultOptions().ignore should be an array.");if("array"!==D.getType(u.include))throw new Error("ko.mapping.defaultOptions().include should be an array.");if("array"!==D.getType(u.copy))throw new Error("ko.mapping.defaultOptions().copy should be an array.");return r=c(r,e[N]),D.visitModel(e,function(e){return W.utils.unwrapObservable(e)},r)},D.toJSON=function(e,r,t,n){e=D.toJS(e,r);return W.utils.stringifyJson(e,t,n)},D.defaultOptions=function(){if(!(0<arguments.length))return u;u=arguments[0]},D.resetDefaultOptions=function(){u={include:e.include.slice(0),ignore:e.ignore.slice(0),copy:e.copy.slice(0),observe:e.observe.slice(0)}},D.getType=function(e){if(e&&"object"==typeof e){if(e.constructor===Date)return"date";if(e.constructor===Array)return"array"}return typeof e},D.visitModel=function(e,u,s){(s=s||{}).visitedObjects=s.visitedObjects||new d;var p,l=W.utils.unwrapObservable(e);if(!K(l))return u(e,s.parentName);s=c(s,l[N]),u(e,s.parentName),p="array"===D.getType(l)?[]:{},s.visitedObjects.save(e,p);var f=s.parentName;return G(l,function(e){var r=V(e);if(!s.ignore||-1===W.utils.arrayIndexOf(s.ignore,r)){var t=l[e];if(s.parentName=(a=e,i=(n=f)||"","array"===D.getType(l)?n&&(i+="["+V(a)+"]"):(n&&(i+="."),i+=V(a)),i),-1===W.utils.arrayIndexOf(s.copy,r)&&-1===W.utils.arrayIndexOf(s.include,r)){var n=l[N];if(n){var a=n.mappedProperties;if(a&&!a[r]){var i=n.copiedProperties;if(i&&!i[r]&&"array"!==D.getType(l))return}}}switch(D.getType(W.utils.unwrapObservable(t))){case"object":case"array":case"undefined":var o=s.visitedObjects.get(t);p[e]="undefined"!==D.getType(o)?o:D.visitModel(t,u,s);break;default:p[e]=u(t,s.parentName)}}}),p}}); //# sourceMappingURL=knockout.mapping.min.js.map