@quilted/quilt 0.8.4 → 0.8.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/CHANGELOG.md +21 -0
- package/build/esm/server/ServerContext.mjs +7 -2
- package/build/esm/server/request-router.mjs +23 -29
- package/build/esm/server.browser.mjs +4 -1
- package/build/esm/server.mjs +2 -1
- package/build/esnext/server/ServerContext.esnext +8 -3
- package/build/esnext/server/request-router.esnext +27 -34
- package/build/esnext/server.browser.esnext +4 -1
- package/build/esnext/server.esnext +2 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/typescript/assets.d.ts +0 -5
- package/build/typescript/assets.d.ts.map +1 -1
- package/build/typescript/modules.d.ts +2 -2
- package/build/typescript/modules.d.ts.map +1 -1
- package/build/typescript/server/ServerContext.d.ts +3 -1
- package/build/typescript/server/ServerContext.d.ts.map +1 -1
- package/build/typescript/server/request-router.d.ts +2 -6
- package/build/typescript/server/request-router.d.ts.map +1 -1
- package/build/typescript/server.browser.d.ts +2 -0
- package/build/typescript/server.browser.d.ts.map +1 -1
- package/build/typescript/server.d.ts +2 -1
- package/build/typescript/server.d.ts.map +1 -1
- package/package.json +5 -5
- package/source/assets.ts +0 -6
- package/source/modules.ts +2 -5
- package/source/server/ServerContext.tsx +18 -2
- package/source/server/request-router.tsx +31 -44
- package/source/server.browser.ts +5 -0
- package/source/server.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @quilted/quilt
|
|
2
2
|
|
|
3
|
+
## 0.8.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`d409c19`](https://github.com/lemonmade/quilt/commit/d409c1930834449160e90b6bedf0fe3f7325d4b0) Thanks [@lemonmade](https://github.com/lemonmade)! - Add more server rendering hooks
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`c365777`](https://github.com/lemonmade/quilt/commit/c365777123caf40d2e08aa405180ea9efbd34cac), [`d409c19`](https://github.com/lemonmade/quilt/commit/d409c1930834449160e90b6bedf0fe3f7325d4b0), [`5a8036d`](https://github.com/lemonmade/quilt/commit/5a8036d39d93c576812428ecc8fe537a30696dba)]:
|
|
10
|
+
- @quilted/async@0.4.22
|
|
11
|
+
- @quilted/preact-browser@0.1.10
|
|
12
|
+
- @quilted/graphql@3.3.8
|
|
13
|
+
|
|
14
|
+
## 0.8.5
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- [`ed66780`](https://github.com/lemonmade/quilt/commit/ed66780bfe57daa031d92d0787bde2f424536e30) Thanks [@lemonmade](https://github.com/lemonmade)! - Remove cache key and simplify browser assets type
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [[`ed66780`](https://github.com/lemonmade/quilt/commit/ed66780bfe57daa031d92d0787bde2f424536e30)]:
|
|
21
|
+
- @quilted/preact-browser@0.1.9
|
|
22
|
+
- @quilted/assets@0.1.5
|
|
23
|
+
|
|
3
24
|
## 0.8.4
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
import { BrowserDetailsContext } from '@quilted/preact-browser/server';
|
|
1
|
+
import { BrowserDetailsContext, BrowserAssetsManifestContext } from '@quilted/preact-browser/server';
|
|
2
2
|
import { jsx } from 'preact/jsx-runtime';
|
|
3
3
|
|
|
4
4
|
function ServerContext({
|
|
5
5
|
browser,
|
|
6
|
+
assets,
|
|
6
7
|
children
|
|
7
8
|
}) {
|
|
8
9
|
const withBrowser = browser ? jsx(BrowserDetailsContext.Provider, {
|
|
9
10
|
value: browser,
|
|
10
11
|
children: children
|
|
11
12
|
}) : children;
|
|
12
|
-
|
|
13
|
+
const withAssets = assets ? jsx(BrowserAssetsManifestContext.Provider, {
|
|
14
|
+
value: assets,
|
|
15
|
+
children: withBrowser
|
|
16
|
+
}) : withBrowser;
|
|
17
|
+
return withAssets;
|
|
13
18
|
}
|
|
14
19
|
|
|
15
20
|
export { ServerContext };
|
|
@@ -6,15 +6,6 @@ import { EnhancedResponse, HTMLResponse } from '@quilted/request-router';
|
|
|
6
6
|
import { ServerContext } from './ServerContext.mjs';
|
|
7
7
|
import { jsx, jsxs, Fragment } from 'preact/jsx-runtime';
|
|
8
8
|
|
|
9
|
-
async function renderToStringWithServerContext(element, {
|
|
10
|
-
browser
|
|
11
|
-
} = {}) {
|
|
12
|
-
const rendered = await renderToStringAsync(jsx(ServerContext, {
|
|
13
|
-
browser: browser,
|
|
14
|
-
children: element
|
|
15
|
-
}));
|
|
16
|
-
return rendered;
|
|
17
|
-
}
|
|
18
9
|
async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
19
10
|
let element;
|
|
20
11
|
let options;
|
|
@@ -28,7 +19,6 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
28
19
|
request,
|
|
29
20
|
assets,
|
|
30
21
|
status: explicitStatus,
|
|
31
|
-
cacheKey: explicitCacheKey,
|
|
32
22
|
headers: explicitHeaders,
|
|
33
23
|
serializations: explicitSerializations,
|
|
34
24
|
waitUntil = noop,
|
|
@@ -36,10 +26,8 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
36
26
|
renderHTML = true
|
|
37
27
|
} = options;
|
|
38
28
|
const baseURL = request.URL ?? new URL(request.url);
|
|
39
|
-
const cacheKey = explicitCacheKey ?? (await assets?.cacheKey?.(request)) ?? {};
|
|
40
29
|
const browserResponse = new BrowserResponse({
|
|
41
30
|
request,
|
|
42
|
-
cacheKey,
|
|
43
31
|
status: explicitStatus,
|
|
44
32
|
headers: new Headers(explicitHeaders),
|
|
45
33
|
serializations: explicitSerializations
|
|
@@ -48,9 +36,11 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
48
36
|
if (shouldStream === false && element != null) {
|
|
49
37
|
let rendered;
|
|
50
38
|
try {
|
|
51
|
-
rendered = await
|
|
52
|
-
|
|
53
|
-
|
|
39
|
+
rendered = await renderToStringAsync(jsx(ServerContext, {
|
|
40
|
+
assets: assets,
|
|
41
|
+
browser: browserResponse,
|
|
42
|
+
children: element
|
|
43
|
+
}));
|
|
54
44
|
} catch (error) {
|
|
55
45
|
if (error instanceof Response) {
|
|
56
46
|
const mergedHeaders = new Headers(browserResponse.headers);
|
|
@@ -87,9 +77,11 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
87
77
|
// this, they will explicitly turn on streaming and will have to use some in-app
|
|
88
78
|
// to manually handle redirects (e.g., by rendering a script tag that uses JavaScript
|
|
89
79
|
// to redirect)
|
|
90
|
-
const rendered = await
|
|
91
|
-
|
|
92
|
-
|
|
80
|
+
const rendered = await renderToStringAsync(jsx(ServerContext, {
|
|
81
|
+
assets: assets,
|
|
82
|
+
browser: browserResponse,
|
|
83
|
+
children: element
|
|
84
|
+
}));
|
|
93
85
|
appWriter.write(rendered);
|
|
94
86
|
}
|
|
95
87
|
appWriter.close();
|
|
@@ -115,16 +107,17 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
115
107
|
const renderFullHTML = async function renderFullHTML() {
|
|
116
108
|
const writer = responseStream.writable.getWriter();
|
|
117
109
|
writer.write(`<!DOCTYPE html>`);
|
|
118
|
-
const
|
|
119
|
-
|
|
110
|
+
const synchronousAssets = assets?.entry({
|
|
111
|
+
request,
|
|
120
112
|
modules: browserResponse.assets.get({
|
|
121
113
|
timing: 'load'
|
|
122
114
|
})
|
|
123
|
-
})
|
|
115
|
+
});
|
|
116
|
+
const preloadAssets = assets?.modules(browserResponse.assets.get({
|
|
124
117
|
timing: 'preload'
|
|
125
118
|
}), {
|
|
126
|
-
|
|
127
|
-
})
|
|
119
|
+
request
|
|
120
|
+
});
|
|
128
121
|
if (synchronousAssets) {
|
|
129
122
|
for (const style of synchronousAssets.styles) {
|
|
130
123
|
browserResponse.headers.append('Link', preloadHeader(styleAssetPreloadAttributes(style)));
|
|
@@ -186,16 +179,17 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
186
179
|
writer.write(value);
|
|
187
180
|
}
|
|
188
181
|
if (element != null) writer.write(`</div>`);
|
|
189
|
-
const
|
|
190
|
-
|
|
182
|
+
const newSynchronousAssets = assets?.entry({
|
|
183
|
+
request,
|
|
191
184
|
modules: browserResponse.assets.get({
|
|
192
185
|
timing: 'load'
|
|
193
186
|
})
|
|
194
|
-
})
|
|
187
|
+
});
|
|
188
|
+
const newPreloadAssets = assets?.modules(browserResponse.assets.get({
|
|
195
189
|
timing: 'preload'
|
|
196
190
|
}), {
|
|
197
|
-
|
|
198
|
-
})
|
|
191
|
+
request
|
|
192
|
+
});
|
|
199
193
|
if (newSynchronousAssets) {
|
|
200
194
|
const diffedSynchronousAssets = diffBrowserAssetsEntries(newSynchronousAssets, synchronousAssets);
|
|
201
195
|
const diffedPreloadAssets = diffBrowserAssetsEntries(newPreloadAssets, preloadAssets);
|
|
@@ -254,4 +248,4 @@ function noop(..._args) {
|
|
|
254
248
|
// noop
|
|
255
249
|
}
|
|
256
250
|
|
|
257
|
-
export { renderToResponse
|
|
251
|
+
export { renderToResponse };
|
|
@@ -5,5 +5,8 @@ export { parseAcceptLanguageHeader } from '@quilted/preact-localize';
|
|
|
5
5
|
function noopRenderToString() {}
|
|
6
6
|
function noopCreateRequestRouterLocalization() {}
|
|
7
7
|
function noopRenderToResponse() {}
|
|
8
|
+
function NoopServerContext() {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
8
11
|
|
|
9
|
-
export { noopCreateRequestRouterLocalization as createRequestRouterLocalization, noopRenderToResponse as renderToResponse, noopRenderToString as renderToStaticMarkup, noopRenderToString as renderToString, noopRenderToString as renderToStringAsync };
|
|
12
|
+
export { NoopServerContext as ServerContext, noopCreateRequestRouterLocalization as createRequestRouterLocalization, noopRenderToResponse as renderToResponse, noopRenderToString as renderToStaticMarkup, noopRenderToString as renderToString, noopRenderToString as renderToStringAsync };
|
package/build/esm/server.mjs
CHANGED
|
@@ -3,4 +3,5 @@ export * from '@quilted/preact-browser/server';
|
|
|
3
3
|
export * from '@quilted/assets';
|
|
4
4
|
export { parseAcceptLanguageHeader } from '@quilted/preact-localize';
|
|
5
5
|
export { createRequestRouterLocalization } from '@quilted/preact-localize/request-router';
|
|
6
|
-
export { renderToResponse
|
|
6
|
+
export { renderToResponse } from './server/request-router.mjs';
|
|
7
|
+
export { ServerContext } from './server/ServerContext.mjs';
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { jsx } from 'preact/jsx-runtime';
|
|
2
|
-
import { BrowserDetailsContext } from '@quilted/preact-browser/server';
|
|
2
|
+
import { BrowserDetailsContext, BrowserAssetsManifestContext } from '@quilted/preact-browser/server';
|
|
3
3
|
|
|
4
|
-
function ServerContext({
|
|
4
|
+
function ServerContext({
|
|
5
|
+
browser,
|
|
6
|
+
assets,
|
|
7
|
+
children
|
|
8
|
+
}) {
|
|
5
9
|
const withBrowser = browser ? /* @__PURE__ */ jsx(BrowserDetailsContext.Provider, { value: browser, children }) : children;
|
|
6
|
-
|
|
10
|
+
const withAssets = assets ? /* @__PURE__ */ jsx(BrowserAssetsManifestContext.Provider, { value: assets, children: withBrowser }) : withBrowser;
|
|
11
|
+
return withAssets;
|
|
7
12
|
}
|
|
8
13
|
|
|
9
14
|
export { ServerContext };
|
|
@@ -6,12 +6,6 @@ import { BrowserResponse, ScriptAsset, StyleAsset, StyleAssetPreload, ScriptAsse
|
|
|
6
6
|
import { EnhancedResponse, HTMLResponse } from '@quilted/request-router';
|
|
7
7
|
import { ServerContext } from './ServerContext.esnext';
|
|
8
8
|
|
|
9
|
-
async function renderToStringWithServerContext(element, { browser } = {}) {
|
|
10
|
-
const rendered = await renderToStringAsync(
|
|
11
|
-
/* @__PURE__ */ jsx(ServerContext, { browser, children: element })
|
|
12
|
-
);
|
|
13
|
-
return rendered;
|
|
14
|
-
}
|
|
15
9
|
async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
16
10
|
let element;
|
|
17
11
|
let options;
|
|
@@ -25,7 +19,6 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
25
19
|
request,
|
|
26
20
|
assets,
|
|
27
21
|
status: explicitStatus,
|
|
28
|
-
cacheKey: explicitCacheKey,
|
|
29
22
|
headers: explicitHeaders,
|
|
30
23
|
serializations: explicitSerializations,
|
|
31
24
|
waitUntil = noop,
|
|
@@ -33,10 +26,8 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
33
26
|
renderHTML = true
|
|
34
27
|
} = options;
|
|
35
28
|
const baseURL = request.URL ?? new URL(request.url);
|
|
36
|
-
const cacheKey = explicitCacheKey ?? (await assets?.cacheKey?.(request) ?? {});
|
|
37
29
|
const browserResponse = new BrowserResponse({
|
|
38
30
|
request,
|
|
39
|
-
cacheKey,
|
|
40
31
|
status: explicitStatus,
|
|
41
32
|
headers: new Headers(explicitHeaders),
|
|
42
33
|
serializations: explicitSerializations
|
|
@@ -45,9 +36,9 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
45
36
|
if (shouldStream === false && element != null) {
|
|
46
37
|
let rendered;
|
|
47
38
|
try {
|
|
48
|
-
rendered = await
|
|
49
|
-
browser: browserResponse
|
|
50
|
-
|
|
39
|
+
rendered = await renderToStringAsync(
|
|
40
|
+
/* @__PURE__ */ jsx(ServerContext, { assets, browser: browserResponse, children: element })
|
|
41
|
+
);
|
|
51
42
|
} catch (error) {
|
|
52
43
|
if (error instanceof Response) {
|
|
53
44
|
const mergedHeaders = new Headers(browserResponse.headers);
|
|
@@ -78,9 +69,9 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
78
69
|
const renderAppStream = async function renderAppStream2() {
|
|
79
70
|
const appWriter = appTransformStream.writable.getWriter();
|
|
80
71
|
if (element != null) {
|
|
81
|
-
const rendered = await
|
|
82
|
-
browser: browserResponse
|
|
83
|
-
|
|
72
|
+
const rendered = await renderToStringAsync(
|
|
73
|
+
/* @__PURE__ */ jsx(ServerContext, { assets, browser: browserResponse, children: element })
|
|
74
|
+
);
|
|
84
75
|
appWriter.write(rendered);
|
|
85
76
|
}
|
|
86
77
|
appWriter.close();
|
|
@@ -106,15 +97,16 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
106
97
|
const renderFullHTML = async function renderFullHTML2() {
|
|
107
98
|
const writer = responseStream.writable.getWriter();
|
|
108
99
|
writer.write(`<!DOCTYPE html>`);
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
100
|
+
const synchronousAssets = assets?.entry({
|
|
101
|
+
request,
|
|
102
|
+
modules: browserResponse.assets.get({ timing: "load" })
|
|
103
|
+
});
|
|
104
|
+
const preloadAssets = assets?.modules(
|
|
105
|
+
browserResponse.assets.get({ timing: "preload" }),
|
|
106
|
+
{
|
|
107
|
+
request
|
|
108
|
+
}
|
|
109
|
+
);
|
|
118
110
|
if (synchronousAssets) {
|
|
119
111
|
for (const style of synchronousAssets.styles) {
|
|
120
112
|
browserResponse.headers.append(
|
|
@@ -193,15 +185,16 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
|
|
|
193
185
|
writer.write(value);
|
|
194
186
|
}
|
|
195
187
|
if (element != null) writer.write(`</div>`);
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
188
|
+
const newSynchronousAssets = assets?.entry({
|
|
189
|
+
request,
|
|
190
|
+
modules: browserResponse.assets.get({ timing: "load" })
|
|
191
|
+
});
|
|
192
|
+
const newPreloadAssets = assets?.modules(
|
|
193
|
+
browserResponse.assets.get({ timing: "preload" }),
|
|
194
|
+
{
|
|
195
|
+
request
|
|
196
|
+
}
|
|
197
|
+
);
|
|
205
198
|
if (newSynchronousAssets) {
|
|
206
199
|
const diffedSynchronousAssets = diffBrowserAssetsEntries(
|
|
207
200
|
newSynchronousAssets,
|
|
@@ -277,4 +270,4 @@ function diffBrowserAssetsEntries(newList, oldList) {
|
|
|
277
270
|
function noop(..._args) {
|
|
278
271
|
}
|
|
279
272
|
|
|
280
|
-
export { renderToResponse
|
|
273
|
+
export { renderToResponse };
|
|
@@ -8,5 +8,8 @@ function noopCreateRequestRouterLocalization() {
|
|
|
8
8
|
}
|
|
9
9
|
function noopRenderToResponse() {
|
|
10
10
|
}
|
|
11
|
+
function NoopServerContext() {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
11
14
|
|
|
12
|
-
export { noopCreateRequestRouterLocalization as createRequestRouterLocalization, noopRenderToResponse as renderToResponse, noopRenderToString as renderToStaticMarkup, noopRenderToString as renderToString, noopRenderToString as renderToStringAsync };
|
|
15
|
+
export { NoopServerContext as ServerContext, noopCreateRequestRouterLocalization as createRequestRouterLocalization, noopRenderToResponse as renderToResponse, noopRenderToString as renderToStaticMarkup, noopRenderToString as renderToString, noopRenderToString as renderToStringAsync };
|
|
@@ -3,4 +3,5 @@ export * from '@quilted/preact-browser/server';
|
|
|
3
3
|
export * from '@quilted/assets';
|
|
4
4
|
export { parseAcceptLanguageHeader } from '@quilted/preact-localize';
|
|
5
5
|
export { createRequestRouterLocalization } from '@quilted/preact-localize/request-router';
|
|
6
|
-
export { renderToResponse
|
|
6
|
+
export { renderToResponse } from './server/request-router.esnext';
|
|
7
|
+
export { ServerContext } from './server/ServerContext.esnext';
|