333 lines
7.3 KiB
JavaScript
333 lines
7.3 KiB
JavaScript
import { createRequest as e } from "@urql/core";
|
|
|
|
export * from "@urql/core";
|
|
|
|
import * as r from "react";
|
|
|
|
import { toPromise as t, take as a, filter as n, onPush as u, subscribe as i, takeWhile as s, onEnd as o } from "wonka";
|
|
|
|
var c = {};
|
|
|
|
var v = r.createContext(c);
|
|
|
|
var f = v.Provider;
|
|
|
|
var l = v.Consumer;
|
|
|
|
v.displayName = "UrqlContext";
|
|
|
|
var useClient = () => {
|
|
var e = r.useContext(v);
|
|
if (e === c && "production" !== process.env.NODE_ENV) {
|
|
var t = "No client has been specified using urql's Provider. please create a client and add a Provider.";
|
|
console.error(t);
|
|
throw new Error(t);
|
|
}
|
|
return e;
|
|
};
|
|
|
|
var d = {
|
|
fetching: !1,
|
|
stale: !1,
|
|
hasNext: !1,
|
|
error: void 0,
|
|
data: void 0,
|
|
extensions: void 0,
|
|
operation: void 0
|
|
};
|
|
|
|
var areOperationsEqual = (e, r) => e === r || !(!e || !r || e.key !== r.key);
|
|
|
|
var computeNextState = (e, r) => {
|
|
var t = {
|
|
...e,
|
|
...r,
|
|
data: void 0 !== r.data || r.error ? r.data : e.data,
|
|
fetching: !!r.fetching,
|
|
stale: !!r.stale
|
|
};
|
|
return ((e, r) => {
|
|
for (var t in e) {
|
|
if (!(t in r)) {
|
|
return !0;
|
|
}
|
|
}
|
|
for (var a in r) {
|
|
if ("operation" === a ? !areOperationsEqual(e[a], r[a]) : e[a] !== r[a]) {
|
|
return !0;
|
|
}
|
|
}
|
|
return !1;
|
|
})(e, t) ? t : e;
|
|
};
|
|
|
|
var hasDepsChanged = (e, r) => {
|
|
for (var t = 0, a = r.length; t < a; t++) {
|
|
if (e[t] !== r[t]) {
|
|
return !0;
|
|
}
|
|
}
|
|
return !1;
|
|
};
|
|
|
|
var p = r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
|
|
function deferDispatch(e, r) {
|
|
if ("production" !== process.env.NODE_ENV && p && p.ReactCurrentOwner && p.ReactCurrentOwner.current) {
|
|
Promise.resolve(r).then(e);
|
|
} else {
|
|
e(r);
|
|
}
|
|
}
|
|
|
|
function useMutation(i) {
|
|
var s = r.useRef(!0);
|
|
var o = useClient();
|
|
var [c, v] = r.useState(d);
|
|
var f = r.useCallback(((r, c) => {
|
|
deferDispatch(v, {
|
|
...d,
|
|
fetching: !0
|
|
});
|
|
return t(a(1)(n((e => !e.hasNext))(u((e => {
|
|
if (s.current) {
|
|
deferDispatch(v, {
|
|
fetching: !1,
|
|
stale: e.stale,
|
|
data: e.data,
|
|
error: e.error,
|
|
extensions: e.extensions,
|
|
operation: e.operation,
|
|
hasNext: e.hasNext
|
|
});
|
|
}
|
|
}))(o.executeMutation(e(i, r), c || {})))));
|
|
}), [ o, i, v ]);
|
|
r.useEffect((() => {
|
|
s.current = !0;
|
|
return () => {
|
|
s.current = !1;
|
|
};
|
|
}), []);
|
|
return [ c, f ];
|
|
}
|
|
|
|
function useRequest(t, a) {
|
|
var n = r.useRef(void 0);
|
|
return r.useMemo((() => {
|
|
var r = e(t, a);
|
|
if (void 0 !== n.current && n.current.key === r.key) {
|
|
return n.current;
|
|
} else {
|
|
n.current = r;
|
|
return r;
|
|
}
|
|
}), [ t, a ]);
|
|
}
|
|
|
|
var getCacheForClient = e => {
|
|
if (!e._react) {
|
|
var r = new Set;
|
|
var t = new Map;
|
|
if (e.operations$) {
|
|
i((e => {
|
|
if ("teardown" === e.kind && r.has(e.key)) {
|
|
r.delete(e.key);
|
|
t.delete(e.key);
|
|
}
|
|
}))(e.operations$);
|
|
}
|
|
e._react = {
|
|
get: e => t.get(e),
|
|
set(e, a) {
|
|
r.delete(e);
|
|
t.set(e, a);
|
|
},
|
|
dispose(e) {
|
|
r.add(e);
|
|
}
|
|
};
|
|
}
|
|
return e._react;
|
|
};
|
|
|
|
var isSuspense = (e, r) => r && void 0 !== r.suspense ? !!r.suspense : e.suspense;
|
|
|
|
function useQuery(e) {
|
|
var t = useClient();
|
|
var a = getCacheForClient(t);
|
|
var n = isSuspense(t, e.context);
|
|
var c = useRequest(e.query, e.variables);
|
|
var v = r.useMemo((() => {
|
|
if (e.pause) {
|
|
return null;
|
|
}
|
|
var r = t.executeQuery(c, {
|
|
requestPolicy: e.requestPolicy,
|
|
...e.context
|
|
});
|
|
return n ? u((e => {
|
|
a.set(c.key, e);
|
|
}))(r) : r;
|
|
}), [ a, t, c, n, e.pause, e.requestPolicy, e.context ]);
|
|
var f = r.useCallback(((e, r) => {
|
|
if (!e) {
|
|
return {
|
|
fetching: !1
|
|
};
|
|
}
|
|
var t = a.get(c.key);
|
|
if (!t) {
|
|
var n;
|
|
var u = i((e => {
|
|
t = e;
|
|
if (n) {
|
|
n(t);
|
|
}
|
|
}))(s((() => r && !n || !t || "hasNext" in t && t.hasNext))(e));
|
|
if (null == t && r) {
|
|
var o = new Promise((e => {
|
|
n = e;
|
|
}));
|
|
a.set(c.key, o);
|
|
throw o;
|
|
} else {
|
|
u.unsubscribe();
|
|
}
|
|
} else if (r && null != t && "then" in t) {
|
|
throw t;
|
|
}
|
|
return t || {
|
|
fetching: !0
|
|
};
|
|
}), [ a, c ]);
|
|
var l = [ t, c, e.requestPolicy, e.context, e.pause ];
|
|
var [p, h] = r.useState((() => [ v, computeNextState(d, f(v, n)), l ]));
|
|
var x = p[1];
|
|
if (v !== p[0] && hasDepsChanged(p[2], l)) {
|
|
h([ v, x = computeNextState(p[1], f(v, n)), l ]);
|
|
}
|
|
r.useEffect((() => {
|
|
var e = p[0];
|
|
var r = p[2][1];
|
|
var t = !1;
|
|
var updateResult = e => {
|
|
t = !0;
|
|
deferDispatch(h, (r => {
|
|
var t = computeNextState(r[1], e);
|
|
return r[1] !== t ? [ r[0], t, r[2] ] : r;
|
|
}));
|
|
};
|
|
if (e) {
|
|
var n = i(updateResult)(o((() => {
|
|
updateResult({
|
|
fetching: !1
|
|
});
|
|
}))(e));
|
|
if (!t) {
|
|
updateResult({
|
|
fetching: !0
|
|
});
|
|
}
|
|
return () => {
|
|
a.dispose(r.key);
|
|
n.unsubscribe();
|
|
};
|
|
} else {
|
|
updateResult({
|
|
fetching: !1
|
|
});
|
|
}
|
|
}), [ a, p[0], p[2][1] ]);
|
|
var y = r.useCallback((r => {
|
|
var i = {
|
|
requestPolicy: e.requestPolicy,
|
|
...e.context,
|
|
...r
|
|
};
|
|
deferDispatch(h, (e => [ n ? u((e => {
|
|
a.set(c.key, e);
|
|
}))(t.executeQuery(c, i)) : t.executeQuery(c, i), e[1], l ]));
|
|
}), [ t, a, c, n, e.requestPolicy, e.context, e.pause ]);
|
|
return [ x, y ];
|
|
}
|
|
|
|
function useSubscription(e, t) {
|
|
var a = useClient();
|
|
var n = useRequest(e.query, e.variables);
|
|
var u = r.useRef(t);
|
|
u.current = t;
|
|
var s = r.useMemo((() => !e.pause ? a.executeSubscription(n, e.context) : null), [ a, n, e.pause, e.context ]);
|
|
var c = [ a, n, e.context, e.pause ];
|
|
var [v, f] = r.useState((() => [ s, {
|
|
...d,
|
|
fetching: !!s
|
|
}, c ]));
|
|
var l = v[1];
|
|
if (s !== v[0] && hasDepsChanged(v[2], c)) {
|
|
f([ s, l = computeNextState(v[1], {
|
|
fetching: !!s
|
|
}), c ]);
|
|
}
|
|
r.useEffect((() => {
|
|
var updateResult = e => {
|
|
deferDispatch(f, (r => {
|
|
var t = computeNextState(r[1], e);
|
|
if (r[1] === t) {
|
|
return r;
|
|
}
|
|
if (u.current && null != t.data && r[1].data !== t.data) {
|
|
t.data = u.current(r[1].data, t.data);
|
|
}
|
|
return [ r[0], t, r[2] ];
|
|
}));
|
|
};
|
|
if (v[0]) {
|
|
return i(updateResult)(o((() => {
|
|
updateResult({
|
|
fetching: !!s
|
|
});
|
|
}))(v[0])).unsubscribe;
|
|
} else {
|
|
updateResult({
|
|
fetching: !1
|
|
});
|
|
}
|
|
}), [ v[0] ]);
|
|
var p = r.useCallback((r => {
|
|
var t = a.executeSubscription(n, {
|
|
...e.context,
|
|
...r
|
|
});
|
|
deferDispatch(f, (e => [ t, e[1], c ]));
|
|
}), [ a, n, e.context, e.pause ]);
|
|
return [ l, p ];
|
|
}
|
|
|
|
function Mutation(e) {
|
|
var r = useMutation(e.query);
|
|
return e.children({
|
|
...r[0],
|
|
executeMutation: r[1]
|
|
});
|
|
}
|
|
|
|
function Query(e) {
|
|
var r = useQuery(e);
|
|
return e.children({
|
|
...r[0],
|
|
executeQuery: r[1]
|
|
});
|
|
}
|
|
|
|
function Subscription(e) {
|
|
var r = useSubscription(e, e.handler);
|
|
return e.children({
|
|
...r[0],
|
|
executeSubscription: r[1]
|
|
});
|
|
}
|
|
|
|
export { l as Consumer, v as Context, Mutation, f as Provider, Query, Subscription, useClient, useMutation, useQuery, useSubscription };
|
|
//# sourceMappingURL=urql.es.js.map
|