@quilted/quilt 0.5.136 → 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 (59) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/cjs/index.cjs +30 -0
  3. package/build/cjs/server/ServerContext.cjs +6 -4
  4. package/build/cjs/server/index.cjs +30 -7
  5. package/build/cjs/server/preload.cjs +37 -0
  6. package/build/cjs/server/request-router.cjs +75 -54
  7. package/build/cjs/static/StaticContext.cjs +6 -4
  8. package/build/cjs/static/index.cjs +29 -42
  9. package/build/cjs/static/render.cjs +8 -2
  10. package/build/esm/index.mjs +2 -0
  11. package/build/esm/server/ServerContext.mjs +3 -1
  12. package/build/esm/server/index.mjs +3 -1
  13. package/build/esm/server/preload.mjs +35 -0
  14. package/build/esm/server/request-router.mjs +57 -36
  15. package/build/esm/static/StaticContext.mjs +3 -1
  16. package/build/esm/static/index.mjs +24 -37
  17. package/build/esm/static/render.mjs +6 -0
  18. package/build/esnext/index.esnext +2 -0
  19. package/build/esnext/server/ServerContext.esnext +3 -1
  20. package/build/esnext/server/index.esnext +3 -1
  21. package/build/esnext/server/preload.esnext +35 -0
  22. package/build/esnext/server/request-router.esnext +57 -36
  23. package/build/esnext/static/StaticContext.esnext +3 -1
  24. package/build/esnext/static/index.esnext +24 -37
  25. package/build/esnext/static/render.esnext +6 -0
  26. package/build/tsconfig.tsbuildinfo +1 -1
  27. package/build/typescript/assets.d.ts +7 -0
  28. package/build/typescript/assets.d.ts.map +1 -0
  29. package/build/typescript/index.d.ts +3 -0
  30. package/build/typescript/index.d.ts.map +1 -1
  31. package/build/typescript/magic/assets.d.ts +3 -0
  32. package/build/typescript/magic/assets.d.ts.map +1 -0
  33. package/build/typescript/server/ServerContext.d.ts +3 -1
  34. package/build/typescript/server/ServerContext.d.ts.map +1 -1
  35. package/build/typescript/server/index.d.ts +4 -2
  36. package/build/typescript/server/index.d.ts.map +1 -1
  37. package/build/typescript/server/preload.d.ts +8 -0
  38. package/build/typescript/server/preload.d.ts.map +1 -0
  39. package/build/typescript/server/request-router.d.ts +23 -12
  40. package/build/typescript/server/request-router.d.ts.map +1 -1
  41. package/build/typescript/static/StaticContext.d.ts +3 -1
  42. package/build/typescript/static/StaticContext.d.ts.map +1 -1
  43. package/build/typescript/static/index.d.ts +3 -5
  44. package/build/typescript/static/index.d.ts.map +1 -1
  45. package/build/typescript/static/render.d.ts +6 -2
  46. package/build/typescript/static/render.d.ts.map +1 -1
  47. package/package.json +5 -3
  48. package/source/assets.ts +7 -0
  49. package/source/index.ts +19 -0
  50. package/source/magic/assets.ts +5 -0
  51. package/source/server/ServerContext.tsx +15 -7
  52. package/source/server/index.ts +19 -9
  53. package/source/server/preload.ts +69 -0
  54. package/source/server/request-router.tsx +135 -64
  55. package/source/static/StaticContext.tsx +15 -7
  56. package/source/static/index.tsx +26 -41
  57. package/source/static/render.tsx +8 -4
  58. package/tsconfig.json +2 -0
  59. package/source/magic/asset-manifest.ts +0 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
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
+
3
13
  ## 0.5.136
4
14
 
5
15
  ### Patch Changes
@@ -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; }
@@ -56,6 +82,10 @@ Object.defineProperty(exports, 'sleep', {
56
82
  enumerable: true,
57
83
  get: function () { return events.sleep; }
58
84
  });
85
+ Object.defineProperty(exports, 'useUpdateCacheKey', {
86
+ enumerable: true,
87
+ get: function () { return reactAssets.useUpdateCacheKey; }
88
+ });
59
89
  Object.defineProperty(exports, 'createAsyncComponent', {
60
90
  enumerable: true,
61
91
  get: function () { return reactAsync.createAsyncComponent; }
@@ -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;
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var server$1 = require('@quilted/async/server');
3
+ var react = require('react');
4
+ var assets = require('@quilted/assets');
4
5
  var server = require('@quilted/react-html/server');
5
6
  var _static = require('@quilted/react-router/static');
6
7
  var render = require('./render.cjs');
@@ -8,7 +9,7 @@ var jsxRuntime = require('react/jsx-runtime');
8
9
 
9
10
  const BASE_URL = 'http://localhost:3000';
10
11
  async function renderStatic(App, {
11
- assets,
12
+ assets: assets$1,
12
13
  routes: startingRoutes,
13
14
  onRender,
14
15
  crawl = true,
@@ -159,13 +160,16 @@ async function renderStatic(App, {
159
160
  const routeRecorder = new _static.StaticRenderer({
160
161
  forceFallback: fallback ? url.pathname : undefined
161
162
  });
163
+ const initialCacheKey = await assets$1.cacheKey?.(new Request(url));
162
164
  const {
163
165
  http,
164
166
  html: htmlManager,
167
+ assets: assetsManager,
165
168
  markup,
166
169
  asyncAssets
167
170
  } = await render.renderApp( /*#__PURE__*/jsxRuntime.jsx(App, {}), {
168
171
  url,
172
+ cacheKey: initialCacheKey,
169
173
  decorate(app) {
170
174
  return /*#__PURE__*/jsxRuntime.jsx(_static.StaticRendererContext.Provider, {
171
175
  value: routeRecorder,
@@ -173,66 +177,49 @@ async function renderStatic(App, {
173
177
  });
174
178
  }
175
179
  });
176
- const usedAssets = asyncAssets.used({
177
- timing: 'load'
178
- });
179
- const [moduleAssets, modulePreload, nomoduleAssets] = await Promise.all([assets.assets({
180
- async: usedAssets,
181
- context: {
182
- modules: true
183
- }
184
- }), assets.asyncAssets(asyncAssets.used({
180
+ const cacheKey = assetsManager.cacheKey;
181
+ const [mainAssets, preloadAssets] = await Promise.all([assets$1.entry({
182
+ modules: asyncAssets.used({
183
+ timing: 'load'
184
+ }),
185
+ cacheKey
186
+ }), assets$1.modules(asyncAssets.used({
185
187
  timing: 'preload'
186
188
  }), {
187
- context: {
188
- modules: true
189
- }
190
- }), assets.assets({
191
- async: usedAssets,
192
- context: {
193
- modules: false
194
- }
189
+ cacheKey
195
190
  })]);
196
-
197
- // We don’t want to load styles from both bundles, so we only use module styles,
198
- // since modules are intended to be the default and CSS (usually) doesn’t
199
- // have features that meaningfully break older user agents.
200
- const styles = moduleAssets.styles.length > 0 ? moduleAssets.styles : nomoduleAssets.styles;
201
191
  const minifiedHtml = server.renderHtmlToString( /*#__PURE__*/jsxRuntime.jsx(server.Html, {
202
192
  manager: htmlManager,
203
193
  headEndContent: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
204
- children: [[...styles].map(style => {
205
- const attributes = server$1.styleAssetAttributes(style, {
194
+ children: [[...mainAssets.styles].map(style => {
195
+ const attributes = assets.styleAssetAttributes(style, {
206
196
  baseUrl: url
207
197
  });
208
198
  return /*#__PURE__*/jsxRuntime.jsx("link", {
209
199
  ...attributes
210
200
  }, style.source);
211
- }), [...moduleAssets.scripts].map(script => {
212
- const attributes = server$1.scriptAssetAttributes(script, {
201
+ }), [...mainAssets.scripts].map(script => {
202
+ const attributes = assets.scriptAssetAttributes(script, {
213
203
  baseUrl: url
214
204
  });
215
- return /*#__PURE__*/jsxRuntime.jsx("script", {
205
+ return attributes.type === 'module' ? /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
206
+ children: [/*#__PURE__*/jsxRuntime.jsx("link", {
207
+ ...assets.scriptAssetPreloadAttributes(script)
208
+ }), /*#__PURE__*/jsxRuntime.jsx("script", {
209
+ ...attributes
210
+ })]
211
+ }, script.source) : /*#__PURE__*/jsxRuntime.jsx("script", {
216
212
  ...attributes
217
213
  }, script.source);
218
- }), [...nomoduleAssets.scripts].map(script => {
219
- const attributes = server$1.scriptAssetAttributes(script, {
220
- baseUrl: url
221
- });
222
- return /*#__PURE__*/jsxRuntime.jsx("script", {
223
- ...attributes,
224
- // @ts-expect-error Rendering to HTML, so using the lowercase name
225
- nomodule: moduleAssets.scripts.length > 0 ? true : undefined
226
- }, script.source);
227
- }), [...modulePreload.styles].map(style => {
228
- const attributes = server$1.styleAssetPreloadAttributes(style, {
214
+ }), [...preloadAssets.styles].map(style => {
215
+ const attributes = assets.styleAssetPreloadAttributes(style, {
229
216
  baseUrl: url
230
217
  });
231
218
  return /*#__PURE__*/jsxRuntime.jsx("link", {
232
219
  ...attributes
233
220
  }, style.source);
234
- }), [...modulePreload.scripts].map(script => {
235
- const attributes = server$1.scriptAssetPreloadAttributes(script, {
221
+ }), [...preloadAssets.scripts].map(script => {
222
+ const attributes = assets.scriptAssetPreloadAttributes(script, {
236
223
  baseUrl: url
237
224
  });
238
225
  return /*#__PURE__*/jsxRuntime.jsx("link", {
@@ -1,9 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var server$3 = require('@quilted/react-server-render/server');
3
+ var server$4 = require('@quilted/react-server-render/server');
4
4
  var server = require('@quilted/react-html/server');
5
5
  var server$2 = require('@quilted/react-http/server');
6
6
  var server$1 = require('@quilted/react-async/server');
7
+ var server$3 = require('@quilted/react-assets/server');
7
8
  var StaticContext = require('./StaticContext.cjs');
8
9
  var jsxRuntime = require('react/jsx-runtime');
9
10
 
@@ -11,6 +12,7 @@ async function renderApp(app, {
11
12
  decorate,
12
13
  url,
13
14
  headers,
15
+ cacheKey,
14
16
  ...rest
15
17
  } = {}) {
16
18
  const html = new server.HtmlManager();
@@ -18,7 +20,10 @@ async function renderApp(app, {
18
20
  const http = new server$2.HttpManager({
19
21
  headers
20
22
  });
21
- const markup = await server$3.extract(app, {
23
+ const assets = new server$3.AssetsManager({
24
+ cacheKey
25
+ });
26
+ const markup = await server$4.extract(app, {
22
27
  decorate(app) {
23
28
  return /*#__PURE__*/jsxRuntime.jsx(StaticContext.StaticContext, {
24
29
  asyncAssets: asyncAssets,
@@ -34,6 +39,7 @@ async function renderApp(app, {
34
39
  markup,
35
40
  http,
36
41
  html,
42
+ assets,
37
43
  asyncAssets
38
44
  };
39
45
  }
@@ -1,5 +1,7 @@
1
+ export { createBrowserAssetsEntryFromManifest, createBrowserAssetsFromManifests, scriptAssetAttributes, scriptAssetPreloadAttributes, styleAssetAttributes, styleAssetPreloadAttributes } from '@quilted/assets';
1
2
  export { createAsyncModule } from '@quilted/async';
2
3
  export { AbortError, NestedAbortController, TimedAbortController, anyAbortSignal, createEmitter, on, once, raceAgainstAbortSignal, sleep } from '@quilted/events';
4
+ export { useUpdateCacheKey } from '@quilted/react-assets';
3
5
  export { createAsyncComponent, useAsyncModule, useAsyncModulePreload, usePreload } from '@quilted/react-async';
4
6
  export { GraphQLContext, createGraphQLHttpFetch, useGraphQLFetch } from '@quilted/react-graphql';
5
7
  export { useIdleCallback } from '@quilted/react-idle';