@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 +21 -0
- package/build/esm/server/ServerContext.mjs +7 -2
- package/build/esm/server/request-router.mjs +49 -54
- 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 +22 -31
- package/build/esnext/server.browser.esnext +4 -1
- package/build/esnext/server.esnext +2 -1
- package/build/tsconfig.tsbuildinfo +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 +1 -4
- 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/server/ServerContext.tsx +18 -2
- package/source/server/request-router.tsx +64 -68
- 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.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
|
-
|
|
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
|
|
49
|
-
|
|
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
|
|
88
|
-
|
|
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(
|
|
135
|
-
|
|
136
|
-
children:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
},
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
|
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 };
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
134
|
-
browserResponse.links.value.map((link) => /* @__PURE__ */ jsx(
|
|
135
|
-
browserResponse.metas.value.map((meta) => /* @__PURE__ */ jsx(
|
|
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(
|
|
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
|
|
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
|
|
6
|
+
export { renderToResponse } from './server/request-router.esnext';
|
|
7
|
+
export { ServerContext } from './server/ServerContext.esnext';
|