@quilted/quilt 0.6.11 → 0.6.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/build/esm/react.mjs +1 -2
- package/build/esm/server/ServerContext.mjs +18 -2
- package/build/esm/server/request-router.mjs +25 -57
- package/build/esm/server.mjs +1 -2
- package/build/esnext/react.esnext +1 -2
- package/build/esnext/server/ServerContext.esnext +6 -14
- package/build/esnext/server/request-router.esnext +28 -37
- package/build/esnext/server.esnext +1 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/typescript/react.d.ts +1 -2
- package/build/typescript/react.d.ts.map +1 -1
- package/build/typescript/request-router.d.ts +2 -0
- package/build/typescript/request-router.d.ts.map +1 -0
- package/build/typescript/server/ServerContext.d.ts +1 -1
- package/build/typescript/server/ServerContext.d.ts.map +1 -1
- package/build/typescript/server/request-router.d.ts +10 -6
- package/build/typescript/server/request-router.d.ts.map +1 -1
- package/build/typescript/server.d.ts +1 -2
- package/build/typescript/server.d.ts.map +1 -1
- package/package.json +5 -15
- package/source/react.ts +1 -4
- package/source/server/ServerContext.tsx +30 -14
- package/source/server/request-router.tsx +41 -53
- package/source/server.ts +1 -8
- package/tsconfig.json +0 -1
- package/build/esm/react/tools.mjs +0 -2
- package/build/esm/server/preload.mjs +0 -35
- package/build/esm/utilities/react.mjs +0 -10
- package/build/esnext/react/tools.esnext +0 -2
- package/build/esnext/server/preload.esnext +0 -34
- package/build/esnext/utilities/react.esnext +0 -7
- package/source/react/jsx-runtime.ts +0 -2
- package/source/react/tools.ts +0 -2
- package/source/react-dom/server.ts +0 -2
- package/source/react-dom/test-utils.ts +0 -2
- package/source/react-dom.ts +0 -4
- package/source/server/preload.ts +0 -69
- package/source/utilities/react.tsx +0 -13
- /package/build/esm/{request-router/index.mjs → request-router.mjs} +0 -0
- /package/build/esnext/{request-router/index.esnext → request-router.esnext} +0 -0
- /package/source/{request-router/index.ts → request-router.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @quilted/quilt
|
|
2
2
|
|
|
3
|
+
## 0.6.12
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`9eb5ba81`](https://github.com/lemonmade/quilt/commit/9eb5ba8110a4691936f043084c87c4da94d524b8) Thanks [@lemonmade](https://github.com/lemonmade)! - Improve `renderToResponse` and remove `renderToFragmentResponse`
|
|
8
|
+
|
|
9
|
+
- [`905e92ef`](https://github.com/lemonmade/quilt/commit/905e92ef32adad8658042f437b9cfbd248cce3c3) Thanks [@lemonmade](https://github.com/lemonmade)! - Simplify React exports
|
|
10
|
+
|
|
3
11
|
## 0.6.11
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/build/esm/react.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export * from '@quilted/react';
|
|
2
|
-
export { default } from '@quilted/react';
|
|
1
|
+
export * from '@quilted/react-utilities';
|
|
@@ -2,7 +2,7 @@ import { AssetsContext } from '@quilted/react-assets/server';
|
|
|
2
2
|
import { InitialUrlContext } from '@quilted/react-router';
|
|
3
3
|
import { HTMLContext } from '@quilted/react-html/server';
|
|
4
4
|
import { HttpServerContext } from '@quilted/react-http/server';
|
|
5
|
-
import {
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
function ServerContext({
|
|
8
8
|
url,
|
|
@@ -12,7 +12,23 @@ function ServerContext({
|
|
|
12
12
|
children
|
|
13
13
|
}) {
|
|
14
14
|
const normalizedUrl = typeof url === 'string' ? new URL(url) : url;
|
|
15
|
-
|
|
15
|
+
const withInitialURL = normalizedUrl ? /*#__PURE__*/jsx(InitialUrlContext.Provider, {
|
|
16
|
+
value: normalizedUrl,
|
|
17
|
+
children: children
|
|
18
|
+
}) : children;
|
|
19
|
+
const withHTML = html ? /*#__PURE__*/jsx(HTMLContext.Provider, {
|
|
20
|
+
value: html,
|
|
21
|
+
children: withInitialURL
|
|
22
|
+
}) : withInitialURL;
|
|
23
|
+
const withHTTPServer = http ? /*#__PURE__*/jsx(HttpServerContext.Provider, {
|
|
24
|
+
value: http,
|
|
25
|
+
children: withHTML
|
|
26
|
+
}) : withHTML;
|
|
27
|
+
const withAssets = assets ? /*#__PURE__*/jsx(AssetsContext.Provider, {
|
|
28
|
+
value: assets,
|
|
29
|
+
children: withHTTPServer
|
|
30
|
+
}) : withHTTPServer;
|
|
31
|
+
return withAssets;
|
|
16
32
|
}
|
|
17
33
|
|
|
18
34
|
export { ServerContext };
|
|
@@ -9,41 +9,6 @@ import { RedirectResponse, HTMLResponse } from '@quilted/request-router';
|
|
|
9
9
|
import { ServerContext } from './ServerContext.mjs';
|
|
10
10
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
11
11
|
|
|
12
|
-
async function renderToFragmentResponse(element, {
|
|
13
|
-
request
|
|
14
|
-
}) {
|
|
15
|
-
const baseUrl = request.URL ?? new URL(request.url);
|
|
16
|
-
const html = new HTMLManager();
|
|
17
|
-
const http = new HttpManager({
|
|
18
|
-
headers: request.headers
|
|
19
|
-
});
|
|
20
|
-
const rendered = await extract(element, {
|
|
21
|
-
decorate(element) {
|
|
22
|
-
return /*#__PURE__*/jsx(ServerContext, {
|
|
23
|
-
http: http,
|
|
24
|
-
html: html,
|
|
25
|
-
url: baseUrl,
|
|
26
|
-
children: element
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
const {
|
|
31
|
-
headers,
|
|
32
|
-
statusCode = 200,
|
|
33
|
-
redirectUrl
|
|
34
|
-
} = http.state;
|
|
35
|
-
if (redirectUrl) {
|
|
36
|
-
return new RedirectResponse(redirectUrl, {
|
|
37
|
-
status: statusCode,
|
|
38
|
-
headers,
|
|
39
|
-
request
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
return new HTMLResponse(rendered ?? '', {
|
|
43
|
-
status: statusCode,
|
|
44
|
-
headers
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
12
|
async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
48
13
|
let element;
|
|
49
14
|
let options;
|
|
@@ -55,11 +20,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
55
20
|
}
|
|
56
21
|
const {
|
|
57
22
|
request,
|
|
58
|
-
stream: shouldStream = false,
|
|
59
23
|
assets,
|
|
60
24
|
cacheKey: explicitCacheKey,
|
|
25
|
+
headers: explicitHeaders,
|
|
61
26
|
waitUntil = noop,
|
|
62
|
-
|
|
27
|
+
stream: shouldStream = false,
|
|
28
|
+
renderHTML = true
|
|
63
29
|
} = options;
|
|
64
30
|
const baseUrl = request.URL ?? new URL(request.url);
|
|
65
31
|
const cacheKey = explicitCacheKey ?? (await assets?.cacheKey?.(request)) ?? {};
|
|
@@ -71,8 +37,8 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
71
37
|
cacheKey
|
|
72
38
|
});
|
|
73
39
|
let responseStatus = 200;
|
|
74
|
-
let appHeaders;
|
|
75
40
|
let appStream;
|
|
41
|
+
const headers = new Headers(explicitHeaders);
|
|
76
42
|
if (shouldStream === false && element != null) {
|
|
77
43
|
const rendered = await extract(element, {
|
|
78
44
|
decorate(element) {
|
|
@@ -86,18 +52,27 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
86
52
|
}
|
|
87
53
|
});
|
|
88
54
|
const {
|
|
89
|
-
headers,
|
|
55
|
+
headers: appHeaders,
|
|
90
56
|
statusCode = 200,
|
|
91
57
|
redirectUrl
|
|
92
58
|
} = http.state;
|
|
59
|
+
const hasSetCookieHeader = typeof appHeaders.getSetCookie === 'function';
|
|
60
|
+
if (hasSetCookieHeader) {
|
|
61
|
+
for (const cookie of appHeaders.getSetCookie()) {
|
|
62
|
+
headers.append('Set-Cookie', cookie);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const [header, value] of appHeaders.entries()) {
|
|
66
|
+
if (hasSetCookieHeader && header.toLowerCase() === 'set-cookie') continue;
|
|
67
|
+
headers.set(header, value);
|
|
68
|
+
}
|
|
93
69
|
if (redirectUrl) {
|
|
94
70
|
return new RedirectResponse(redirectUrl, {
|
|
95
71
|
status: statusCode,
|
|
96
|
-
headers,
|
|
72
|
+
headers: headers,
|
|
97
73
|
request
|
|
98
74
|
});
|
|
99
75
|
}
|
|
100
|
-
appHeaders = headers;
|
|
101
76
|
responseStatus = statusCode;
|
|
102
77
|
const appTransformStream = new TransformStream();
|
|
103
78
|
const appWriter = appTransformStream.writable.getWriter();
|
|
@@ -128,16 +103,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
128
103
|
};
|
|
129
104
|
waitUntil(renderAppStream());
|
|
130
105
|
}
|
|
131
|
-
const
|
|
132
|
-
headers,
|
|
133
|
-
body
|
|
134
|
-
} = await renderToHTMLStream(appStream);
|
|
106
|
+
const body = await renderToHTMLBody(appStream);
|
|
135
107
|
return new HTMLResponse(body, {
|
|
136
108
|
status: responseStatus,
|
|
137
109
|
headers
|
|
138
110
|
});
|
|
139
|
-
async function
|
|
140
|
-
const headers = new Headers(appHeaders);
|
|
111
|
+
async function renderToHTMLBody(content) {
|
|
141
112
|
const [synchronousAssets, preloadAssets] = await Promise.all([assets?.entry({
|
|
142
113
|
cacheKey,
|
|
143
114
|
modules: assetsManager.usedModules({
|
|
@@ -156,16 +127,16 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
156
127
|
headers.append('Link', preloadHeader(scriptAssetPreloadAttributes(script)));
|
|
157
128
|
}
|
|
158
129
|
}
|
|
159
|
-
if (renderHTML) {
|
|
130
|
+
if (typeof renderHTML === 'function') {
|
|
160
131
|
const body = await renderHTML(content, {
|
|
161
132
|
manager: html,
|
|
133
|
+
headers,
|
|
162
134
|
assets: synchronousAssets,
|
|
163
135
|
preloadAssets
|
|
164
136
|
});
|
|
165
|
-
return
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
};
|
|
137
|
+
return body;
|
|
138
|
+
} else if (renderHTML === false || renderHTML === 'fragment') {
|
|
139
|
+
return content;
|
|
169
140
|
}
|
|
170
141
|
const responseStream = new TextEncoderStream();
|
|
171
142
|
const body = responseStream.readable;
|
|
@@ -251,10 +222,7 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
251
222
|
writer.close();
|
|
252
223
|
};
|
|
253
224
|
waitUntil(renderFullHTML());
|
|
254
|
-
return
|
|
255
|
-
headers,
|
|
256
|
-
body
|
|
257
|
-
};
|
|
225
|
+
return body;
|
|
258
226
|
}
|
|
259
227
|
}
|
|
260
228
|
function preloadHeader(attributes) {
|
|
@@ -288,4 +256,4 @@ function noop(..._args) {
|
|
|
288
256
|
// noop
|
|
289
257
|
}
|
|
290
258
|
|
|
291
|
-
export {
|
|
259
|
+
export { renderToResponse };
|
package/build/esm/server.mjs
CHANGED
|
@@ -6,5 +6,4 @@ export { parseAcceptLanguageHeader } from '@quilted/react-localize';
|
|
|
6
6
|
export { createRequestRouterLocalization } from '@quilted/react-localize/request-router';
|
|
7
7
|
export { ServerAction, useServerAction, useServerContext } from '@quilted/react-server-render';
|
|
8
8
|
export { ServerContext } from './server/ServerContext.mjs';
|
|
9
|
-
export {
|
|
10
|
-
export { createAssetPreloader } from './server/preload.mjs';
|
|
9
|
+
export { renderToResponse } from './server/request-router.mjs';
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export * from '@quilted/react';
|
|
2
|
-
export { default } from '@quilted/react';
|
|
1
|
+
export * from '@quilted/react-utilities';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
1
2
|
import { AssetsContext } from '@quilted/react-assets/server';
|
|
2
3
|
import { InitialUrlContext } from '@quilted/react-router';
|
|
3
4
|
import { HTMLContext } from '@quilted/react-html/server';
|
|
4
5
|
import { HttpServerContext } from '@quilted/react-http/server';
|
|
5
|
-
import { maybeWrapContext } from '../utilities/react.esnext';
|
|
6
6
|
|
|
7
7
|
function ServerContext({
|
|
8
8
|
url,
|
|
@@ -12,19 +12,11 @@ function ServerContext({
|
|
|
12
12
|
children
|
|
13
13
|
}) {
|
|
14
14
|
const normalizedUrl = typeof url === "string" ? new URL(url) : url;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
http,
|
|
21
|
-
maybeWrapContext(
|
|
22
|
-
HTMLContext,
|
|
23
|
-
html,
|
|
24
|
-
maybeWrapContext(InitialUrlContext, normalizedUrl, children)
|
|
25
|
-
)
|
|
26
|
-
)
|
|
27
|
-
);
|
|
15
|
+
const withInitialURL = normalizedUrl ? /* @__PURE__ */ jsx(InitialUrlContext.Provider, { value: normalizedUrl, children }) : children;
|
|
16
|
+
const withHTML = html ? /* @__PURE__ */ jsx(HTMLContext.Provider, { value: html, children: withInitialURL }) : withInitialURL;
|
|
17
|
+
const withHTTPServer = http ? /* @__PURE__ */ jsx(HttpServerContext.Provider, { value: http, children: withHTML }) : withHTML;
|
|
18
|
+
const withAssets = assets ? /* @__PURE__ */ jsx(AssetsContext.Provider, { value: assets, children: withHTTPServer }) : withHTTPServer;
|
|
19
|
+
return withAssets;
|
|
28
20
|
}
|
|
29
21
|
|
|
30
22
|
export { ServerContext };
|
|
@@ -9,28 +9,6 @@ import { extract } from '@quilted/react-server-render/server';
|
|
|
9
9
|
import { RedirectResponse, HTMLResponse } from '@quilted/request-router';
|
|
10
10
|
import { ServerContext } from './ServerContext.esnext';
|
|
11
11
|
|
|
12
|
-
async function renderToFragmentResponse(element, { request }) {
|
|
13
|
-
const baseUrl = request.URL ?? new URL(request.url);
|
|
14
|
-
const html = new HTMLManager();
|
|
15
|
-
const http = new HttpManager({ headers: request.headers });
|
|
16
|
-
const rendered = await extract(element, {
|
|
17
|
-
decorate(element2) {
|
|
18
|
-
return /* @__PURE__ */ jsx(ServerContext, { http, html, url: baseUrl, children: element2 });
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
const { headers, statusCode = 200, redirectUrl } = http.state;
|
|
22
|
-
if (redirectUrl) {
|
|
23
|
-
return new RedirectResponse(redirectUrl, {
|
|
24
|
-
status: statusCode,
|
|
25
|
-
headers,
|
|
26
|
-
request
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
return new HTMLResponse(rendered ?? "", {
|
|
30
|
-
status: statusCode,
|
|
31
|
-
headers
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
12
|
async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
35
13
|
let element;
|
|
36
14
|
let options;
|
|
@@ -42,11 +20,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
42
20
|
}
|
|
43
21
|
const {
|
|
44
22
|
request,
|
|
45
|
-
stream: shouldStream = false,
|
|
46
23
|
assets,
|
|
47
24
|
cacheKey: explicitCacheKey,
|
|
25
|
+
headers: explicitHeaders,
|
|
48
26
|
waitUntil = noop,
|
|
49
|
-
|
|
27
|
+
stream: shouldStream = false,
|
|
28
|
+
renderHTML = true
|
|
50
29
|
} = options;
|
|
51
30
|
const baseUrl = request.URL ?? new URL(request.url);
|
|
52
31
|
const cacheKey = explicitCacheKey ?? (await assets?.cacheKey?.(request) ?? {});
|
|
@@ -54,8 +33,8 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
54
33
|
const http = new HttpManager({ headers: request.headers });
|
|
55
34
|
const assetsManager = new AssetsManager({ cacheKey });
|
|
56
35
|
let responseStatus = 200;
|
|
57
|
-
let appHeaders;
|
|
58
36
|
let appStream;
|
|
37
|
+
const headers = new Headers(explicitHeaders);
|
|
59
38
|
if (shouldStream === false && element != null) {
|
|
60
39
|
const rendered = await extract(element, {
|
|
61
40
|
decorate(element2) {
|
|
@@ -71,15 +50,25 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
71
50
|
);
|
|
72
51
|
}
|
|
73
52
|
});
|
|
74
|
-
const { headers:
|
|
53
|
+
const { headers: appHeaders, statusCode = 200, redirectUrl } = http.state;
|
|
54
|
+
const hasSetCookieHeader = typeof appHeaders.getSetCookie === "function";
|
|
55
|
+
if (hasSetCookieHeader) {
|
|
56
|
+
for (const cookie of appHeaders.getSetCookie()) {
|
|
57
|
+
headers.append("Set-Cookie", cookie);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (const [header, value] of appHeaders.entries()) {
|
|
61
|
+
if (hasSetCookieHeader && header.toLowerCase() === "set-cookie")
|
|
62
|
+
continue;
|
|
63
|
+
headers.set(header, value);
|
|
64
|
+
}
|
|
75
65
|
if (redirectUrl) {
|
|
76
66
|
return new RedirectResponse(redirectUrl, {
|
|
77
67
|
status: statusCode,
|
|
78
|
-
headers
|
|
68
|
+
headers,
|
|
79
69
|
request
|
|
80
70
|
});
|
|
81
71
|
}
|
|
82
|
-
appHeaders = headers2;
|
|
83
72
|
responseStatus = statusCode;
|
|
84
73
|
const appTransformStream = new TransformStream();
|
|
85
74
|
const appWriter = appTransformStream.writable.getWriter();
|
|
@@ -113,13 +102,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
113
102
|
};
|
|
114
103
|
waitUntil(renderAppStream());
|
|
115
104
|
}
|
|
116
|
-
const
|
|
105
|
+
const body = await renderToHTMLBody(appStream);
|
|
117
106
|
return new HTMLResponse(body, {
|
|
118
107
|
status: responseStatus,
|
|
119
108
|
headers
|
|
120
109
|
});
|
|
121
|
-
async function
|
|
122
|
-
const headers2 = new Headers(appHeaders);
|
|
110
|
+
async function renderToHTMLBody(content) {
|
|
123
111
|
const [synchronousAssets, preloadAssets] = await Promise.all([
|
|
124
112
|
assets?.entry({
|
|
125
113
|
cacheKey,
|
|
@@ -131,25 +119,28 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
131
119
|
]);
|
|
132
120
|
if (synchronousAssets) {
|
|
133
121
|
for (const style of synchronousAssets.styles) {
|
|
134
|
-
|
|
122
|
+
headers.append(
|
|
135
123
|
"Link",
|
|
136
124
|
preloadHeader(styleAssetPreloadAttributes(style))
|
|
137
125
|
);
|
|
138
126
|
}
|
|
139
127
|
for (const script of synchronousAssets.scripts) {
|
|
140
|
-
|
|
128
|
+
headers.append(
|
|
141
129
|
"Link",
|
|
142
130
|
preloadHeader(scriptAssetPreloadAttributes(script))
|
|
143
131
|
);
|
|
144
132
|
}
|
|
145
133
|
}
|
|
146
|
-
if (renderHTML) {
|
|
134
|
+
if (typeof renderHTML === "function") {
|
|
147
135
|
const body3 = await renderHTML(content, {
|
|
148
136
|
manager: html,
|
|
137
|
+
headers,
|
|
149
138
|
assets: synchronousAssets,
|
|
150
139
|
preloadAssets
|
|
151
140
|
});
|
|
152
|
-
return
|
|
141
|
+
return body3;
|
|
142
|
+
} else if (renderHTML === false || renderHTML === "fragment") {
|
|
143
|
+
return content;
|
|
153
144
|
}
|
|
154
145
|
const responseStream = new TextEncoderStream();
|
|
155
146
|
const body2 = responseStream.readable;
|
|
@@ -249,7 +240,7 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
249
240
|
writer.close();
|
|
250
241
|
};
|
|
251
242
|
waitUntil(renderFullHTML());
|
|
252
|
-
return
|
|
243
|
+
return body2;
|
|
253
244
|
}
|
|
254
245
|
}
|
|
255
246
|
function preloadHeader(attributes) {
|
|
@@ -280,4 +271,4 @@ function diffBrowserAssetsEntries(newList, oldList) {
|
|
|
280
271
|
function noop(..._args) {
|
|
281
272
|
}
|
|
282
273
|
|
|
283
|
-
export {
|
|
274
|
+
export { renderToResponse };
|
|
@@ -6,5 +6,4 @@ export { parseAcceptLanguageHeader } from '@quilted/react-localize';
|
|
|
6
6
|
export { createRequestRouterLocalization } from '@quilted/react-localize/request-router';
|
|
7
7
|
export { ServerAction, useServerAction, useServerContext } from '@quilted/react-server-render';
|
|
8
8
|
export { ServerContext } from './server/ServerContext.esnext';
|
|
9
|
-
export {
|
|
10
|
-
export { createAssetPreloader } from './server/preload.esnext';
|
|
9
|
+
export { renderToResponse } from './server/request-router.esnext';
|