@quilted/quilt 0.8.5 → 0.8.7

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.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [`58cd0f9`](https://github.com/lemonmade/quilt/commit/58cd0f93429b3a0a11353303756deb3d3f9c9903) Thanks [@lemonmade](https://github.com/lemonmade)! - Make browser elements render natively for HTML renders
8
+
9
+ - Updated dependencies [[`479fa1f`](https://github.com/lemonmade/quilt/commit/479fa1f923c9e968a248f23c146be8255347533c), [`58cd0f9`](https://github.com/lemonmade/quilt/commit/58cd0f93429b3a0a11353303756deb3d3f9c9903)]:
10
+ - @quilted/preact-browser@0.1.11
11
+ - @quilted/preact-localize@0.3.4
12
+
13
+ ## 0.8.6
14
+
15
+ ### Patch Changes
16
+
17
+ - [`d409c19`](https://github.com/lemonmade/quilt/commit/d409c1930834449160e90b6bedf0fe3f7325d4b0) Thanks [@lemonmade](https://github.com/lemonmade)! - Add more server rendering hooks
18
+
19
+ - 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)]:
20
+ - @quilted/async@0.4.22
21
+ - @quilted/preact-browser@0.1.10
22
+ - @quilted/graphql@3.3.8
23
+
3
24
  ## 0.8.5
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 };
@@ -1,20 +1,11 @@
1
1
  import { isValidElement } from 'preact';
2
2
  import { renderToStringAsync, renderToStaticMarkup } from 'preact-render-to-string';
3
3
  import { styleAssetPreloadAttributes, scriptAssetPreloadAttributes } from '@quilted/assets';
4
- import { BrowserResponse, ScriptAsset, StyleAsset, StyleAssetPreload, ScriptAssetPreload } from '@quilted/preact-browser/server';
4
+ import { BrowserResponse, BrowserEffectsAreActiveContext, Title, Link, Meta, Serialization, ScriptAsset, StyleAsset, StyleAssetPreload, ScriptAssetPreload } from '@quilted/preact-browser/server';
5
5
  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;
@@ -45,9 +36,11 @@ 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(jsx(ServerContext, {
40
+ assets: assets,
41
+ browser: browserResponse,
42
+ children: element
43
+ }));
51
44
  } catch (error) {
52
45
  if (error instanceof Response) {
53
46
  const mergedHeaders = new Headers(browserResponse.headers);
@@ -84,9 +77,11 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
84
77
  // this, they will explicitly turn on streaming and will have to use some in-app
85
78
  // to manually handle redirects (e.g., by rendering a script tag that uses JavaScript
86
79
  // to redirect)
87
- const rendered = await renderToStringWithServerContext(element, {
88
- browser: browserResponse
89
- });
80
+ const rendered = await renderToStringAsync(jsx(ServerContext, {
81
+ assets: assets,
82
+ browser: browserResponse,
83
+ children: element
84
+ }));
90
85
  appWriter.write(rendered);
91
86
  }
92
87
  appWriter.close();
@@ -131,43 +126,43 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
131
126
  browserResponse.headers.append('Link', preloadHeader(scriptAssetPreloadAttributes(script)));
132
127
  }
133
128
  }
134
- const htmlContent = renderToStaticMarkup(jsxs("html", {
135
- ...browserResponse.htmlAttributes.value,
136
- children: [jsxs("head", {
137
- children: [browserResponse.title.value && jsx("title", {
138
- children: browserResponse.title.value
139
- }), browserResponse.links.value.map(link => jsx("link", {
140
- ...link
141
- })), browserResponse.metas.value.map(meta => jsx("meta", {
142
- ...meta
143
- })), browserResponse.serializations.value.map(({
144
- name,
145
- content
146
- }) =>
147
- // @ts-expect-error a custom element that I don’t want to define,
148
- // since it’s an optional part of the browser library.
149
- jsx("browser-serialization", {
150
- name: name,
151
- content: JSON.stringify(content)
152
- })), synchronousAssets?.scripts.map(script => jsx(ScriptAsset, {
153
- asset: script,
154
- baseURL: baseURL
155
- }, script.source)), synchronousAssets?.styles.map(style => jsx(StyleAsset, {
156
- asset: style,
157
- baseURL: baseURL
158
- }, style.source)), preloadAssets?.styles.map(style => jsx(StyleAssetPreload, {
159
- asset: style,
160
- baseURL: baseURL
161
- }, style.source)), preloadAssets?.scripts.map(script => jsx(ScriptAssetPreload, {
162
- asset: script,
163
- baseURL: baseURL
164
- }, script.source))]
165
- }), jsx("body", {
166
- ...browserResponse.bodyAttributes.value,
167
- dangerouslySetInnerHTML: {
168
- __html: '%%CONTENT%%'
169
- }
170
- })]
129
+ const htmlContent = renderToStaticMarkup(jsx(BrowserEffectsAreActiveContext.Provider, {
130
+ value: false,
131
+ children: jsxs("html", {
132
+ ...browserResponse.htmlAttributes.value,
133
+ children: [jsxs("head", {
134
+ children: [jsx(Title, {
135
+ children: browserResponse.title.value
136
+ }), browserResponse.links.value.map(link => jsx(Link, {
137
+ ...link
138
+ })), browserResponse.metas.value.map(meta => jsx(Meta, {
139
+ ...meta
140
+ })), browserResponse.serializations.value.map(({
141
+ name,
142
+ content
143
+ }) => jsx(Serialization, {
144
+ name: name,
145
+ content: content
146
+ })), synchronousAssets?.scripts.map(script => jsx(ScriptAsset, {
147
+ asset: script,
148
+ baseURL: baseURL
149
+ }, script.source)), synchronousAssets?.styles.map(style => jsx(StyleAsset, {
150
+ asset: style,
151
+ baseURL: baseURL
152
+ }, style.source)), preloadAssets?.styles.map(style => jsx(StyleAssetPreload, {
153
+ asset: style,
154
+ baseURL: baseURL
155
+ }, style.source)), preloadAssets?.scripts.map(script => jsx(ScriptAssetPreload, {
156
+ asset: script,
157
+ baseURL: baseURL
158
+ }, script.source))]
159
+ }), jsx("body", {
160
+ ...browserResponse.bodyAttributes.value,
161
+ dangerouslySetInnerHTML: {
162
+ __html: '%%CONTENT%%'
163
+ }
164
+ })]
165
+ })
171
166
  }));
172
167
  const [firstChunk, secondChunk] = htmlContent.split('%%CONTENT%%');
173
168
  writer.write(firstChunk);
@@ -253,4 +248,4 @@ function noop(..._args) {
253
248
  // noop
254
249
  }
255
250
 
256
- 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 };
@@ -2,16 +2,10 @@ import { jsx, jsxs, Fragment } from 'preact/jsx-runtime';
2
2
  import { isValidElement } from 'preact';
3
3
  import { renderToStringAsync, renderToStaticMarkup } from 'preact-render-to-string';
4
4
  import { styleAssetPreloadAttributes, scriptAssetPreloadAttributes } from '@quilted/assets';
5
- import { BrowserResponse, ScriptAsset, StyleAsset, StyleAssetPreload, ScriptAssetPreload } from '@quilted/preact-browser/server';
5
+ import { BrowserResponse, BrowserEffectsAreActiveContext, Title, Link, Meta, Serialization, ScriptAsset, StyleAsset, StyleAssetPreload, ScriptAssetPreload } from '@quilted/preact-browser/server';
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;
@@ -42,9 +36,9 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
42
36
  if (shouldStream === false && element != null) {
43
37
  let rendered;
44
38
  try {
45
- rendered = await renderToStringWithServerContext(element, {
46
- browser: browserResponse
47
- });
39
+ rendered = await renderToStringAsync(
40
+ /* @__PURE__ */ jsx(ServerContext, { assets, browser: browserResponse, children: element })
41
+ );
48
42
  } catch (error) {
49
43
  if (error instanceof Response) {
50
44
  const mergedHeaders = new Headers(browserResponse.headers);
@@ -75,9 +69,9 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
75
69
  const renderAppStream = async function renderAppStream2() {
76
70
  const appWriter = appTransformStream.writable.getWriter();
77
71
  if (element != null) {
78
- const rendered = await renderToStringWithServerContext(element, {
79
- browser: browserResponse
80
- });
72
+ const rendered = await renderToStringAsync(
73
+ /* @__PURE__ */ jsx(ServerContext, { assets, browser: browserResponse, children: element })
74
+ );
81
75
  appWriter.write(rendered);
82
76
  }
83
77
  appWriter.close();
@@ -128,22 +122,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
128
122
  }
129
123
  }
130
124
  const htmlContent = renderToStaticMarkup(
131
- /* @__PURE__ */ jsxs("html", { ...browserResponse.htmlAttributes.value, children: [
125
+ /* @__PURE__ */ jsx(BrowserEffectsAreActiveContext.Provider, { value: false, children: /* @__PURE__ */ jsxs("html", { ...browserResponse.htmlAttributes.value, children: [
132
126
  /* @__PURE__ */ jsxs("head", { children: [
133
- browserResponse.title.value && /* @__PURE__ */ jsx("title", { children: browserResponse.title.value }),
134
- browserResponse.links.value.map((link) => /* @__PURE__ */ jsx("link", { ...link })),
135
- browserResponse.metas.value.map((meta) => /* @__PURE__ */ jsx("meta", { ...meta })),
136
- browserResponse.serializations.value.map(({ name, content: content2 }) => (
137
- // @ts-expect-error a custom element that I don’t want to define,
138
- // since it’s an optional part of the browser library.
139
- /* @__PURE__ */ jsx(
140
- "browser-serialization",
141
- {
142
- name,
143
- content: JSON.stringify(content2)
144
- }
145
- )
146
- )),
127
+ /* @__PURE__ */ jsx(Title, { children: browserResponse.title.value }),
128
+ browserResponse.links.value.map((link) => /* @__PURE__ */ jsx(Link, { ...link })),
129
+ browserResponse.metas.value.map((meta) => /* @__PURE__ */ jsx(Meta, { ...meta })),
130
+ browserResponse.serializations.value.map(({ name, content: content2 }) => /* @__PURE__ */ jsx(Serialization, { name, content: content2 })),
147
131
  synchronousAssets?.scripts.map((script) => /* @__PURE__ */ jsx(
148
132
  ScriptAsset,
149
133
  {
@@ -152,7 +136,14 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
152
136
  },
153
137
  script.source
154
138
  )),
155
- synchronousAssets?.styles.map((style) => /* @__PURE__ */ jsx(StyleAsset, { asset: style, baseURL }, style.source)),
139
+ synchronousAssets?.styles.map((style) => /* @__PURE__ */ jsx(
140
+ StyleAsset,
141
+ {
142
+ asset: style,
143
+ baseURL
144
+ },
145
+ style.source
146
+ )),
156
147
  preloadAssets?.styles.map((style) => /* @__PURE__ */ jsx(
157
148
  StyleAssetPreload,
158
149
  {
@@ -177,7 +168,7 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
177
168
  dangerouslySetInnerHTML: { __html: "%%CONTENT%%" }
178
169
  }
179
170
  )
180
- ] })
171
+ ] }) })
181
172
  );
182
173
  const [firstChunk, secondChunk] = htmlContent.split("%%CONTENT%%");
183
174
  writer.write(firstChunk);
@@ -276,4 +267,4 @@ function diffBrowserAssetsEntries(newList, oldList) {
276
267
  function noop(..._args) {
277
268
  }
278
269
 
279
- export { renderToResponse, renderToStringWithServerContext };
270
+ 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';