jotai
Version:
👻 Next gen state management that will spook you
2 lines (1 loc) • 4.76 kB
JavaScript
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).jotaiVanilla={})}(this,(function(n){"use strict";var t=0;var e,r=function(n){return"init"in n},i=function(n){return!!n.write},o=new WeakMap,u=function(n,t){var e=o.get(n);e&&(o.delete(n),e(t))},a=function(n,t){n.status="fulfilled",n.value=t},f=function(n,t){n.status="rejected",n.reason=t},c=function(n,t){return"v"in n&&"v"in t&&Object.is(n.v,t.v)},v=function(n,t){return"e"in n&&"e"in t&&Object.is(n.e,t.e)},l=function(n){return"v"in n&&n.v instanceof Promise},d=function(n){if("e"in n)throw n.e;return n.v},s=function(){var n=new WeakMap,t=new WeakMap,e=new Map,s=function(t){return n.get(t)},h=function(t,r){var i=n.get(t);if(n.set(t,r),e.has(t)||e.set(t,i),i&&l(i)){var o="v"in r?r.v instanceof Promise?r.v:Promise.resolve(r.v):Promise.reject(r.e);u(i.v,o)}},g=function(n,t,e){var r=new Map,i=!1;e.forEach((function(e){var o=e===n?t:s(e);o&&(r.set(e,o),t.d.get(e)!==o&&(i=!0))})),(i||t.d.size!==r.size)&&(t.d=r)},w=function(n,t,e){var r=s(n),i={d:(null==r?void 0:r.d)||new Map,v:t};return e&&g(n,i,e),r&&c(r,i)&&r.d===i.d?r:(h(n,i),i)},p=function n(e){var u=s(e);if(u&&(u.d.forEach((function(r,i){i===e||t.has(i)||n(i)})),Array.from(u.d).every((function(n){var t=n[0],r=n[1];return t===e||s(t)===r}))))return u;var c,l,p=new Set,y=!0,m={get signal(){return c||(c=new AbortController),c.signal},get setSelf(){return!l&&i(e)&&(l=function(){if(!y){for(var n=arguments.length,t=new Array(n),r=0;r<n;r++)t[r]=arguments[r];return b.apply(void 0,[e].concat(t))}}),l}};try{var E=e.read((function(t){if(p.add(t),t===e){var i=s(t);if(i)return d(i);if(r(t))return t.init;throw new Error("no atom init")}var o=n(t);return d(o)}),m);if(E instanceof Promise){var M,A=new Promise((function(n,t){var r=!1;E.then((function(t){r||(a(A,t),n(t))}),(function(n){r||(f(A,n),t(n))})).finally((function(){r||(r=!0,w(e,A,p))})),M=function(t){r||(r=!0,t.then((function(n){return a(A,n)}),(function(n){return f(A,n)})),n(t))}}));return A.status="pending",function(n,t){o.set(n,t),n.catch((function(){})).finally((function(){return o.delete(n)}))}(A,(function(n){var t;n&&M(n),null==(t=c)||t.abort()})),w(e,A,p)}return w(e,E,p)}catch(n){return function(n,t,e){var r=s(n),i={d:(null==r?void 0:r.d)||new Map,e:t};return e&&g(n,i,e),r&&v(r,i)&&r.d===i.d?r:(h(n,i),i)}(e,n,p)}finally{y=!1}},y=function(n,t){return!t.l.size&&(!t.t.size||1===t.t.size&&t.t.has(n))},m=function n(e){var r=t.get(e);null==r||r.t.forEach((function(t){if(t!==e){var r=s(t),i=p(t);r&&c(r,i)||n(t)}}))},E=function n(t){for(var e=!0,i=function(n){return d(p(n))},o=function(i){for(var o,u=arguments.length,a=new Array(u>1?u-1:0),f=1;f<u;f++)a[f-1]=arguments[f];if(i===t){if(!r(i))throw new Error("atom not writable");var v=s(i),l=w(i,a[0]);v&&c(v,l)||m(i)}else o=n.apply(void 0,[i].concat(a));return e||j(),o},u=arguments.length,a=new Array(u>1?u-1:0),f=1;f<u;f++)a[f-1]=arguments[f];var v=t.write.apply(t,[i,o].concat(a));return e=!1,v},b=function(n){for(var t=arguments.length,e=new Array(t>1?t-1:0),r=1;r<t;r++)e[r-1]=arguments[r];var i=E.apply(void 0,[n].concat(e));return j(),i},M=function n(e,r){var o={t:new Set(r&&[r]),l:new Set};if(t.set(e,o),p(e).d.forEach((function(r,i){var o=t.get(i);o?o.t.add(e):i!==e&&n(i,e)})),p(e),i(e)&&e.onMount){var u=e.onMount((function(){for(var n=arguments.length,t=new Array(n),r=0;r<n;r++)t[r]=arguments[r];return b.apply(void 0,[e].concat(t))}));u&&(o.u=u)}return o},A=function n(e){var r,i=null==(r=t.get(e))?void 0:r.u;i&&i(),t.delete(e);var o=s(e);o&&(l(o)&&u(o.v),o.d.forEach((function(r,i){if(i!==e){var o=t.get(i);o&&(o.t.delete(e),y(i,o)&&n(i))}})))},S=function(n,e,r){var i=new Set(e.d.keys());null==r||r.forEach((function(e,r){if(i.has(r))i.delete(r);else{var o=t.get(r);o&&(o.t.delete(n),y(r,o)&&A(r))}})),i.forEach((function(e){var r=t.get(e);r?r.t.add(n):t.has(n)&&M(e,n)}))},j=function(){for(;e.size;){var n=Array.from(e);e.clear(),n.forEach((function(n){var e=n[0],r=n[1],i=s(e);if(i){i.d!==(null==r?void 0:r.d)&&S(e,i,null==r?void 0:r.d);var o=t.get(e);!o||r&&!l(r)&&(c(r,i)||v(r,i))||o.l.forEach((function(n){return n()}))}}))}};return{get:function(n){return d(p(n))},set:b,sub:function(n,e){var r=function(n){var e=t.get(n);return e||(e=M(n)),e}(n);j();var i=r.l;return i.add(e),function(){i.delete(e),function(n){var e=t.get(n);e&&y(n,e)&&A(n)}(n)}}}};n.atom=function(n,e){var r="atom"+ ++t,i={toString:function(){return r}};return"function"==typeof n?i.read=n:(i.init=n,i.read=function(n){return n(i)},i.write=function(n,t,e){return t(i,"function"==typeof e?e(n(i)):e)}),e&&(i.write=e),i},n.createStore=s,n.getDefaultStore=function(){return e||(e=s()),e}}));