@quilted/quilt 0.6.11 → 0.6.13

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/esm/react.mjs +1 -2
  3. package/build/esm/server/ServerContext.mjs +18 -2
  4. package/build/esm/server/request-router.mjs +25 -57
  5. package/build/esm/server.mjs +1 -2
  6. package/build/esnext/react.esnext +1 -2
  7. package/build/esnext/server/ServerContext.esnext +6 -14
  8. package/build/esnext/server/request-router.esnext +28 -37
  9. package/build/esnext/server.esnext +1 -2
  10. package/build/tsconfig.tsbuildinfo +1 -1
  11. package/build/typescript/react.d.ts +1 -2
  12. package/build/typescript/react.d.ts.map +1 -1
  13. package/build/typescript/request-router.d.ts +2 -0
  14. package/build/typescript/request-router.d.ts.map +1 -0
  15. package/build/typescript/server/ServerContext.d.ts +1 -1
  16. package/build/typescript/server/ServerContext.d.ts.map +1 -1
  17. package/build/typescript/server/request-router.d.ts +10 -6
  18. package/build/typescript/server/request-router.d.ts.map +1 -1
  19. package/build/typescript/server.d.ts +1 -2
  20. package/build/typescript/server.d.ts.map +1 -1
  21. package/package.json +9 -19
  22. package/source/react.ts +1 -4
  23. package/source/server/ServerContext.tsx +30 -14
  24. package/source/server/request-router.tsx +41 -53
  25. package/source/server.ts +1 -8
  26. package/tsconfig.json +0 -1
  27. package/build/esm/react/tools.mjs +0 -2
  28. package/build/esm/server/preload.mjs +0 -35
  29. package/build/esm/utilities/react.mjs +0 -10
  30. package/build/esnext/react/tools.esnext +0 -2
  31. package/build/esnext/server/preload.esnext +0 -34
  32. package/build/esnext/utilities/react.esnext +0 -7
  33. package/build/typescript/react/jsx-runtime.d.ts +0 -2
  34. package/build/typescript/react/jsx-runtime.d.ts.map +0 -1
  35. package/build/typescript/react/tools.d.ts +0 -3
  36. package/build/typescript/react/tools.d.ts.map +0 -1
  37. package/build/typescript/react-dom/server.d.ts +0 -2
  38. package/build/typescript/react-dom/server.d.ts.map +0 -1
  39. package/build/typescript/react-dom/test-utils.d.ts +0 -2
  40. package/build/typescript/react-dom/test-utils.d.ts.map +0 -1
  41. package/build/typescript/react-dom.d.ts +0 -3
  42. package/build/typescript/react-dom.d.ts.map +0 -1
  43. package/build/typescript/request-router/index.d.ts +0 -2
  44. package/build/typescript/request-router/index.d.ts.map +0 -1
  45. package/build/typescript/server/preload.d.ts +0 -8
  46. package/build/typescript/server/preload.d.ts.map +0 -1
  47. package/build/typescript/utilities/react.d.ts +0 -3
  48. package/build/typescript/utilities/react.d.ts.map +0 -1
  49. package/source/react/jsx-runtime.ts +0 -2
  50. package/source/react/tools.ts +0 -2
  51. package/source/react-dom/server.ts +0 -2
  52. package/source/react-dom/test-utils.ts +0 -2
  53. package/source/react-dom.ts +0 -4
  54. package/source/server/preload.ts +0 -69
  55. package/source/utilities/react.tsx +0 -13
  56. /package/build/esm/{request-router/index.mjs → request-router.mjs} +0 -0
  57. /package/build/esnext/{request-router/index.esnext → request-router.esnext} +0 -0
  58. /package/source/{request-router/index.ts → request-router.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @quilted/quilt
2
2
 
3
+ ## 0.6.13
4
+
5
+ ### Patch Changes
6
+
7
+ - [`ccf29286`](https://github.com/lemonmade/quilt/commit/ccf2928633719c38b30cd3712fe132c6bd5fd2a0) Thanks [@lemonmade](https://github.com/lemonmade)! - Upgrade Preact and signal dependencies
8
+
9
+ ## 0.6.12
10
+
11
+ ### Patch Changes
12
+
13
+ - [`9eb5ba81`](https://github.com/lemonmade/quilt/commit/9eb5ba8110a4691936f043084c87c4da94d524b8) Thanks [@lemonmade](https://github.com/lemonmade)! - Improve `renderToResponse` and remove `renderToFragmentResponse`
14
+
15
+ - [`905e92ef`](https://github.com/lemonmade/quilt/commit/905e92ef32adad8658042f437b9cfbd248cce3c3) Thanks [@lemonmade](https://github.com/lemonmade)! - Simplify React exports
16
+
3
17
  ## 0.6.11
4
18
 
5
19
  ### Patch Changes
@@ -1,2 +1 @@
1
- export * from '@quilted/react';
2
- export { default } from '@quilted/react';
1
+ export * from '@quilted/react-utilities';
@@ -2,7 +2,7 @@ import { AssetsContext } from '@quilted/react-assets/server';
2
2
  import { InitialUrlContext } from '@quilted/react-router';
3
3
  import { HTMLContext } from '@quilted/react-html/server';
4
4
  import { HttpServerContext } from '@quilted/react-http/server';
5
- import { maybeWrapContext } from '../utilities/react.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
6
 
7
7
  function ServerContext({
8
8
  url,
@@ -12,7 +12,23 @@ function ServerContext({
12
12
  children
13
13
  }) {
14
14
  const normalizedUrl = typeof url === 'string' ? new URL(url) : url;
15
- return maybeWrapContext(AssetsContext, assets, maybeWrapContext(HttpServerContext, http, maybeWrapContext(HTMLContext, html, maybeWrapContext(InitialUrlContext, normalizedUrl, children))));
15
+ const withInitialURL = normalizedUrl ? /*#__PURE__*/jsx(InitialUrlContext.Provider, {
16
+ value: normalizedUrl,
17
+ children: children
18
+ }) : children;
19
+ const withHTML = html ? /*#__PURE__*/jsx(HTMLContext.Provider, {
20
+ value: html,
21
+ children: withInitialURL
22
+ }) : withInitialURL;
23
+ const withHTTPServer = http ? /*#__PURE__*/jsx(HttpServerContext.Provider, {
24
+ value: http,
25
+ children: withHTML
26
+ }) : withHTML;
27
+ const withAssets = assets ? /*#__PURE__*/jsx(AssetsContext.Provider, {
28
+ value: assets,
29
+ children: withHTTPServer
30
+ }) : withHTTPServer;
31
+ return withAssets;
16
32
  }
17
33
 
18
34
  export { ServerContext };
@@ -9,41 +9,6 @@ import { RedirectResponse, HTMLResponse } from '@quilted/request-router';
9
9
  import { ServerContext } from './ServerContext.mjs';
10
10
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
11
11
 
12
- async function renderToFragmentResponse(element, {
13
- request
14
- }) {
15
- const baseUrl = request.URL ?? new URL(request.url);
16
- const html = new HTMLManager();
17
- const http = new HttpManager({
18
- headers: request.headers
19
- });
20
- const rendered = await extract(element, {
21
- decorate(element) {
22
- return /*#__PURE__*/jsx(ServerContext, {
23
- http: http,
24
- html: html,
25
- url: baseUrl,
26
- children: element
27
- });
28
- }
29
- });
30
- const {
31
- headers,
32
- statusCode = 200,
33
- redirectUrl
34
- } = http.state;
35
- if (redirectUrl) {
36
- return new RedirectResponse(redirectUrl, {
37
- status: statusCode,
38
- headers,
39
- request
40
- });
41
- }
42
- return new HTMLResponse(rendered ?? '', {
43
- status: statusCode,
44
- headers
45
- });
46
- }
47
12
  async function renderToResponse(optionsOrElement, definitelyOptions) {
48
13
  let element;
49
14
  let options;
@@ -55,11 +20,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
55
20
  }
56
21
  const {
57
22
  request,
58
- stream: shouldStream = false,
59
23
  assets,
60
24
  cacheKey: explicitCacheKey,
25
+ headers: explicitHeaders,
61
26
  waitUntil = noop,
62
- renderHTML
27
+ stream: shouldStream = false,
28
+ renderHTML = true
63
29
  } = options;
64
30
  const baseUrl = request.URL ?? new URL(request.url);
65
31
  const cacheKey = explicitCacheKey ?? (await assets?.cacheKey?.(request)) ?? {};
@@ -71,8 +37,8 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
71
37
  cacheKey
72
38
  });
73
39
  let responseStatus = 200;
74
- let appHeaders;
75
40
  let appStream;
41
+ const headers = new Headers(explicitHeaders);
76
42
  if (shouldStream === false && element != null) {
77
43
  const rendered = await extract(element, {
78
44
  decorate(element) {
@@ -86,18 +52,27 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
86
52
  }
87
53
  });
88
54
  const {
89
- headers,
55
+ headers: appHeaders,
90
56
  statusCode = 200,
91
57
  redirectUrl
92
58
  } = http.state;
59
+ const hasSetCookieHeader = typeof appHeaders.getSetCookie === 'function';
60
+ if (hasSetCookieHeader) {
61
+ for (const cookie of appHeaders.getSetCookie()) {
62
+ headers.append('Set-Cookie', cookie);
63
+ }
64
+ }
65
+ for (const [header, value] of appHeaders.entries()) {
66
+ if (hasSetCookieHeader && header.toLowerCase() === 'set-cookie') continue;
67
+ headers.set(header, value);
68
+ }
93
69
  if (redirectUrl) {
94
70
  return new RedirectResponse(redirectUrl, {
95
71
  status: statusCode,
96
- headers,
72
+ headers: headers,
97
73
  request
98
74
  });
99
75
  }
100
- appHeaders = headers;
101
76
  responseStatus = statusCode;
102
77
  const appTransformStream = new TransformStream();
103
78
  const appWriter = appTransformStream.writable.getWriter();
@@ -128,16 +103,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
128
103
  };
129
104
  waitUntil(renderAppStream());
130
105
  }
131
- const {
132
- headers,
133
- body
134
- } = await renderToHTMLStream(appStream);
106
+ const body = await renderToHTMLBody(appStream);
135
107
  return new HTMLResponse(body, {
136
108
  status: responseStatus,
137
109
  headers
138
110
  });
139
- async function renderToHTMLStream(content) {
140
- const headers = new Headers(appHeaders);
111
+ async function renderToHTMLBody(content) {
141
112
  const [synchronousAssets, preloadAssets] = await Promise.all([assets?.entry({
142
113
  cacheKey,
143
114
  modules: assetsManager.usedModules({
@@ -156,16 +127,16 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
156
127
  headers.append('Link', preloadHeader(scriptAssetPreloadAttributes(script)));
157
128
  }
158
129
  }
159
- if (renderHTML) {
130
+ if (typeof renderHTML === 'function') {
160
131
  const body = await renderHTML(content, {
161
132
  manager: html,
133
+ headers,
162
134
  assets: synchronousAssets,
163
135
  preloadAssets
164
136
  });
165
- return {
166
- headers,
167
- body
168
- };
137
+ return body;
138
+ } else if (renderHTML === false || renderHTML === 'fragment') {
139
+ return content;
169
140
  }
170
141
  const responseStream = new TextEncoderStream();
171
142
  const body = responseStream.readable;
@@ -251,10 +222,7 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
251
222
  writer.close();
252
223
  };
253
224
  waitUntil(renderFullHTML());
254
- return {
255
- headers,
256
- body
257
- };
225
+ return body;
258
226
  }
259
227
  }
260
228
  function preloadHeader(attributes) {
@@ -288,4 +256,4 @@ function noop(..._args) {
288
256
  // noop
289
257
  }
290
258
 
291
- export { renderToFragmentResponse, renderToResponse };
259
+ export { renderToResponse };
@@ -6,5 +6,4 @@ export { parseAcceptLanguageHeader } from '@quilted/react-localize';
6
6
  export { createRequestRouterLocalization } from '@quilted/react-localize/request-router';
7
7
  export { ServerAction, useServerAction, useServerContext } from '@quilted/react-server-render';
8
8
  export { ServerContext } from './server/ServerContext.mjs';
9
- export { renderToFragmentResponse, renderToResponse } from './server/request-router.mjs';
10
- export { createAssetPreloader } from './server/preload.mjs';
9
+ export { renderToResponse } from './server/request-router.mjs';
@@ -1,2 +1 @@
1
- export * from '@quilted/react';
2
- export { default } from '@quilted/react';
1
+ export * from '@quilted/react-utilities';
@@ -1,8 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
1
2
  import { AssetsContext } from '@quilted/react-assets/server';
2
3
  import { InitialUrlContext } from '@quilted/react-router';
3
4
  import { HTMLContext } from '@quilted/react-html/server';
4
5
  import { HttpServerContext } from '@quilted/react-http/server';
5
- import { maybeWrapContext } from '../utilities/react.esnext';
6
6
 
7
7
  function ServerContext({
8
8
  url,
@@ -12,19 +12,11 @@ function ServerContext({
12
12
  children
13
13
  }) {
14
14
  const normalizedUrl = typeof url === "string" ? new URL(url) : url;
15
- return maybeWrapContext(
16
- AssetsContext,
17
- assets,
18
- maybeWrapContext(
19
- HttpServerContext,
20
- http,
21
- maybeWrapContext(
22
- HTMLContext,
23
- html,
24
- maybeWrapContext(InitialUrlContext, normalizedUrl, children)
25
- )
26
- )
27
- );
15
+ const withInitialURL = normalizedUrl ? /* @__PURE__ */ jsx(InitialUrlContext.Provider, { value: normalizedUrl, children }) : children;
16
+ const withHTML = html ? /* @__PURE__ */ jsx(HTMLContext.Provider, { value: html, children: withInitialURL }) : withInitialURL;
17
+ const withHTTPServer = http ? /* @__PURE__ */ jsx(HttpServerContext.Provider, { value: http, children: withHTML }) : withHTML;
18
+ const withAssets = assets ? /* @__PURE__ */ jsx(AssetsContext.Provider, { value: assets, children: withHTTPServer }) : withHTTPServer;
19
+ return withAssets;
28
20
  }
29
21
 
30
22
  export { ServerContext };
@@ -9,28 +9,6 @@ import { extract } from '@quilted/react-server-render/server';
9
9
  import { RedirectResponse, HTMLResponse } from '@quilted/request-router';
10
10
  import { ServerContext } from './ServerContext.esnext';
11
11
 
12
- async function renderToFragmentResponse(element, { request }) {
13
- const baseUrl = request.URL ?? new URL(request.url);
14
- const html = new HTMLManager();
15
- const http = new HttpManager({ headers: request.headers });
16
- const rendered = await extract(element, {
17
- decorate(element2) {
18
- return /* @__PURE__ */ jsx(ServerContext, { http, html, url: baseUrl, children: element2 });
19
- }
20
- });
21
- const { headers, statusCode = 200, redirectUrl } = http.state;
22
- if (redirectUrl) {
23
- return new RedirectResponse(redirectUrl, {
24
- status: statusCode,
25
- headers,
26
- request
27
- });
28
- }
29
- return new HTMLResponse(rendered ?? "", {
30
- status: statusCode,
31
- headers
32
- });
33
- }
34
12
  async function renderToResponse(optionsOrElement, definitelyOptions) {
35
13
  let element;
36
14
  let options;
@@ -42,11 +20,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
42
20
  }
43
21
  const {
44
22
  request,
45
- stream: shouldStream = false,
46
23
  assets,
47
24
  cacheKey: explicitCacheKey,
25
+ headers: explicitHeaders,
48
26
  waitUntil = noop,
49
- renderHTML
27
+ stream: shouldStream = false,
28
+ renderHTML = true
50
29
  } = options;
51
30
  const baseUrl = request.URL ?? new URL(request.url);
52
31
  const cacheKey = explicitCacheKey ?? (await assets?.cacheKey?.(request) ?? {});
@@ -54,8 +33,8 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
54
33
  const http = new HttpManager({ headers: request.headers });
55
34
  const assetsManager = new AssetsManager({ cacheKey });
56
35
  let responseStatus = 200;
57
- let appHeaders;
58
36
  let appStream;
37
+ const headers = new Headers(explicitHeaders);
59
38
  if (shouldStream === false && element != null) {
60
39
  const rendered = await extract(element, {
61
40
  decorate(element2) {
@@ -71,15 +50,25 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
71
50
  );
72
51
  }
73
52
  });
74
- const { headers: headers2, statusCode = 200, redirectUrl } = http.state;
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
+ }
75
65
  if (redirectUrl) {
76
66
  return new RedirectResponse(redirectUrl, {
77
67
  status: statusCode,
78
- headers: headers2,
68
+ headers,
79
69
  request
80
70
  });
81
71
  }
82
- appHeaders = headers2;
83
72
  responseStatus = statusCode;
84
73
  const appTransformStream = new TransformStream();
85
74
  const appWriter = appTransformStream.writable.getWriter();
@@ -113,13 +102,12 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
113
102
  };
114
103
  waitUntil(renderAppStream());
115
104
  }
116
- const { headers, body } = await renderToHTMLStream(appStream);
105
+ const body = await renderToHTMLBody(appStream);
117
106
  return new HTMLResponse(body, {
118
107
  status: responseStatus,
119
108
  headers
120
109
  });
121
- async function renderToHTMLStream(content) {
122
- const headers2 = new Headers(appHeaders);
110
+ async function renderToHTMLBody(content) {
123
111
  const [synchronousAssets, preloadAssets] = await Promise.all([
124
112
  assets?.entry({
125
113
  cacheKey,
@@ -131,25 +119,28 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
131
119
  ]);
132
120
  if (synchronousAssets) {
133
121
  for (const style of synchronousAssets.styles) {
134
- headers2.append(
122
+ headers.append(
135
123
  "Link",
136
124
  preloadHeader(styleAssetPreloadAttributes(style))
137
125
  );
138
126
  }
139
127
  for (const script of synchronousAssets.scripts) {
140
- headers2.append(
128
+ headers.append(
141
129
  "Link",
142
130
  preloadHeader(scriptAssetPreloadAttributes(script))
143
131
  );
144
132
  }
145
133
  }
146
- if (renderHTML) {
134
+ if (typeof renderHTML === "function") {
147
135
  const body3 = await renderHTML(content, {
148
136
  manager: html,
137
+ headers,
149
138
  assets: synchronousAssets,
150
139
  preloadAssets
151
140
  });
152
- return { headers: headers2, body: body3 };
141
+ return body3;
142
+ } else if (renderHTML === false || renderHTML === "fragment") {
143
+ return content;
153
144
  }
154
145
  const responseStream = new TextEncoderStream();
155
146
  const body2 = responseStream.readable;
@@ -249,7 +240,7 @@ async function renderToResponse(optionsOrElement, definitelyOptions) {
249
240
  writer.close();
250
241
  };
251
242
  waitUntil(renderFullHTML());
252
- return { headers: headers2, body: body2 };
243
+ return body2;
253
244
  }
254
245
  }
255
246
  function preloadHeader(attributes) {
@@ -280,4 +271,4 @@ function diffBrowserAssetsEntries(newList, oldList) {
280
271
  function noop(..._args) {
281
272
  }
282
273
 
283
- export { renderToFragmentResponse, renderToResponse };
274
+ export { renderToResponse };
@@ -6,5 +6,4 @@ export { parseAcceptLanguageHeader } from '@quilted/react-localize';
6
6
  export { createRequestRouterLocalization } from '@quilted/react-localize/request-router';
7
7
  export { ServerAction, useServerAction, useServerContext } from '@quilted/react-server-render';
8
8
  export { ServerContext } from './server/ServerContext.esnext';
9
- export { renderToFragmentResponse, renderToResponse } from './server/request-router.esnext';
10
- export { createAssetPreloader } from './server/preload.esnext';
9
+ export { renderToResponse } from './server/request-router.esnext';