@raf-query/core 0.11.0 → 0.12.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 +18 -2
- package/README.md +28 -18
- package/dist/client.d.mts +132 -119
- package/dist/client.mjs +59 -162
- package/dist/entry.d.mts +67 -148
- package/dist/entry.mjs +303 -474
- package/dist/features/focus-refetch/focus-refetch.d.mts +15 -0
- package/dist/features/focus-refetch/focus-refetch.mjs +18 -0
- package/dist/features/polling/polling.d.mts +12 -0
- package/dist/features/polling/polling.mjs +35 -0
- package/dist/features/reconnect-refetch/reconnect-refetch.d.mts +15 -0
- package/dist/features/reconnect-refetch/reconnect-refetch.mjs +14 -0
- package/dist/features/shared.mjs +13 -0
- package/dist/guards.mjs +23 -0
- package/dist/hydration/hydration.d.mts +73 -0
- package/dist/hydration/hydration.mjs +128 -0
- package/dist/index.d.mts +18 -13
- package/dist/index.mjs +15 -13
- package/dist/infinite/infinite.d.mts +71 -0
- package/dist/infinite/infinite.mjs +88 -0
- package/dist/internal.d.mts +13 -0
- package/dist/internal.mjs +7 -0
- package/dist/keys/keys.d.mts +46 -0
- package/dist/keys/keys.mjs +53 -0
- package/dist/keys/targets.d.mts +56 -0
- package/dist/keys/targets.mjs +85 -0
- package/dist/links/retry/retry.d.mts +26 -0
- package/dist/links/retry/retry.mjs +51 -0
- package/dist/links/timeout/timeout.d.mts +9 -0
- package/dist/links/timeout/timeout.mjs +27 -0
- package/dist/load.d.mts +124 -0
- package/dist/load.mjs +165 -0
- package/dist/options.d.mts +112 -338
- package/dist/options.mjs +25 -36
- package/dist/presets.d.mts +29 -0
- package/dist/presets.mjs +25 -0
- package/dist/root.d.mts +82 -0
- package/dist/structural-sharing/structural-sharing.mjs +32 -0
- package/dist/subscribe.d.mts +15 -0
- package/dist/subscribe.mjs +29 -0
- package/dist/thenable.d.mts +13 -17
- package/dist/thenable.mjs +25 -6
- package/dist/verbs.d.mts +109 -0
- package/dist/verbs.mjs +87 -0
- package/package.json +13 -9
- package/dist/_virtual/_rolldown/runtime.mjs +0 -13
- package/dist/all-keyed.d.mts +0 -18
- package/dist/all-keyed.mjs +0 -19
- package/dist/binding.d.mts +0 -92
- package/dist/binding.mjs +0 -186
- package/dist/cache.d.mts +0 -164
- package/dist/cache.mjs +0 -184
- package/dist/controls.d.mts +0 -93
- package/dist/controls.mjs +0 -69
- package/dist/hydration.d.mts +0 -84
- package/dist/hydration.mjs +0 -148
- package/dist/infinite.d.mts +0 -5
- package/dist/infinite.mjs +0 -103
- package/dist/key.d.mts +0 -18
- package/dist/key.mjs +0 -36
- package/dist/listen.mjs +0 -19
- package/dist/notify.mjs +0 -21
- package/dist/observer.d.mts +0 -110
- package/dist/observer.mjs +0 -300
- package/dist/platform.d.mts +0 -27
- package/dist/platform.mjs +0 -44
- package/dist/query.d.mts +0 -137
- package/dist/query.mjs +0 -147
- package/dist/request.mjs +0 -47
- package/dist/retry.mjs +0 -25
- package/dist/share.mjs +0 -40
package/dist/request.mjs
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Context, Effect, Scope } from "effect";
|
|
2
|
-
//#region src/request.ts
|
|
3
|
-
function isEffectResult(result) {
|
|
4
|
-
return Effect.isEffect(result);
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* One `queryFn` call as an Effect. The signal it gets aborts when the fiber
|
|
8
|
-
* is interrupted; a returned Effect runs in the same fiber, so interrupting
|
|
9
|
-
* the request interrupts it. Plain values settle like promises, a microtask
|
|
10
|
-
* later. A `queryFn` that throws instead of returning is a defect, as in
|
|
11
|
-
* `Effect.sync`.
|
|
12
|
-
*/
|
|
13
|
-
function fromQueryFn(call) {
|
|
14
|
-
return Effect.callback((resume, signal) => {
|
|
15
|
-
let result;
|
|
16
|
-
try {
|
|
17
|
-
result = call(signal);
|
|
18
|
-
} catch (error) {
|
|
19
|
-
resume(Effect.die(error));
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (isEffectResult(result)) {
|
|
23
|
-
resume(result);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
Promise.resolve(result).then((value) => resume(Effect.succeed(value)), (error) => resume(Effect.fail(error)));
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* The services a request runs with: the cache's, under those of the verb
|
|
31
|
-
* that last called for the entry. The caller's `Scope` is left out: a
|
|
32
|
-
* request outlives the call that started it.
|
|
33
|
-
*/
|
|
34
|
-
function requestServices(cache, caller) {
|
|
35
|
-
return Context.merge(cache, Context.omit(Scope.Scope)(caller));
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* A request as it runs: in a `raf-query.request` span, with `services`,
|
|
39
|
-
* which hold what its `queryFn` Effect needs (entries erase that type with
|
|
40
|
-
* the data's). Typed failures become the query's error; defects are logged
|
|
41
|
-
* too, since nothing else reports them.
|
|
42
|
-
*/
|
|
43
|
-
function runRequest(request, hash, services) {
|
|
44
|
-
return request.pipe(Effect.tapDefect((defect) => Effect.logError("raf-query: queryFn died", defect)), Effect.withSpan("raf-query.request", { attributes: { "raf_query.hash": hash } }), Effect.provideContext(services));
|
|
45
|
-
}
|
|
46
|
-
//#endregion
|
|
47
|
-
export { fromQueryFn, requestServices, runRequest };
|
package/dist/retry.mjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Effect, Predicate, Schedule } from "effect";
|
|
2
|
-
//#region src/retry.ts
|
|
3
|
-
/** Doubling from 1 s, at most 30 s. */
|
|
4
|
-
const defaultDelays = /*#__PURE__*/ Schedule.min([Schedule.exponential("1 second"), Schedule.spaced("30 seconds")]);
|
|
5
|
-
function delays(retryDelay) {
|
|
6
|
-
if (retryDelay === void 0) return defaultDelays;
|
|
7
|
-
if (Predicate.isNumber(retryDelay)) return Schedule.spaced(retryDelay);
|
|
8
|
-
return Schedule.forever.pipe(Schedule.modifyDelay((step) => Effect.succeed(retryDelay(step.attempt, step.input))));
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* A query's retry options as one `Schedule`, or `undefined` when it doesn't
|
|
12
|
-
* retry. `retryDelay` sets the delays; a count or predicate in `retry` stops
|
|
13
|
-
* the schedule, given the attempt number (1 after the first failure) and the
|
|
14
|
-
* error.
|
|
15
|
-
*/
|
|
16
|
-
function retrySchedule(behavior, isServer) {
|
|
17
|
-
const retry = behavior.retry ?? (isServer ? 0 : 3);
|
|
18
|
-
if (Schedule.isSchedule(retry)) return retry;
|
|
19
|
-
if (retry === false || retry === 0) return;
|
|
20
|
-
const schedule = delays(behavior.retryDelay);
|
|
21
|
-
if (retry === true) return schedule;
|
|
22
|
-
return schedule.pipe(Schedule.while((step) => Predicate.isNumber(retry) ? step.attempt <= retry : retry(step.attempt, step.input)));
|
|
23
|
-
}
|
|
24
|
-
//#endregion
|
|
25
|
-
export { retrySchedule };
|
package/dist/share.mjs
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { isPlainRecord } from "./key.mjs";
|
|
2
|
-
//#region src/share.ts
|
|
3
|
-
function isPlainArray(value) {
|
|
4
|
-
return Array.isArray(value) && value.length === Object.keys(value).length;
|
|
5
|
-
}
|
|
6
|
-
function share(previous, next, depth) {
|
|
7
|
-
if (previous === next || depth > 500) return next;
|
|
8
|
-
if (isPlainArray(previous) && isPlainArray(next)) {
|
|
9
|
-
let equal = previous.length === next.length;
|
|
10
|
-
const copy = next.map((item, index) => {
|
|
11
|
-
const shared = share(previous[index], item, depth + 1);
|
|
12
|
-
equal &&= shared === previous[index];
|
|
13
|
-
return shared;
|
|
14
|
-
});
|
|
15
|
-
return equal ? previous : copy;
|
|
16
|
-
}
|
|
17
|
-
if (isPlainRecord(previous) && isPlainRecord(next)) {
|
|
18
|
-
const names = Object.keys(next);
|
|
19
|
-
let equal = names.length === Object.keys(previous).length;
|
|
20
|
-
const copy = {};
|
|
21
|
-
for (const name of names) {
|
|
22
|
-
const shared = share(previous[name], next[name], depth + 1);
|
|
23
|
-
equal &&= shared === previous[name] && Object.hasOwn(previous, name);
|
|
24
|
-
copy[name] = shared;
|
|
25
|
-
}
|
|
26
|
-
return equal ? previous : copy;
|
|
27
|
-
}
|
|
28
|
-
return next;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* `next`, reusing every part of `previous` that is deeply equal to it: all
|
|
32
|
-
* of `previous` when nothing changed, else a copy of `next` whose unchanged
|
|
33
|
-
* subtrees are `previous`'s. Only plain objects and arrays are compared;
|
|
34
|
-
* anything else is taken from `next`. TanStack Query's `replaceEqualDeep`.
|
|
35
|
-
*/
|
|
36
|
-
function replaceEqualDeep(previous, next) {
|
|
37
|
-
return share(previous, next, 0);
|
|
38
|
-
}
|
|
39
|
-
//#endregion
|
|
40
|
-
export { replaceEqualDeep };
|