UNPKG

react-cache-promise

Version:

react-cache-promise

92 lines (87 loc) 2.64 kB
!function (e, t) { "object" == typeof exports && "undefined" != typeof module ? t(exports, require("react")) : "function" == typeof define && define.amd ? define(["exports", "react"], t) : t((e = "undefined" != typeof globalThis ? globalThis : e || self).ReactAsyncStates = {}, e.React) }(this, (function (e, t) { "use strict"; function n(e) { var t = Object.create(null); return e && Object.keys(e).forEach((function (n) { if ("default" !== n) { var r = Object.getOwnPropertyDescriptor(e, n); Object.defineProperty(t, n, r.get ? r : { enumerable: !0, get: function () { return e[n] } }) } })), t.default = e, Object.freeze(t) } var r = n(t), i = new Map, u = new Map; function s(e, t) { var n = { subscribe: function (e) { n.index || (n.index = 0); n.listeners || (n.listeners = []); var t = ++n.index; return n.listeners[t] = e, function () { delete n.listeners[t] } }, state: null, active: !0 }; return t.then((function (e) { n.active && (n.state = { status: "fulfilled", value: e }, n.listeners && Object.values(n.listeners).forEach((function (t) { r.startTransition((function () { return t(e) })) }))) }), (function (e) { n.active && (n.state = { status: "rejected", reason: e }, n.listeners && Object.values(n.listeners).forEach((function (t) { r.startTransition((function () { return t(e) })) }))) })), n } e.evict = function (e) { var t = i.get(e); if (t) { var n = u.get(t); if (n) { var s = i.delete(e) && u.delete(t); n.active = !1, n.state = null; var a = n.listeners; if (a) { var c = {}; Object.values(a).forEach((function (e) { r.startTransition((function () { return e(c) })) })) } return s } } }, e.patchQuery = function (e, t) { return function () { for (var n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r]; var a = t.apply(null, n), c = i.get(a); if (c) return c; var f = e.apply(null, n); return i.set(a, f), u.set(f, s(0, f)), f } }, e.usePromise = function (e) { var t = u.get(e), n = t.state; if (null === n) throw e; if ("rejected" === n.status) throw n.reason; var i = r.useState()[1]; return r.useEffect((function () { return t.subscribe(i) }), [t]), n.value } }));