@quilted/quilt 0.5.135 → 0.5.137

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 (78) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/build/cjs/App.cjs +4 -9
  3. package/build/cjs/index.cjs +46 -4
  4. package/build/cjs/server/ServerContext.cjs +6 -4
  5. package/build/cjs/server/index.cjs +30 -7
  6. package/build/cjs/server/preload.cjs +37 -0
  7. package/build/cjs/server/request-router.cjs +75 -54
  8. package/build/cjs/static/StaticContext.cjs +6 -4
  9. package/build/cjs/static/index.cjs +29 -42
  10. package/build/cjs/static/render.cjs +8 -2
  11. package/build/esm/App.mjs +5 -10
  12. package/build/esm/index.mjs +4 -2
  13. package/build/esm/server/ServerContext.mjs +3 -1
  14. package/build/esm/server/index.mjs +3 -1
  15. package/build/esm/server/preload.mjs +35 -0
  16. package/build/esm/server/request-router.mjs +57 -36
  17. package/build/esm/static/StaticContext.mjs +3 -1
  18. package/build/esm/static/index.mjs +24 -37
  19. package/build/esm/static/render.mjs +6 -0
  20. package/build/esnext/App.esnext +5 -10
  21. package/build/esnext/index.esnext +4 -2
  22. package/build/esnext/server/ServerContext.esnext +3 -1
  23. package/build/esnext/server/index.esnext +3 -1
  24. package/build/esnext/server/preload.esnext +35 -0
  25. package/build/esnext/server/request-router.esnext +57 -36
  26. package/build/esnext/static/StaticContext.esnext +3 -1
  27. package/build/esnext/static/index.esnext +24 -37
  28. package/build/esnext/static/render.esnext +6 -0
  29. package/build/tsconfig.tsbuildinfo +1 -1
  30. package/build/typescript/App.d.ts.map +1 -1
  31. package/build/typescript/assets.d.ts +7 -0
  32. package/build/typescript/assets.d.ts.map +1 -0
  33. package/build/typescript/index.d.ts +5 -2
  34. package/build/typescript/index.d.ts.map +1 -1
  35. package/build/typescript/magic/assets.d.ts +3 -0
  36. package/build/typescript/magic/assets.d.ts.map +1 -0
  37. package/build/typescript/server/ServerContext.d.ts +3 -1
  38. package/build/typescript/server/ServerContext.d.ts.map +1 -1
  39. package/build/typescript/server/index.d.ts +4 -2
  40. package/build/typescript/server/index.d.ts.map +1 -1
  41. package/build/typescript/server/preload.d.ts +8 -0
  42. package/build/typescript/server/preload.d.ts.map +1 -0
  43. package/build/typescript/server/request-router.d.ts +23 -12
  44. package/build/typescript/server/request-router.d.ts.map +1 -1
  45. package/build/typescript/static/StaticContext.d.ts +3 -1
  46. package/build/typescript/static/StaticContext.d.ts.map +1 -1
  47. package/build/typescript/static/index.d.ts +3 -5
  48. package/build/typescript/static/index.d.ts.map +1 -1
  49. package/build/typescript/static/render.d.ts +6 -2
  50. package/build/typescript/static/render.d.ts.map +1 -1
  51. package/package.json +5 -3
  52. package/source/App.tsx +8 -17
  53. package/source/assets.ts +7 -0
  54. package/source/index.ts +23 -1
  55. package/source/magic/assets.ts +5 -0
  56. package/source/server/ServerContext.tsx +15 -7
  57. package/source/server/index.ts +19 -9
  58. package/source/server/preload.ts +69 -0
  59. package/source/server/request-router.tsx +135 -64
  60. package/source/static/StaticContext.tsx +15 -7
  61. package/source/static/index.tsx +26 -41
  62. package/source/static/render.tsx +8 -4
  63. package/tsconfig.json +2 -0
  64. package/build/typescript/AppContext.d.ts +0 -8
  65. package/build/typescript/AppContext.d.ts.map +0 -1
  66. package/build/typescript/email.d.ts +0 -3
  67. package/build/typescript/email.d.ts.map +0 -1
  68. package/build/typescript/http-handlers/index.d.ts +0 -2
  69. package/build/typescript/http-handlers/index.d.ts.map +0 -1
  70. package/build/typescript/http-handlers/node.d.ts +0 -2
  71. package/build/typescript/http-handlers/node.d.ts.map +0 -1
  72. package/build/typescript/magic/http-handler.d.ts +0 -4
  73. package/build/typescript/magic/http-handler.d.ts.map +0 -1
  74. package/build/typescript/server/http-handler.d.ts +0 -13
  75. package/build/typescript/server/http-handler.d.ts.map +0 -1
  76. package/build/typescript/server/render.d.ts +0 -17
  77. package/build/typescript/server/render.d.ts.map +0 -1
  78. package/source/magic/asset-manifest.ts +0 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @quilted/quilt
2
2
 
3
+ ## 0.5.137
4
+
5
+ ### Patch Changes
6
+
7
+ - [#527](https://github.com/lemonmade/quilt/pull/527) [`a255c7c2`](https://github.com/lemonmade/quilt/commit/a255c7c284391b2c3157fffed5a5feb576cd45ac) Thanks [@lemonmade](https://github.com/lemonmade)! - Improve asset manifests
8
+
9
+ - Updated dependencies [[`a255c7c2`](https://github.com/lemonmade/quilt/commit/a255c7c284391b2c3157fffed5a5feb576cd45ac)]:
10
+ - @quilted/assets@0.0.1
11
+ - @quilted/react-assets@0.0.1
12
+
13
+ ## 0.5.136
14
+
15
+ ### Patch Changes
16
+
17
+ - [#516](https://github.com/lemonmade/quilt/pull/516) [`575d9033`](https://github.com/lemonmade/quilt/commit/575d9033cfafa438b2998c6fea7e00a307ef0be7) Thanks [@lemonmade](https://github.com/lemonmade)! - Add `routes` to `Routing` component
18
+
19
+ - [#516](https://github.com/lemonmade/quilt/pull/516) [`575d9033`](https://github.com/lemonmade/quilt/commit/575d9033cfafa438b2998c6fea7e00a307ef0be7) Thanks [@lemonmade](https://github.com/lemonmade)! - Add timeout event helpers
20
+
3
21
  ## 0.5.135
4
22
 
5
23
  ### Patch Changes
package/build/cjs/App.cjs CHANGED
@@ -18,22 +18,22 @@ function QuiltApp({
18
18
  children,
19
19
  performance = true
20
20
  }) {
21
- const routesContent = routing !== false && routes ? /*#__PURE__*/jsxRuntime.jsx(StaticRoutes, {
22
- routes: routes
23
- }) : null;
24
21
  const htmlContent = typeof html === 'boolean' ? html ? /*#__PURE__*/jsxRuntime.jsx(HtmlUpdater, {}) : null : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
25
22
  children: [/*#__PURE__*/jsxRuntime.jsx(HtmlUpdater, {}), html]
26
23
  });
27
24
  const httpContent = typeof http === 'boolean' ? null : http;
28
25
  const content = /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
29
- children: [httpContent, htmlContent, routesContent, children]
26
+ children: [httpContent, htmlContent, children]
30
27
  });
31
28
  const withMaybeRouting = typeof routing === 'boolean' ? routing ? /*#__PURE__*/jsxRuntime.jsx(reactRouter.Routing, {
29
+ routes: routes,
32
30
  children: content
33
31
  }) : content : 'navigate' in routing ? /*#__PURE__*/jsxRuntime.jsx(reactRouter.Routing, {
32
+ routes: routes,
34
33
  router: routing,
35
34
  children: content
36
35
  }) : /*#__PURE__*/jsxRuntime.jsx(reactRouter.Routing, {
36
+ routes: routes,
37
37
  ...routing,
38
38
  children: content
39
39
  });
@@ -68,10 +68,5 @@ function HtmlUpdater() {
68
68
  reactHtml.useHtmlUpdater();
69
69
  return null;
70
70
  }
71
- function StaticRoutes({
72
- routes
73
- }) {
74
- return reactRouter.useRoutes(routes);
75
- }
76
71
 
77
72
  exports.QuiltApp = QuiltApp;
@@ -1,7 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var assets = require('@quilted/assets');
3
4
  var async = require('@quilted/async');
4
5
  var events = require('@quilted/events');
6
+ var reactAssets = require('@quilted/react-assets');
5
7
  var reactAsync = require('@quilted/react-async');
6
8
  var reactGraphql = require('@quilted/react-graphql');
7
9
  var reactIdle = require('@quilted/react-idle');
@@ -16,6 +18,30 @@ var App = require('./App.cjs');
16
18
 
17
19
 
18
20
 
21
+ Object.defineProperty(exports, 'createBrowserAssetsEntryFromManifest', {
22
+ enumerable: true,
23
+ get: function () { return assets.createBrowserAssetsEntryFromManifest; }
24
+ });
25
+ Object.defineProperty(exports, 'createBrowserAssetsFromManifests', {
26
+ enumerable: true,
27
+ get: function () { return assets.createBrowserAssetsFromManifests; }
28
+ });
29
+ Object.defineProperty(exports, 'scriptAssetAttributes', {
30
+ enumerable: true,
31
+ get: function () { return assets.scriptAssetAttributes; }
32
+ });
33
+ Object.defineProperty(exports, 'scriptAssetPreloadAttributes', {
34
+ enumerable: true,
35
+ get: function () { return assets.scriptAssetPreloadAttributes; }
36
+ });
37
+ Object.defineProperty(exports, 'styleAssetAttributes', {
38
+ enumerable: true,
39
+ get: function () { return assets.styleAssetAttributes; }
40
+ });
41
+ Object.defineProperty(exports, 'styleAssetPreloadAttributes', {
42
+ enumerable: true,
43
+ get: function () { return assets.styleAssetPreloadAttributes; }
44
+ });
19
45
  Object.defineProperty(exports, 'createAsyncModule', {
20
46
  enumerable: true,
21
47
  get: function () { return async.createAsyncModule; }
@@ -28,6 +54,10 @@ Object.defineProperty(exports, 'NestedAbortController', {
28
54
  enumerable: true,
29
55
  get: function () { return events.NestedAbortController; }
30
56
  });
57
+ Object.defineProperty(exports, 'TimedAbortController', {
58
+ enumerable: true,
59
+ get: function () { return events.TimedAbortController; }
60
+ });
31
61
  Object.defineProperty(exports, 'anyAbortSignal', {
32
62
  enumerable: true,
33
63
  get: function () { return events.anyAbortSignal; }
@@ -48,6 +78,14 @@ Object.defineProperty(exports, 'raceAgainstAbortSignal', {
48
78
  enumerable: true,
49
79
  get: function () { return events.raceAgainstAbortSignal; }
50
80
  });
81
+ Object.defineProperty(exports, 'sleep', {
82
+ enumerable: true,
83
+ get: function () { return events.sleep; }
84
+ });
85
+ Object.defineProperty(exports, 'useUpdateCacheKey', {
86
+ enumerable: true,
87
+ get: function () { return reactAssets.useUpdateCacheKey; }
88
+ });
51
89
  Object.defineProperty(exports, 'createAsyncComponent', {
52
90
  enumerable: true,
53
91
  get: function () { return reactAsync.createAsyncComponent; }
@@ -180,10 +218,6 @@ Object.defineProperty(exports, 'useInitialUrl', {
180
218
  enumerable: true,
181
219
  get: function () { return reactRouter.useInitialUrl; }
182
220
  });
183
- Object.defineProperty(exports, 'useMatch', {
184
- enumerable: true,
185
- get: function () { return reactRouter.useMatch; }
186
- });
187
221
  Object.defineProperty(exports, 'useNavigate', {
188
222
  enumerable: true,
189
223
  get: function () { return reactRouter.useNavigate; }
@@ -200,6 +234,14 @@ Object.defineProperty(exports, 'useRouteChangeFocusRef', {
200
234
  enumerable: true,
201
235
  get: function () { return reactRouter.useRouteChangeFocusRef; }
202
236
  });
237
+ Object.defineProperty(exports, 'useRouteMatch', {
238
+ enumerable: true,
239
+ get: function () { return reactRouter.useRouteMatch; }
240
+ });
241
+ Object.defineProperty(exports, 'useRouteMatchDetails', {
242
+ enumerable: true,
243
+ get: function () { return reactRouter.useRouteMatchDetails; }
244
+ });
203
245
  Object.defineProperty(exports, 'useRouter', {
204
246
  enumerable: true,
205
247
  get: function () { return reactRouter.useRouter; }
@@ -1,20 +1,22 @@
1
1
  'use strict';
2
2
 
3
+ var server$3 = require('@quilted/react-assets/server');
3
4
  var reactRouter = require('@quilted/react-router');
4
- var server$1 = require('@quilted/react-html/server');
5
- var server$2 = require('@quilted/react-async/server');
6
- var server = require('@quilted/react-http/server');
5
+ var server$2 = require('@quilted/react-html/server');
6
+ var server = require('@quilted/react-async/server');
7
+ var server$1 = require('@quilted/react-http/server');
7
8
  var react = require('../utilities/react.cjs');
8
9
 
9
10
  function ServerContext({
10
11
  url,
11
12
  html,
12
13
  http,
14
+ assets,
13
15
  asyncAssets,
14
16
  children
15
17
  }) {
16
18
  const normalizedUrl = typeof url === 'string' ? new URL(url) : url;
17
- return react.maybeWrapContext(server$2.AsyncAssetContext, asyncAssets, react.maybeWrapContext(server.HttpServerContext, http, react.maybeWrapContext(server$1.HtmlContext, html, react.maybeWrapContext(reactRouter.InitialUrlContext, normalizedUrl, children))));
19
+ return react.maybeWrapContext(server$3.AssetsContext, assets, react.maybeWrapContext(server.AsyncAssetContext, asyncAssets, react.maybeWrapContext(server$1.HttpServerContext, http, react.maybeWrapContext(server$2.HtmlContext, html, react.maybeWrapContext(reactRouter.InitialUrlContext, normalizedUrl, children)))));
18
20
  }
19
21
 
20
22
  exports.ServerContext = ServerContext;
@@ -2,13 +2,15 @@
2
2
 
3
3
  var server = require('@quilted/react-html/server');
4
4
  var server$1 = require('@quilted/react-server-render/server');
5
- var server$2 = require('@quilted/async/server');
5
+ var assets = require('@quilted/assets');
6
+ var server$2 = require('@quilted/react-assets/server');
6
7
  var server$3 = require('@quilted/react-async/server');
7
8
  var requestRouter = require('@quilted/react-localize/request-router');
8
9
  var requestRouter$1 = require('@quilted/request-router');
9
10
  var reactLocalize = require('@quilted/react-localize');
10
11
  var ServerContext = require('./ServerContext.cjs');
11
12
  var requestRouter$2 = require('./request-router.cjs');
13
+ var preload = require('./preload.cjs');
12
14
 
13
15
 
14
16
 
@@ -56,25 +58,45 @@ Object.defineProperty(exports, 'useServerAction', {
56
58
  enumerable: true,
57
59
  get: function () { return server$1.useServerAction; }
58
60
  });
59
- Object.defineProperty(exports, 'createAssetManifest', {
61
+ Object.defineProperty(exports, 'createBrowserAssetsEntryFromManifest', {
60
62
  enumerable: true,
61
- get: function () { return server$2.createAssetManifest; }
63
+ get: function () { return assets.createBrowserAssetsEntryFromManifest; }
64
+ });
65
+ Object.defineProperty(exports, 'createBrowserAssetsFromManifests', {
66
+ enumerable: true,
67
+ get: function () { return assets.createBrowserAssetsFromManifests; }
62
68
  });
63
69
  Object.defineProperty(exports, 'scriptAssetAttributes', {
64
70
  enumerable: true,
65
- get: function () { return server$2.scriptAssetAttributes; }
71
+ get: function () { return assets.scriptAssetAttributes; }
66
72
  });
67
73
  Object.defineProperty(exports, 'scriptAssetPreloadAttributes', {
68
74
  enumerable: true,
69
- get: function () { return server$2.scriptAssetPreloadAttributes; }
75
+ get: function () { return assets.scriptAssetPreloadAttributes; }
70
76
  });
71
77
  Object.defineProperty(exports, 'styleAssetAttributes', {
72
78
  enumerable: true,
73
- get: function () { return server$2.styleAssetAttributes; }
79
+ get: function () { return assets.styleAssetAttributes; }
74
80
  });
75
81
  Object.defineProperty(exports, 'styleAssetPreloadAttributes', {
76
82
  enumerable: true,
77
- get: function () { return server$2.styleAssetPreloadAttributes; }
83
+ get: function () { return assets.styleAssetPreloadAttributes; }
84
+ });
85
+ Object.defineProperty(exports, 'ASSETS_SERVER_ACTION_ID', {
86
+ enumerable: true,
87
+ get: function () { return server$2.SERVER_ACTION_ID; }
88
+ });
89
+ Object.defineProperty(exports, 'AssetsContext', {
90
+ enumerable: true,
91
+ get: function () { return server$2.AssetsContext; }
92
+ });
93
+ Object.defineProperty(exports, 'AssetsManager', {
94
+ enumerable: true,
95
+ get: function () { return server$2.AssetsManager; }
96
+ });
97
+ Object.defineProperty(exports, 'useUpdateCacheKey', {
98
+ enumerable: true,
99
+ get: function () { return server$2.useUpdateCacheKey; }
78
100
  });
79
101
  Object.defineProperty(exports, 'ASYNC_ASSETS_SERVER_ACTION_ID', {
80
102
  enumerable: true,
@@ -124,3 +146,4 @@ exports.ServerContext = ServerContext.ServerContext;
124
146
  exports.createServerRender = requestRouter$2.createServerRender;
125
147
  exports.renderAppToResponse = requestRouter$2.renderAppToResponse;
126
148
  exports.renderAppToStreamedResponse = requestRouter$2.renderAppToStreamedResponse;
149
+ exports.createAssetPreloader = preload.createAssetPreloader;
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ var requestRouter = require('@quilted/request-router');
4
+
5
+ function createAssetPreloader(options) {
6
+ return async function handler(request, requestContext) {
7
+ const manifest = await assetsForRequest(request, {
8
+ ...options,
9
+ context: requestContext
10
+ });
11
+ return requestRouter.json(manifest);
12
+ };
13
+ }
14
+ async function assetsForRequest(request, {
15
+ assets,
16
+ context,
17
+ cacheKey: getCacheKey
18
+ }) {
19
+ const url = new URL(request.url);
20
+ const modules = url.searchParams.get('modules')?.split(',') ?? [];
21
+ const includeStyles = url.searchParams.get('styles') !== 'false';
22
+ const includeScripts = url.searchParams.get('scripts') !== 'false';
23
+ const cacheKey = (await getCacheKey?.(request, context)) ?? (await assets.cacheKey?.(request));
24
+ const {
25
+ styles,
26
+ scripts
27
+ } = await assets.entry({
28
+ modules,
29
+ cacheKey
30
+ });
31
+ const result = {};
32
+ if (includeStyles) result.styles = styles;
33
+ if (includeScripts) result.scripts = scripts;
34
+ return result;
35
+ }
36
+
37
+ exports.createAssetPreloader = createAssetPreloader;
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
3
  var react = require('react');
4
- var server = require('@quilted/async/server');
5
- var server$2 = require('@quilted/react-async/server');
6
- var server$3 = require('@quilted/react-http/server');
7
- var server$1 = require('@quilted/react-html/server');
4
+ var assets = require('@quilted/assets');
5
+ var server$3 = require('@quilted/react-assets/server');
6
+ var server$1 = require('@quilted/react-async/server');
7
+ var server$2 = require('@quilted/react-http/server');
8
+ var server = require('@quilted/react-html/server');
8
9
  var server$4 = require('@quilted/react-server-render/server');
9
10
  var requestRouter = require('@quilted/request-router');
10
11
  var ServerContext = require('./ServerContext.cjs');
11
12
  var jsxRuntime = require('react/jsx-runtime');
12
13
 
13
14
  function createServerRender(getApp, {
14
- context,
15
15
  stream,
16
16
  ...options
17
17
  } = {}) {
@@ -19,23 +19,29 @@ function createServerRender(getApp, {
19
19
  const accepts = request.headers.get('Accept');
20
20
  if (accepts != null && !accepts.includes('text/html')) return;
21
21
  const renderResponse = stream ? renderAppToStreamedResponse : renderAppToResponse;
22
- return renderResponse(typeof getApp === 'function' ? () => getApp(request, requestContext) : getApp, request, {
22
+ return renderResponse(typeof getApp === 'function' ? () => getApp(request, requestContext) : getApp, {
23
23
  ...options,
24
+ request,
25
+ context: requestContext,
24
26
  extract: {
25
27
  ...options.extract,
26
- context: options.extract ?? context?.(request, requestContext) ?? requestContext
28
+ context: typeof options.extract?.context === 'function' ? options.extract.context(request, requestContext) : options.extract?.context
27
29
  }
28
30
  });
29
31
  };
30
32
  }
31
- async function renderAppToResponse(getApp, request, {
33
+ async function renderAppToResponse(getApp, {
34
+ request,
35
+ context,
32
36
  assets,
33
37
  extract,
34
38
  renderHtml
35
- } = {}) {
39
+ }) {
36
40
  const app = typeof getApp === 'function' ? await getApp() : getApp;
41
+ const cacheKey = await assets?.cacheKey?.(request);
37
42
  const renderDetails = await serverRenderDetailsForApp(app, {
38
43
  extract,
44
+ cacheKey,
39
45
  url: request.url,
40
46
  headers: request.headers
41
47
  });
@@ -50,7 +56,9 @@ async function renderAppToResponse(getApp, request, {
50
56
  headers
51
57
  });
52
58
  }
53
- const content = await renderAppDetailsToHtmlString(renderDetails, request, {
59
+ const content = await renderAppDetailsToHtmlString(renderDetails, {
60
+ request,
61
+ context,
54
62
  assets,
55
63
  renderHtml
56
64
  });
@@ -59,25 +67,25 @@ async function renderAppToResponse(getApp, request, {
59
67
  status: statusCode
60
68
  });
61
69
  }
62
- async function renderAppToStreamedResponse(getApp, request, {
63
- assets,
70
+ async function renderAppToStreamedResponse(getApp, {
71
+ request,
72
+ context,
73
+ assets: assets$1,
64
74
  extract,
65
75
  renderHtml
66
- } = {}) {
76
+ }) {
67
77
  const headers = new Headers();
68
78
  const stream = new TransformStream();
69
- const assetContext = {
70
- userAgent: request.headers.get('User-Agent')
71
- };
72
- const guaranteedAssets = await assets?.assets({
73
- context: assetContext
79
+ const cacheKey = await assets$1?.cacheKey?.(request);
80
+ const guaranteedAssets = await assets$1?.entry({
81
+ cacheKey
74
82
  });
75
83
  if (guaranteedAssets) {
76
84
  for (const style of guaranteedAssets.styles) {
77
- headers.append('Link', preloadHeader(server.styleAssetPreloadAttributes(style)));
85
+ headers.append('Link', preloadHeader(assets.styleAssetPreloadAttributes(style)));
78
86
  }
79
87
  for (const script of guaranteedAssets.scripts) {
80
- headers.append('Link', preloadHeader(server.scriptAssetPreloadAttributes(script)));
88
+ headers.append('Link', preloadHeader(assets.scriptAssetPreloadAttributes(script)));
81
89
  }
82
90
  }
83
91
  renderResponseToStream();
@@ -89,11 +97,14 @@ async function renderAppToStreamedResponse(getApp, request, {
89
97
  const app = typeof getApp === 'function' ? await getApp() : getApp;
90
98
  const renderDetails = await serverRenderDetailsForApp(app, {
91
99
  extract,
100
+ cacheKey,
92
101
  url: request.url,
93
102
  headers: request.headers
94
103
  });
95
- const content = await renderAppDetailsToHtmlString(renderDetails, request, {
96
- assets,
104
+ const content = await renderAppDetailsToHtmlString(renderDetails, {
105
+ request,
106
+ context,
107
+ assets: assets$1,
97
108
  renderHtml
98
109
  });
99
110
  const encoder = new TextEncoder();
@@ -105,13 +116,17 @@ async function renderAppToStreamedResponse(getApp, request, {
105
116
  async function serverRenderDetailsForApp(app, {
106
117
  url,
107
118
  headers,
119
+ cacheKey,
108
120
  extract: extractOptions
109
121
  } = {}) {
110
- const html = new server$1.HtmlManager();
111
- const asyncAssets = new server$2.AsyncAssetManager();
112
- const http = new server$3.HttpManager({
122
+ const html = new server.HtmlManager();
123
+ const asyncAssets = new server$1.AsyncAssetManager();
124
+ const http = new server$2.HttpManager({
113
125
  headers
114
126
  });
127
+ const assets = new server$3.AssetsManager({
128
+ cacheKey
129
+ });
115
130
  const {
116
131
  decorate,
117
132
  ...rest
@@ -123,6 +138,7 @@ async function serverRenderDetailsForApp(app, {
123
138
  http: http,
124
139
  html: html,
125
140
  url: url,
141
+ assets: assets,
126
142
  children: decorate?.(app) ?? app
127
143
  });
128
144
  },
@@ -132,66 +148,71 @@ async function serverRenderDetailsForApp(app, {
132
148
  rendered,
133
149
  http,
134
150
  html,
135
- asyncAssets
151
+ asyncAssets,
152
+ assets
136
153
  };
137
154
  }
138
- async function renderAppDetailsToHtmlString(details, request, {
155
+ async function renderAppDetailsToHtmlString(details, {
156
+ request,
157
+ context,
139
158
  assets,
140
159
  renderHtml = defaultRenderHtml
141
- } = {}) {
160
+ }) {
142
161
  const {
143
- html: htmlManager,
144
162
  http,
145
163
  rendered,
146
- asyncAssets
164
+ asyncAssets,
165
+ html: htmlManager,
166
+ assets: assetsManager
147
167
  } = details;
148
- const usedAssets = asyncAssets.used({
168
+ const usedModules = asyncAssets.used({
149
169
  timing: 'load'
150
170
  });
151
- const assetContext = {
152
- userAgent: request.headers.get('User-Agent')
153
- };
154
- const [entryAssets, preloadAssets] = assets ? await Promise.all([assets.assets({
155
- async: usedAssets,
156
- context: assetContext
157
- }), assets.asyncAssets(asyncAssets.used({
171
+ const cacheKey = assetsManager.cacheKey;
172
+ const [entryAssets, preloadAssets] = assets ? await Promise.all([assets.entry({
173
+ modules: usedModules,
174
+ cacheKey
175
+ }), assets.modules(asyncAssets.used({
158
176
  timing: 'preload'
159
177
  }), {
160
- context: assetContext
178
+ cacheKey
161
179
  })]) : [];
162
- const htmlElement = await renderHtml(rendered, request, {
180
+ const htmlElement = await renderHtml(rendered, {
181
+ request,
182
+ context,
163
183
  html: htmlManager,
164
184
  http,
165
185
  assets: entryAssets,
166
186
  preloadAssets
167
187
  });
168
- return server$1.renderHtmlToString(htmlElement);
188
+ return server.renderHtmlToString(htmlElement);
169
189
  }
170
- const defaultRenderHtml = function defaultRenderHtml(content, request, {
190
+ const defaultRenderHtml = function defaultRenderHtml(content, {
191
+ request,
171
192
  html,
172
- assets,
193
+ assets: assets$1,
173
194
  preloadAssets
174
195
  }) {
175
196
  const baseUrl = new URL(request.url);
176
- return /*#__PURE__*/jsxRuntime.jsx(server$1.Html, {
197
+ return /*#__PURE__*/jsxRuntime.jsx(server.Html, {
177
198
  manager: html,
178
199
  headEndContent: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
179
- children: [assets && [...assets.styles].map(style => {
180
- const attributes = server.styleAssetAttributes(style, {
200
+ children: [assets$1 && assets$1.styles.map(style => {
201
+ const attributes = assets.styleAssetAttributes(style, {
181
202
  baseUrl
182
203
  });
183
204
  return /*#__PURE__*/jsxRuntime.jsx("link", {
184
205
  ...attributes
185
206
  }, style.source);
186
- }), assets && [...assets.scripts].map(script => {
187
- const isModule = script.attributes.type === 'module';
188
- const attributes = server.scriptAssetAttributes(script, {
207
+ }), assets$1 && assets$1.scripts.map(script => {
208
+ const isModule = script.attributes?.type === 'module';
209
+ const attributes = assets.scriptAssetAttributes(script, {
189
210
  baseUrl
190
211
  });
191
212
  if (isModule) {
192
213
  return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
193
214
  children: [/*#__PURE__*/jsxRuntime.jsx("link", {
194
- ...server.scriptAssetPreloadAttributes(script)
215
+ ...assets.scriptAssetPreloadAttributes(script)
195
216
  }), /*#__PURE__*/jsxRuntime.jsx("script", {
196
217
  ...attributes,
197
218
  async: true
@@ -202,15 +223,15 @@ const defaultRenderHtml = function defaultRenderHtml(content, request, {
202
223
  ...attributes,
203
224
  defer: true
204
225
  }, script.source);
205
- }), preloadAssets && [...preloadAssets.styles].map(style => {
206
- const attributes = server.styleAssetPreloadAttributes(style, {
226
+ }), preloadAssets && preloadAssets.styles.map(style => {
227
+ const attributes = assets.styleAssetPreloadAttributes(style, {
207
228
  baseUrl
208
229
  });
209
230
  return /*#__PURE__*/jsxRuntime.jsx("link", {
210
231
  ...attributes
211
232
  }, style.source);
212
- }), preloadAssets && [...preloadAssets.scripts].map(script => {
213
- const attributes = server.scriptAssetPreloadAttributes(script, {
233
+ }), preloadAssets && preloadAssets.scripts.map(script => {
234
+ const attributes = assets.scriptAssetPreloadAttributes(script, {
214
235
  baseUrl
215
236
  });
216
237
  return /*#__PURE__*/jsxRuntime.jsx("link", {
@@ -1,20 +1,22 @@
1
1
  'use strict';
2
2
 
3
+ var server$3 = require('@quilted/react-assets/server');
3
4
  var reactRouter = require('@quilted/react-router');
4
- var server$1 = require('@quilted/react-html/server');
5
- var server$2 = require('@quilted/react-async/server');
6
- var server = require('@quilted/react-http/server');
5
+ var server$2 = require('@quilted/react-html/server');
6
+ var server = require('@quilted/react-async/server');
7
+ var server$1 = require('@quilted/react-http/server');
7
8
  var react = require('../utilities/react.cjs');
8
9
 
9
10
  function StaticContext({
10
11
  url,
11
12
  html,
12
13
  http,
14
+ assets,
13
15
  asyncAssets,
14
16
  children
15
17
  }) {
16
18
  const normalizedUrl = typeof url === 'string' ? new URL(url) : url;
17
- return react.maybeWrapContext(server$2.AsyncAssetContext, asyncAssets, react.maybeWrapContext(server.HttpServerContext, http, react.maybeWrapContext(server$1.HtmlContext, html, react.maybeWrapContext(reactRouter.InitialUrlContext, normalizedUrl, children))));
19
+ return react.maybeWrapContext(server$3.AssetsContext, assets, react.maybeWrapContext(server.AsyncAssetContext, asyncAssets, react.maybeWrapContext(server$1.HttpServerContext, http, react.maybeWrapContext(server$2.HtmlContext, html, react.maybeWrapContext(reactRouter.InitialUrlContext, normalizedUrl, children)))));
18
20
  }
19
21
 
20
22
  exports.StaticContext = StaticContext;