object-observer
Advanced tools
Comparing version 0.2.0 to 0.2.1
@@ -6,3 +6,4 @@ (function (scope) { | ||
targetsToObserved = new WeakMap(), | ||
observedToObservable = new WeakMap(); | ||
observedToObservable = new WeakMap(), | ||
nonObservables = ['Date', 'Blob', 'Number', 'String', 'Boolean', 'Error', 'SyntaxError', 'TypeError', 'URIError', 'Function', 'Promise', 'RegExp']; | ||
@@ -14,3 +15,3 @@ function copyShallow(target) { | ||
} else { | ||
result = Object.assign({}, target); | ||
result = Object.assign(new target.constructor(), target); | ||
} | ||
@@ -20,2 +21,6 @@ return result; | ||
function isNonObservable(target) { | ||
return nonObservables.indexOf(target.constructor.name) >= 0; | ||
} | ||
function proxiedArrayGet(target, key) { | ||
@@ -281,3 +286,3 @@ var result, | ||
graph.forEach(function (element, index) { | ||
if (element && typeof element === 'object') { | ||
if (element && typeof element === 'object' && !isNonObservable(element)) { | ||
graph[index] = new Observed(element, index, parentObserved).proxy; | ||
@@ -290,3 +295,3 @@ } | ||
Reflect.ownKeys(graph).forEach(function (key) { | ||
if (graph[key] && typeof graph[key] === 'object') { | ||
if (graph[key] && typeof graph[key] === 'object' && !isNonObservable(graph[key])) { | ||
graph[key] = new Observed(graph[key], key, parentObserved).proxy; | ||
@@ -452,2 +457,4 @@ } | ||
throw new Error('target object MUST NOT have nor own neither inherited properties from the following list: "observe", "unobserve", "revoke"'); | ||
} else if (isNonObservable(target)) { | ||
throw new Error(target + ' found to be one of non-observable object types: ' + nonObservables); | ||
} | ||
@@ -454,0 +461,0 @@ var observed = new Observed(target), |
@@ -1,1 +0,1 @@ | ||
!function(a){"use strict";function b(a){var b;return b=Array.isArray(a)?a.slice():Object.assign({},a)}function c(a,b){var c,d=q.get(a),e=r.get(d.root);return c="pop"===b?function(){var c,f,g;return c=a.length-1,f=Reflect.apply(a[b],a,arguments),f&&"object"==typeof f&&(f=p.get(f),q.get(f).revoke()),g=[new l(d.path.concat(c),f)],o(e.callbacks,g),f}:"push"===b?function(){var c,f,g,i=[];return c=Array.from(arguments),g=a.length,c.forEach(function(a,b){a&&"object"==typeof a&&(c[b]=new h(a,g+b,d).proxy),i.push(new j(d.path.concat(g+b),a))}),f=Reflect.apply(a[b],a,c),o(e.callbacks,i),f}:"shift"===b?function(){var c,f,g;return c=Reflect.apply(a[b],a,arguments),c&&"object"==typeof c&&(c=p.get(c),q.get(c).revoke()),a.forEach(function(a,b){a&&"object"==typeof a&&(g=q.get(p.get(a)),g?g.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f=[new l(d.path.concat(0),c)],o(e.callbacks,f),c}:"unshift"===b?function(){var c,f,g,i=[];c=Array.from(arguments),c.forEach(function(a,b){a&&"object"==typeof a&&(c[b]=new h(a,b,d).proxy)}),f=Reflect.apply(a[b],a,c),a.forEach(function(a,b){a&&"object"==typeof a&&(g=q.get(p.get(a)),g?g.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))});for(var k=0;k<c.length;k++)i.push(new j(d.path.concat(k),a[k]));return o(e.callbacks,i),f}:"reverse"===b?function(){var c,d,f=[];return c=Reflect.apply(a[b],a,arguments),a.forEach(function(a,b){a&&"object"==typeof a&&(d=q.get(p.get(a)),d?d.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f.push(new m),o(e.callbacks,f),c}:"sort"===b?function(){var c,d,f=[];return c=Reflect.apply(a[b],a,arguments),a.forEach(function(a,b){a&&"object"==typeof a&&(d=q.get(p.get(a)),d?d.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f.push(new n),o(e.callbacks,f),c}:"fill"===b?function(){var c,f,g,i,l=[];f=arguments.length<2?0:arguments[1]<0?a.length+arguments[1]:arguments[1],g=arguments.length<3?a.length:arguments[2]<0?a.length+arguments[2]:arguments[2],i=a.slice(),c=Reflect.apply(a[b],a,arguments);for(var m=f;m<g;m++)a[m]&&"object"==typeof a[m]&&(a[m]=new h(a[m],m,d).proxy),i.hasOwnProperty(m)?(l.push(new k(d.path.concat(m),a[m],i[m]&&"object"==typeof i[m]?p.get(i[m]):i[m])),i[m]&&"object"==typeof i[m]&&q.get(p.get(i[m])).revoke()):l.push(new j(d.path.concat(m),a[m]));return o(e.callbacks,l),c}:"splice"===b?function(){var c,f,g,i,m,n,r,s=[];for(c=Array.from(arguments),c.forEach(function(a,b){b>1&&a&&"object"==typeof a&&(c[b]=new h(a,b,d).proxy)}),m=0===c.length?0:c[0]<0?a.length+c[0]:c[0],n=c.length<2?a.length-m:c[1],r=Math.max(c.length-2,0),f=Reflect.apply(a[b],a,c),a.forEach(function(a,b){a&&"object"==typeof a&&(g=q.get(p.get(a)),g?g.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f.forEach(function(a,b){a&&"object"==typeof a&&(f[b]=p.get(a),q.get(f[b]).revoke())}),i=0;i<n;i++)i<r?s.push(new k(d.path.concat(m+i),a[m+i],f[i])):s.push(new l(d.path.concat(m+i),f[i]));for(;i<r;i++)s.push(new j(d.path.concat(m+i),a[m+i]));return o(e.callbacks,s),f}:Reflect.get(a,b)}function d(a,b,c){var d,e,f=a.hasOwnProperty(b),g=a[b],i=q.get(a),l=r.get(i.root),m=[];return d=Reflect.set(a,b,c),l.callbacks.length&&d&&c!==g&&(e=i.path.concat(b),g&&"object"==typeof g&&(q.get(p.get(g)).revoke(),p.has(g)&&p.delete(g)),c&&"object"==typeof c&&(a[b]=new h(c,b,i).proxy),f?m.push(new k(e,c,g)):m.push(new j(e,c)),i.preventCallbacks||o(l.callbacks,m)),d}function e(a,b){var c,d,e=a[b],f=q.get(a),g=r.get(f.root),h=[];return c=Reflect.deleteProperty(a,b),g.callbacks.length&&c&&("object"==typeof e&&e&&p.has(e)&&p.delete(e),d=f.path.concat(b),h.push(new l(d,e)),f.preventCallbacks||o(g.callbacks,h)),c}function f(a,b){a.forEach(function(c,d){c&&"object"==typeof c&&(a[d]=new h(c,d,b).proxy)})}function g(a,b){Reflect.ownKeys(a).forEach(function(c){a[c]&&"object"==typeof a[c]&&(a[c]=new h(a[c],c,b).proxy)})}function h(a,i,j){var k,l;if(!a||"object"!=typeof a)throw new Error("Observed MUST be created from a non null object origin");if(j&&("undefined"==typeof i||null===i))throw new Error("any non-root (parent-less) Observed MUST have an own path; now parent is "+j+"; key is "+i);if(j&&!(j instanceof h))throw new Error("parent, when supplied, MUST be an instance of Observed");k=b(a),Array.isArray(k)?(f(k,this),l=Proxy.revocable(k,{set:d,get:c,deleteProperty:e})):(g(k,this),l=Proxy.revocable(k,{set:d,deleteProperty:e})),q.set(k,this),p.set(l.proxy,k),Reflect.defineProperty(this,"revokable",{value:l}),Reflect.defineProperty(this,"proxy",{value:l.proxy}),Reflect.defineProperty(this,"parent",{value:j}),Reflect.defineProperty(this,"ownKey",{value:i,writable:!0})}function i(a){function b(a){if(e)throw new TypeError("revoked Observable MAY NOT be observed anymore");if("function"!=typeof a)throw new Error("observer (callback) parameter MUST be a function");f.indexOf(a)<0?f.push(a):console.info("observer (callback) may be bound to an observable only once")}function c(){if(e)throw new TypeError("revoked Observable MAY NOT be unobserved amymore");arguments.length?Array.from(arguments).forEach(function(a){var b=f.indexOf(a);b>=0&&f.splice(b,1)}):f.splice(0,f.length)}function d(){e?console.log("revokation of Observable have an effect only once"):(e=!0,a.revoke())}var e=!1,f=[];Reflect.defineProperty(a.proxy,"observe",{value:b}),Reflect.defineProperty(a.proxy,"unobserve",{value:c}),Reflect.defineProperty(a.proxy,"revoke",{value:d}),Reflect.defineProperty(this,"callbacks",{value:f})}function j(a,b){Reflect.defineProperty(this,"type",{value:"insert"}),Reflect.defineProperty(this,"path",{value:a}),Reflect.defineProperty(this,"value",{value:b})}function k(a,b,c){Reflect.defineProperty(this,"type",{value:"update"}),Reflect.defineProperty(this,"path",{value:a}),Reflect.defineProperty(this,"value",{value:b}),Reflect.defineProperty(this,"oldValue",{value:c})}function l(a,b){Reflect.defineProperty(this,"type",{value:"delete"}),Reflect.defineProperty(this,"path",{value:a}),Reflect.defineProperty(this,"oldValue",{value:b})}function m(){Reflect.defineProperty(this,"type",{value:"reverse"})}function n(){Reflect.defineProperty(this,"type",{value:"shuffle"})}function o(a,b){for(var c=0;c<a.length;c++)try{a[c](b)}catch(a){console.error(a)}}var p=new WeakMap,q=new WeakMap,r=new WeakMap;Reflect.defineProperty(h.prototype,"root",{get:function(){for(var a=this;a.parent;)a=a.parent;return a}}),Reflect.defineProperty(h.prototype,"path",{get:function(){for(var a=[],b=this;"undefined"!=typeof b.ownKey;)a.push(b.ownKey),b=b.parent;return a.reverse()}}),Reflect.defineProperty(h.prototype,"revoke",{value:function(){var a=this.proxy;Reflect.ownKeys(a).forEach(function(b){var c=a[b];c&&"object"==typeof c&&(q.get(p.get(c)).revoke(),p.get(a)[b]=p.get(c))}),this.revokable.revoke()}}),Reflect.defineProperty(i,"from",{value:function(a){if(!a||"object"!=typeof a)throw new Error("observable MAY ONLY be created from non-null object only");if("observe"in a||"unobserve"in a||"revoke"in a)throw new Error('target object MUST NOT have nor own neither inherited properties from the following list: "observe", "unobserve", "revoke"');var b=new h(a),c=new i(b);return r.set(b,c),b.proxy}}),Reflect.defineProperty(a,"Observable",{value:i})}(this); | ||
!function(a){"use strict";function b(a){var b;return b=Array.isArray(a)?a.slice():Object.assign(new a.constructor,a)}function c(a){return t.indexOf(a.constructor.name)>=0}function d(a,b){var c,d=r.get(a),e=s.get(d.root);return c="pop"===b?function(){var c,f,g;return c=a.length-1,f=Reflect.apply(a[b],a,arguments),f&&"object"==typeof f&&(f=q.get(f),r.get(f).revoke()),g=[new m(d.path.concat(c),f)],p(e.callbacks,g),f}:"push"===b?function(){var c,f,g,h=[];return c=Array.from(arguments),g=a.length,c.forEach(function(a,b){a&&"object"==typeof a&&(c[b]=new i(a,g+b,d).proxy),h.push(new k(d.path.concat(g+b),a))}),f=Reflect.apply(a[b],a,c),p(e.callbacks,h),f}:"shift"===b?function(){var c,f,g;return c=Reflect.apply(a[b],a,arguments),c&&"object"==typeof c&&(c=q.get(c),r.get(c).revoke()),a.forEach(function(a,b){a&&"object"==typeof a&&(g=r.get(q.get(a)),g?g.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f=[new m(d.path.concat(0),c)],p(e.callbacks,f),c}:"unshift"===b?function(){var c,f,g,h=[];c=Array.from(arguments),c.forEach(function(a,b){a&&"object"==typeof a&&(c[b]=new i(a,b,d).proxy)}),f=Reflect.apply(a[b],a,c),a.forEach(function(a,b){a&&"object"==typeof a&&(g=r.get(q.get(a)),g?g.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))});for(var j=0;j<c.length;j++)h.push(new k(d.path.concat(j),a[j]));return p(e.callbacks,h),f}:"reverse"===b?function(){var c,d,f=[];return c=Reflect.apply(a[b],a,arguments),a.forEach(function(a,b){a&&"object"==typeof a&&(d=r.get(q.get(a)),d?d.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f.push(new n),p(e.callbacks,f),c}:"sort"===b?function(){var c,d,f=[];return c=Reflect.apply(a[b],a,arguments),a.forEach(function(a,b){a&&"object"==typeof a&&(d=r.get(q.get(a)),d?d.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f.push(new o),p(e.callbacks,f),c}:"fill"===b?function(){var c,f,g,h,j=[];f=arguments.length<2?0:arguments[1]<0?a.length+arguments[1]:arguments[1],g=arguments.length<3?a.length:arguments[2]<0?a.length+arguments[2]:arguments[2],h=a.slice(),c=Reflect.apply(a[b],a,arguments);for(var m=f;m<g;m++)a[m]&&"object"==typeof a[m]&&(a[m]=new i(a[m],m,d).proxy),h.hasOwnProperty(m)?(j.push(new l(d.path.concat(m),a[m],h[m]&&"object"==typeof h[m]?q.get(h[m]):h[m])),h[m]&&"object"==typeof h[m]&&r.get(q.get(h[m])).revoke()):j.push(new k(d.path.concat(m),a[m]));return p(e.callbacks,j),c}:"splice"===b?function(){var c,f,g,h,j,n,o,s=[];for(c=Array.from(arguments),c.forEach(function(a,b){b>1&&a&&"object"==typeof a&&(c[b]=new i(a,b,d).proxy)}),j=0===c.length?0:c[0]<0?a.length+c[0]:c[0],n=c.length<2?a.length-j:c[1],o=Math.max(c.length-2,0),f=Reflect.apply(a[b],a,c),a.forEach(function(a,b){a&&"object"==typeof a&&(g=r.get(q.get(a)),g?g.ownKey=b:console.error("failed to resolve proxy -> target -> observed"))}),f.forEach(function(a,b){a&&"object"==typeof a&&(f[b]=q.get(a),r.get(f[b]).revoke())}),h=0;h<n;h++)h<o?s.push(new l(d.path.concat(j+h),a[j+h],f[h])):s.push(new m(d.path.concat(j+h),f[h]));for(;h<o;h++)s.push(new k(d.path.concat(j+h),a[j+h]));return p(e.callbacks,s),f}:Reflect.get(a,b)}function e(a,b,c){var d,e,f=a.hasOwnProperty(b),g=a[b],h=r.get(a),j=s.get(h.root),m=[];return d=Reflect.set(a,b,c),j.callbacks.length&&d&&c!==g&&(e=h.path.concat(b),g&&"object"==typeof g&&(r.get(q.get(g)).revoke(),q.has(g)&&q.delete(g)),c&&"object"==typeof c&&(a[b]=new i(c,b,h).proxy),f?m.push(new l(e,c,g)):m.push(new k(e,c)),h.preventCallbacks||p(j.callbacks,m)),d}function f(a,b){var c,d,e=a[b],f=r.get(a),g=s.get(f.root),h=[];return c=Reflect.deleteProperty(a,b),g.callbacks.length&&c&&("object"==typeof e&&e&&q.has(e)&&q.delete(e),d=f.path.concat(b),h.push(new m(d,e)),f.preventCallbacks||p(g.callbacks,h)),c}function g(a,b){a.forEach(function(d,e){d&&"object"==typeof d&&!c(d)&&(a[e]=new i(d,e,b).proxy)})}function h(a,b){Reflect.ownKeys(a).forEach(function(d){a[d]&&"object"==typeof a[d]&&!c(a[d])&&(a[d]=new i(a[d],d,b).proxy)})}function i(a,c,j){var k,l;if(!a||"object"!=typeof a)throw new Error("Observed MUST be created from a non null object origin");if(j&&("undefined"==typeof c||null===c))throw new Error("any non-root (parent-less) Observed MUST have an own path; now parent is "+j+"; key is "+c);if(j&&!(j instanceof i))throw new Error("parent, when supplied, MUST be an instance of Observed");k=b(a),Array.isArray(k)?(g(k,this),l=Proxy.revocable(k,{set:e,get:d,deleteProperty:f})):(h(k,this),l=Proxy.revocable(k,{set:e,deleteProperty:f})),r.set(k,this),q.set(l.proxy,k),Reflect.defineProperty(this,"revokable",{value:l}),Reflect.defineProperty(this,"proxy",{value:l.proxy}),Reflect.defineProperty(this,"parent",{value:j}),Reflect.defineProperty(this,"ownKey",{value:c,writable:!0})}function j(a){function b(a){if(e)throw new TypeError("revoked Observable MAY NOT be observed anymore");if("function"!=typeof a)throw new Error("observer (callback) parameter MUST be a function");f.indexOf(a)<0?f.push(a):console.info("observer (callback) may be bound to an observable only once")}function c(){if(e)throw new TypeError("revoked Observable MAY NOT be unobserved amymore");arguments.length?Array.from(arguments).forEach(function(a){var b=f.indexOf(a);b>=0&&f.splice(b,1)}):f.splice(0,f.length)}function d(){e?console.log("revokation of Observable have an effect only once"):(e=!0,a.revoke())}var e=!1,f=[];Reflect.defineProperty(a.proxy,"observe",{value:b}),Reflect.defineProperty(a.proxy,"unobserve",{value:c}),Reflect.defineProperty(a.proxy,"revoke",{value:d}),Reflect.defineProperty(this,"callbacks",{value:f})}function k(a,b){Reflect.defineProperty(this,"type",{value:"insert"}),Reflect.defineProperty(this,"path",{value:a}),Reflect.defineProperty(this,"value",{value:b})}function l(a,b,c){Reflect.defineProperty(this,"type",{value:"update"}),Reflect.defineProperty(this,"path",{value:a}),Reflect.defineProperty(this,"value",{value:b}),Reflect.defineProperty(this,"oldValue",{value:c})}function m(a,b){Reflect.defineProperty(this,"type",{value:"delete"}),Reflect.defineProperty(this,"path",{value:a}),Reflect.defineProperty(this,"oldValue",{value:b})}function n(){Reflect.defineProperty(this,"type",{value:"reverse"})}function o(){Reflect.defineProperty(this,"type",{value:"shuffle"})}function p(a,b){for(var c=0;c<a.length;c++)try{a[c](b)}catch(a){console.error(a)}}var q=new WeakMap,r=new WeakMap,s=new WeakMap,t=["Date","Blob","Number","String","Boolean","Error","SyntaxError","TypeError","URIError","Function","Promise","RegExp"];Reflect.defineProperty(i.prototype,"root",{get:function(){for(var a=this;a.parent;)a=a.parent;return a}}),Reflect.defineProperty(i.prototype,"path",{get:function(){for(var a=[],b=this;"undefined"!=typeof b.ownKey;)a.push(b.ownKey),b=b.parent;return a.reverse()}}),Reflect.defineProperty(i.prototype,"revoke",{value:function(){var a=this.proxy;Reflect.ownKeys(a).forEach(function(b){var c=a[b];c&&"object"==typeof c&&(r.get(q.get(c)).revoke(),q.get(a)[b]=q.get(c))}),this.revokable.revoke()}}),Reflect.defineProperty(j,"from",{value:function(a){if(!a||"object"!=typeof a)throw new Error("observable MAY ONLY be created from non-null object only");if("observe"in a||"unobserve"in a||"revoke"in a)throw new Error('target object MUST NOT have nor own neither inherited properties from the following list: "observe", "unobserve", "revoke"');if(c(a))throw new Error(a+" found to be one of non-observable object types: "+t);var b=new i(a),d=new j(b);return s.set(b,d),b.proxy}}),Reflect.defineProperty(a,"Observable",{value:j})}(this); |
{ | ||
"name": "object-observer", | ||
"version": "0.2.0", | ||
"version": "0.2.1", | ||
"homepage": "https://github.com/gullerya/object-observer-js/README.md", | ||
@@ -12,10 +12,10 @@ "author": { | ||
"devDependencies": { | ||
"grunt": "~0.4.5", | ||
"grunt-cli": "~1.2.0", | ||
"grunt": "^1.0.1", | ||
"grunt-cli": "^1.2.0", | ||
"grunt-contrib-uglify": "^2.0.0", | ||
"grunt-karma": "~2.0.0", | ||
"babel-eslint": "6.1.2", | ||
"eslint-plugin-react": "6.1.2", | ||
"babel-eslint": "^7.1.1", | ||
"eslint-plugin-react": "^6.9.0", | ||
"gruntify-eslint": "^3.1.0", | ||
"karma": "~0.13.0" | ||
"karma": "^1.4.0" | ||
}, | ||
@@ -22,0 +22,0 @@ "keywords": [ |
@@ -6,3 +6,3 @@ [![npm version](https://badge.fury.io/js/object-observer.svg)](https://badge.fury.io/js/object-observer) | ||
Observation of a changes performed on any arbitrary object (array being a subtype of it) is a **MUST HAVE** facility in JavaScript world. | ||
Observation of a changes performed on an object (array being a subtype of it) is a **MUST HAVE** facility in JavaScript world. | ||
@@ -16,3 +16,3 @@ Native facility would be the best solution for this, since it may provide non-intrusive observation wihtout 'touching' the original objects, but seems like ES is not yet mature enough for that. | ||
- Changes delivered always as an __array__, in order to have unified callback API signature supporting also bulk changes delivery in a single call back | ||
- Original objects are __cloned__ and clone/s are __instrumented__, thus not affecting the original objects yet requiring few basic steps in a consumption flow | ||
- Original objects are __cloned__, thus not being affected; this adds one more step to the normal usage flow: | ||
- first, create observable clone from the specified object | ||
@@ -24,15 +24,15 @@ - second, register observers on the observable (not on the original object) | ||
- massive mutations delivered in a single callback, usually having an array of an atomic changes | ||
- Enhanced intrinsic methods of `Map`, `WeakMap`, `Set`, `WeakSet` like `set`, `get`, `delete` etc are not observed (see this [issue](https://github.com/gullerya/object-observer-js/issues/1) for more details) | ||
#### Support matrix: ![CHROME](https://raw.githubusercontent.com/alrra/browser-logos/master/chrome/chrome_24x24.png) <sub>49+</sub>, ![FIREFOX](https://raw.githubusercontent.com/alrra/browser-logos/master/firefox/firefox_24x24.png) <sub>42+</sub>, ![EDGE](https://raw.githubusercontent.com/alrra/browser-logos/master/edge/edge_24x24.png) <sub>13+</sub> | ||
#### Support matrix: ![CHROME](https://raw.githubusercontent.com/gullerya/data-tier/master/tools/browser_icons/chrome.png) <sub>49+</sub>, ![FIREFOX](https://raw.githubusercontent.com/gullerya/data-tier/master/tools/browser_icons/firefox.png) <sub>42+</sub>, ![EDGE](https://raw.githubusercontent.com/gullerya/data-tier/master/tools/browser_icons/explorer.png) <sub>13+</sub> | ||
Support matrix is mainly dependent on 2 advanced language features: `Proxy` and `Reflect`. The broader their adoption - the broader the support matrix of ObjectObserver. | ||
#### Backlog: | ||
- ~~Optimization for the cases of Array massive mutations~~ __Status__: done, any array change that previously was recalculating the whole array graph including all sub-graphs, now just updates the immediate indices of the changed array | ||
- Add `readPath` and `writePath` utility methods in `DataPath` object (part of change data)? __Status__: NA | ||
- Create build process including test automation on CI and probably minification/reorg of a consumable code. __Status__: added eslinting, minification as part of the build | ||
- Changes, probably based on my own consumption of this library in [data-tier](https://github.com/gullerya/data-tier) module and/or community feedback. __Status__: in progress | ||
- Changes, probably based on my own consumption of this library in __data-tier__ module ([GitHub](https://github.com/gullerya/data-tier), [NPM](https://www.npmjs.com/package/data-tier)) and/or community feedback. __Status__: in progress | ||
- Consider adding support for a Symbol defined object properties. __Status__: in progress | ||
- Consider adding support for special native objects Map/WeakMap/Set/WeakSet (track this [issue](https://github.com/gullerya/object-observer-js/issues/1)). __Status__: in progress | ||
#### Versions | ||
- __0.2.1__ | ||
- Bug fix: implemented 'non-observable' object types functionality for the ones, that their observation is meaningless (or even harmful and bug causing); 'non-observables' are: `Date`, `Blob`, `Number`, `String`, `Boolean`, `Error`, `SyntaxError`, `TypeError`, `URIError`, `Function`, `Promise`, `RegExp` (see this [issue](https://github.com/gullerya/object-observer-js/issues/2) for more details) | ||
- __0.2.0__ | ||
@@ -44,2 +44,3 @@ - Tech: moved proxy implementation to revokable | ||
- results of 'detach' actions (`pop`, `shift`, `splice`) are turned back to the plain object (yet having all of the changes done to the observable) when returned by APIs | ||
- __0.1.0__ | ||
@@ -46,0 +47,0 @@ - First stable API release |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
34943
427
204
0