@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 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
- return withBrowser;
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 renderToStringWithServerContext(element, {
52
- browser: browserResponse
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 renderToStringWithServerContext(element, {
91
- browser: browserResponse
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 [synchronousAssets, preloadAssets] = await Promise.all([assets?.entry({
119
- cacheKey,
110
+ const synchronousAssets = assets?.entry({
111
+ request,
120
112
  modules: browserResponse.assets.get({
121
113
  timing: 'load'
122
114
  })
123
- }), assets?.modules(browserResponse.assets.get({
115
+ });
116
+ const preloadAssets = assets?.modules(browserResponse.assets.get({
124
117
  timing: 'preload'
125
118
  }), {
126
- cacheKey
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 [newSynchronousAssets, newPreloadAssets] = await Promise.all([assets?.entry({
190
- cacheKey,
182
+ const newSynchronousAssets = assets?.entry({
183
+ request,
191
184
  modules: browserResponse.assets.get({
192
185
  timing: 'load'
193
186
  })
194
- }), assets?.modules(browserResponse.assets.get({
187
+ });
188
+ const newPreloadAssets = assets?.modules(browserResponse.assets.get({
195
189
  timing: 'preload'
196
190
  }), {
197
- cacheKey
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, renderToStringWithServerContext };
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 };
@@ -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, renderToStringWithServerContext } from './server/request-router.mjs';
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({ browser, children }) {
4
+ function ServerContext({
5
+ browser,
6
+ assets,
7
+ children
8
+ }) {
5
9
  const withBrowser = browser ? /* @__PURE__ */ jsx(BrowserDetailsContext.Provider, { value: browser, children }) : children;
6
- return withBrowser;
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 renderToStringWithServerContext(element, {
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 renderToStringWithServerContext(element, {
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 [synchronousAssets, preloadAssets] = await Promise.all([
110
- assets?.entry({
111
- cacheKey,
112
- modules: browserResponse.assets.get({ timing: "load" })
113
- }),
114
- assets?.modules(browserResponse.assets.get({ timing: "preload" }), {
115
- cacheKey
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 [newSynchronousAssets, newPreloadAssets] = await Promise.all([
197
- assets?.entry({
198
- cacheKey,
199
- modules: browserResponse.assets.get({ timing: "load" })
200
- }),
201
- assets?.modules(browserResponse.assets.get({ timing: "preload" }), {
202
- cacheKey
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, renderToStringWithServerContext };
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, renderToStringWithServerContext } from './server/request-router.esnext';
6
+ export { renderToResponse } from './server/request-router.esnext';
7
+ export { ServerContext } from './server/ServerContext.esnext';