ccstate-react 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/index.cjs +2 -372
- package/dist/index.d.cts +1 -4
- package/dist/index.d.ts +1 -4
- package/dist/index.js +4 -373
- package/package.json +3 -3
- package/src/__tests__/loadable.test.tsx +1 -54
- package/src/index.ts +0 -1
- package/src/useLoadable.ts +15 -24
- package/src/floating-promise.ts +0 -27
package/CHANGELOG.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -48,31 +48,6 @@ function _arrayLikeToArray(r, a) {
|
|
|
48
48
|
function _arrayWithHoles(r) {
|
|
49
49
|
if (Array.isArray(r)) return r;
|
|
50
50
|
}
|
|
51
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) {
|
|
52
|
-
try {
|
|
53
|
-
var i = n[a](c),
|
|
54
|
-
u = i.value;
|
|
55
|
-
} catch (n) {
|
|
56
|
-
return void e(n);
|
|
57
|
-
}
|
|
58
|
-
i.done ? t(u) : Promise.resolve(u).then(r, o);
|
|
59
|
-
}
|
|
60
|
-
function _asyncToGenerator(n) {
|
|
61
|
-
return function () {
|
|
62
|
-
var t = this,
|
|
63
|
-
e = arguments;
|
|
64
|
-
return new Promise(function (r, o) {
|
|
65
|
-
var a = n.apply(t, e);
|
|
66
|
-
function _next(n) {
|
|
67
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
|
|
68
|
-
}
|
|
69
|
-
function _throw(n) {
|
|
70
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
|
|
71
|
-
}
|
|
72
|
-
_next(void 0);
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
51
|
function _iterableToArrayLimit(r, l) {
|
|
77
52
|
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
78
53
|
if (null != t) {
|
|
@@ -100,307 +75,6 @@ function _iterableToArrayLimit(r, l) {
|
|
|
100
75
|
function _nonIterableRest() {
|
|
101
76
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
102
77
|
}
|
|
103
|
-
function _regeneratorRuntime() {
|
|
104
|
-
_regeneratorRuntime = function () {
|
|
105
|
-
return e;
|
|
106
|
-
};
|
|
107
|
-
var t,
|
|
108
|
-
e = {},
|
|
109
|
-
r = Object.prototype,
|
|
110
|
-
n = r.hasOwnProperty,
|
|
111
|
-
o = Object.defineProperty || function (t, e, r) {
|
|
112
|
-
t[e] = r.value;
|
|
113
|
-
},
|
|
114
|
-
i = "function" == typeof Symbol ? Symbol : {},
|
|
115
|
-
a = i.iterator || "@@iterator",
|
|
116
|
-
c = i.asyncIterator || "@@asyncIterator",
|
|
117
|
-
u = i.toStringTag || "@@toStringTag";
|
|
118
|
-
function define(t, e, r) {
|
|
119
|
-
return Object.defineProperty(t, e, {
|
|
120
|
-
value: r,
|
|
121
|
-
enumerable: !0,
|
|
122
|
-
configurable: !0,
|
|
123
|
-
writable: !0
|
|
124
|
-
}), t[e];
|
|
125
|
-
}
|
|
126
|
-
try {
|
|
127
|
-
define({}, "");
|
|
128
|
-
} catch (t) {
|
|
129
|
-
define = function (t, e, r) {
|
|
130
|
-
return t[e] = r;
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
function wrap(t, e, r, n) {
|
|
134
|
-
var i = e && e.prototype instanceof Generator ? e : Generator,
|
|
135
|
-
a = Object.create(i.prototype),
|
|
136
|
-
c = new Context(n || []);
|
|
137
|
-
return o(a, "_invoke", {
|
|
138
|
-
value: makeInvokeMethod(t, r, c)
|
|
139
|
-
}), a;
|
|
140
|
-
}
|
|
141
|
-
function tryCatch(t, e, r) {
|
|
142
|
-
try {
|
|
143
|
-
return {
|
|
144
|
-
type: "normal",
|
|
145
|
-
arg: t.call(e, r)
|
|
146
|
-
};
|
|
147
|
-
} catch (t) {
|
|
148
|
-
return {
|
|
149
|
-
type: "throw",
|
|
150
|
-
arg: t
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
e.wrap = wrap;
|
|
155
|
-
var h = "suspendedStart",
|
|
156
|
-
l = "suspendedYield",
|
|
157
|
-
f = "executing",
|
|
158
|
-
s = "completed",
|
|
159
|
-
y = {};
|
|
160
|
-
function Generator() {}
|
|
161
|
-
function GeneratorFunction() {}
|
|
162
|
-
function GeneratorFunctionPrototype() {}
|
|
163
|
-
var p = {};
|
|
164
|
-
define(p, a, function () {
|
|
165
|
-
return this;
|
|
166
|
-
});
|
|
167
|
-
var d = Object.getPrototypeOf,
|
|
168
|
-
v = d && d(d(values([])));
|
|
169
|
-
v && v !== r && n.call(v, a) && (p = v);
|
|
170
|
-
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
|
|
171
|
-
function defineIteratorMethods(t) {
|
|
172
|
-
["next", "throw", "return"].forEach(function (e) {
|
|
173
|
-
define(t, e, function (t) {
|
|
174
|
-
return this._invoke(e, t);
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
function AsyncIterator(t, e) {
|
|
179
|
-
function invoke(r, o, i, a) {
|
|
180
|
-
var c = tryCatch(t[r], t, o);
|
|
181
|
-
if ("throw" !== c.type) {
|
|
182
|
-
var u = c.arg,
|
|
183
|
-
h = u.value;
|
|
184
|
-
return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
|
|
185
|
-
invoke("next", t, i, a);
|
|
186
|
-
}, function (t) {
|
|
187
|
-
invoke("throw", t, i, a);
|
|
188
|
-
}) : e.resolve(h).then(function (t) {
|
|
189
|
-
u.value = t, i(u);
|
|
190
|
-
}, function (t) {
|
|
191
|
-
return invoke("throw", t, i, a);
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
a(c.arg);
|
|
195
|
-
}
|
|
196
|
-
var r;
|
|
197
|
-
o(this, "_invoke", {
|
|
198
|
-
value: function (t, n) {
|
|
199
|
-
function callInvokeWithMethodAndArg() {
|
|
200
|
-
return new e(function (e, r) {
|
|
201
|
-
invoke(t, n, e, r);
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
function makeInvokeMethod(e, r, n) {
|
|
209
|
-
var o = h;
|
|
210
|
-
return function (i, a) {
|
|
211
|
-
if (o === f) throw Error("Generator is already running");
|
|
212
|
-
if (o === s) {
|
|
213
|
-
if ("throw" === i) throw a;
|
|
214
|
-
return {
|
|
215
|
-
value: t,
|
|
216
|
-
done: !0
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
for (n.method = i, n.arg = a;;) {
|
|
220
|
-
var c = n.delegate;
|
|
221
|
-
if (c) {
|
|
222
|
-
var u = maybeInvokeDelegate(c, n);
|
|
223
|
-
if (u) {
|
|
224
|
-
if (u === y) continue;
|
|
225
|
-
return u;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
|
|
229
|
-
if (o === h) throw o = s, n.arg;
|
|
230
|
-
n.dispatchException(n.arg);
|
|
231
|
-
} else "return" === n.method && n.abrupt("return", n.arg);
|
|
232
|
-
o = f;
|
|
233
|
-
var p = tryCatch(e, r, n);
|
|
234
|
-
if ("normal" === p.type) {
|
|
235
|
-
if (o = n.done ? s : l, p.arg === y) continue;
|
|
236
|
-
return {
|
|
237
|
-
value: p.arg,
|
|
238
|
-
done: n.done
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
function maybeInvokeDelegate(e, r) {
|
|
246
|
-
var n = r.method,
|
|
247
|
-
o = e.iterator[n];
|
|
248
|
-
if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
|
|
249
|
-
var i = tryCatch(o, e.iterator, r.arg);
|
|
250
|
-
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
|
|
251
|
-
var a = i.arg;
|
|
252
|
-
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
|
|
253
|
-
}
|
|
254
|
-
function pushTryEntry(t) {
|
|
255
|
-
var e = {
|
|
256
|
-
tryLoc: t[0]
|
|
257
|
-
};
|
|
258
|
-
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
|
|
259
|
-
}
|
|
260
|
-
function resetTryEntry(t) {
|
|
261
|
-
var e = t.completion || {};
|
|
262
|
-
e.type = "normal", delete e.arg, t.completion = e;
|
|
263
|
-
}
|
|
264
|
-
function Context(t) {
|
|
265
|
-
this.tryEntries = [{
|
|
266
|
-
tryLoc: "root"
|
|
267
|
-
}], t.forEach(pushTryEntry, this), this.reset(!0);
|
|
268
|
-
}
|
|
269
|
-
function values(e) {
|
|
270
|
-
if (e || "" === e) {
|
|
271
|
-
var r = e[a];
|
|
272
|
-
if (r) return r.call(e);
|
|
273
|
-
if ("function" == typeof e.next) return e;
|
|
274
|
-
if (!isNaN(e.length)) {
|
|
275
|
-
var o = -1,
|
|
276
|
-
i = function next() {
|
|
277
|
-
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
|
|
278
|
-
return next.value = t, next.done = !0, next;
|
|
279
|
-
};
|
|
280
|
-
return i.next = i;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
throw new TypeError(typeof e + " is not iterable");
|
|
284
|
-
}
|
|
285
|
-
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
|
|
286
|
-
value: GeneratorFunctionPrototype,
|
|
287
|
-
configurable: !0
|
|
288
|
-
}), o(GeneratorFunctionPrototype, "constructor", {
|
|
289
|
-
value: GeneratorFunction,
|
|
290
|
-
configurable: !0
|
|
291
|
-
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
|
|
292
|
-
var e = "function" == typeof t && t.constructor;
|
|
293
|
-
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
|
|
294
|
-
}, e.mark = function (t) {
|
|
295
|
-
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
|
|
296
|
-
}, e.awrap = function (t) {
|
|
297
|
-
return {
|
|
298
|
-
__await: t
|
|
299
|
-
};
|
|
300
|
-
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
|
|
301
|
-
return this;
|
|
302
|
-
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
|
|
303
|
-
void 0 === i && (i = Promise);
|
|
304
|
-
var a = new AsyncIterator(wrap(t, r, n, o), i);
|
|
305
|
-
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
|
|
306
|
-
return t.done ? t.value : a.next();
|
|
307
|
-
});
|
|
308
|
-
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
|
|
309
|
-
return this;
|
|
310
|
-
}), define(g, "toString", function () {
|
|
311
|
-
return "[object Generator]";
|
|
312
|
-
}), e.keys = function (t) {
|
|
313
|
-
var e = Object(t),
|
|
314
|
-
r = [];
|
|
315
|
-
for (var n in e) r.push(n);
|
|
316
|
-
return r.reverse(), function next() {
|
|
317
|
-
for (; r.length;) {
|
|
318
|
-
var t = r.pop();
|
|
319
|
-
if (t in e) return next.value = t, next.done = !1, next;
|
|
320
|
-
}
|
|
321
|
-
return next.done = !0, next;
|
|
322
|
-
};
|
|
323
|
-
}, e.values = values, Context.prototype = {
|
|
324
|
-
constructor: Context,
|
|
325
|
-
reset: function (e) {
|
|
326
|
-
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
|
|
327
|
-
},
|
|
328
|
-
stop: function () {
|
|
329
|
-
this.done = !0;
|
|
330
|
-
var t = this.tryEntries[0].completion;
|
|
331
|
-
if ("throw" === t.type) throw t.arg;
|
|
332
|
-
return this.rval;
|
|
333
|
-
},
|
|
334
|
-
dispatchException: function (e) {
|
|
335
|
-
if (this.done) throw e;
|
|
336
|
-
var r = this;
|
|
337
|
-
function handle(n, o) {
|
|
338
|
-
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
|
|
339
|
-
}
|
|
340
|
-
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
|
|
341
|
-
var i = this.tryEntries[o],
|
|
342
|
-
a = i.completion;
|
|
343
|
-
if ("root" === i.tryLoc) return handle("end");
|
|
344
|
-
if (i.tryLoc <= this.prev) {
|
|
345
|
-
var c = n.call(i, "catchLoc"),
|
|
346
|
-
u = n.call(i, "finallyLoc");
|
|
347
|
-
if (c && u) {
|
|
348
|
-
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
|
|
349
|
-
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
|
|
350
|
-
} else if (c) {
|
|
351
|
-
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
|
|
352
|
-
} else {
|
|
353
|
-
if (!u) throw Error("try statement without catch or finally");
|
|
354
|
-
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
},
|
|
359
|
-
abrupt: function (t, e) {
|
|
360
|
-
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
|
|
361
|
-
var o = this.tryEntries[r];
|
|
362
|
-
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
|
|
363
|
-
var i = o;
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
|
|
368
|
-
var a = i ? i.completion : {};
|
|
369
|
-
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
|
|
370
|
-
},
|
|
371
|
-
complete: function (t, e) {
|
|
372
|
-
if ("throw" === t.type) throw t.arg;
|
|
373
|
-
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
|
|
374
|
-
},
|
|
375
|
-
finish: function (t) {
|
|
376
|
-
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
377
|
-
var r = this.tryEntries[e];
|
|
378
|
-
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
|
|
379
|
-
}
|
|
380
|
-
},
|
|
381
|
-
catch: function (t) {
|
|
382
|
-
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
383
|
-
var r = this.tryEntries[e];
|
|
384
|
-
if (r.tryLoc === t) {
|
|
385
|
-
var n = r.completion;
|
|
386
|
-
if ("throw" === n.type) {
|
|
387
|
-
var o = n.arg;
|
|
388
|
-
resetTryEntry(r);
|
|
389
|
-
}
|
|
390
|
-
return o;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
throw Error("illegal catch attempt");
|
|
394
|
-
},
|
|
395
|
-
delegateYield: function (e, r, n) {
|
|
396
|
-
return this.delegate = {
|
|
397
|
-
iterator: values(e),
|
|
398
|
-
resultName: r,
|
|
399
|
-
nextLoc: n
|
|
400
|
-
}, "next" === this.method && (this.arg = t), y;
|
|
401
|
-
}
|
|
402
|
-
}, e;
|
|
403
|
-
}
|
|
404
78
|
function _slicedToArray(r, e) {
|
|
405
79
|
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
406
80
|
}
|
|
@@ -412,48 +86,8 @@ function _unsupportedIterableToArray(r, a) {
|
|
|
412
86
|
}
|
|
413
87
|
}
|
|
414
88
|
|
|
415
|
-
var internalFloatingPromises$ = ccstate.state(new Set());
|
|
416
|
-
var collectFloatingPromise$ = ccstate.command(function (_ref, promise, signal) {
|
|
417
|
-
var set = _ref.set;
|
|
418
|
-
signal.addEventListener('abort', function () {
|
|
419
|
-
set(internalFloatingPromises$, function (prev) {
|
|
420
|
-
var ret = new Set(prev);
|
|
421
|
-
ret["delete"](promise);
|
|
422
|
-
return ret;
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
set(internalFloatingPromises$, function (prev) {
|
|
426
|
-
var ret = new Set(prev);
|
|
427
|
-
ret.add(promise);
|
|
428
|
-
return ret;
|
|
429
|
-
});
|
|
430
|
-
});
|
|
431
|
-
var floatingPromises$ = ccstate.computed(function (get) {
|
|
432
|
-
return get(internalFloatingPromises$);
|
|
433
|
-
});
|
|
434
|
-
var asyncGetSettled$ = ccstate.computed(/*#__PURE__*/function () {
|
|
435
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(get) {
|
|
436
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
437
|
-
while (1) switch (_context.prev = _context.next) {
|
|
438
|
-
case 0:
|
|
439
|
-
_context.next = 2;
|
|
440
|
-
return Promise.all(get(floatingPromises$));
|
|
441
|
-
case 2:
|
|
442
|
-
return _context.abrupt("return", _context.sent);
|
|
443
|
-
case 3:
|
|
444
|
-
case "end":
|
|
445
|
-
return _context.stop();
|
|
446
|
-
}
|
|
447
|
-
}, _callee);
|
|
448
|
-
}));
|
|
449
|
-
return function (_x) {
|
|
450
|
-
return _ref2.apply(this, arguments);
|
|
451
|
-
};
|
|
452
|
-
}());
|
|
453
|
-
|
|
454
89
|
function useLoadableInternal(atom, keepLastResolved) {
|
|
455
90
|
var promise = useGet(atom);
|
|
456
|
-
var collectFloatingPromise = useSet(collectFloatingPromise$);
|
|
457
91
|
var _useState = react.useState({
|
|
458
92
|
state: 'loading'
|
|
459
93
|
}),
|
|
@@ -469,28 +103,25 @@ function useLoadableInternal(atom, keepLastResolved) {
|
|
|
469
103
|
return;
|
|
470
104
|
}
|
|
471
105
|
var ctrl = new AbortController();
|
|
472
|
-
var settledController = new AbortController();
|
|
473
106
|
var signal = ctrl.signal;
|
|
474
107
|
if (!keepLastResolved) {
|
|
475
108
|
setPromiseResult({
|
|
476
109
|
state: 'loading'
|
|
477
110
|
});
|
|
478
111
|
}
|
|
479
|
-
|
|
480
|
-
settledController.abort();
|
|
112
|
+
promise.then(function (ret) {
|
|
481
113
|
if (signal.aborted) return;
|
|
482
114
|
setPromiseResult({
|
|
483
115
|
state: 'hasData',
|
|
484
116
|
data: ret
|
|
485
117
|
});
|
|
486
118
|
}, function (error) {
|
|
487
|
-
settledController.abort();
|
|
488
119
|
if (signal.aborted) return;
|
|
489
120
|
setPromiseResult({
|
|
490
121
|
state: 'hasError',
|
|
491
122
|
error: error
|
|
492
123
|
});
|
|
493
|
-
})
|
|
124
|
+
});
|
|
494
125
|
return function () {
|
|
495
126
|
ctrl.abort();
|
|
496
127
|
};
|
|
@@ -514,7 +145,6 @@ function useLastResolved(atom) {
|
|
|
514
145
|
}
|
|
515
146
|
|
|
516
147
|
exports.StoreProvider = StoreProvider;
|
|
517
|
-
exports.asyncGetSettled$ = asyncGetSettled$;
|
|
518
148
|
exports.useGet = useGet;
|
|
519
149
|
exports.useLastLoadable = useLastLoadable;
|
|
520
150
|
exports.useLastResolved = useLastResolved;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as ccstate from 'ccstate';
|
|
2
1
|
import { State, Computed, Command, StateArg, Store } from 'ccstate';
|
|
3
2
|
import * as react from 'react';
|
|
4
3
|
|
|
@@ -26,6 +25,4 @@ declare function useLastLoadable<T>(atom: State<Promise<Awaited<T>> | Awaited<T>
|
|
|
26
25
|
|
|
27
26
|
declare const StoreProvider: react.Provider<Store | null>;
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
export { StoreProvider, asyncGetSettled$, useGet, useLastLoadable, useLastResolved, useLoadable, useResolved, useSet };
|
|
28
|
+
export { StoreProvider, useGet, useLastLoadable, useLastResolved, useLoadable, useResolved, useSet };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as ccstate from 'ccstate';
|
|
2
1
|
import { State, Computed, Command, StateArg, Store } from 'ccstate';
|
|
3
2
|
import * as react from 'react';
|
|
4
3
|
|
|
@@ -26,6 +25,4 @@ declare function useLastLoadable<T>(atom: State<Promise<Awaited<T>> | Awaited<T>
|
|
|
26
25
|
|
|
27
26
|
declare const StoreProvider: react.Provider<Store | null>;
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
export { StoreProvider, asyncGetSettled$, useGet, useLastLoadable, useLastResolved, useLoadable, useResolved, useSet };
|
|
28
|
+
export { StoreProvider, useGet, useLastLoadable, useLastResolved, useLoadable, useResolved, useSet };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createContext, useContext, useSyncExternalStore, useCallback, useState, useEffect } from 'react';
|
|
2
|
-
import { getDefaultStore, command
|
|
2
|
+
import { getDefaultStore, command } from 'ccstate';
|
|
3
3
|
|
|
4
4
|
var StoreContext = createContext(null);
|
|
5
5
|
var StoreProvider = StoreContext.Provider;
|
|
@@ -46,31 +46,6 @@ function _arrayLikeToArray(r, a) {
|
|
|
46
46
|
function _arrayWithHoles(r) {
|
|
47
47
|
if (Array.isArray(r)) return r;
|
|
48
48
|
}
|
|
49
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) {
|
|
50
|
-
try {
|
|
51
|
-
var i = n[a](c),
|
|
52
|
-
u = i.value;
|
|
53
|
-
} catch (n) {
|
|
54
|
-
return void e(n);
|
|
55
|
-
}
|
|
56
|
-
i.done ? t(u) : Promise.resolve(u).then(r, o);
|
|
57
|
-
}
|
|
58
|
-
function _asyncToGenerator(n) {
|
|
59
|
-
return function () {
|
|
60
|
-
var t = this,
|
|
61
|
-
e = arguments;
|
|
62
|
-
return new Promise(function (r, o) {
|
|
63
|
-
var a = n.apply(t, e);
|
|
64
|
-
function _next(n) {
|
|
65
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
|
|
66
|
-
}
|
|
67
|
-
function _throw(n) {
|
|
68
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
|
|
69
|
-
}
|
|
70
|
-
_next(void 0);
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
49
|
function _iterableToArrayLimit(r, l) {
|
|
75
50
|
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
76
51
|
if (null != t) {
|
|
@@ -98,307 +73,6 @@ function _iterableToArrayLimit(r, l) {
|
|
|
98
73
|
function _nonIterableRest() {
|
|
99
74
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
100
75
|
}
|
|
101
|
-
function _regeneratorRuntime() {
|
|
102
|
-
_regeneratorRuntime = function () {
|
|
103
|
-
return e;
|
|
104
|
-
};
|
|
105
|
-
var t,
|
|
106
|
-
e = {},
|
|
107
|
-
r = Object.prototype,
|
|
108
|
-
n = r.hasOwnProperty,
|
|
109
|
-
o = Object.defineProperty || function (t, e, r) {
|
|
110
|
-
t[e] = r.value;
|
|
111
|
-
},
|
|
112
|
-
i = "function" == typeof Symbol ? Symbol : {},
|
|
113
|
-
a = i.iterator || "@@iterator",
|
|
114
|
-
c = i.asyncIterator || "@@asyncIterator",
|
|
115
|
-
u = i.toStringTag || "@@toStringTag";
|
|
116
|
-
function define(t, e, r) {
|
|
117
|
-
return Object.defineProperty(t, e, {
|
|
118
|
-
value: r,
|
|
119
|
-
enumerable: !0,
|
|
120
|
-
configurable: !0,
|
|
121
|
-
writable: !0
|
|
122
|
-
}), t[e];
|
|
123
|
-
}
|
|
124
|
-
try {
|
|
125
|
-
define({}, "");
|
|
126
|
-
} catch (t) {
|
|
127
|
-
define = function (t, e, r) {
|
|
128
|
-
return t[e] = r;
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
function wrap(t, e, r, n) {
|
|
132
|
-
var i = e && e.prototype instanceof Generator ? e : Generator,
|
|
133
|
-
a = Object.create(i.prototype),
|
|
134
|
-
c = new Context(n || []);
|
|
135
|
-
return o(a, "_invoke", {
|
|
136
|
-
value: makeInvokeMethod(t, r, c)
|
|
137
|
-
}), a;
|
|
138
|
-
}
|
|
139
|
-
function tryCatch(t, e, r) {
|
|
140
|
-
try {
|
|
141
|
-
return {
|
|
142
|
-
type: "normal",
|
|
143
|
-
arg: t.call(e, r)
|
|
144
|
-
};
|
|
145
|
-
} catch (t) {
|
|
146
|
-
return {
|
|
147
|
-
type: "throw",
|
|
148
|
-
arg: t
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
e.wrap = wrap;
|
|
153
|
-
var h = "suspendedStart",
|
|
154
|
-
l = "suspendedYield",
|
|
155
|
-
f = "executing",
|
|
156
|
-
s = "completed",
|
|
157
|
-
y = {};
|
|
158
|
-
function Generator() {}
|
|
159
|
-
function GeneratorFunction() {}
|
|
160
|
-
function GeneratorFunctionPrototype() {}
|
|
161
|
-
var p = {};
|
|
162
|
-
define(p, a, function () {
|
|
163
|
-
return this;
|
|
164
|
-
});
|
|
165
|
-
var d = Object.getPrototypeOf,
|
|
166
|
-
v = d && d(d(values([])));
|
|
167
|
-
v && v !== r && n.call(v, a) && (p = v);
|
|
168
|
-
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
|
|
169
|
-
function defineIteratorMethods(t) {
|
|
170
|
-
["next", "throw", "return"].forEach(function (e) {
|
|
171
|
-
define(t, e, function (t) {
|
|
172
|
-
return this._invoke(e, t);
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
function AsyncIterator(t, e) {
|
|
177
|
-
function invoke(r, o, i, a) {
|
|
178
|
-
var c = tryCatch(t[r], t, o);
|
|
179
|
-
if ("throw" !== c.type) {
|
|
180
|
-
var u = c.arg,
|
|
181
|
-
h = u.value;
|
|
182
|
-
return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
|
|
183
|
-
invoke("next", t, i, a);
|
|
184
|
-
}, function (t) {
|
|
185
|
-
invoke("throw", t, i, a);
|
|
186
|
-
}) : e.resolve(h).then(function (t) {
|
|
187
|
-
u.value = t, i(u);
|
|
188
|
-
}, function (t) {
|
|
189
|
-
return invoke("throw", t, i, a);
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
a(c.arg);
|
|
193
|
-
}
|
|
194
|
-
var r;
|
|
195
|
-
o(this, "_invoke", {
|
|
196
|
-
value: function (t, n) {
|
|
197
|
-
function callInvokeWithMethodAndArg() {
|
|
198
|
-
return new e(function (e, r) {
|
|
199
|
-
invoke(t, n, e, r);
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
function makeInvokeMethod(e, r, n) {
|
|
207
|
-
var o = h;
|
|
208
|
-
return function (i, a) {
|
|
209
|
-
if (o === f) throw Error("Generator is already running");
|
|
210
|
-
if (o === s) {
|
|
211
|
-
if ("throw" === i) throw a;
|
|
212
|
-
return {
|
|
213
|
-
value: t,
|
|
214
|
-
done: !0
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
for (n.method = i, n.arg = a;;) {
|
|
218
|
-
var c = n.delegate;
|
|
219
|
-
if (c) {
|
|
220
|
-
var u = maybeInvokeDelegate(c, n);
|
|
221
|
-
if (u) {
|
|
222
|
-
if (u === y) continue;
|
|
223
|
-
return u;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
|
|
227
|
-
if (o === h) throw o = s, n.arg;
|
|
228
|
-
n.dispatchException(n.arg);
|
|
229
|
-
} else "return" === n.method && n.abrupt("return", n.arg);
|
|
230
|
-
o = f;
|
|
231
|
-
var p = tryCatch(e, r, n);
|
|
232
|
-
if ("normal" === p.type) {
|
|
233
|
-
if (o = n.done ? s : l, p.arg === y) continue;
|
|
234
|
-
return {
|
|
235
|
-
value: p.arg,
|
|
236
|
-
done: n.done
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
|
|
240
|
-
}
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
function maybeInvokeDelegate(e, r) {
|
|
244
|
-
var n = r.method,
|
|
245
|
-
o = e.iterator[n];
|
|
246
|
-
if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
|
|
247
|
-
var i = tryCatch(o, e.iterator, r.arg);
|
|
248
|
-
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
|
|
249
|
-
var a = i.arg;
|
|
250
|
-
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
|
|
251
|
-
}
|
|
252
|
-
function pushTryEntry(t) {
|
|
253
|
-
var e = {
|
|
254
|
-
tryLoc: t[0]
|
|
255
|
-
};
|
|
256
|
-
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
|
|
257
|
-
}
|
|
258
|
-
function resetTryEntry(t) {
|
|
259
|
-
var e = t.completion || {};
|
|
260
|
-
e.type = "normal", delete e.arg, t.completion = e;
|
|
261
|
-
}
|
|
262
|
-
function Context(t) {
|
|
263
|
-
this.tryEntries = [{
|
|
264
|
-
tryLoc: "root"
|
|
265
|
-
}], t.forEach(pushTryEntry, this), this.reset(!0);
|
|
266
|
-
}
|
|
267
|
-
function values(e) {
|
|
268
|
-
if (e || "" === e) {
|
|
269
|
-
var r = e[a];
|
|
270
|
-
if (r) return r.call(e);
|
|
271
|
-
if ("function" == typeof e.next) return e;
|
|
272
|
-
if (!isNaN(e.length)) {
|
|
273
|
-
var o = -1,
|
|
274
|
-
i = function next() {
|
|
275
|
-
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
|
|
276
|
-
return next.value = t, next.done = !0, next;
|
|
277
|
-
};
|
|
278
|
-
return i.next = i;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
throw new TypeError(typeof e + " is not iterable");
|
|
282
|
-
}
|
|
283
|
-
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
|
|
284
|
-
value: GeneratorFunctionPrototype,
|
|
285
|
-
configurable: !0
|
|
286
|
-
}), o(GeneratorFunctionPrototype, "constructor", {
|
|
287
|
-
value: GeneratorFunction,
|
|
288
|
-
configurable: !0
|
|
289
|
-
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
|
|
290
|
-
var e = "function" == typeof t && t.constructor;
|
|
291
|
-
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
|
|
292
|
-
}, e.mark = function (t) {
|
|
293
|
-
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
|
|
294
|
-
}, e.awrap = function (t) {
|
|
295
|
-
return {
|
|
296
|
-
__await: t
|
|
297
|
-
};
|
|
298
|
-
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
|
|
299
|
-
return this;
|
|
300
|
-
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
|
|
301
|
-
void 0 === i && (i = Promise);
|
|
302
|
-
var a = new AsyncIterator(wrap(t, r, n, o), i);
|
|
303
|
-
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
|
|
304
|
-
return t.done ? t.value : a.next();
|
|
305
|
-
});
|
|
306
|
-
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
|
|
307
|
-
return this;
|
|
308
|
-
}), define(g, "toString", function () {
|
|
309
|
-
return "[object Generator]";
|
|
310
|
-
}), e.keys = function (t) {
|
|
311
|
-
var e = Object(t),
|
|
312
|
-
r = [];
|
|
313
|
-
for (var n in e) r.push(n);
|
|
314
|
-
return r.reverse(), function next() {
|
|
315
|
-
for (; r.length;) {
|
|
316
|
-
var t = r.pop();
|
|
317
|
-
if (t in e) return next.value = t, next.done = !1, next;
|
|
318
|
-
}
|
|
319
|
-
return next.done = !0, next;
|
|
320
|
-
};
|
|
321
|
-
}, e.values = values, Context.prototype = {
|
|
322
|
-
constructor: Context,
|
|
323
|
-
reset: function (e) {
|
|
324
|
-
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
|
|
325
|
-
},
|
|
326
|
-
stop: function () {
|
|
327
|
-
this.done = !0;
|
|
328
|
-
var t = this.tryEntries[0].completion;
|
|
329
|
-
if ("throw" === t.type) throw t.arg;
|
|
330
|
-
return this.rval;
|
|
331
|
-
},
|
|
332
|
-
dispatchException: function (e) {
|
|
333
|
-
if (this.done) throw e;
|
|
334
|
-
var r = this;
|
|
335
|
-
function handle(n, o) {
|
|
336
|
-
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
|
|
337
|
-
}
|
|
338
|
-
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
|
|
339
|
-
var i = this.tryEntries[o],
|
|
340
|
-
a = i.completion;
|
|
341
|
-
if ("root" === i.tryLoc) return handle("end");
|
|
342
|
-
if (i.tryLoc <= this.prev) {
|
|
343
|
-
var c = n.call(i, "catchLoc"),
|
|
344
|
-
u = n.call(i, "finallyLoc");
|
|
345
|
-
if (c && u) {
|
|
346
|
-
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
|
|
347
|
-
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
|
|
348
|
-
} else if (c) {
|
|
349
|
-
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
|
|
350
|
-
} else {
|
|
351
|
-
if (!u) throw Error("try statement without catch or finally");
|
|
352
|
-
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
},
|
|
357
|
-
abrupt: function (t, e) {
|
|
358
|
-
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
|
|
359
|
-
var o = this.tryEntries[r];
|
|
360
|
-
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
|
|
361
|
-
var i = o;
|
|
362
|
-
break;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
|
|
366
|
-
var a = i ? i.completion : {};
|
|
367
|
-
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
|
|
368
|
-
},
|
|
369
|
-
complete: function (t, e) {
|
|
370
|
-
if ("throw" === t.type) throw t.arg;
|
|
371
|
-
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
|
|
372
|
-
},
|
|
373
|
-
finish: function (t) {
|
|
374
|
-
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
375
|
-
var r = this.tryEntries[e];
|
|
376
|
-
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
|
|
377
|
-
}
|
|
378
|
-
},
|
|
379
|
-
catch: function (t) {
|
|
380
|
-
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
381
|
-
var r = this.tryEntries[e];
|
|
382
|
-
if (r.tryLoc === t) {
|
|
383
|
-
var n = r.completion;
|
|
384
|
-
if ("throw" === n.type) {
|
|
385
|
-
var o = n.arg;
|
|
386
|
-
resetTryEntry(r);
|
|
387
|
-
}
|
|
388
|
-
return o;
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
throw Error("illegal catch attempt");
|
|
392
|
-
},
|
|
393
|
-
delegateYield: function (e, r, n) {
|
|
394
|
-
return this.delegate = {
|
|
395
|
-
iterator: values(e),
|
|
396
|
-
resultName: r,
|
|
397
|
-
nextLoc: n
|
|
398
|
-
}, "next" === this.method && (this.arg = t), y;
|
|
399
|
-
}
|
|
400
|
-
}, e;
|
|
401
|
-
}
|
|
402
76
|
function _slicedToArray(r, e) {
|
|
403
77
|
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
404
78
|
}
|
|
@@ -410,48 +84,8 @@ function _unsupportedIterableToArray(r, a) {
|
|
|
410
84
|
}
|
|
411
85
|
}
|
|
412
86
|
|
|
413
|
-
var internalFloatingPromises$ = state(new Set());
|
|
414
|
-
var collectFloatingPromise$ = command(function (_ref, promise, signal) {
|
|
415
|
-
var set = _ref.set;
|
|
416
|
-
signal.addEventListener('abort', function () {
|
|
417
|
-
set(internalFloatingPromises$, function (prev) {
|
|
418
|
-
var ret = new Set(prev);
|
|
419
|
-
ret["delete"](promise);
|
|
420
|
-
return ret;
|
|
421
|
-
});
|
|
422
|
-
});
|
|
423
|
-
set(internalFloatingPromises$, function (prev) {
|
|
424
|
-
var ret = new Set(prev);
|
|
425
|
-
ret.add(promise);
|
|
426
|
-
return ret;
|
|
427
|
-
});
|
|
428
|
-
});
|
|
429
|
-
var floatingPromises$ = computed(function (get) {
|
|
430
|
-
return get(internalFloatingPromises$);
|
|
431
|
-
});
|
|
432
|
-
var asyncGetSettled$ = computed(/*#__PURE__*/function () {
|
|
433
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(get) {
|
|
434
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
435
|
-
while (1) switch (_context.prev = _context.next) {
|
|
436
|
-
case 0:
|
|
437
|
-
_context.next = 2;
|
|
438
|
-
return Promise.all(get(floatingPromises$));
|
|
439
|
-
case 2:
|
|
440
|
-
return _context.abrupt("return", _context.sent);
|
|
441
|
-
case 3:
|
|
442
|
-
case "end":
|
|
443
|
-
return _context.stop();
|
|
444
|
-
}
|
|
445
|
-
}, _callee);
|
|
446
|
-
}));
|
|
447
|
-
return function (_x) {
|
|
448
|
-
return _ref2.apply(this, arguments);
|
|
449
|
-
};
|
|
450
|
-
}());
|
|
451
|
-
|
|
452
87
|
function useLoadableInternal(atom, keepLastResolved) {
|
|
453
88
|
var promise = useGet(atom);
|
|
454
|
-
var collectFloatingPromise = useSet(collectFloatingPromise$);
|
|
455
89
|
var _useState = useState({
|
|
456
90
|
state: 'loading'
|
|
457
91
|
}),
|
|
@@ -467,28 +101,25 @@ function useLoadableInternal(atom, keepLastResolved) {
|
|
|
467
101
|
return;
|
|
468
102
|
}
|
|
469
103
|
var ctrl = new AbortController();
|
|
470
|
-
var settledController = new AbortController();
|
|
471
104
|
var signal = ctrl.signal;
|
|
472
105
|
if (!keepLastResolved) {
|
|
473
106
|
setPromiseResult({
|
|
474
107
|
state: 'loading'
|
|
475
108
|
});
|
|
476
109
|
}
|
|
477
|
-
|
|
478
|
-
settledController.abort();
|
|
110
|
+
promise.then(function (ret) {
|
|
479
111
|
if (signal.aborted) return;
|
|
480
112
|
setPromiseResult({
|
|
481
113
|
state: 'hasData',
|
|
482
114
|
data: ret
|
|
483
115
|
});
|
|
484
116
|
}, function (error) {
|
|
485
|
-
settledController.abort();
|
|
486
117
|
if (signal.aborted) return;
|
|
487
118
|
setPromiseResult({
|
|
488
119
|
state: 'hasError',
|
|
489
120
|
error: error
|
|
490
121
|
});
|
|
491
|
-
})
|
|
122
|
+
});
|
|
492
123
|
return function () {
|
|
493
124
|
ctrl.abort();
|
|
494
125
|
};
|
|
@@ -511,4 +142,4 @@ function useLastResolved(atom) {
|
|
|
511
142
|
return loadable.state === 'hasData' ? loadable.data : undefined;
|
|
512
143
|
}
|
|
513
144
|
|
|
514
|
-
export { StoreProvider,
|
|
145
|
+
export { StoreProvider, useGet, useLastLoadable, useLastResolved, useLoadable, useResolved, useSet };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccstate-react",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.11.0",
|
|
4
4
|
"description": "CCState React Hooks",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"react": ">=17.0.0"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"ccstate": "^4.
|
|
28
|
+
"ccstate": "^4.11.0"
|
|
29
29
|
},
|
|
30
30
|
"peerDependenciesMeta": {
|
|
31
31
|
"@types/react": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"shx": "^0.3.4",
|
|
56
56
|
"signal-timers": "^1.0.4",
|
|
57
57
|
"vitest": "^2.1.8",
|
|
58
|
-
"ccstate": "^4.
|
|
58
|
+
"ccstate": "^4.11.0"
|
|
59
59
|
},
|
|
60
60
|
"scripts": {
|
|
61
61
|
"build": "rollup -c",
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
import '@testing-library/jest-dom/vitest';
|
|
4
4
|
import { render, cleanup, screen } from '@testing-library/react';
|
|
5
5
|
import userEvent from '@testing-library/user-event';
|
|
6
|
-
import { afterEach, expect, it
|
|
6
|
+
import { afterEach, expect, it } from 'vitest';
|
|
7
7
|
import { computed, createStore, state } from 'ccstate';
|
|
8
8
|
import type { Computed, State } from 'ccstate';
|
|
9
9
|
import { StrictMode, useEffect } from 'react';
|
|
10
10
|
import { StoreProvider, useSet, useLoadable } from '..';
|
|
11
11
|
import { delay } from 'signal-timers';
|
|
12
12
|
import { useLastLoadable } from '../useLoadable';
|
|
13
|
-
import { asyncGetSettled$, floatingPromises$ } from '../floating-promise';
|
|
14
13
|
|
|
15
14
|
afterEach(() => {
|
|
16
15
|
cleanup();
|
|
@@ -544,55 +543,3 @@ it('useLoadable accept sync computed', async () => {
|
|
|
544
543
|
|
|
545
544
|
expect(await screen.findByText('hasData')).toBeInTheDocument();
|
|
546
545
|
});
|
|
547
|
-
|
|
548
|
-
it('will collect floating promises', async () => {
|
|
549
|
-
const trace = vi.fn();
|
|
550
|
-
const asyncComputed$ = computed(async () => {
|
|
551
|
-
await Promise.resolve();
|
|
552
|
-
trace();
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
const store = createStore();
|
|
556
|
-
function App() {
|
|
557
|
-
const result = useLoadable(asyncComputed$);
|
|
558
|
-
|
|
559
|
-
return <div>{result.state}</div>;
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
render(
|
|
563
|
-
<StoreProvider value={store}>
|
|
564
|
-
<App />
|
|
565
|
-
</StoreProvider>,
|
|
566
|
-
);
|
|
567
|
-
|
|
568
|
-
expect(trace).not.toBeCalled();
|
|
569
|
-
|
|
570
|
-
await store.get(asyncGetSettled$);
|
|
571
|
-
|
|
572
|
-
expect(trace).toBeCalled();
|
|
573
|
-
});
|
|
574
|
-
|
|
575
|
-
it('will auto remove from collected floating promise when settled', async () => {
|
|
576
|
-
const asyncComputed$ = computed(async () => {
|
|
577
|
-
await Promise.resolve();
|
|
578
|
-
});
|
|
579
|
-
|
|
580
|
-
const store = createStore();
|
|
581
|
-
function App() {
|
|
582
|
-
const result = useLoadable(asyncComputed$);
|
|
583
|
-
|
|
584
|
-
return <div>{result.state}</div>;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
render(
|
|
588
|
-
<StoreProvider value={store}>
|
|
589
|
-
<App />
|
|
590
|
-
</StoreProvider>,
|
|
591
|
-
);
|
|
592
|
-
|
|
593
|
-
expect(store.get(floatingPromises$)).toHaveLength(1);
|
|
594
|
-
|
|
595
|
-
await store.get(asyncGetSettled$);
|
|
596
|
-
|
|
597
|
-
expect(store.get(floatingPromises$)).toHaveLength(0);
|
|
598
|
-
});
|
package/src/index.ts
CHANGED
package/src/useLoadable.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import { useGet } from './useGet';
|
|
3
3
|
import type { Computed, State } from 'ccstate';
|
|
4
|
-
import { useSet } from './useSet';
|
|
5
|
-
import { collectFloatingPromise$ } from './floating-promise';
|
|
6
4
|
|
|
7
5
|
type Loadable<T> =
|
|
8
6
|
| {
|
|
@@ -22,7 +20,6 @@ function useLoadableInternal<T>(
|
|
|
22
20
|
keepLastResolved: boolean,
|
|
23
21
|
): Loadable<T> {
|
|
24
22
|
const promise = useGet(atom);
|
|
25
|
-
const collectFloatingPromise = useSet(collectFloatingPromise$);
|
|
26
23
|
|
|
27
24
|
const [promiseResult, setPromiseResult] = useState<Loadable<T>>({
|
|
28
25
|
state: 'loading',
|
|
@@ -39,7 +36,6 @@ function useLoadableInternal<T>(
|
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
const ctrl = new AbortController();
|
|
42
|
-
const settledController = new AbortController();
|
|
43
39
|
const signal = ctrl.signal;
|
|
44
40
|
|
|
45
41
|
if (!keepLastResolved) {
|
|
@@ -48,28 +44,23 @@ function useLoadableInternal<T>(
|
|
|
48
44
|
});
|
|
49
45
|
}
|
|
50
46
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
(
|
|
54
|
-
settledController.abort();
|
|
55
|
-
if (signal.aborted) return;
|
|
47
|
+
promise.then(
|
|
48
|
+
(ret) => {
|
|
49
|
+
if (signal.aborted) return;
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (signal.aborted) return;
|
|
51
|
+
setPromiseResult({
|
|
52
|
+
state: 'hasData',
|
|
53
|
+
data: ret,
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
(error: unknown) => {
|
|
57
|
+
if (signal.aborted) return;
|
|
65
58
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
),
|
|
72
|
-
AbortSignal.any([signal, settledController.signal]),
|
|
59
|
+
setPromiseResult({
|
|
60
|
+
state: 'hasError',
|
|
61
|
+
error,
|
|
62
|
+
});
|
|
63
|
+
},
|
|
73
64
|
);
|
|
74
65
|
|
|
75
66
|
return () => {
|
package/src/floating-promise.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { command, computed, state } from 'ccstate';
|
|
2
|
-
|
|
3
|
-
const internalFloatingPromises$ = state(new Set<Promise<unknown>>());
|
|
4
|
-
|
|
5
|
-
export const collectFloatingPromise$ = command(({ set }, promise: Promise<unknown>, signal: AbortSignal) => {
|
|
6
|
-
signal.addEventListener('abort', () => {
|
|
7
|
-
set(internalFloatingPromises$, (prev) => {
|
|
8
|
-
const ret = new Set(prev);
|
|
9
|
-
ret.delete(promise);
|
|
10
|
-
return ret;
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
set(internalFloatingPromises$, (prev) => {
|
|
15
|
-
const ret = new Set(prev);
|
|
16
|
-
ret.add(promise);
|
|
17
|
-
return ret;
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
export const floatingPromises$ = computed((get) => {
|
|
22
|
-
return get(internalFloatingPromises$);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
export const asyncGetSettled$ = computed(async (get) => {
|
|
26
|
-
return await Promise.all(get(floatingPromises$));
|
|
27
|
-
});
|