@bleedingdev/modern-js-runtime 3.2.0-ultramodern.120 → 3.2.0-ultramodern.122
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/cjs/boundary-debugger/index.js +4 -0
- package/dist/cjs/cli/index.js +11 -0
- package/dist/cjs/{router/runtime/tanstack/rsc/ClientSlot.js → core/context/extensions.js} +33 -21
- package/dist/cjs/{router/runtime/tanstack/rsc/SlotContext.js → core/context/helmetContext.js} +16 -20
- package/dist/cjs/core/context/index.js +65 -0
- package/dist/cjs/core/react/wrapper.js +6 -4
- package/dist/cjs/core/server/helmet.js +2 -1
- package/dist/cjs/core/server/requestHandler.js +42 -29
- package/dist/cjs/core/server/routerCleanup.js +110 -0
- package/dist/cjs/core/server/scriptOrder.js +75 -4
- package/dist/cjs/core/server/stream/afterTemplate.js +6 -18
- package/dist/cjs/core/server/stream/deferredScript.js +4 -1
- package/dist/cjs/core/server/string/index.js +1 -7
- package/dist/cjs/core/server/string/loadable.js +13 -40
- package/dist/cjs/core/server/string/ssrData.js +1 -1
- package/dist/cjs/core/server/utils.js +31 -8
- package/dist/cjs/exports/head.js +135 -74
- package/dist/cjs/exports/tanstack-router.js +36 -305
- package/dist/cjs/module-federation/index.js +178 -0
- package/dist/cjs/router/cli/code/index.js +1 -47
- package/dist/cjs/router/cli/code/templates.js +1 -14
- package/dist/cjs/router/cli/handler.js +1 -1
- package/dist/cjs/router/cli/index.js +2 -23
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +16 -4
- package/dist/cjs/router/runtime/PrefetchLink.js +2 -3
- package/dist/cjs/router/runtime/internal.js +20 -13
- package/dist/cjs/router/runtime/lifecycle.js +37 -22
- package/dist/cjs/router/runtime/plugin.js +2 -9
- package/dist/cjs/router/runtime/plugin.node.js +2 -7
- package/dist/cjs/router/runtime/provider.js +107 -0
- package/dist/cjs/router/runtime/utils.js +35 -9
- package/dist/esm/boundary-debugger/index.mjs +4 -0
- package/dist/esm/cli/index.mjs +4 -2
- package/dist/esm/core/context/extensions.mjs +28 -0
- package/dist/esm/core/context/helmetContext.mjs +13 -0
- package/dist/esm/core/context/index.mjs +5 -0
- package/dist/esm/core/react/wrapper.mjs +6 -4
- package/dist/esm/core/server/helmet.mjs +2 -1
- package/dist/esm/core/server/requestHandler.mjs +43 -30
- package/dist/esm/core/server/routerCleanup.mjs +66 -0
- package/dist/esm/core/server/scriptOrder.mjs +60 -1
- package/dist/esm/core/server/stream/afterTemplate.mjs +8 -20
- package/dist/esm/core/server/stream/deferredScript.mjs +4 -1
- package/dist/esm/core/server/string/index.mjs +3 -9
- package/dist/esm/core/server/string/loadable.mjs +11 -38
- package/dist/esm/core/server/string/ssrData.mjs +2 -2
- package/dist/esm/core/server/utils.mjs +31 -8
- package/dist/esm/exports/head.mjs +135 -74
- package/dist/esm/exports/tanstack-router.mjs +30 -4
- package/dist/esm/module-federation/index.mjs +109 -0
- package/dist/esm/router/cli/code/index.mjs +1 -47
- package/dist/esm/router/cli/code/templates.mjs +1 -14
- package/dist/esm/router/cli/handler.mjs +1 -1
- package/dist/esm/router/cli/index.mjs +3 -24
- package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +16 -4
- package/dist/esm/router/runtime/PrefetchLink.mjs +2 -3
- package/dist/esm/router/runtime/internal.mjs +16 -15
- package/dist/esm/router/runtime/lifecycle.mjs +22 -13
- package/dist/esm/router/runtime/plugin.mjs +4 -11
- package/dist/esm/router/runtime/plugin.node.mjs +4 -9
- package/dist/esm/router/runtime/provider.mjs +57 -0
- package/dist/esm/router/runtime/utils.mjs +35 -9
- package/dist/esm-node/boundary-debugger/index.mjs +4 -0
- package/dist/esm-node/cli/index.mjs +4 -2
- package/dist/esm-node/core/context/extensions.mjs +29 -0
- package/dist/esm-node/core/context/helmetContext.mjs +14 -0
- package/dist/esm-node/core/context/index.mjs +5 -0
- package/dist/esm-node/core/react/wrapper.mjs +6 -4
- package/dist/esm-node/core/server/helmet.mjs +2 -1
- package/dist/esm-node/core/server/requestHandler.mjs +43 -30
- package/dist/esm-node/core/server/routerCleanup.mjs +67 -0
- package/dist/esm-node/core/server/scriptOrder.mjs +60 -1
- package/dist/esm-node/core/server/stream/afterTemplate.mjs +8 -20
- package/dist/esm-node/core/server/stream/deferredScript.mjs +4 -1
- package/dist/esm-node/core/server/string/index.mjs +3 -9
- package/dist/esm-node/core/server/string/loadable.mjs +11 -38
- package/dist/esm-node/core/server/string/ssrData.mjs +2 -2
- package/dist/esm-node/core/server/utils.mjs +31 -8
- package/dist/esm-node/exports/head.mjs +135 -74
- package/dist/esm-node/exports/tanstack-router.mjs +30 -4
- package/dist/esm-node/module-federation/index.mjs +110 -0
- package/dist/esm-node/router/cli/code/index.mjs +1 -47
- package/dist/esm-node/router/cli/code/templates.mjs +1 -14
- package/dist/esm-node/router/cli/handler.mjs +1 -1
- package/dist/esm-node/router/cli/index.mjs +3 -24
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +16 -4
- package/dist/esm-node/router/runtime/PrefetchLink.mjs +2 -3
- package/dist/esm-node/router/runtime/internal.mjs +16 -15
- package/dist/esm-node/router/runtime/lifecycle.mjs +22 -13
- package/dist/esm-node/router/runtime/plugin.mjs +4 -11
- package/dist/esm-node/router/runtime/plugin.node.mjs +4 -9
- package/dist/esm-node/router/runtime/provider.mjs +58 -0
- package/dist/esm-node/router/runtime/utils.mjs +35 -9
- package/dist/types/cli/index.d.ts +3 -1
- package/dist/types/core/context/extensions.d.ts +37 -0
- package/dist/types/core/context/helmetContext.d.ts +10 -0
- package/dist/types/core/context/index.d.ts +6 -0
- package/dist/types/core/context/runtime.d.ts +1 -11
- package/dist/types/core/server/routerCleanup.d.ts +28 -0
- package/dist/types/core/server/scriptOrder.d.ts +24 -0
- package/dist/types/core/server/string/loadable.d.ts +1 -7
- package/dist/types/core/server/utils.d.ts +1 -0
- package/dist/types/exports/tanstack-router.d.ts +88 -7
- package/dist/types/module-federation/index.d.ts +65 -0
- package/dist/types/router/cli/code/index.d.ts +1 -3
- package/dist/types/router/cli/handler.d.ts +0 -3
- package/dist/types/router/runtime/internal.d.ts +1 -0
- package/dist/types/router/runtime/lifecycle.d.ts +2 -0
- package/dist/types/router/runtime/plugin.d.ts +1 -1
- package/dist/types/router/runtime/plugin.node.d.ts +1 -1
- package/dist/types/router/runtime/provider.d.ts +61 -0
- package/package.json +16 -12
- package/rstest.config.mts +2 -4
- package/dist/cjs/router/cli/code/tanstackTypes.js +0 -447
- package/dist/cjs/router/runtime/tanstack/basepathRewrite.js +0 -66
- package/dist/cjs/router/runtime/tanstack/dataMutation.js +0 -349
- package/dist/cjs/router/runtime/tanstack/hydrationBoundary.js +0 -48
- package/dist/cjs/router/runtime/tanstack/outlet.js +0 -58
- package/dist/cjs/router/runtime/tanstack/plugin.js +0 -342
- package/dist/cjs/router/runtime/tanstack/plugin.node.js +0 -272
- package/dist/cjs/router/runtime/tanstack/prefetchLink.js +0 -59
- package/dist/cjs/router/runtime/tanstack/routeTree.js +0 -525
- package/dist/cjs/router/runtime/tanstack/rsc/CompositeComponent.js +0 -79
- package/dist/cjs/router/runtime/tanstack/rsc/ReplayableStream.js +0 -146
- package/dist/cjs/router/runtime/tanstack/rsc/RscNodeRenderer.js +0 -69
- package/dist/cjs/router/runtime/tanstack/rsc/client.js +0 -97
- package/dist/cjs/router/runtime/tanstack/rsc/createRscProxy.js +0 -145
- package/dist/cjs/router/runtime/tanstack/rsc/index.js +0 -46
- package/dist/cjs/router/runtime/tanstack/rsc/server.js +0 -250
- package/dist/cjs/router/runtime/tanstack/rsc/slotUsageSanitizer.js +0 -69
- package/dist/cjs/router/runtime/tanstack/rsc/symbols.js +0 -77
- package/dist/cjs/ssr/index.node.js +0 -125
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -88
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -200
- package/dist/cjs/ssr/serverRender/types.js +0 -40
- package/dist/esm/router/cli/code/tanstackTypes.mjs +0 -396
- package/dist/esm/router/runtime/tanstack/basepathRewrite.mjs +0 -28
- package/dist/esm/router/runtime/tanstack/dataMutation.mjs +0 -305
- package/dist/esm/router/runtime/tanstack/hydrationBoundary.mjs +0 -10
- package/dist/esm/router/runtime/tanstack/outlet.mjs +0 -17
- package/dist/esm/router/runtime/tanstack/plugin.mjs +0 -304
- package/dist/esm/router/runtime/tanstack/plugin.node.mjs +0 -234
- package/dist/esm/router/runtime/tanstack/prefetchLink.mjs +0 -18
- package/dist/esm/router/runtime/tanstack/routeTree.mjs +0 -481
- package/dist/esm/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -19
- package/dist/esm/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -41
- package/dist/esm/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -104
- package/dist/esm/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -31
- package/dist/esm/router/runtime/tanstack/rsc/SlotContext.mjs +0 -17
- package/dist/esm/router/runtime/tanstack/rsc/client.mjs +0 -53
- package/dist/esm/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -107
- package/dist/esm/router/runtime/tanstack/rsc/index.mjs +0 -1
- package/dist/esm/router/runtime/tanstack/rsc/server.mjs +0 -200
- package/dist/esm/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -31
- package/dist/esm/router/runtime/tanstack/rsc/symbols.mjs +0 -17
- package/dist/esm/ssr/index.node.mjs +0 -44
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -50
- package/dist/esm/ssr/serverRender/renderToString/entry.mjs +0 -151
- package/dist/esm/ssr/serverRender/types.mjs +0 -1
- package/dist/esm-node/router/cli/code/tanstackTypes.mjs +0 -397
- package/dist/esm-node/router/runtime/tanstack/basepathRewrite.mjs +0 -29
- package/dist/esm-node/router/runtime/tanstack/dataMutation.mjs +0 -306
- package/dist/esm-node/router/runtime/tanstack/hydrationBoundary.mjs +0 -11
- package/dist/esm-node/router/runtime/tanstack/outlet.mjs +0 -18
- package/dist/esm-node/router/runtime/tanstack/plugin.mjs +0 -305
- package/dist/esm-node/router/runtime/tanstack/plugin.node.mjs +0 -235
- package/dist/esm-node/router/runtime/tanstack/prefetchLink.mjs +0 -19
- package/dist/esm-node/router/runtime/tanstack/routeTree.mjs +0 -482
- package/dist/esm-node/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -20
- package/dist/esm-node/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -42
- package/dist/esm-node/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -105
- package/dist/esm-node/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -32
- package/dist/esm-node/router/runtime/tanstack/rsc/SlotContext.mjs +0 -18
- package/dist/esm-node/router/runtime/tanstack/rsc/client.mjs +0 -54
- package/dist/esm-node/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -108
- package/dist/esm-node/router/runtime/tanstack/rsc/index.mjs +0 -2
- package/dist/esm-node/router/runtime/tanstack/rsc/server.mjs +0 -201
- package/dist/esm-node/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -32
- package/dist/esm-node/router/runtime/tanstack/rsc/symbols.mjs +0 -18
- package/dist/esm-node/ssr/index.node.mjs +0 -45
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -51
- package/dist/esm-node/ssr/serverRender/renderToString/entry.mjs +0 -152
- package/dist/esm-node/ssr/serverRender/types.mjs +0 -2
- package/dist/types/router/cli/code/tanstackTypes.d.ts +0 -10
- package/dist/types/router/runtime/tanstack/basepathRewrite.d.ts +0 -8
- package/dist/types/router/runtime/tanstack/dataMutation.d.ts +0 -29
- package/dist/types/router/runtime/tanstack/hydrationBoundary.d.ts +0 -2
- package/dist/types/router/runtime/tanstack/outlet.d.ts +0 -2
- package/dist/types/router/runtime/tanstack/plugin.d.ts +0 -6
- package/dist/types/router/runtime/tanstack/plugin.node.d.ts +0 -6
- package/dist/types/router/runtime/tanstack/prefetchLink.d.ts +0 -11
- package/dist/types/router/runtime/tanstack/routeTree.d.ts +0 -8
- package/dist/types/router/runtime/tanstack/rsc/ClientSlot.d.ts +0 -5
- package/dist/types/router/runtime/tanstack/rsc/CompositeComponent.d.ts +0 -3
- package/dist/types/router/runtime/tanstack/rsc/ReplayableStream.d.ts +0 -24
- package/dist/types/router/runtime/tanstack/rsc/RscNodeRenderer.d.ts +0 -5
- package/dist/types/router/runtime/tanstack/rsc/SlotContext.d.ts +0 -11
- package/dist/types/router/runtime/tanstack/rsc/client.d.ts +0 -11
- package/dist/types/router/runtime/tanstack/rsc/createRscProxy.d.ts +0 -7
- package/dist/types/router/runtime/tanstack/rsc/index.d.ts +0 -2
- package/dist/types/router/runtime/tanstack/rsc/server.d.ts +0 -14
- package/dist/types/router/runtime/tanstack/rsc/slotUsageSanitizer.d.ts +0 -2
- package/dist/types/router/runtime/tanstack/rsc/symbols.d.ts +0 -46
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useRouter } from "@tanstack/react-router";
|
|
3
|
-
import { useCallback, useRef, useState } from "react";
|
|
4
|
-
class RouteActionResponseError extends Error {
|
|
5
|
-
constructor(response, data){
|
|
6
|
-
super(`Route action failed with status ${response.status}`);
|
|
7
|
-
this.name = 'RouteActionResponseError';
|
|
8
|
-
this.response = response;
|
|
9
|
-
this.data = data;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
function formDataToUrlSearchParams(formData) {
|
|
13
|
-
const searchParams = new URLSearchParams();
|
|
14
|
-
formData.forEach((value, key)=>{
|
|
15
|
-
if ('string' == typeof value) searchParams.append(key, value);
|
|
16
|
-
});
|
|
17
|
-
return searchParams;
|
|
18
|
-
}
|
|
19
|
-
function formDataToTextPlain(formData) {
|
|
20
|
-
return Array.from(formData.entries()).map(([key, value])=>`${key}=${String(value)}`).join('\n');
|
|
21
|
-
}
|
|
22
|
-
function toFormData(target) {
|
|
23
|
-
if (target instanceof HTMLFormElement) return new FormData(target);
|
|
24
|
-
if (target instanceof FormData) return target;
|
|
25
|
-
if (target instanceof URLSearchParams) {
|
|
26
|
-
const formData = new FormData();
|
|
27
|
-
target.forEach((value, key)=>{
|
|
28
|
-
formData.append(key, value);
|
|
29
|
-
});
|
|
30
|
-
return formData;
|
|
31
|
-
}
|
|
32
|
-
const formData = new FormData();
|
|
33
|
-
Object.entries(target).forEach(([key, value])=>{
|
|
34
|
-
if (null == value) return;
|
|
35
|
-
formData.append(key, String(value));
|
|
36
|
-
});
|
|
37
|
-
return formData;
|
|
38
|
-
}
|
|
39
|
-
function getSubmitter(event) {
|
|
40
|
-
const nativeEvent = event.nativeEvent;
|
|
41
|
-
const submitter = nativeEvent?.submitter;
|
|
42
|
-
if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) return submitter;
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
function createFormDataFromSubmit({ form, submitter }) {
|
|
46
|
-
if (submitter) try {
|
|
47
|
-
return new FormData(form, submitter);
|
|
48
|
-
} catch {}
|
|
49
|
-
return new FormData(form);
|
|
50
|
-
}
|
|
51
|
-
function resolveSubmitOptionsFromForm({ form, submitter, action, method, encType }) {
|
|
52
|
-
const resolvedAction = submitter?.getAttribute('formaction') || action || form.getAttribute('action') || '.';
|
|
53
|
-
const resolvedMethod = (submitter?.getAttribute('formmethod') || method || form.getAttribute('method') || 'get').toLowerCase();
|
|
54
|
-
const resolvedEncType = submitter?.getAttribute('formenctype') || encType || form.getAttribute('enctype') || 'application/x-www-form-urlencoded';
|
|
55
|
-
return {
|
|
56
|
-
action: resolvedAction,
|
|
57
|
-
method: resolvedMethod,
|
|
58
|
-
encType: resolvedEncType
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
function resolveRouteHandlers(router, actionTo) {
|
|
62
|
-
const builtLocation = router.buildLocation({
|
|
63
|
-
to: actionTo
|
|
64
|
-
});
|
|
65
|
-
const href = router.getParsedLocationHref(builtLocation);
|
|
66
|
-
const matchedRoutes = router.getMatchedRoutes(builtLocation.pathname);
|
|
67
|
-
const routeStaticData = matchedRoutes.foundRoute?.options?.staticData;
|
|
68
|
-
const action = routeStaticData?.modernRouteAction;
|
|
69
|
-
const loader = routeStaticData?.modernRouteLoader;
|
|
70
|
-
return {
|
|
71
|
-
action,
|
|
72
|
-
loader,
|
|
73
|
-
href,
|
|
74
|
-
params: matchedRoutes.routeParams || {}
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
function isRedirectResponse(value) {
|
|
78
|
-
if (!(value instanceof Response)) return false;
|
|
79
|
-
return [
|
|
80
|
-
301,
|
|
81
|
-
302,
|
|
82
|
-
303,
|
|
83
|
-
307,
|
|
84
|
-
308
|
|
85
|
-
].includes(value.status);
|
|
86
|
-
}
|
|
87
|
-
async function parseResponseData(response) {
|
|
88
|
-
if (204 === response.status) return null;
|
|
89
|
-
const contentType = response.headers.get('Content-Type') || '';
|
|
90
|
-
if (contentType.includes('application/json')) return response.json();
|
|
91
|
-
return response.text();
|
|
92
|
-
}
|
|
93
|
-
async function parseResponseResultOrThrow(response) {
|
|
94
|
-
const parsed = await parseResponseData(response);
|
|
95
|
-
if (!response.ok) throw new RouteActionResponseError(response, parsed);
|
|
96
|
-
return parsed;
|
|
97
|
-
}
|
|
98
|
-
async function submitRouteAction({ router, target, options = {}, isFetcher = false, onInvalidateStart }) {
|
|
99
|
-
const method = (options.method || 'post').toLowerCase();
|
|
100
|
-
const encType = options.encType || 'application/x-www-form-urlencoded';
|
|
101
|
-
const actionTo = options.action || '.';
|
|
102
|
-
const formData = toFormData(target);
|
|
103
|
-
const resolved = resolveRouteHandlers(router, actionTo);
|
|
104
|
-
if ('get' === method) {
|
|
105
|
-
const search = formDataToUrlSearchParams(formData).toString();
|
|
106
|
-
const requestUrl = new URL(resolved.href, window.location.origin);
|
|
107
|
-
requestUrl.search = search;
|
|
108
|
-
if (isFetcher && resolved.loader) {
|
|
109
|
-
const result = await resolved.loader({
|
|
110
|
-
request: new Request(requestUrl, {
|
|
111
|
-
method: 'GET'
|
|
112
|
-
}),
|
|
113
|
-
params: resolved.params
|
|
114
|
-
});
|
|
115
|
-
if (result instanceof Response) {
|
|
116
|
-
const redirectTo = result.headers.get('X-Modernjs-Redirect') || result.headers.get('Location');
|
|
117
|
-
if (redirectTo || isRedirectResponse(result)) {
|
|
118
|
-
await router.navigate({
|
|
119
|
-
to: redirectTo || '/'
|
|
120
|
-
});
|
|
121
|
-
return parseResponseData(result);
|
|
122
|
-
}
|
|
123
|
-
return parseResponseResultOrThrow(result);
|
|
124
|
-
}
|
|
125
|
-
return result;
|
|
126
|
-
}
|
|
127
|
-
await router.navigate({
|
|
128
|
-
href: search ? `${resolved.href}?${search}` : resolved.href
|
|
129
|
-
});
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (!resolved.action) throw new Error(`No route action found for "${actionTo}"`);
|
|
133
|
-
const headers = new Headers();
|
|
134
|
-
let body = null;
|
|
135
|
-
if (encType.includes('application/json')) {
|
|
136
|
-
headers.set('Content-Type', 'application/json');
|
|
137
|
-
body = JSON.stringify(Object.fromEntries(formDataToUrlSearchParams(formData).entries()));
|
|
138
|
-
} else if (encType.includes('text/plain')) {
|
|
139
|
-
headers.set('Content-Type', 'text/plain;charset=UTF-8');
|
|
140
|
-
body = formDataToTextPlain(formData);
|
|
141
|
-
} else if (encType.includes('application/x-www-form-urlencoded')) {
|
|
142
|
-
headers.set('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
|
|
143
|
-
body = formDataToUrlSearchParams(formData);
|
|
144
|
-
} else body = formData;
|
|
145
|
-
const request = new Request(new URL(resolved.href, window.location.origin), {
|
|
146
|
-
method: method.toUpperCase(),
|
|
147
|
-
headers,
|
|
148
|
-
body
|
|
149
|
-
});
|
|
150
|
-
const result = await resolved.action({
|
|
151
|
-
request,
|
|
152
|
-
params: resolved.params
|
|
153
|
-
});
|
|
154
|
-
if (result instanceof Response) {
|
|
155
|
-
const redirectTo = result.headers.get('X-Modernjs-Redirect') || result.headers.get('Location');
|
|
156
|
-
if (redirectTo || isRedirectResponse(result)) {
|
|
157
|
-
await router.navigate({
|
|
158
|
-
to: redirectTo || '/'
|
|
159
|
-
});
|
|
160
|
-
return parseResponseData(result);
|
|
161
|
-
}
|
|
162
|
-
const parsed = isFetcher ? await parseResponseResultOrThrow(result) : await parseResponseData(result);
|
|
163
|
-
onInvalidateStart?.();
|
|
164
|
-
await router.invalidate();
|
|
165
|
-
return parsed;
|
|
166
|
-
}
|
|
167
|
-
onInvalidateStart?.();
|
|
168
|
-
await router.invalidate();
|
|
169
|
-
return result;
|
|
170
|
-
}
|
|
171
|
-
function Form({ action, method = 'get', encType, reloadDocument, onSubmit, ...rest }) {
|
|
172
|
-
const router = useRouter();
|
|
173
|
-
const handleSubmit = useCallback(async (event)=>{
|
|
174
|
-
onSubmit?.(event);
|
|
175
|
-
if (event.defaultPrevented || reloadDocument) return;
|
|
176
|
-
event.preventDefault();
|
|
177
|
-
const submitter = getSubmitter(event);
|
|
178
|
-
const formData = createFormDataFromSubmit({
|
|
179
|
-
form: event.currentTarget,
|
|
180
|
-
submitter
|
|
181
|
-
});
|
|
182
|
-
const normalizedOptions = resolveSubmitOptionsFromForm({
|
|
183
|
-
form: event.currentTarget,
|
|
184
|
-
submitter,
|
|
185
|
-
action,
|
|
186
|
-
method,
|
|
187
|
-
encType
|
|
188
|
-
});
|
|
189
|
-
await submitRouteAction({
|
|
190
|
-
router,
|
|
191
|
-
target: formData,
|
|
192
|
-
options: normalizedOptions
|
|
193
|
-
});
|
|
194
|
-
}, [
|
|
195
|
-
action,
|
|
196
|
-
encType,
|
|
197
|
-
method,
|
|
198
|
-
onSubmit,
|
|
199
|
-
reloadDocument,
|
|
200
|
-
router
|
|
201
|
-
]);
|
|
202
|
-
return /*#__PURE__*/ jsx("form", {
|
|
203
|
-
...rest,
|
|
204
|
-
action: action,
|
|
205
|
-
method: method,
|
|
206
|
-
encType: encType,
|
|
207
|
-
onSubmit: handleSubmit
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
function useFetcher() {
|
|
211
|
-
const router = useRouter();
|
|
212
|
-
const [state, setState] = useState('idle');
|
|
213
|
-
const [data, setData] = useState(void 0);
|
|
214
|
-
const [error, setError] = useState(void 0);
|
|
215
|
-
const requestStatesRef = useRef(new Map());
|
|
216
|
-
const requestIdRef = useRef(0);
|
|
217
|
-
const syncStateFromRequests = useCallback(()=>{
|
|
218
|
-
let hasSubmitting = false;
|
|
219
|
-
let hasLoading = false;
|
|
220
|
-
requestStatesRef.current.forEach((requestState)=>{
|
|
221
|
-
if ('submitting' === requestState) hasSubmitting = true;
|
|
222
|
-
else if ('loading' === requestState) hasLoading = true;
|
|
223
|
-
});
|
|
224
|
-
if (hasSubmitting) return void setState('submitting');
|
|
225
|
-
if (hasLoading) return void setState('loading');
|
|
226
|
-
setState('idle');
|
|
227
|
-
}, []);
|
|
228
|
-
const setRequestState = useCallback((requestId, requestState)=>{
|
|
229
|
-
requestStatesRef.current.set(requestId, requestState);
|
|
230
|
-
syncStateFromRequests();
|
|
231
|
-
}, [
|
|
232
|
-
syncStateFromRequests
|
|
233
|
-
]);
|
|
234
|
-
const clearRequestState = useCallback((requestId)=>{
|
|
235
|
-
requestStatesRef.current.delete(requestId);
|
|
236
|
-
syncStateFromRequests();
|
|
237
|
-
}, [
|
|
238
|
-
syncStateFromRequests
|
|
239
|
-
]);
|
|
240
|
-
const submit = useCallback(async (target, options)=>{
|
|
241
|
-
setError(void 0);
|
|
242
|
-
const requestId = ++requestIdRef.current;
|
|
243
|
-
const normalizedMethod = (options?.method || 'post').toLowerCase();
|
|
244
|
-
const isLoaderSubmit = 'get' === normalizedMethod;
|
|
245
|
-
setRequestState(requestId, isLoaderSubmit ? 'loading' : 'submitting');
|
|
246
|
-
try {
|
|
247
|
-
const result = await submitRouteAction({
|
|
248
|
-
router,
|
|
249
|
-
target,
|
|
250
|
-
options,
|
|
251
|
-
isFetcher: true,
|
|
252
|
-
onInvalidateStart: ()=>{
|
|
253
|
-
if (!isLoaderSubmit) setRequestState(requestId, 'loading');
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
setData(result);
|
|
257
|
-
} catch (err) {
|
|
258
|
-
setError(err);
|
|
259
|
-
throw err;
|
|
260
|
-
} finally{
|
|
261
|
-
clearRequestState(requestId);
|
|
262
|
-
}
|
|
263
|
-
}, [
|
|
264
|
-
clearRequestState,
|
|
265
|
-
router,
|
|
266
|
-
setRequestState
|
|
267
|
-
]);
|
|
268
|
-
const FetcherForm = useCallback(({ action, method = 'get', encType, reloadDocument, onSubmit, ...rest })=>{
|
|
269
|
-
const handleSubmit = async (event)=>{
|
|
270
|
-
onSubmit?.(event);
|
|
271
|
-
if (event.defaultPrevented || reloadDocument) return;
|
|
272
|
-
event.preventDefault();
|
|
273
|
-
const submitter = getSubmitter(event);
|
|
274
|
-
const formData = createFormDataFromSubmit({
|
|
275
|
-
form: event.currentTarget,
|
|
276
|
-
submitter
|
|
277
|
-
});
|
|
278
|
-
const normalizedOptions = resolveSubmitOptionsFromForm({
|
|
279
|
-
form: event.currentTarget,
|
|
280
|
-
submitter,
|
|
281
|
-
action,
|
|
282
|
-
method,
|
|
283
|
-
encType
|
|
284
|
-
});
|
|
285
|
-
await submit(formData, normalizedOptions);
|
|
286
|
-
};
|
|
287
|
-
return /*#__PURE__*/ jsx("form", {
|
|
288
|
-
...rest,
|
|
289
|
-
action: action,
|
|
290
|
-
method: method,
|
|
291
|
-
encType: encType,
|
|
292
|
-
onSubmit: handleSubmit
|
|
293
|
-
});
|
|
294
|
-
}, [
|
|
295
|
-
submit
|
|
296
|
-
]);
|
|
297
|
-
return {
|
|
298
|
-
state,
|
|
299
|
-
data,
|
|
300
|
-
error,
|
|
301
|
-
Form: FetcherForm,
|
|
302
|
-
submit
|
|
303
|
-
};
|
|
304
|
-
}
|
|
305
|
-
export { Form, RouteActionResponseError, useFetcher };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Suspense } from "react";
|
|
3
|
-
function wrapTanstackSsrHydrationBoundary(routerContent, shouldWrap) {
|
|
4
|
-
if (shouldWrap) return /*#__PURE__*/ jsx(Suspense, {
|
|
5
|
-
fallback: null,
|
|
6
|
-
children: routerContent
|
|
7
|
-
});
|
|
8
|
-
return routerContent;
|
|
9
|
-
}
|
|
10
|
-
export { wrapTanstackSsrHydrationBoundary };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Outlet } from "@tanstack/react-router";
|
|
3
|
-
import { createElement, memo } from "react";
|
|
4
|
-
const outlet_Outlet = /*#__PURE__*/ memo(function() {
|
|
5
|
-
return /*#__PURE__*/ jsx(Outlet, {});
|
|
6
|
-
});
|
|
7
|
-
function withModernRouteMatchContext(component, _routeId) {
|
|
8
|
-
if (null == component) return component;
|
|
9
|
-
const Component = component;
|
|
10
|
-
const WrappedRouteComponent = (props)=>/*#__PURE__*/ createElement(Component, props);
|
|
11
|
-
const preloadable = component;
|
|
12
|
-
if ('function' == typeof preloadable.load) WrappedRouteComponent.load = preloadable.load.bind(preloadable);
|
|
13
|
-
if ('function' == typeof preloadable.preload) WrappedRouteComponent.preload = preloadable.preload.bind(preloadable);
|
|
14
|
-
else if ('function' == typeof preloadable.load) WrappedRouteComponent.preload = WrappedRouteComponent.load;
|
|
15
|
-
return WrappedRouteComponent;
|
|
16
|
-
}
|
|
17
|
-
export { outlet_Outlet as Outlet, withModernRouteMatchContext };
|
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { merge } from "@modern-js/runtime-utils/merge";
|
|
3
|
-
import { normalizePathname } from "@modern-js/runtime-utils/url";
|
|
4
|
-
import { RouterProvider, createBrowserHistory, createHashHistory, createRouter, useLocation, useMatches, useNavigate, useRouter } from "@tanstack/react-router";
|
|
5
|
-
import { hydrate } from "@tanstack/react-router/ssr/client";
|
|
6
|
-
import { useContext, useMemo } from "react";
|
|
7
|
-
import { InternalRuntimeContext, getGlobalEnableRsc, getGlobalLayoutApp, getGlobalRoutes } from "../../../core/context/index.mjs";
|
|
8
|
-
import { onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeHydrateRouter } from "../hooks.mjs";
|
|
9
|
-
import { applyRouterRuntimeState } from "../lifecycle.mjs";
|
|
10
|
-
import { createRouteObjectsFromConfig, urlJoin } from "../utils.mjs";
|
|
11
|
-
import { createModernBasepathRewrite } from "./basepathRewrite.mjs";
|
|
12
|
-
import { wrapTanstackSsrHydrationBoundary } from "./hydrationBoundary.mjs";
|
|
13
|
-
import { withModernRouteMatchContext } from "./outlet.mjs";
|
|
14
|
-
import { Link } from "./prefetchLink.mjs";
|
|
15
|
-
import { createRouteTreeFromRouteObjects } from "./routeTree.mjs";
|
|
16
|
-
import { getTanstackRscSerializationAdapters } from "./rsc/client.mjs";
|
|
17
|
-
const BLOCKING_SUBSCRIBE_SYMBOL = Symbol.for('@modern-js/plugin-runtime:tanstack-blocking-subscribe');
|
|
18
|
-
const BLOCKING_STATE_SYMBOL = Symbol.for('@modern-js/plugin-runtime:tanstack-blocking-state');
|
|
19
|
-
function normalizeBase(b) {
|
|
20
|
-
if (b.length > 1 && b.endsWith('/')) return b.slice(0, -1);
|
|
21
|
-
return b || '/';
|
|
22
|
-
}
|
|
23
|
-
function isSegmentPrefix(pathname, base) {
|
|
24
|
-
const b = normalizeBase(base);
|
|
25
|
-
const p = pathname || '/';
|
|
26
|
-
return p === b || p.startsWith(`${b}/`);
|
|
27
|
-
}
|
|
28
|
-
function wrapRouterSubscribeWithBlockState(router, getBlockNavState) {
|
|
29
|
-
if (!router || 'object' != typeof router) return;
|
|
30
|
-
const target = router;
|
|
31
|
-
target[BLOCKING_STATE_SYMBOL] = getBlockNavState;
|
|
32
|
-
if (target[BLOCKING_SUBSCRIBE_SYMBOL] || 'function' != typeof target.subscribe) return;
|
|
33
|
-
const originSubscribe = target.subscribe.bind(target);
|
|
34
|
-
target.subscribe = (eventType, listener)=>{
|
|
35
|
-
const wrappedListener = (...args)=>{
|
|
36
|
-
const blockRoute = target[BLOCKING_STATE_SYMBOL]?.() || false;
|
|
37
|
-
if (blockRoute) return;
|
|
38
|
-
return listener(...args);
|
|
39
|
-
};
|
|
40
|
-
return originSubscribe(eventType, wrappedListener);
|
|
41
|
-
};
|
|
42
|
-
target[BLOCKING_SUBSCRIBE_SYMBOL] = true;
|
|
43
|
-
}
|
|
44
|
-
const routerHydrationRecords = new WeakMap();
|
|
45
|
-
const routeModulesKey = '_routeModules';
|
|
46
|
-
function pickRouteModuleComponent(routeModule, seen = new Set()) {
|
|
47
|
-
if ('function' == typeof routeModule || routeModule && 'object' == typeof routeModule && '$$typeof' in routeModule) return routeModule;
|
|
48
|
-
if (!routeModule || 'object' != typeof routeModule) return;
|
|
49
|
-
if (seen.has(routeModule)) return;
|
|
50
|
-
seen.add(routeModule);
|
|
51
|
-
const module = routeModule;
|
|
52
|
-
for (const candidate of [
|
|
53
|
-
module.default,
|
|
54
|
-
module.Component
|
|
55
|
-
]){
|
|
56
|
-
const component = pickRouteModuleComponent(candidate, seen);
|
|
57
|
-
if (component) return component;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function getCachedRouteModule(routeId) {
|
|
61
|
-
if ("u" < typeof window) return;
|
|
62
|
-
return window[routeModulesKey]?.[routeId];
|
|
63
|
-
}
|
|
64
|
-
function preloadHydratedRouteComponents(router) {
|
|
65
|
-
const preloadableRouter = router;
|
|
66
|
-
const routesById = preloadableRouter.routesById || {};
|
|
67
|
-
const matches = preloadableRouter.stores.matches.get();
|
|
68
|
-
return Promise.all(matches.map((match)=>{
|
|
69
|
-
if (void 0 === match.routeId || '' === match.routeId) return;
|
|
70
|
-
const route = routesById[match.routeId];
|
|
71
|
-
const component = route?.options?.component;
|
|
72
|
-
const preload = component?.load || component?.preload;
|
|
73
|
-
if ('function' != typeof preload) return;
|
|
74
|
-
return Promise.resolve(preload.call(component)).then((routeModule)=>{
|
|
75
|
-
const modernRouteId = route?.options?.staticData?.modernRouteId;
|
|
76
|
-
const cachedRouteModule = 'string' == typeof modernRouteId && '' !== modernRouteId ? getCachedRouteModule(modernRouteId) : void 0;
|
|
77
|
-
const resolvedComponent = pickRouteModuleComponent(cachedRouteModule ?? routeModule);
|
|
78
|
-
if (void 0 !== resolvedComponent && 'string' == typeof modernRouteId && '' !== modernRouteId) route.options.component = withModernRouteMatchContext(resolvedComponent, modernRouteId);
|
|
79
|
-
});
|
|
80
|
-
})).then(()=>void 0);
|
|
81
|
-
}
|
|
82
|
-
function getTanstackSsrHydrationRecord(router) {
|
|
83
|
-
const existingHydrationRecord = routerHydrationRecords.get(router);
|
|
84
|
-
if (void 0 !== existingHydrationRecord) return existingHydrationRecord;
|
|
85
|
-
const hydrationRecord = {
|
|
86
|
-
promise: Promise.resolve(),
|
|
87
|
-
status: 'pending'
|
|
88
|
-
};
|
|
89
|
-
routerHydrationRecords.set(router, hydrationRecord);
|
|
90
|
-
try {
|
|
91
|
-
hydrationRecord.promise = hydrate(router).then((value)=>preloadHydratedRouteComponents(router).then(()=>value)).then((value)=>{
|
|
92
|
-
hydrationRecord.status = 'fulfilled';
|
|
93
|
-
return value;
|
|
94
|
-
}, (error)=>{
|
|
95
|
-
hydrationRecord.status = 'rejected';
|
|
96
|
-
hydrationRecord.error = error;
|
|
97
|
-
throw error;
|
|
98
|
-
});
|
|
99
|
-
} catch (error) {
|
|
100
|
-
hydrationRecord.status = 'rejected';
|
|
101
|
-
hydrationRecord.error = error;
|
|
102
|
-
hydrationRecord.promise = Promise.reject(error);
|
|
103
|
-
hydrationRecord.promise.catch(()=>{});
|
|
104
|
-
}
|
|
105
|
-
return hydrationRecord;
|
|
106
|
-
}
|
|
107
|
-
function getTanstackSsrHydrationPromise(router) {
|
|
108
|
-
return getTanstackSsrHydrationRecord(router).promise;
|
|
109
|
-
}
|
|
110
|
-
function hasTanstackSsrHydrationRecord(router) {
|
|
111
|
-
return routerHydrationRecords.has(router);
|
|
112
|
-
}
|
|
113
|
-
function ModernRouterClient({ router }) {
|
|
114
|
-
const hydrationRecord = getTanstackSsrHydrationRecord(router);
|
|
115
|
-
if ('rejected' === hydrationRecord.status) throw hydrationRecord.error;
|
|
116
|
-
return /*#__PURE__*/ jsx(RouterProvider, {
|
|
117
|
-
router: router
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
function stripSyntheticNotFoundRoute(routes) {
|
|
121
|
-
return routes.filter((route)=>!('*' === route.path && !route.id && !route.loader)).map((route)=>{
|
|
122
|
-
if (!route.children?.length) return route;
|
|
123
|
-
return {
|
|
124
|
-
...route,
|
|
125
|
-
children: stripSyntheticNotFoundRoute(route.children)
|
|
126
|
-
};
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
const tanstackRouterPlugin = (userConfig = {})=>({
|
|
130
|
-
name: '@modern-js/plugin-router-tanstack',
|
|
131
|
-
registryHooks: {
|
|
132
|
-
onAfterCreateRouter: onAfterCreateRouter,
|
|
133
|
-
onAfterHydrateRouter: onAfterHydrateRouter,
|
|
134
|
-
onBeforeCreateRouter: onBeforeCreateRouter,
|
|
135
|
-
onBeforeHydrateRouter: onBeforeHydrateRouter
|
|
136
|
-
},
|
|
137
|
-
setup: (api)=>{
|
|
138
|
-
const hooks = api.getHooks();
|
|
139
|
-
let cachedRouteObjects;
|
|
140
|
-
let cachedRouteTree = null;
|
|
141
|
-
let cachedRouter = null;
|
|
142
|
-
let cachedRouterBasepath = null;
|
|
143
|
-
const getMergedConfig = ()=>{
|
|
144
|
-
const pluginConfig = api.getRuntimeConfig();
|
|
145
|
-
return merge(pluginConfig.router || {}, userConfig);
|
|
146
|
-
};
|
|
147
|
-
const getRouteObjects = ()=>{
|
|
148
|
-
if (void 0 !== cachedRouteObjects) return cachedRouteObjects;
|
|
149
|
-
const mergedConfig = getMergedConfig();
|
|
150
|
-
const { routesConfig, createRoutes } = mergedConfig;
|
|
151
|
-
const finalRouteConfig = {
|
|
152
|
-
routes: getGlobalRoutes(),
|
|
153
|
-
globalApp: getGlobalLayoutApp(),
|
|
154
|
-
...routesConfig
|
|
155
|
-
};
|
|
156
|
-
const routeObjects = createRoutes ? createRoutes() : createRouteObjectsFromConfig({
|
|
157
|
-
routesConfig: finalRouteConfig
|
|
158
|
-
}) || [];
|
|
159
|
-
const normalizedRouteObjects = createRoutes ? routeObjects : stripSyntheticNotFoundRoute(routeObjects);
|
|
160
|
-
cachedRouteObjects = hooks.modifyRoutes.call(normalizedRouteObjects);
|
|
161
|
-
return cachedRouteObjects;
|
|
162
|
-
};
|
|
163
|
-
const getRouteTree = ()=>{
|
|
164
|
-
if (cachedRouteTree) return cachedRouteTree;
|
|
165
|
-
const routeObjects = getRouteObjects();
|
|
166
|
-
if (!routeObjects.length) return null;
|
|
167
|
-
cachedRouteTree = createRouteTreeFromRouteObjects(routeObjects);
|
|
168
|
-
return cachedRouteTree;
|
|
169
|
-
};
|
|
170
|
-
const selectBasePath = (pathname)=>{
|
|
171
|
-
const { serverBase = [] } = getMergedConfig();
|
|
172
|
-
const match = serverBase.find((baseUrl)=>isSegmentPrefix(pathname, baseUrl));
|
|
173
|
-
return match || '/';
|
|
174
|
-
};
|
|
175
|
-
const getClientBasename = (runtimeContext)=>{
|
|
176
|
-
const { basename = '' } = getMergedConfig();
|
|
177
|
-
const baseUrl = selectBasePath(location.pathname).replace(/^\/*/, '/');
|
|
178
|
-
return '/' === baseUrl ? urlJoin(baseUrl, runtimeContext._internalRouterBaseName || basename || '') : baseUrl;
|
|
179
|
-
};
|
|
180
|
-
const getRouter = (runtimeContext, _basename)=>{
|
|
181
|
-
const routeTree = getRouteTree();
|
|
182
|
-
if (!routeTree) return null;
|
|
183
|
-
const lifecycleContext = {
|
|
184
|
-
framework: 'tanstack',
|
|
185
|
-
phase: 'client-create',
|
|
186
|
-
routes: getRouteObjects(),
|
|
187
|
-
runtimeContext,
|
|
188
|
-
basename: _basename
|
|
189
|
-
};
|
|
190
|
-
hooks.onBeforeCreateRouter.call(lifecycleContext);
|
|
191
|
-
if (cachedRouter && cachedRouterBasepath === _basename) {
|
|
192
|
-
wrapRouterSubscribeWithBlockState(cachedRouter, runtimeContext.unstable_getBlockNavState);
|
|
193
|
-
hooks.onAfterCreateRouter.call({
|
|
194
|
-
...lifecycleContext,
|
|
195
|
-
router: cachedRouter,
|
|
196
|
-
runtimeContext
|
|
197
|
-
});
|
|
198
|
-
return cachedRouter;
|
|
199
|
-
}
|
|
200
|
-
const mergedConfig = getMergedConfig();
|
|
201
|
-
const { supportHtml5History = true } = mergedConfig;
|
|
202
|
-
const history = supportHtml5History ? createBrowserHistory() : createHashHistory();
|
|
203
|
-
const rewrite = createModernBasepathRewrite(_basename);
|
|
204
|
-
const serializationAdapters = getGlobalEnableRsc() ? getTanstackRscSerializationAdapters() : void 0;
|
|
205
|
-
cachedRouter = createRouter({
|
|
206
|
-
routeTree,
|
|
207
|
-
basepath: '/',
|
|
208
|
-
rewrite,
|
|
209
|
-
history,
|
|
210
|
-
context: {},
|
|
211
|
-
...serializationAdapters ? {
|
|
212
|
-
serializationAdapters
|
|
213
|
-
} : {}
|
|
214
|
-
});
|
|
215
|
-
cachedRouterBasepath = _basename;
|
|
216
|
-
wrapRouterSubscribeWithBlockState(cachedRouter, runtimeContext.unstable_getBlockNavState);
|
|
217
|
-
hooks.onAfterCreateRouter.call({
|
|
218
|
-
...lifecycleContext,
|
|
219
|
-
router: cachedRouter,
|
|
220
|
-
runtimeContext
|
|
221
|
-
});
|
|
222
|
-
return cachedRouter;
|
|
223
|
-
};
|
|
224
|
-
api.onBeforeRender((context)=>{
|
|
225
|
-
const mergedConfig = getMergedConfig();
|
|
226
|
-
if ("u" > typeof window && void 0 !== window._SSR_DATA && mergedConfig.unstable_reloadOnURLMismatch) {
|
|
227
|
-
const { ssrContext } = context;
|
|
228
|
-
const currentPathname = normalizePathname(window.location.pathname);
|
|
229
|
-
const initialPathname = 'string' == typeof ssrContext?.request?.pathname ? normalizePathname(ssrContext.request.pathname) : void 0;
|
|
230
|
-
if (void 0 !== initialPathname && '' !== initialPathname && initialPathname !== currentPathname) {
|
|
231
|
-
const errorMsg = `The initial URL ${initialPathname} and the URL ${currentPathname} to be hydrated do not match, reload.`;
|
|
232
|
-
console.error(errorMsg);
|
|
233
|
-
window.location.reload();
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
context.router = {
|
|
237
|
-
Link: Link,
|
|
238
|
-
useMatches: useMatches,
|
|
239
|
-
useLocation: useLocation,
|
|
240
|
-
useNavigate: useNavigate,
|
|
241
|
-
useRouter: useRouter
|
|
242
|
-
};
|
|
243
|
-
const hasSSRBootstrap = "u" > typeof window && Boolean(window.$_TSR);
|
|
244
|
-
if (hasSSRBootstrap && getRouteObjects().length > 0) {
|
|
245
|
-
const runtimeContext = context;
|
|
246
|
-
const router = getRouter(runtimeContext, getClientBasename(runtimeContext));
|
|
247
|
-
if (null != router) return getTanstackSsrHydrationPromise(router).then(()=>void 0);
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
api.wrapRoot((App)=>{
|
|
251
|
-
if (0 === getRouteObjects().length) return App;
|
|
252
|
-
const RouterWrapper = ()=>{
|
|
253
|
-
const runtimeContext = useContext(InternalRuntimeContext);
|
|
254
|
-
const _basename = getClientBasename(runtimeContext);
|
|
255
|
-
const routeTree = useMemo(()=>getRouteTree(), []);
|
|
256
|
-
if (!routeTree) return App ? /*#__PURE__*/ jsx(App, {}) : null;
|
|
257
|
-
const router = useMemo(()=>getRouter(runtimeContext, _basename), [
|
|
258
|
-
_basename,
|
|
259
|
-
routeTree,
|
|
260
|
-
runtimeContext
|
|
261
|
-
]);
|
|
262
|
-
if (!router) return App ? /*#__PURE__*/ jsx(App, {}) : null;
|
|
263
|
-
const runtimeState = applyRouterRuntimeState(runtimeContext, {
|
|
264
|
-
framework: 'tanstack',
|
|
265
|
-
basename: _basename,
|
|
266
|
-
instance: router
|
|
267
|
-
});
|
|
268
|
-
const lifecycleContext = {
|
|
269
|
-
framework: 'tanstack',
|
|
270
|
-
phase: 'client-create',
|
|
271
|
-
routes: getRouteObjects(),
|
|
272
|
-
runtimeContext: runtimeState,
|
|
273
|
-
basename: _basename,
|
|
274
|
-
router
|
|
275
|
-
};
|
|
276
|
-
const hasSSRBootstrap = "u" > typeof window && (Boolean(window.$_TSR) || hasTanstackSsrHydrationRecord(router));
|
|
277
|
-
const needsRouterClient = hasSSRBootstrap;
|
|
278
|
-
if (needsRouterClient) hooks.onBeforeHydrateRouter.call({
|
|
279
|
-
...lifecycleContext,
|
|
280
|
-
phase: 'hydrate',
|
|
281
|
-
router,
|
|
282
|
-
runtimeContext: runtimeState
|
|
283
|
-
});
|
|
284
|
-
const RouterContent = needsRouterClient ? /*#__PURE__*/ jsx(ModernRouterClient, {
|
|
285
|
-
router: router
|
|
286
|
-
}) : /*#__PURE__*/ jsx(RouterProvider, {
|
|
287
|
-
router: router
|
|
288
|
-
});
|
|
289
|
-
const HydratableRouterContent = wrapTanstackSsrHydrationBoundary(RouterContent, hasSSRBootstrap);
|
|
290
|
-
if (needsRouterClient) hooks.onAfterHydrateRouter.call({
|
|
291
|
-
...lifecycleContext,
|
|
292
|
-
phase: 'hydrate',
|
|
293
|
-
router,
|
|
294
|
-
runtimeContext: runtimeState
|
|
295
|
-
});
|
|
296
|
-
return App ? /*#__PURE__*/ jsx(App, {
|
|
297
|
-
children: HydratableRouterContent
|
|
298
|
-
}) : HydratableRouterContent;
|
|
299
|
-
};
|
|
300
|
-
return RouterWrapper;
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
export { tanstackRouterPlugin };
|