@nifrajs/web-react 2.14.1 → 3.1.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/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -0
- package/dist/client.js.map +1 -1
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +4 -1
- package/dist/compose.js.map +1 -1
- package/dist/fetcher.d.ts.map +1 -1
- package/dist/fetcher.js +7 -13
- package/dist/fetcher.js.map +1 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +6 -24
- package/dist/query.js.map +1 -1
- package/package.json +5 -5
- package/src/client.ts +1 -0
- package/src/compose.ts +4 -1
- package/src/fetcher.ts +17 -14
- package/src/query.ts +10 -23
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAkBnE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,mGAAmG;AACnG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CACvE;AAaD,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAIN;AAED,oGAAoG;AACpG,eAAO,MAAM,sBAAsB;;2BAEZ,MAAM;EAC3B,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAkBnE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,mGAAmG;AACnG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CACvE;AAaD,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAIN;AAED,oGAAoG;AACpG,eAAO,MAAM,sBAAsB;;2BAEZ,MAAM;EAC3B,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CA+B7D"}
|
package/dist/client.js
CHANGED
|
@@ -64,6 +64,7 @@ export function mountRouter(options) {
|
|
|
64
64
|
search: searchOfChain(searchSchemas?.[state.routeId] ?? [], rawSearch),
|
|
65
65
|
// The in-flight submission (for optimistic UI) - spread only when present.
|
|
66
66
|
...(state.submission ? { submission: state.submission } : {}),
|
|
67
|
+
...(state.boundaries !== undefined ? { boundaries: state.boundaries } : {}),
|
|
67
68
|
});
|
|
68
69
|
};
|
|
69
70
|
const onRecoverableError = assuranceError();
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/compose.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAyC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAS7E;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAyC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAS7E;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,CA8BhF"}
|
package/dist/compose.js
CHANGED
|
@@ -24,7 +24,10 @@ export function compose(chain, props) {
|
|
|
24
24
|
// Each layout receives its own loader data at its own index. Layouts are the chain's leading
|
|
25
25
|
// prefix, so `layoutData[i]` belongs to `chain[i]`; anything past that end (a client-only `_error`
|
|
26
26
|
// boundary marker, the page) reads `undefined` and is unaffected.
|
|
27
|
-
node = createElement(chain[i], {
|
|
27
|
+
node = createElement(chain[i], {
|
|
28
|
+
data: props.layoutData?.[i] ?? null,
|
|
29
|
+
...(props.boundaries !== undefined ? { boundaries: props.boundaries } : {}),
|
|
30
|
+
}, node);
|
|
28
31
|
}
|
|
29
32
|
return createElement(RouterContext.Provider, {
|
|
30
33
|
value: {
|
package/dist/compose.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA0C,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,oGAAoG;AACpG,MAAM,YAAY,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAExE,oGAAoG;AACpG,MAAM,YAAY,GAAsC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEzE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,KAAyB,EAAE,KAAkB;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAC7B,IAAI,IAAI,GAAc,aAAa,CAAC,KAAK,CAAC,IAAI,CAAmC,EAAE,KAAK,CAAC,CAAA;IACzF,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,mFAAmF;QACnF,6FAA6F;QAC7F,mGAAmG;QACnG,kEAAkE;QAClE,IAAI,GAAG,aAAa,CAClB,KAAK,CAAC,CAAC,CAAyC,EAChD,
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA0C,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,oGAAoG;AACpG,MAAM,YAAY,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAExE,oGAAoG;AACpG,MAAM,YAAY,GAAsC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEzE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,KAAyB,EAAE,KAAkB;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAC7B,IAAI,IAAI,GAAc,aAAa,CAAC,KAAK,CAAC,IAAI,CAAmC,EAAE,KAAK,CAAC,CAAA;IACzF,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,mFAAmF;QACnF,6FAA6F;QAC7F,mGAAmG;QACnG,kEAAkE;QAClE,IAAI,GAAG,aAAa,CAClB,KAAK,CAAC,CAAC,CAAyC,EAChD;YACE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;YACnC,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,EACD,IAAI,CACL,CAAA;IACH,CAAC;IACD,OAAO,aAAa,CAClB,aAAa,CAAC,QAAQ,EACtB;QACE,KAAK,EAAE;YACL,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,YAAY;YACpC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,YAAY;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK;YAC/B,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B;KACF,EACD,IAAI,CACL,CAAA;AACH,CAAC"}
|
package/dist/fetcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAyBvE,oGAAoG;AACpG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAEvE;AAKD,qFAAqF;AACrF,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,qGAAqG;IACrG,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3F;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAQrD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,SAAS,OAAO,EAAE,CAOhD"}
|
package/dist/fetcher.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createMountedRouterRef, IDLE_FETCHER_STATE, idleFetcherSnapshot, noFetchers, noopAsync, noopSubscribe, } from "@nifrajs/web/internal/fetcher-runtime";
|
|
1
2
|
/**
|
|
2
3
|
* `@nifrajs/web-react/fetcher` - React bindings for concurrent fetchers. `useFetcher(key)` subscribes a
|
|
3
4
|
* component to an independent {@link Fetcher} (via `useSyncExternalStore`) and returns its reactive
|
|
@@ -11,27 +12,19 @@
|
|
|
11
12
|
* there's no hydration mismatch.
|
|
12
13
|
*/
|
|
13
14
|
import { useSyncExternalStore } from "react";
|
|
14
|
-
|
|
15
|
-
// page, and fetchers never exist on the server. Shared with `client.ts`'s `mountRouter`.
|
|
16
|
-
let mountedRouter;
|
|
15
|
+
const mountedRouter = createMountedRouterRef();
|
|
17
16
|
/** Register (or clear) the router that owns fetchers - called by `mountRouter`. Not for app use. */
|
|
18
17
|
export function setMountedRouter(router) {
|
|
19
|
-
mountedRouter
|
|
18
|
+
mountedRouter.set(router);
|
|
20
19
|
}
|
|
21
|
-
// Stable idle values for the server / pre-mount snapshot (stable refs → no `useSyncExternalStore`
|
|
22
|
-
// loop, no hydration mismatch).
|
|
23
|
-
const IDLE = { pending: false, data: undefined };
|
|
24
|
-
const NO_FETCHERS = [];
|
|
25
|
-
const noopSubscribe = () => () => { };
|
|
26
|
-
const noopAsync = async () => { };
|
|
27
20
|
/**
|
|
28
21
|
* Subscribe to the independent fetcher for `key` (created lazily, stable across renders). Returns its
|
|
29
22
|
* state (`pending`/`data`/`actionData`/`submission`) + `load`/`submit`. Multiple `useFetcher` calls
|
|
30
23
|
* with different keys run concurrently without disturbing the active route or each other.
|
|
31
24
|
*/
|
|
32
25
|
export function useFetcher(key) {
|
|
33
|
-
const fetcher = mountedRouter?.fetcher(key);
|
|
34
|
-
const state = useSyncExternalStore(fetcher?.subscribe ?? noopSubscribe, fetcher?.snapshot ??
|
|
26
|
+
const fetcher = mountedRouter.get()?.fetcher(key);
|
|
27
|
+
const state = useSyncExternalStore(fetcher?.subscribe ?? noopSubscribe, fetcher?.snapshot ?? idleFetcherSnapshot, () => IDLE_FETCHER_STATE);
|
|
35
28
|
return { ...state, load: fetcher?.load ?? noopAsync, submit: fetcher?.submit ?? noopAsync };
|
|
36
29
|
}
|
|
37
30
|
/**
|
|
@@ -40,6 +33,7 @@ export function useFetcher(key) {
|
|
|
40
33
|
* is created.
|
|
41
34
|
*/
|
|
42
35
|
export function useFetchers() {
|
|
43
|
-
|
|
36
|
+
const router = mountedRouter.get();
|
|
37
|
+
return useSyncExternalStore(router?.subscribeFetchers ?? noopSubscribe, router?.fetchers ?? noFetchers, noFetchers);
|
|
44
38
|
}
|
|
45
39
|
//# sourceMappingURL=fetcher.js.map
|
package/dist/fetcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,aAAa,GACd,MAAM,uCAAuC,CAAA;AAC9C;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAE5C,MAAM,aAAa,GAAG,sBAAsB,EAAE,CAAA;AAE9C,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,MAAgC;IAC/D,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAaD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,oBAAoB,CAChC,OAAO,EAAE,SAAS,IAAI,aAAa,EACnC,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EACxC,GAAG,EAAE,CAAC,kBAAkB,CACzB,CAAA;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,CAAA;AAC7F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,CAAA;IAClC,OAAO,oBAAoB,CACzB,MAAM,EAAE,iBAAiB,IAAI,aAAa,EAC1C,MAAM,EAAE,QAAQ,IAAI,UAAU,EAC9B,UAAU,CACX,CAAA;AACH,CAAC"}
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EAEjB,aAAa,EACb,WAAW,EAEX,YAAY,EACZ,UAAU,EACX,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/query.js
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
// `/client`, not the root - these are DOM values, and the root's graph carries the
|
|
2
2
|
// server, which Vite's dev server evaluates rather than tree-shakes.
|
|
3
|
-
import { createMutation
|
|
3
|
+
import { createMutation } from "@nifrajs/web/client";
|
|
4
|
+
import { createNoClientRefetch, getQueryClientSingleton, IDLE_QUERY_STATE, } from "@nifrajs/web/internal/query-runtime";
|
|
4
5
|
import { createContext, createElement, useContext, useEffect, useMemo, useRef, useSyncExternalStore, } from "react";
|
|
5
|
-
// The lazily-created client-side singleton (used when no QueryClientProvider is present). SSR-guarded:
|
|
6
|
-
// the server has no singleton, so provider-less hooks render idle there.
|
|
7
|
-
let singleton;
|
|
8
|
-
function getSingleton() {
|
|
9
|
-
if (typeof window === "undefined")
|
|
10
|
-
return undefined;
|
|
11
|
-
if (singleton === undefined)
|
|
12
|
-
singleton = createQueryClient({ now: () => Date.now() });
|
|
13
|
-
return singleton;
|
|
14
|
-
}
|
|
15
6
|
// A no-op client for the server / pre-hydration (all reads empty, all writes ignored). Stable ref so a
|
|
16
7
|
// hook's `useSyncExternalStore` server snapshot is consistent.
|
|
17
8
|
const NOOP_CLIENT = {
|
|
@@ -34,23 +25,14 @@ export function QueryClientProvider(props) {
|
|
|
34
25
|
* else a no-op (server / pre-hydration). Use it to `invalidateQueries`/`setQueryData`/`prefetchQuery`. */
|
|
35
26
|
export function useQueryClient() {
|
|
36
27
|
const provided = useContext(QueryClientContext);
|
|
37
|
-
return provided ??
|
|
28
|
+
return provided ?? getQueryClientSingleton() ?? NOOP_CLIENT;
|
|
38
29
|
}
|
|
39
30
|
// Stable idle snapshots + handles for the server / pre-fetch render (stable refs → no loop, no mismatch).
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
data: undefined,
|
|
43
|
-
error: undefined,
|
|
44
|
-
isFetching: false,
|
|
45
|
-
updatedAt: Number.NEGATIVE_INFINITY,
|
|
46
|
-
});
|
|
47
|
-
const idleSnapshot = () => IDLE;
|
|
48
|
-
const IDLE_INFINITE = IDLE;
|
|
31
|
+
const idleSnapshot = () => IDLE_QUERY_STATE;
|
|
32
|
+
const IDLE_INFINITE = IDLE_QUERY_STATE;
|
|
49
33
|
const idleInfiniteSnapshot = () => IDLE_INFINITE;
|
|
50
34
|
const noopSubscribe = () => () => { };
|
|
51
|
-
const noopAsync =
|
|
52
|
-
throw new Error("[nifra/web-react] query action called with no query client (server?)");
|
|
53
|
-
};
|
|
35
|
+
const noopAsync = createNoClientRefetch("[nifra/web-react]", "query action");
|
|
54
36
|
const IDLE_HANDLE = {
|
|
55
37
|
snapshot: idleSnapshot,
|
|
56
38
|
subscribe: noopSubscribe,
|
package/dist/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAwBA,mFAAmF;AACnF,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/web-react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "React render adapter for @nifrajs/web - SSR + hydration (Bun-native JSX, no Babel).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -87,10 +87,10 @@
|
|
|
87
87
|
"access": "public"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@nifrajs/core": "
|
|
91
|
-
"@nifrajs/i18n": "
|
|
92
|
-
"@nifrajs/image": "
|
|
93
|
-
"@nifrajs/web": "
|
|
90
|
+
"@nifrajs/core": "3.1.0",
|
|
91
|
+
"@nifrajs/i18n": "3.1.0",
|
|
92
|
+
"@nifrajs/image": "3.1.0",
|
|
93
|
+
"@nifrajs/web": "3.1.0"
|
|
94
94
|
},
|
|
95
95
|
"peerDependencies": {
|
|
96
96
|
"react": "^19.0.0",
|
package/src/client.ts
CHANGED
|
@@ -79,6 +79,7 @@ export function mountRouter(options: MountRouterOptions): void {
|
|
|
79
79
|
search: searchOfChain(searchSchemas?.[state.routeId] ?? [], rawSearch),
|
|
80
80
|
// The in-flight submission (for optimistic UI) - spread only when present.
|
|
81
81
|
...(state.submission ? { submission: state.submission } : {}),
|
|
82
|
+
...(state.boundaries !== undefined ? { boundaries: state.boundaries } : {}),
|
|
82
83
|
})
|
|
83
84
|
}
|
|
84
85
|
const onRecoverableError = assuranceError()
|
package/src/compose.ts
CHANGED
|
@@ -30,7 +30,10 @@ export function compose(chain: readonly unknown[], props: RenderProps): ReactNod
|
|
|
30
30
|
// boundary marker, the page) reads `undefined` and is unaffected.
|
|
31
31
|
node = createElement(
|
|
32
32
|
chain[i] as FunctionComponent<{ data: unknown }>,
|
|
33
|
-
{
|
|
33
|
+
{
|
|
34
|
+
data: props.layoutData?.[i] ?? null,
|
|
35
|
+
...(props.boundaries !== undefined ? { boundaries: props.boundaries } : {}),
|
|
36
|
+
},
|
|
34
37
|
node,
|
|
35
38
|
)
|
|
36
39
|
}
|
package/src/fetcher.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { ClientRouter, Fetcher, FetcherState } from "@nifrajs/web"
|
|
2
|
+
import {
|
|
3
|
+
createMountedRouterRef,
|
|
4
|
+
IDLE_FETCHER_STATE,
|
|
5
|
+
idleFetcherSnapshot,
|
|
6
|
+
noFetchers,
|
|
7
|
+
noopAsync,
|
|
8
|
+
noopSubscribe,
|
|
9
|
+
} from "@nifrajs/web/internal/fetcher-runtime"
|
|
2
10
|
/**
|
|
3
11
|
* `@nifrajs/web-react/fetcher` - React bindings for concurrent fetchers. `useFetcher(key)` subscribes a
|
|
4
12
|
* component to an independent {@link Fetcher} (via `useSyncExternalStore`) and returns its reactive
|
|
@@ -13,21 +21,15 @@ import type { ClientRouter, Fetcher, FetcherState } from "@nifrajs/web"
|
|
|
13
21
|
*/
|
|
14
22
|
import { useSyncExternalStore } from "react"
|
|
15
23
|
|
|
16
|
-
|
|
17
|
-
// page, and fetchers never exist on the server. Shared with `client.ts`'s `mountRouter`.
|
|
18
|
-
let mountedRouter: ClientRouter | undefined
|
|
24
|
+
const mountedRouter = createMountedRouterRef()
|
|
19
25
|
|
|
20
26
|
/** Register (or clear) the router that owns fetchers - called by `mountRouter`. Not for app use. */
|
|
21
27
|
export function setMountedRouter(router: ClientRouter | undefined): void {
|
|
22
|
-
mountedRouter
|
|
28
|
+
mountedRouter.set(router)
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
// Stable idle values for the server / pre-mount snapshot (stable refs → no `useSyncExternalStore`
|
|
26
32
|
// loop, no hydration mismatch).
|
|
27
|
-
const IDLE: FetcherState = { pending: false, data: undefined }
|
|
28
|
-
const NO_FETCHERS: readonly Fetcher[] = []
|
|
29
|
-
const noopSubscribe = (): (() => void) => () => {}
|
|
30
|
-
const noopAsync = async (): Promise<void> => {}
|
|
31
33
|
|
|
32
34
|
/** A fetcher's reactive {@link FetcherState} plus its imperative `load`/`submit`. */
|
|
33
35
|
export interface FetcherHandle extends FetcherState {
|
|
@@ -43,11 +45,11 @@ export interface FetcherHandle extends FetcherState {
|
|
|
43
45
|
* with different keys run concurrently without disturbing the active route or each other.
|
|
44
46
|
*/
|
|
45
47
|
export function useFetcher(key: string): FetcherHandle {
|
|
46
|
-
const fetcher = mountedRouter?.fetcher(key)
|
|
48
|
+
const fetcher = mountedRouter.get()?.fetcher(key)
|
|
47
49
|
const state = useSyncExternalStore(
|
|
48
50
|
fetcher?.subscribe ?? noopSubscribe,
|
|
49
|
-
fetcher?.snapshot ??
|
|
50
|
-
() =>
|
|
51
|
+
fetcher?.snapshot ?? idleFetcherSnapshot,
|
|
52
|
+
() => IDLE_FETCHER_STATE, // server: fetchers are client-only → idle (matches the first client render)
|
|
51
53
|
)
|
|
52
54
|
return { ...state, load: fetcher?.load ?? noopAsync, submit: fetcher?.submit ?? noopAsync }
|
|
53
55
|
}
|
|
@@ -58,9 +60,10 @@ export function useFetcher(key: string): FetcherHandle {
|
|
|
58
60
|
* is created.
|
|
59
61
|
*/
|
|
60
62
|
export function useFetchers(): readonly Fetcher[] {
|
|
63
|
+
const router = mountedRouter.get()
|
|
61
64
|
return useSyncExternalStore(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
router?.subscribeFetchers ?? noopSubscribe,
|
|
66
|
+
router?.fetchers ?? noFetchers,
|
|
67
|
+
noFetchers,
|
|
65
68
|
)
|
|
66
69
|
}
|
package/src/query.ts
CHANGED
|
@@ -24,7 +24,12 @@ import type {
|
|
|
24
24
|
} from "@nifrajs/web"
|
|
25
25
|
// `/client`, not the root - these are DOM values, and the root's graph carries the
|
|
26
26
|
// server, which Vite's dev server evaluates rather than tree-shakes.
|
|
27
|
-
import { createMutation
|
|
27
|
+
import { createMutation } from "@nifrajs/web/client"
|
|
28
|
+
import {
|
|
29
|
+
createNoClientRefetch,
|
|
30
|
+
getQueryClientSingleton,
|
|
31
|
+
IDLE_QUERY_STATE,
|
|
32
|
+
} from "@nifrajs/web/internal/query-runtime"
|
|
28
33
|
import {
|
|
29
34
|
createContext,
|
|
30
35
|
createElement,
|
|
@@ -39,15 +44,6 @@ import {
|
|
|
39
44
|
// See the note in router.ts: the `export type { … } from` form would keep a side-effect import.
|
|
40
45
|
export type { DehydratedState }
|
|
41
46
|
|
|
42
|
-
// The lazily-created client-side singleton (used when no QueryClientProvider is present). SSR-guarded:
|
|
43
|
-
// the server has no singleton, so provider-less hooks render idle there.
|
|
44
|
-
let singleton: QueryClient | undefined
|
|
45
|
-
function getSingleton(): QueryClient | undefined {
|
|
46
|
-
if (typeof window === "undefined") return undefined
|
|
47
|
-
if (singleton === undefined) singleton = createQueryClient({ now: () => Date.now() })
|
|
48
|
-
return singleton
|
|
49
|
-
}
|
|
50
|
-
|
|
51
47
|
// A no-op client for the server / pre-hydration (all reads empty, all writes ignored). Stable ref so a
|
|
52
48
|
// hook's `useSyncExternalStore` server snapshot is consistent.
|
|
53
49
|
const NOOP_CLIENT: QueryClient = {
|
|
@@ -76,26 +72,17 @@ export function QueryClientProvider(props: {
|
|
|
76
72
|
* else a no-op (server / pre-hydration). Use it to `invalidateQueries`/`setQueryData`/`prefetchQuery`. */
|
|
77
73
|
export function useQueryClient(): QueryClient {
|
|
78
74
|
const provided = useContext(QueryClientContext)
|
|
79
|
-
return provided ??
|
|
75
|
+
return provided ?? getQueryClientSingleton() ?? NOOP_CLIENT
|
|
80
76
|
}
|
|
81
77
|
|
|
82
78
|
// Stable idle snapshots + handles for the server / pre-fetch render (stable refs → no loop, no mismatch).
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
data: undefined,
|
|
86
|
-
error: undefined,
|
|
87
|
-
isFetching: false,
|
|
88
|
-
updatedAt: Number.NEGATIVE_INFINITY,
|
|
89
|
-
})
|
|
90
|
-
const idleSnapshot = (): QueryState<never> => IDLE
|
|
91
|
-
const IDLE_INFINITE: QueryState<InfiniteData<never, never>> = IDLE as QueryState<
|
|
79
|
+
const idleSnapshot = (): QueryState<never> => IDLE_QUERY_STATE
|
|
80
|
+
const IDLE_INFINITE: QueryState<InfiniteData<never, never>> = IDLE_QUERY_STATE as QueryState<
|
|
92
81
|
InfiniteData<never, never>
|
|
93
82
|
>
|
|
94
83
|
const idleInfiniteSnapshot = (): QueryState<InfiniteData<never, never>> => IDLE_INFINITE
|
|
95
84
|
const noopSubscribe = (): (() => void) => () => {}
|
|
96
|
-
const noopAsync =
|
|
97
|
-
throw new Error("[nifra/web-react] query action called with no query client (server?)")
|
|
98
|
-
}
|
|
85
|
+
const noopAsync = createNoClientRefetch<never>("[nifra/web-react]", "query action")
|
|
99
86
|
const IDLE_HANDLE: QueryHandle<never> = {
|
|
100
87
|
snapshot: idleSnapshot,
|
|
101
88
|
subscribe: noopSubscribe,
|