@quilted/quilt 0.6.13 → 0.6.15
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 +30 -0
- package/build/esm/assets.mjs +0 -1
- package/build/esm/async.mjs +2 -2
- package/build/esm/browser.mjs +2 -0
- package/build/esm/globals.mjs +3 -3
- package/build/esm/navigate.mjs +1 -1
- package/build/esm/server/ServerContext.mjs +10 -22
- package/build/esm/server/request-router.mjs +53 -95
- package/build/esm/server.mjs +1 -5
- package/build/esm/signals.mjs +1 -2
- package/build/esnext/assets.esnext +0 -1
- package/build/esnext/async.esnext +2 -2
- package/build/esnext/browser.esnext +2 -0
- package/build/esnext/globals.esnext +3 -3
- package/build/esnext/navigate.esnext +1 -1
- package/build/esnext/server/ServerContext.esnext +8 -17
- package/build/esnext/server/request-router.esnext +59 -86
- package/build/esnext/server.esnext +1 -5
- package/build/esnext/signals.esnext +1 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/typescript/assets.d.ts +0 -1
- package/build/typescript/assets.d.ts.map +1 -1
- package/build/typescript/async.d.ts +2 -4
- package/build/typescript/async.d.ts.map +1 -1
- package/build/typescript/browser.d.ts +3 -0
- package/build/typescript/browser.d.ts.map +1 -0
- package/build/typescript/globals.d.ts +2 -2
- package/build/typescript/globals.d.ts.map +1 -1
- package/build/typescript/navigate.d.ts +1 -1
- package/build/typescript/server/ServerContext.d.ts +3 -8
- package/build/typescript/server/ServerContext.d.ts.map +1 -1
- package/build/typescript/server/request-router.d.ts +9 -8
- package/build/typescript/server/request-router.d.ts.map +1 -1
- package/build/typescript/server.d.ts +1 -7
- package/build/typescript/server.d.ts.map +1 -1
- package/build/typescript/signals.d.ts +1 -2
- package/build/typescript/signals.d.ts.map +1 -1
- package/package.json +27 -32
- package/source/assets.ts +0 -1
- package/source/async.ts +13 -12
- package/source/browser.ts +5 -0
- package/source/globals.ts +4 -7
- package/source/navigate.ts +1 -1
- package/source/server/ServerContext.tsx +17 -38
- package/source/server/request-router.tsx +81 -110
- package/source/server.ts +1 -33
- package/source/signals.ts +1 -12
- package/tsconfig.json +1 -4
- package/build/esm/html/HTML.mjs +0 -19
- package/build/esm/html.mjs +0 -3
- package/build/esm/http.mjs +0 -1
- package/build/esnext/html/HTML.esnext +0 -16
- package/build/esnext/html.esnext +0 -3
- package/build/esnext/http.esnext +0 -1
- package/source/html/HTML.tsx +0 -22
- package/source/html.ts +0 -40
- package/source/http.ts +0 -37
- package/source/routing.ts +0 -24
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { isValidElement } from 'react';
|
|
3
|
-
import { renderToStaticMarkup } from '
|
|
3
|
+
import { renderToStringAsync, renderToStaticMarkup } from 'preact-render-to-string';
|
|
4
4
|
import { styleAssetPreloadAttributes, scriptAssetPreloadAttributes } from '@quilted/assets';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { HTMLManager, Head, Script, Style, StylePreload, ScriptPreload } from '@quilted/react-html/server';
|
|
8
|
-
import { extract } from '@quilted/react-server-render/server';
|
|
9
|
-
import { RedirectResponse, HTMLResponse } from '@quilted/request-router';
|
|
5
|
+
import { BrowserResponse, ScriptAsset, StyleAsset, StyleAssetPreload, ScriptAssetPreload } from '@quilted/react-browser/server';
|
|
6
|
+
import { HTMLResponse } from '@quilted/request-router';
|
|
10
7
|
import { ServerContext } from './ServerContext.esnext';
|
|
11
8
|
|
|
12
9
|
async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
@@ -21,55 +18,28 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
21
18
|
const {
|
|
22
19
|
request,
|
|
23
20
|
assets,
|
|
21
|
+
status: explicitStatus,
|
|
24
22
|
cacheKey: explicitCacheKey,
|
|
25
23
|
headers: explicitHeaders,
|
|
24
|
+
serializations: explicitSerializations,
|
|
26
25
|
waitUntil = noop,
|
|
27
26
|
stream: shouldStream = false,
|
|
28
27
|
renderHTML = true
|
|
29
28
|
} = options;
|
|
30
|
-
const
|
|
29
|
+
const baseURL = request.URL ?? new URL(request.url);
|
|
31
30
|
const cacheKey = explicitCacheKey ?? (await assets?.cacheKey?.(request) ?? {});
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const browserResponse = new BrowserResponse({
|
|
32
|
+
request,
|
|
33
|
+
cacheKey,
|
|
34
|
+
status: explicitStatus,
|
|
35
|
+
headers: new Headers(explicitHeaders),
|
|
36
|
+
serializations: explicitSerializations
|
|
37
|
+
});
|
|
36
38
|
let appStream;
|
|
37
|
-
const headers = new Headers(explicitHeaders);
|
|
38
39
|
if (shouldStream === false && element != null) {
|
|
39
|
-
const rendered = await
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
ServerContext,
|
|
43
|
-
{
|
|
44
|
-
http,
|
|
45
|
-
html,
|
|
46
|
-
url: baseUrl,
|
|
47
|
-
assets: assetsManager,
|
|
48
|
-
children: element2
|
|
49
|
-
}
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
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
|
-
}
|
|
65
|
-
if (redirectUrl) {
|
|
66
|
-
return new RedirectResponse(redirectUrl, {
|
|
67
|
-
status: statusCode,
|
|
68
|
-
headers,
|
|
69
|
-
request
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
responseStatus = statusCode;
|
|
40
|
+
const rendered = await renderToStringAsync(
|
|
41
|
+
/* @__PURE__ */ jsx(ServerContext, { browser: browserResponse, children: element })
|
|
42
|
+
);
|
|
73
43
|
const appTransformStream = new TransformStream();
|
|
74
44
|
const appWriter = appTransformStream.writable.getWriter();
|
|
75
45
|
appStream = appTransformStream.readable;
|
|
@@ -82,20 +52,9 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
82
52
|
const renderAppStream = async function renderAppStream2() {
|
|
83
53
|
const appWriter = appTransformStream.writable.getWriter();
|
|
84
54
|
if (element != null) {
|
|
85
|
-
const rendered = await
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
ServerContext,
|
|
89
|
-
{
|
|
90
|
-
http,
|
|
91
|
-
html,
|
|
92
|
-
url: baseUrl,
|
|
93
|
-
assets: assetsManager,
|
|
94
|
-
children: element2
|
|
95
|
-
}
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
55
|
+
const rendered = await renderToStringAsync(
|
|
56
|
+
/* @__PURE__ */ jsx(ServerContext, { browser: browserResponse, children: element })
|
|
57
|
+
);
|
|
99
58
|
appWriter.write(rendered);
|
|
100
59
|
}
|
|
101
60
|
appWriter.close();
|
|
@@ -104,28 +63,28 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
104
63
|
}
|
|
105
64
|
const body = await renderToHTMLBody(appStream);
|
|
106
65
|
return new HTMLResponse(body, {
|
|
107
|
-
status:
|
|
108
|
-
headers
|
|
66
|
+
status: browserResponse.status.value,
|
|
67
|
+
headers: browserResponse.headers
|
|
109
68
|
});
|
|
110
69
|
async function renderToHTMLBody(content) {
|
|
111
70
|
const [synchronousAssets, preloadAssets] = await Promise.all([
|
|
112
71
|
assets?.entry({
|
|
113
72
|
cacheKey,
|
|
114
|
-
modules:
|
|
73
|
+
modules: browserResponse.assets.get({ timing: "load" })
|
|
115
74
|
}),
|
|
116
|
-
assets?.modules(
|
|
75
|
+
assets?.modules(browserResponse.assets.get({ timing: "preload" }), {
|
|
117
76
|
cacheKey
|
|
118
77
|
})
|
|
119
78
|
]);
|
|
120
79
|
if (synchronousAssets) {
|
|
121
80
|
for (const style of synchronousAssets.styles) {
|
|
122
|
-
headers.append(
|
|
81
|
+
browserResponse.headers.append(
|
|
123
82
|
"Link",
|
|
124
83
|
preloadHeader(styleAssetPreloadAttributes(style))
|
|
125
84
|
);
|
|
126
85
|
}
|
|
127
86
|
for (const script of synchronousAssets.scripts) {
|
|
128
|
-
headers.append(
|
|
87
|
+
browserResponse.headers.append(
|
|
129
88
|
"Link",
|
|
130
89
|
preloadHeader(scriptAssetPreloadAttributes(script))
|
|
131
90
|
);
|
|
@@ -133,8 +92,7 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
133
92
|
}
|
|
134
93
|
if (typeof renderHTML === "function") {
|
|
135
94
|
const body3 = await renderHTML(content, {
|
|
136
|
-
|
|
137
|
-
headers,
|
|
95
|
+
response: browserResponse,
|
|
138
96
|
assets: synchronousAssets,
|
|
139
97
|
preloadAssets
|
|
140
98
|
});
|
|
@@ -147,26 +105,34 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
147
105
|
const renderFullHTML = async function renderFullHTML2() {
|
|
148
106
|
const writer = responseStream.writable.getWriter();
|
|
149
107
|
writer.write(`<!DOCTYPE html>`);
|
|
150
|
-
const { htmlAttributes, bodyAttributes, ...headProps } = html.state;
|
|
151
108
|
const htmlContent = renderToStaticMarkup(
|
|
152
|
-
/* @__PURE__ */ jsxs("html", { ...htmlAttributes, children: [
|
|
109
|
+
/* @__PURE__ */ jsxs("html", { ...browserResponse.htmlAttributes.value, children: [
|
|
153
110
|
/* @__PURE__ */ jsxs("head", { children: [
|
|
154
|
-
/* @__PURE__ */ jsx(
|
|
155
|
-
|
|
156
|
-
|
|
111
|
+
browserResponse.title.value && /* @__PURE__ */ jsx("title", { children: browserResponse.title.value }),
|
|
112
|
+
browserResponse.links.value.map((link, index) => /* @__PURE__ */ jsx("link", { ...link }, index)),
|
|
113
|
+
browserResponse.metas.value.map((meta, index) => /* @__PURE__ */ jsx("meta", { ...meta }, index)),
|
|
114
|
+
synchronousAssets?.scripts.map((script) => /* @__PURE__ */ jsx(
|
|
115
|
+
ScriptAsset,
|
|
116
|
+
{
|
|
117
|
+
asset: script,
|
|
118
|
+
baseURL
|
|
119
|
+
},
|
|
120
|
+
script.source
|
|
121
|
+
)),
|
|
122
|
+
synchronousAssets?.styles.map((style) => /* @__PURE__ */ jsx(StyleAsset, { asset: style, baseURL }, style.source)),
|
|
157
123
|
preloadAssets?.styles.map((style) => /* @__PURE__ */ jsx(
|
|
158
|
-
|
|
124
|
+
StyleAssetPreload,
|
|
159
125
|
{
|
|
160
126
|
asset: style,
|
|
161
|
-
|
|
127
|
+
baseURL
|
|
162
128
|
},
|
|
163
129
|
style.source
|
|
164
130
|
)),
|
|
165
131
|
preloadAssets?.scripts.map((script) => /* @__PURE__ */ jsx(
|
|
166
|
-
|
|
132
|
+
ScriptAssetPreload,
|
|
167
133
|
{
|
|
168
134
|
asset: script,
|
|
169
|
-
|
|
135
|
+
baseURL
|
|
170
136
|
},
|
|
171
137
|
script.source
|
|
172
138
|
))
|
|
@@ -174,7 +140,7 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
174
140
|
/* @__PURE__ */ jsx(
|
|
175
141
|
"body",
|
|
176
142
|
{
|
|
177
|
-
...bodyAttributes,
|
|
143
|
+
...browserResponse.bodyAttributes.value,
|
|
178
144
|
dangerouslySetInnerHTML: { __html: "%%CONTENT%%" }
|
|
179
145
|
}
|
|
180
146
|
)
|
|
@@ -197,9 +163,9 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
197
163
|
const [newSynchronousAssets, newPreloadAssets] = await Promise.all([
|
|
198
164
|
assets?.entry({
|
|
199
165
|
cacheKey,
|
|
200
|
-
modules:
|
|
166
|
+
modules: browserResponse.assets.get({ timing: "load" })
|
|
201
167
|
}),
|
|
202
|
-
assets?.modules(
|
|
168
|
+
assets?.modules(browserResponse.assets.get({ timing: "preload" }), {
|
|
203
169
|
cacheKey
|
|
204
170
|
})
|
|
205
171
|
]);
|
|
@@ -214,21 +180,28 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
214
180
|
);
|
|
215
181
|
const additionalAssetsContent = renderToStaticMarkup(
|
|
216
182
|
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
217
|
-
diffedSynchronousAssets.scripts.map((script) => /* @__PURE__ */ jsx(
|
|
218
|
-
|
|
183
|
+
diffedSynchronousAssets.scripts.map((script) => /* @__PURE__ */ jsx(
|
|
184
|
+
ScriptAsset,
|
|
185
|
+
{
|
|
186
|
+
asset: script,
|
|
187
|
+
baseURL
|
|
188
|
+
},
|
|
189
|
+
script.source
|
|
190
|
+
)),
|
|
191
|
+
diffedSynchronousAssets.styles.map((style) => /* @__PURE__ */ jsx(StyleAsset, { asset: style, baseURL }, style.source)),
|
|
219
192
|
diffedPreloadAssets.styles.map((style) => /* @__PURE__ */ jsx(
|
|
220
|
-
|
|
193
|
+
StyleAssetPreload,
|
|
221
194
|
{
|
|
222
195
|
asset: style,
|
|
223
|
-
|
|
196
|
+
baseURL
|
|
224
197
|
},
|
|
225
198
|
style.source
|
|
226
199
|
)),
|
|
227
200
|
diffedPreloadAssets.scripts.map((script) => /* @__PURE__ */ jsx(
|
|
228
|
-
|
|
201
|
+
ScriptAssetPreload,
|
|
229
202
|
{
|
|
230
203
|
asset: script,
|
|
231
|
-
|
|
204
|
+
baseURL
|
|
232
205
|
},
|
|
233
206
|
script.source
|
|
234
207
|
))
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { ServerRenderManager, ServerRenderManagerContext, extract } from '@quilted/react-server-render/server';
|
|
1
|
+
export * from '@quilted/react-browser/server';
|
|
3
2
|
export { BrowserAssetsFromManifests, createBrowserAssetsEntryFromManifest, scriptAssetAttributes, scriptAssetPreloadAttributes, styleAssetAttributes, styleAssetPreloadAttributes } from '@quilted/assets';
|
|
4
|
-
export { SERVER_ACTION_ID as ASSETS_SERVER_ACTION_ID, AssetsContext, AssetsManager, useAssetsCacheKey, useModuleAssets } from '@quilted/react-assets/server';
|
|
5
3
|
export { parseAcceptLanguageHeader } from '@quilted/react-localize';
|
|
6
4
|
export { createRequestRouterLocalization } from '@quilted/react-localize/request-router';
|
|
7
|
-
export { ServerAction, useServerAction, useServerContext } from '@quilted/react-server-render';
|
|
8
|
-
export { ServerContext } from './server/ServerContext.esnext';
|
|
9
5
|
export { renderToResponse } from './server/request-router.esnext';
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { useComputed, useSignal, useSignalEffect } from '@quilted/react-signals';
|
|
1
|
+
export * from '@quilted/react-signals';
|