sinuous
Version:
🧬 Small, fast, reactive render engine
2 lines (1 loc) • 970 B
JavaScript
var observable=function(n){var r;function t(n){function t(u){return void 0===u?(r&&t.t[t.t.length-1]!==r&&(t.t.push(r),r.u.push(t)),n):(n=u,t.t.forEach(function(n){return n.i=0}),t.t.slice().forEach(function(n){n.i||n()}),n)}return t.$o=1,t.t=[],t}function u(n,t){function u(){var i=r;return r&&r.v.push(u),o(u),u.i=1,r=u,t=n(t),r=i,t}return n.l=u,i(u),u(),function(){return u.i?u.u.forEach(function(n){return n()}):t=u(),t}}function o(n){n.v.forEach(o),n.u.forEach(function(r){r.t.splice(r.t.indexOf(n),1)}),n.s.forEach(function(n){return n()}),i(n)}function i(n){n.u=[],n.v=[],n.s=[]}return n.S=u,n.cleanup=function(n){return r&&r.s.push(n),n},n.isListening=function(){return!!r},n.o=t,n.observable=t,n.root=function(n){var t=r,u=function(){};r=u,i(u);var c=n(function(){o(u),r=void 0});return r=t,c},n.sample=function(n){var t=r;r=void 0;var u=n();return r=t,u},n.subscribe=function(n){return u(n),function(){return o(n.l)}},n.unsubscribe=function(n){o(n.l)},n}({});