@reckona/mreact-router 0.0.4 → 0.0.6
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/README.md +57 -1
- package/dist/adapters/aws-lambda.d.ts +2 -0
- package/dist/adapters/aws-lambda.d.ts.map +1 -1
- package/dist/adapters/aws-lambda.js +2 -0
- package/dist/adapters/aws-lambda.js.map +1 -1
- package/dist/adapters/node.d.ts +2 -0
- package/dist/adapters/node.d.ts.map +1 -1
- package/dist/adapters/node.js +1 -0
- package/dist/adapters/node.js.map +1 -1
- package/dist/app-router-globals.d.ts +10 -0
- package/dist/app-router-globals.d.ts.map +1 -0
- package/dist/app-router-globals.js +2 -0
- package/dist/app-router-globals.js.map +1 -0
- package/dist/cli.js +6 -6
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +525 -45
- package/dist/client.js.map +1 -1
- package/dist/dev-server.d.ts +1 -1
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +44 -16
- package/dist/dev-server.js.map +1 -1
- package/dist/import-policy.d.ts.map +1 -1
- package/dist/import-policy.js +43 -11
- package/dist/import-policy.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/link.d.ts +18 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +24 -0
- package/dist/link.js.map +1 -0
- package/dist/module-runner.d.ts.map +1 -1
- package/dist/module-runner.js +77 -15
- package/dist/module-runner.js.map +1 -1
- package/dist/navigation-state.d.ts +11 -0
- package/dist/navigation-state.d.ts.map +1 -0
- package/dist/navigation-state.js +65 -0
- package/dist/navigation-state.js.map +1 -0
- package/dist/render.d.ts +5 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +79 -9
- package/dist/render.js.map +1 -1
- package/dist/route-source.d.ts.map +1 -1
- package/dist/route-source.js +16 -5
- package/dist/route-source.js.map +1 -1
- package/dist/serve.d.ts +4 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +11 -3
- package/dist/serve.js.map +1 -1
- package/dist/vite-config.d.ts +9 -0
- package/dist/vite-config.d.ts.map +1 -1
- package/dist/vite-config.js +8 -1
- package/dist/vite-config.js.map +1 -1
- package/dist/workspace-packages.d.ts +14 -0
- package/dist/workspace-packages.d.ts.map +1 -0
- package/dist/workspace-packages.js +41 -0
- package/dist/workspace-packages.js.map +1 -0
- package/package.json +20 -7
package/dist/module-runner.js
CHANGED
|
@@ -2,6 +2,7 @@ import { dirname, join, sep } from "node:path";
|
|
|
2
2
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
3
|
import { build as bundle } from "esbuild";
|
|
4
4
|
import { runnerImport } from "vite";
|
|
5
|
+
import { resolveWorkspacePackageFile } from "./workspace-packages.js";
|
|
5
6
|
const runnerConfig = {
|
|
6
7
|
configFile: false,
|
|
7
8
|
logLevel: "silent",
|
|
@@ -64,7 +65,6 @@ async function bundleAppRouterSourceModule(options) {
|
|
|
64
65
|
function workspacePackageResolutionPlugin() {
|
|
65
66
|
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
66
67
|
const packageRoot = dirname(currentDir);
|
|
67
|
-
const packagesDir = dirname(packageRoot);
|
|
68
68
|
const sourceOrDist = currentDir.endsWith(`${sep}dist`) ? "dist/index.js" : "src/index.ts";
|
|
69
69
|
const nativeEscapeSourceOrDist = currentDir.endsWith(`${sep}dist`)
|
|
70
70
|
? "dist/native-escape.js"
|
|
@@ -72,19 +72,73 @@ function workspacePackageResolutionPlugin() {
|
|
|
72
72
|
const sessionSourceOrDist = currentDir.endsWith(`${sep}dist`)
|
|
73
73
|
? "dist/session.js"
|
|
74
74
|
: "src/session.ts";
|
|
75
|
-
const packageFile = (packageName,
|
|
75
|
+
const packageFile = (monorepoDir, packageName, entry, specifier, resolveDir) => resolveWorkspacePackageFile({
|
|
76
|
+
currentFileUrl: import.meta.url,
|
|
77
|
+
entry,
|
|
78
|
+
monorepoDir,
|
|
79
|
+
packageName,
|
|
80
|
+
resolveDir,
|
|
81
|
+
specifier,
|
|
82
|
+
});
|
|
76
83
|
const entries = new Map([
|
|
77
|
-
[
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
[
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
[
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
[
|
|
85
|
+
"@reckona/mreact-auth",
|
|
86
|
+
{ entry: "index", monorepoDir: "auth", packageName: "@reckona/mreact-auth" },
|
|
87
|
+
],
|
|
88
|
+
[
|
|
89
|
+
"@reckona/mreact-compat",
|
|
90
|
+
{ entry: "index", monorepoDir: "react-compat", packageName: "@reckona/mreact-compat" },
|
|
91
|
+
],
|
|
92
|
+
[
|
|
93
|
+
"@reckona/mreact-compat/event-priority",
|
|
94
|
+
{
|
|
95
|
+
entry: "event-priority",
|
|
96
|
+
monorepoDir: "react-compat",
|
|
97
|
+
packageName: "@reckona/mreact-compat",
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
[
|
|
101
|
+
"@reckona/mreact-compat/flight",
|
|
102
|
+
{ entry: "flight", monorepoDir: "react-compat", packageName: "@reckona/mreact-compat" },
|
|
103
|
+
],
|
|
104
|
+
[
|
|
105
|
+
"@reckona/mreact-compat/internal",
|
|
106
|
+
{ entry: "internal", monorepoDir: "react-compat", packageName: "@reckona/mreact-compat" },
|
|
107
|
+
],
|
|
108
|
+
[
|
|
109
|
+
"@reckona/mreact-compat/jsx-dev-runtime",
|
|
110
|
+
{
|
|
111
|
+
entry: "jsx-dev-runtime",
|
|
112
|
+
monorepoDir: "react-compat",
|
|
113
|
+
packageName: "@reckona/mreact-compat",
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
[
|
|
117
|
+
"@reckona/mreact-compat/jsx-runtime",
|
|
118
|
+
{ entry: "jsx-runtime", monorepoDir: "react-compat", packageName: "@reckona/mreact-compat" },
|
|
119
|
+
],
|
|
120
|
+
[
|
|
121
|
+
"@reckona/mreact-compat/scheduler",
|
|
122
|
+
{ entry: "scheduler", monorepoDir: "react-compat", packageName: "@reckona/mreact-compat" },
|
|
123
|
+
],
|
|
124
|
+
[
|
|
125
|
+
"@reckona/mreact-reactive-core",
|
|
126
|
+
{
|
|
127
|
+
entry: "index",
|
|
128
|
+
monorepoDir: "reactive-core",
|
|
129
|
+
packageName: "@reckona/mreact-reactive-core",
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
[
|
|
133
|
+
"@reckona/mreact-query",
|
|
134
|
+
{ entry: "index", monorepoDir: "query", packageName: "@reckona/mreact-query" },
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
"@reckona/mreact-server",
|
|
138
|
+
{ entry: "index", monorepoDir: "server", packageName: "@reckona/mreact-server" },
|
|
139
|
+
],
|
|
140
|
+
]);
|
|
141
|
+
const routerEntries = new Map([
|
|
88
142
|
["@reckona/mreact-router", join(packageRoot, sourceOrDist)],
|
|
89
143
|
["@reckona/mreact-router/native-escape", join(packageRoot, nativeEscapeSourceOrDist)],
|
|
90
144
|
["@reckona/mreact-router/session", join(packageRoot, sessionSourceOrDist)],
|
|
@@ -97,8 +151,16 @@ function workspacePackageResolutionPlugin() {
|
|
|
97
151
|
buildApi.onResolve({
|
|
98
152
|
filter: /^@reckona\/mreact-(?:auth|query|reactive-core|server|router|compat)(?:\/(?:event-priority|flight|internal|jsx-dev-runtime|jsx-runtime|scheduler|native-escape|session|internal\/native-escape|internal\/session))?$/,
|
|
99
153
|
}, (args) => {
|
|
100
|
-
const
|
|
101
|
-
|
|
154
|
+
const routerPath = routerEntries.get(args.path);
|
|
155
|
+
if (routerPath !== undefined) {
|
|
156
|
+
return { path: routerPath };
|
|
157
|
+
}
|
|
158
|
+
const entry = entries.get(args.path);
|
|
159
|
+
return entry === undefined
|
|
160
|
+
? undefined
|
|
161
|
+
: {
|
|
162
|
+
path: packageFile(entry.monorepoDir, entry.packageName, entry.entry, args.path, args.resolveDir),
|
|
163
|
+
};
|
|
102
164
|
});
|
|
103
165
|
},
|
|
104
166
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-runner.js","sourceRoot":"","sources":["../src/module-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAqB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"module-runner.js","sourceRoot":"","sources":["../src/module-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type AppRouterNavigationType = "push" | "replace" | "pop" | "refresh";
|
|
2
|
+
export interface AppRouterNavigationState {
|
|
3
|
+
pending: boolean;
|
|
4
|
+
from: string | null;
|
|
5
|
+
to: string | null;
|
|
6
|
+
type: AppRouterNavigationType | null;
|
|
7
|
+
}
|
|
8
|
+
export type AppRouterNavigationStateListener = (state: AppRouterNavigationState) => void;
|
|
9
|
+
export declare function getNavigationState(): AppRouterNavigationState;
|
|
10
|
+
export declare function subscribeNavigationState(listener: AppRouterNavigationStateListener): () => void;
|
|
11
|
+
//# sourceMappingURL=navigation-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-state.d.ts","sourceRoot":"","sources":["../src/navigation-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,MAAM,gCAAgC,GAAG,CAC7C,KAAK,EAAE,wBAAwB,KAC5B,IAAI,CAAC;AASV,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gCAAgC,GACzC,MAAM,IAAI,CAkBZ"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const idleNavigationState = {
|
|
2
|
+
from: null,
|
|
3
|
+
pending: false,
|
|
4
|
+
to: null,
|
|
5
|
+
type: null,
|
|
6
|
+
};
|
|
7
|
+
export function getNavigationState() {
|
|
8
|
+
const runtimeState = globalThis.__mreactNavigationState?.current;
|
|
9
|
+
const normalized = normalizeNavigationState(runtimeState);
|
|
10
|
+
if (normalized !== undefined) {
|
|
11
|
+
return normalized;
|
|
12
|
+
}
|
|
13
|
+
return navigationStateFromDocument();
|
|
14
|
+
}
|
|
15
|
+
export function subscribeNavigationState(listener) {
|
|
16
|
+
if (typeof window === "undefined") {
|
|
17
|
+
return () => undefined;
|
|
18
|
+
}
|
|
19
|
+
const handleNavigationStateChange = (event) => {
|
|
20
|
+
const state = normalizeNavigationState(event.detail);
|
|
21
|
+
if (state !== undefined) {
|
|
22
|
+
listener(state);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
window.addEventListener("mreact:navigation-state-change", handleNavigationStateChange);
|
|
26
|
+
return () => {
|
|
27
|
+
window.removeEventListener("mreact:navigation-state-change", handleNavigationStateChange);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function navigationStateFromDocument() {
|
|
31
|
+
if (typeof document === "undefined") {
|
|
32
|
+
return { ...idleNavigationState };
|
|
33
|
+
}
|
|
34
|
+
const root = document.documentElement;
|
|
35
|
+
if (root.getAttribute("data-mreact-navigation-pending") !== "true") {
|
|
36
|
+
return { ...idleNavigationState };
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
from: root.getAttribute("data-mreact-navigation-from"),
|
|
40
|
+
pending: true,
|
|
41
|
+
to: root.getAttribute("data-mreact-navigation-to"),
|
|
42
|
+
type: navigationType(root.getAttribute("data-mreact-navigation-type")),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function normalizeNavigationState(value) {
|
|
46
|
+
if (value === null || typeof value !== "object") {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const state = value;
|
|
50
|
+
if (typeof state.pending !== "boolean") {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
from: typeof state.from === "string" ? state.from : null,
|
|
55
|
+
pending: state.pending,
|
|
56
|
+
to: typeof state.to === "string" ? state.to : null,
|
|
57
|
+
type: navigationType(state.type),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function navigationType(value) {
|
|
61
|
+
return value === "push" || value === "replace" || value === "pop" || value === "refresh"
|
|
62
|
+
? value
|
|
63
|
+
: null;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=navigation-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-state.js","sourceRoot":"","sources":["../src/navigation-state.ts"],"names":[],"mappings":"AAaA,MAAM,mBAAmB,GAA6B;IACpD,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,KAAK;IACd,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,UAAU,kBAAkB;IAChC,MAAM,YAAY,GAAI,UAEpB,CAAC,uBAAuB,EAAE,OAAO,CAAC;IACpC,MAAM,UAAU,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAE1D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAA0C;IAE1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IACzB,CAAC;IAED,MAAM,2BAA2B,GAAG,CAAC,KAAY,EAAE,EAAE;QACnD,MAAM,KAAK,GAAG,wBAAwB,CAAE,KAA8B,CAAC,MAAM,CAAC,CAAC;QAE/E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,EAAE,2BAA2B,CAAC,CAAC;IAEvF,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,mBAAmB,CAAC,gCAAgC,EAAE,2BAA2B,CAAC,CAAC;IAC5F,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B;IAClC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;IAEtC,IAAI,IAAI,CAAC,YAAY,CAAC,gCAAgC,CAAC,KAAK,MAAM,EAAE,CAAC;QACnE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACpC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC;QACtD,OAAO,EAAE,IAAI;QACb,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC;QAClD,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,KAA0C,CAAC;IAEzD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACxD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QAClD,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS;QACtF,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,CAAC;AACX,CAAC"}
|
package/dist/render.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface RenderAppRequestOptions {
|
|
|
11
11
|
clientScripts?: ReadonlyMap<string, string>;
|
|
12
12
|
importPolicy?: AppRouterImportPolicy | undefined;
|
|
13
13
|
logger?: AppRouterLogger | undefined;
|
|
14
|
+
onResponse?: AppRouterResponseHook | undefined;
|
|
14
15
|
queryClient?: QueryClient | undefined;
|
|
15
16
|
request: Request;
|
|
16
17
|
routeCache?: AppRouterCache | undefined;
|
|
@@ -22,5 +23,9 @@ export interface RenderAppRequestOptions {
|
|
|
22
23
|
serverActions?: AppRouterServerActionOptions | undefined;
|
|
23
24
|
skipMiddleware?: boolean | undefined;
|
|
24
25
|
}
|
|
26
|
+
export type AppRouterResponseHook = (response: Response, context: AppRouterResponseHookContext) => Response | undefined | void | Promise<Response | undefined | void>;
|
|
27
|
+
export interface AppRouterResponseHookContext {
|
|
28
|
+
request: Request;
|
|
29
|
+
}
|
|
25
30
|
export declare function renderAppRequest(options: RenderAppRequestOptions): Promise<Response>;
|
|
26
31
|
//# sourceMappingURL=render.d.ts.map
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAUA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAsB/B,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,KAAK,4BAA4B,EAIlC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EAMpB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAqC,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiBnD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,CAAC;IACzC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAC3E,wBAAwB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5D,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACzD,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAqED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAUA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAsB/B,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,KAAK,4BAA4B,EAIlC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EAMpB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAqC,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiBnD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,CAAC;IACzC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAC3E,wBAAwB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5D,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACzD,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,4BAA4B,KAClC,QAAQ,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAExE,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,OAAO,CAAC;CAClB;AAqED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAU1F"}
|
package/dist/render.js
CHANGED
|
@@ -50,6 +50,10 @@ export async function renderAppRequest(options) {
|
|
|
50
50
|
if (authStorage.getStore() === undefined) {
|
|
51
51
|
return authStorage.run({}, () => renderAppRequest(options));
|
|
52
52
|
}
|
|
53
|
+
const response = await renderAppRequestInternal(options);
|
|
54
|
+
return applyAppRouterResponseHook(response, options);
|
|
55
|
+
}
|
|
56
|
+
async function renderAppRequestInternal(options) {
|
|
53
57
|
const routes = options.routes ?? (await scanAppRoutes({ appDir: options.appDir }));
|
|
54
58
|
const url = new URL(options.request.url);
|
|
55
59
|
const middlewareResponse = options.skipMiddleware === true
|
|
@@ -63,7 +67,7 @@ export async function renderAppRequest(options) {
|
|
|
63
67
|
const location = rewriteLocation(middlewareResponse);
|
|
64
68
|
if (location !== undefined) {
|
|
65
69
|
const rewriteUrl = new URL(location, options.request.url);
|
|
66
|
-
return
|
|
70
|
+
return renderAppRequestInternal({
|
|
67
71
|
...options,
|
|
68
72
|
request: new Request(rewriteUrl, options.request),
|
|
69
73
|
skipMiddleware: true,
|
|
@@ -96,6 +100,7 @@ export async function renderAppRequest(options) {
|
|
|
96
100
|
error: undefined,
|
|
97
101
|
request: options.request,
|
|
98
102
|
routeFile: notFoundFile,
|
|
103
|
+
routeScripts: options.clientScripts,
|
|
99
104
|
serverModules: options.serverModules,
|
|
100
105
|
serverModuleCacheVersion: options.serverModuleCacheVersion,
|
|
101
106
|
serverSourceFiles: options.serverSourceFiles,
|
|
@@ -108,7 +113,7 @@ export async function renderAppRequest(options) {
|
|
|
108
113
|
let routeCacheContext;
|
|
109
114
|
try {
|
|
110
115
|
if (matched.route.kind === "server") {
|
|
111
|
-
return await dispatchServerRoute(matched.route.file, options.request);
|
|
116
|
+
return await dispatchServerRoute(matched.route.file, options.request, matched.params);
|
|
112
117
|
}
|
|
113
118
|
// Issue 080: page routes render HTML for GET / HEAD only. Other
|
|
114
119
|
// methods (PUT, PATCH, DELETE, PROPFIND, ...) get 405 with an
|
|
@@ -217,6 +222,9 @@ export async function renderAppRequest(options) {
|
|
|
217
222
|
});
|
|
218
223
|
}
|
|
219
224
|
const data = dataPromise === undefined ? undefined : await dataPromise;
|
|
225
|
+
if (data instanceof Response) {
|
|
226
|
+
return data;
|
|
227
|
+
}
|
|
220
228
|
const renderedPage = await runWithQueryClient(queryClient, () => runServerModuleWithSlots(stringOutput.code, {
|
|
221
229
|
data,
|
|
222
230
|
params: matched.params,
|
|
@@ -271,7 +279,11 @@ export async function renderAppRequest(options) {
|
|
|
271
279
|
html = injectQueryState(html, dehydrate(queryClient));
|
|
272
280
|
const headers = new Headers(responseHeadersForMetadata(metadata));
|
|
273
281
|
headers.set("x-mreact-stream", "1");
|
|
274
|
-
return withOptionalActionCookie(htmlResponse(`<!DOCTYPE html>${
|
|
282
|
+
return withOptionalActionCookie(htmlResponse(`<!DOCTYPE html>${clientNavigationHeadTags({
|
|
283
|
+
assetBaseUrl: options.assetBaseUrl,
|
|
284
|
+
currentScript: clientRoute ? clientScript : undefined,
|
|
285
|
+
routeScripts: options.clientScripts,
|
|
286
|
+
})}${html}`, { headers }), preparedActions.csrfToken, preparedActions.csrfTokenIsNew === true);
|
|
275
287
|
}
|
|
276
288
|
const output = transformServerModule({
|
|
277
289
|
code: routeCode,
|
|
@@ -300,6 +312,7 @@ export async function renderAppRequest(options) {
|
|
|
300
312
|
queryClient,
|
|
301
313
|
request: options.request,
|
|
302
314
|
routePath: matched.route.path,
|
|
315
|
+
routeScripts: options.clientScripts,
|
|
303
316
|
serverModules: options.serverModules,
|
|
304
317
|
serverModuleCacheVersion: options.serverModuleCacheVersion,
|
|
305
318
|
serverSourceFiles: options.serverSourceFiles,
|
|
@@ -311,6 +324,9 @@ export async function renderAppRequest(options) {
|
|
|
311
324
|
}), preparedActions.csrfToken, preparedActions.csrfTokenIsNew === true);
|
|
312
325
|
}
|
|
313
326
|
const data = dataPromise === undefined ? undefined : await dataPromise;
|
|
327
|
+
if (data instanceof Response) {
|
|
328
|
+
return data;
|
|
329
|
+
}
|
|
314
330
|
const props = {
|
|
315
331
|
data,
|
|
316
332
|
params: matched.params,
|
|
@@ -323,6 +339,7 @@ export async function renderAppRequest(options) {
|
|
|
323
339
|
pageFile: matched.route.file,
|
|
324
340
|
props,
|
|
325
341
|
routePath: matched.route.path,
|
|
342
|
+
routeScripts: options.clientScripts,
|
|
326
343
|
serverModules: options.serverModules,
|
|
327
344
|
serverModuleCacheVersion: options.serverModuleCacheVersion,
|
|
328
345
|
serverSourceFiles: options.serverSourceFiles,
|
|
@@ -349,6 +366,9 @@ export async function renderAppRequest(options) {
|
|
|
349
366
|
});
|
|
350
367
|
}
|
|
351
368
|
const data = dataPromise === undefined ? undefined : await dataPromise;
|
|
369
|
+
if (data instanceof Response) {
|
|
370
|
+
return data;
|
|
371
|
+
}
|
|
352
372
|
const renderedPage = await runWithQueryClient(queryClient, () => runServerModuleWithSlots(output.code, {
|
|
353
373
|
data,
|
|
354
374
|
params: matched.params,
|
|
@@ -406,7 +426,11 @@ export async function renderAppRequest(options) {
|
|
|
406
426
|
html = injectHeadMetadata(html, metadata);
|
|
407
427
|
html = injectAuthSessionClaims(html, originalAnalysis.authIncludesClaims ? currentAuthClaims() : undefined);
|
|
408
428
|
html = injectQueryState(html, dehydrate(queryClient));
|
|
409
|
-
const response = withOptionalActionCookie(htmlResponse(`<!DOCTYPE html>${
|
|
429
|
+
const response = withOptionalActionCookie(htmlResponse(`<!DOCTYPE html>${clientNavigationHeadTags({
|
|
430
|
+
assetBaseUrl: options.assetBaseUrl,
|
|
431
|
+
currentScript: clientRoute ? clientScript : undefined,
|
|
432
|
+
routeScripts: options.clientScripts,
|
|
433
|
+
})}${html}`, {
|
|
410
434
|
headers: responseHeadersForMetadata(metadata),
|
|
411
435
|
}), preparedActions.csrfToken, preparedActions.csrfTokenIsNew === true);
|
|
412
436
|
const effectiveCachePolicy = cachePolicy ?? routeCacheContext.cachePolicy;
|
|
@@ -439,6 +463,7 @@ export async function renderAppRequest(options) {
|
|
|
439
463
|
error: undefined,
|
|
440
464
|
request: options.request,
|
|
441
465
|
routeFile: notFoundFile,
|
|
466
|
+
routeScripts: options.clientScripts,
|
|
442
467
|
serverModules: options.serverModules,
|
|
443
468
|
serverModuleCacheVersion: options.serverModuleCacheVersion,
|
|
444
469
|
serverSourceFiles: options.serverSourceFiles,
|
|
@@ -458,6 +483,7 @@ export async function renderAppRequest(options) {
|
|
|
458
483
|
error,
|
|
459
484
|
request: options.request,
|
|
460
485
|
routeFile: errorFile,
|
|
486
|
+
routeScripts: options.clientScripts,
|
|
461
487
|
serverModules: options.serverModules,
|
|
462
488
|
serverModuleCacheVersion: options.serverModuleCacheVersion,
|
|
463
489
|
serverSourceFiles: options.serverSourceFiles,
|
|
@@ -470,6 +496,12 @@ export async function renderAppRequest(options) {
|
|
|
470
496
|
await routeCacheContext?.dispose();
|
|
471
497
|
}
|
|
472
498
|
}
|
|
499
|
+
async function applyAppRouterResponseHook(response, options) {
|
|
500
|
+
const hooked = await options.onResponse?.(response, {
|
|
501
|
+
request: options.request,
|
|
502
|
+
});
|
|
503
|
+
return hooked instanceof Response ? hooked : response;
|
|
504
|
+
}
|
|
473
505
|
function withOptionalActionCookie(response, csrfToken, csrfTokenIsNew) {
|
|
474
506
|
// Only re-issue Set-Cookie when this render minted the token. Reusing
|
|
475
507
|
// an incoming cookie value (Issue 070) means no Set-Cookie is needed
|
|
@@ -484,6 +516,23 @@ function modulePreloadTags(script, assetBaseUrl) {
|
|
|
484
516
|
? ""
|
|
485
517
|
: `<link rel="modulepreload" href="${escapeHtmlAttribute(assetPath(script, assetBaseUrl ?? "/_mreact/client/"))}">`;
|
|
486
518
|
}
|
|
519
|
+
function clientNavigationHeadTags(options) {
|
|
520
|
+
return [
|
|
521
|
+
modulePreloadTags(options.currentScript, options.assetBaseUrl),
|
|
522
|
+
routePrefetchManifestScript(options.routeScripts, options.assetBaseUrl),
|
|
523
|
+
].join("");
|
|
524
|
+
}
|
|
525
|
+
function routePrefetchManifestScript(routeScripts, assetBaseUrl) {
|
|
526
|
+
if (routeScripts === undefined || routeScripts.size === 0) {
|
|
527
|
+
return "";
|
|
528
|
+
}
|
|
529
|
+
const routes = Array.from(routeScripts.entries(), ([path, script]) => ({
|
|
530
|
+
path,
|
|
531
|
+
script: assetPath(script, assetBaseUrl ?? "/_mreact/client/"),
|
|
532
|
+
}));
|
|
533
|
+
const json = JSON.stringify(routes).replaceAll("<", "\\u003c");
|
|
534
|
+
return `<script type="application/json" id="mreact-route-prefetch-manifest">${json}</script>`;
|
|
535
|
+
}
|
|
487
536
|
function isNavigationRequest(request) {
|
|
488
537
|
return request.headers.get("x-mreact-navigation") === "1";
|
|
489
538
|
}
|
|
@@ -587,7 +636,11 @@ async function renderSpecialRoute(options) {
|
|
|
587
636
|
serverModuleCacheVersion: options.serverModuleCacheVersion,
|
|
588
637
|
serverSourceFiles: options.serverSourceFiles,
|
|
589
638
|
});
|
|
590
|
-
return new Response(`<!DOCTYPE html>${
|
|
639
|
+
return new Response(`<!DOCTYPE html>${clientNavigationHeadTags({
|
|
640
|
+
assetBaseUrl: options.assetBaseUrl,
|
|
641
|
+
currentScript: options.navigation?.clientRoute === true ? options.navigation.script : undefined,
|
|
642
|
+
routeScripts: options.routeScripts,
|
|
643
|
+
})}${html}`, {
|
|
591
644
|
headers: { "content-type": "text/html; charset=utf-8" },
|
|
592
645
|
status: options.status,
|
|
593
646
|
});
|
|
@@ -612,13 +665,22 @@ function normalizeErrorForProps(error) {
|
|
|
612
665
|
}
|
|
613
666
|
return { message: String(error) };
|
|
614
667
|
}
|
|
615
|
-
async function dispatchServerRoute(file, request) {
|
|
668
|
+
async function dispatchServerRoute(file, request, params) {
|
|
616
669
|
const module = await importAppRouterFileModule(file);
|
|
617
670
|
const handler = module[request.method] ?? module.ALL ?? module.default;
|
|
618
671
|
if (typeof handler !== "function") {
|
|
619
672
|
return new Response("Method Not Allowed", { status: 405 });
|
|
620
673
|
}
|
|
621
|
-
|
|
674
|
+
let response;
|
|
675
|
+
try {
|
|
676
|
+
response = await handler(request, { params });
|
|
677
|
+
}
|
|
678
|
+
catch (error) {
|
|
679
|
+
if (error instanceof Response) {
|
|
680
|
+
return error;
|
|
681
|
+
}
|
|
682
|
+
throw error;
|
|
683
|
+
}
|
|
622
684
|
return response instanceof Response
|
|
623
685
|
? response
|
|
624
686
|
: new Response("Invalid route response", { status: 500 });
|
|
@@ -895,7 +957,11 @@ function runServerStreamModule(code, options) {
|
|
|
895
957
|
})
|
|
896
958
|
: undefined;
|
|
897
959
|
sink.append("<!DOCTYPE html>");
|
|
898
|
-
sink.append(
|
|
960
|
+
sink.append(clientNavigationHeadTags({
|
|
961
|
+
assetBaseUrl: options.assetBaseUrl,
|
|
962
|
+
currentScript: options.clientRoute ? options.script : undefined,
|
|
963
|
+
routeScripts: options.routeScripts,
|
|
964
|
+
}));
|
|
899
965
|
for (const shell of layoutShells) {
|
|
900
966
|
sink.append(shell.prefix);
|
|
901
967
|
}
|
|
@@ -939,7 +1005,11 @@ async function runServerStreamModuleWithLoading(code, options) {
|
|
|
939
1005
|
: undefined;
|
|
940
1006
|
return renderToReadableStream((sink) => {
|
|
941
1007
|
sink.append("<!DOCTYPE html>");
|
|
942
|
-
sink.append(
|
|
1008
|
+
sink.append(clientNavigationHeadTags({
|
|
1009
|
+
assetBaseUrl: options.assetBaseUrl,
|
|
1010
|
+
currentScript: options.clientRoute ? options.script : undefined,
|
|
1011
|
+
routeScripts: options.routeScripts,
|
|
1012
|
+
}));
|
|
943
1013
|
for (const shell of layoutShells) {
|
|
944
1014
|
sink.append(shell.prefix);
|
|
945
1015
|
}
|