@quilted/quilt 0.5.120 → 0.5.121

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 (40) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/cjs/App.cjs +77 -0
  3. package/build/cjs/TestApp.cjs +20 -0
  4. package/build/cjs/index.cjs +10 -10
  5. package/build/cjs/server/request-router.cjs +23 -7
  6. package/build/cjs/testing.cjs +4 -2
  7. package/build/esm/App.mjs +75 -0
  8. package/build/esm/TestApp.mjs +18 -0
  9. package/build/esm/index.mjs +3 -3
  10. package/build/esm/server/request-router.mjs +23 -7
  11. package/build/esm/testing.mjs +2 -1
  12. package/build/esnext/App.esnext +75 -0
  13. package/build/esnext/TestApp.esnext +18 -0
  14. package/build/esnext/index.esnext +3 -3
  15. package/build/esnext/server/request-router.esnext +23 -7
  16. package/build/esnext/testing.esnext +2 -1
  17. package/build/tsconfig.tsbuildinfo +1 -1
  18. package/build/typescript/App.d.ts +48 -0
  19. package/build/typescript/App.d.ts.map +1 -0
  20. package/build/typescript/TestApp.d.ts +17 -0
  21. package/build/typescript/TestApp.d.ts.map +1 -0
  22. package/build/typescript/index.d.ts +4 -4
  23. package/build/typescript/index.d.ts.map +1 -1
  24. package/build/typescript/server/render.d.ts +8 -8
  25. package/build/typescript/server/render.d.ts.map +1 -1
  26. package/build/typescript/server/request-router.d.ts +8 -2
  27. package/build/typescript/server/request-router.d.ts.map +1 -1
  28. package/build/typescript/testing.d.ts +2 -1
  29. package/build/typescript/testing.d.ts.map +1 -1
  30. package/package.json +1 -1
  31. package/source/App.tsx +171 -0
  32. package/source/TestApp.tsx +33 -0
  33. package/source/index.ts +10 -5
  34. package/source/server/render.tsx +9 -2
  35. package/source/server/request-router.tsx +56 -21
  36. package/source/testing.ts +3 -1
  37. package/build/cjs/AppContext.cjs +0 -20
  38. package/build/esm/AppContext.mjs +0 -18
  39. package/build/esnext/AppContext.esnext +0 -18
  40. package/source/AppContext.tsx +0 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @quilted/quilt
2
2
 
3
+ ## 0.5.121
4
+
5
+ ### Patch Changes
6
+
7
+ - [`98c6aa4b`](https://github.com/lemonmade/quilt/commit/98c6aa4b9b5f45cc947f25446e1f05e2145d64a7) Thanks [@lemonmade](https://github.com/lemonmade)! - Improve HTML customization
8
+
9
+ - [#447](https://github.com/lemonmade/quilt/pull/447) [`6ad741b2`](https://github.com/lemonmade/quilt/commit/6ad741b241027c8d7612e206497935ad938ea6c9) Thanks [@lemonmade](https://github.com/lemonmade)! - Simplify app templates
10
+
3
11
  ## 0.5.120
4
12
 
5
13
  ### Patch Changes
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ var reactHttp = require('@quilted/react-http');
4
+ var reactHtml = require('@quilted/react-html');
5
+ var reactRouter = require('@quilted/react-router');
6
+ var reactPerformance = require('@quilted/react-performance');
7
+ var reactLocalize = require('@quilted/react-localize');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ // TODO: have craft options to remove the bundle impact of parts of this that are
11
+ // unused.
12
+ function QuiltApp({
13
+ http = true,
14
+ html = true,
15
+ routes,
16
+ routing = true,
17
+ localization = true,
18
+ children,
19
+ performance = true
20
+ }) {
21
+ const routesContent = routing !== false && routes ? /*#__PURE__*/jsxRuntime.jsx(StaticRoutes, {
22
+ routes: routes
23
+ }) : null;
24
+ const htmlContent = typeof html === 'boolean' ? html ? /*#__PURE__*/jsxRuntime.jsx(HtmlUpdater, {}) : null : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
25
+ children: [/*#__PURE__*/jsxRuntime.jsx(HtmlUpdater, {}), html]
26
+ });
27
+ const httpContent = typeof http === 'boolean' ? null : http;
28
+ const content = /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
29
+ children: [httpContent, htmlContent, routesContent, children]
30
+ });
31
+ const withMaybeRouting = typeof routing === 'boolean' ? routing ? /*#__PURE__*/jsxRuntime.jsx(reactRouter.Routing, {
32
+ children: content
33
+ }) : content : 'navigate' in routing ? /*#__PURE__*/jsxRuntime.jsx(reactRouter.Routing, {
34
+ router: routing,
35
+ children: content
36
+ }) : /*#__PURE__*/jsxRuntime.jsx(reactRouter.Routing, {
37
+ ...routing,
38
+ children: content
39
+ });
40
+ const withMaybePerformance = typeof performance === 'boolean' ? performance ? /*#__PURE__*/jsxRuntime.jsx(reactPerformance.PerformanceContext, {
41
+ children: withMaybeRouting
42
+ }) : withMaybeRouting : /*#__PURE__*/jsxRuntime.jsx(reactPerformance.PerformanceContext, {
43
+ performance: performance,
44
+ children: withMaybeRouting
45
+ });
46
+ const withMaybeHttp = typeof http === 'boolean' ? http ? /*#__PURE__*/jsxRuntime.jsx(reactHttp.HttpContext, {
47
+ children: /*#__PURE__*/jsxRuntime.jsx(reactHttp.CookieContext, {
48
+ children: withMaybePerformance
49
+ })
50
+ }) : withMaybePerformance : /*#__PURE__*/jsxRuntime.jsx(reactHttp.HttpContext, {
51
+ children: /*#__PURE__*/jsxRuntime.jsx(reactHttp.CookieContext, {
52
+ children: withMaybePerformance
53
+ })
54
+ });
55
+ const withMaybeLocalization = typeof localization === 'boolean' ? localization ? /*#__PURE__*/jsxRuntime.jsx(reactLocalize.Localization, {
56
+ locale: "en",
57
+ children: withMaybeHttp
58
+ }) : withMaybeHttp : typeof localization === 'string' ? /*#__PURE__*/jsxRuntime.jsx(reactLocalize.Localization, {
59
+ locale: localization,
60
+ children: withMaybeHttp
61
+ }) : /*#__PURE__*/jsxRuntime.jsx(reactLocalize.Localization, {
62
+ ...localization,
63
+ children: withMaybeHttp
64
+ });
65
+ return withMaybeLocalization;
66
+ }
67
+ function HtmlUpdater() {
68
+ reactHtml.useHtmlUpdater();
69
+ return null;
70
+ }
71
+ function StaticRoutes({
72
+ routes
73
+ }) {
74
+ return reactRouter.useRoutes(routes);
75
+ }
76
+
77
+ exports.QuiltApp = QuiltApp;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var App = require('./App.cjs');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // TODO: have craft options to remove the bundle impact of parts of this that are
7
+ // unused.
8
+ function QuiltAppTesting({
9
+ routing = true,
10
+ localization = true,
11
+ children
12
+ }) {
13
+ return /*#__PURE__*/jsxRuntime.jsx(App.QuiltApp, {
14
+ routing: routing,
15
+ localization: localization,
16
+ children: children
17
+ });
18
+ }
19
+
20
+ exports.QuiltAppTesting = QuiltAppTesting;
@@ -12,7 +12,7 @@ var reactRouter = require('@quilted/react-router');
12
12
  var reactHttp = require('@quilted/react-http');
13
13
  var reactUtilities = require('@quilted/react-utilities');
14
14
  var reactSignals = require('@quilted/react-signals');
15
- var AppContext = require('./AppContext.cjs');
15
+ var App = require('./App.cjs');
16
16
 
17
17
 
18
18
 
@@ -100,9 +100,9 @@ Object.defineProperty(exports, 'LocalizedLink', {
100
100
  enumerable: true,
101
101
  get: function () { return reactLocalize.LocalizedLink; }
102
102
  });
103
- Object.defineProperty(exports, 'LocalizedRouter', {
103
+ Object.defineProperty(exports, 'LocalizedRouting', {
104
104
  enumerable: true,
105
- get: function () { return reactLocalize.LocalizedRouter; }
105
+ get: function () { return reactLocalize.LocalizedRouting; }
106
106
  });
107
107
  Object.defineProperty(exports, 'createRouteLocalization', {
108
108
  enumerable: true,
@@ -160,17 +160,17 @@ Object.defineProperty(exports, 'NavigationBlock', {
160
160
  enumerable: true,
161
161
  get: function () { return reactRouter.NavigationBlock; }
162
162
  });
163
- Object.defineProperty(exports, 'Preloader', {
164
- enumerable: true,
165
- get: function () { return reactRouter.Preloader; }
166
- });
167
163
  Object.defineProperty(exports, 'Redirect', {
168
164
  enumerable: true,
169
165
  get: function () { return reactRouter.Redirect; }
170
166
  });
171
- Object.defineProperty(exports, 'Router', {
167
+ Object.defineProperty(exports, 'RoutePreloading', {
168
+ enumerable: true,
169
+ get: function () { return reactRouter.RoutePreloading; }
170
+ });
171
+ Object.defineProperty(exports, 'Routing', {
172
172
  enumerable: true,
173
- get: function () { return reactRouter.Router; }
173
+ get: function () { return reactRouter.Routing; }
174
174
  });
175
175
  Object.defineProperty(exports, 'useCurrentUrl', {
176
176
  enumerable: true,
@@ -276,4 +276,4 @@ Object.defineProperty(exports, 'useSignalEffect', {
276
276
  enumerable: true,
277
277
  get: function () { return reactSignals.useSignalEffect; }
278
278
  });
279
- exports.AppContext = AppContext.AppContext;
279
+ exports.QuiltApp = App.QuiltApp;
@@ -26,6 +26,7 @@ function createServerRenderingRequestHandler(render, {
26
26
  }
27
27
  async function renderToResponse(app, request, {
28
28
  assets,
29
+ renderHtml = defaultRenderHtml,
29
30
  ...options
30
31
  } = {}) {
31
32
  const accepts = request.headers.get('Accept');
@@ -67,17 +68,32 @@ async function renderToResponse(app, request, {
67
68
  timing: 'preload'
68
69
  }), {
69
70
  options: assetOptions
70
- })]) : [];
71
- return requestRouter.html(server.render( /*#__PURE__*/jsxRuntime.jsx(server.Html, {
71
+ })]) : [[], [], []];
72
+ const htmlElement = await renderHtml(markup, request, {
73
+ html: htmlManager,
74
+ http,
75
+ styles,
76
+ scripts,
77
+ preload
78
+ });
79
+ return requestRouter.html(server.render(htmlElement), {
80
+ headers,
81
+ status: statusCode
82
+ });
83
+ }
84
+ function defaultRenderHtml(content, request, {
85
+ html,
86
+ styles,
87
+ scripts,
88
+ preload
89
+ }) {
90
+ return /*#__PURE__*/jsxRuntime.jsx(server.Html, {
72
91
  url: new URL(request.url),
73
- manager: htmlManager,
92
+ manager: html,
74
93
  styles: styles,
75
94
  scripts: scripts,
76
95
  preloadAssets: preload,
77
- children: markup
78
- })), {
79
- headers,
80
- status: statusCode
96
+ children: content
81
97
  });
82
98
  }
83
99
 
@@ -4,6 +4,7 @@ var testing$2 = require('@quilted/testing');
4
4
  var reactTesting = require('@quilted/react-testing');
5
5
  var testing = require('@quilted/react-router/testing');
6
6
  var testing$1 = require('@quilted/react-graphql/testing');
7
+ var TestApp = require('./TestApp.cjs');
7
8
 
8
9
 
9
10
 
@@ -23,9 +24,9 @@ Object.defineProperty(exports, 'unmountAll', {
23
24
  enumerable: true,
24
25
  get: function () { return reactTesting.unmountAll; }
25
26
  });
26
- Object.defineProperty(exports, 'TestRouter', {
27
+ Object.defineProperty(exports, 'TestRouting', {
27
28
  enumerable: true,
28
- get: function () { return testing.TestRouter; }
29
+ get: function () { return testing.TestRouting; }
29
30
  });
30
31
  Object.defineProperty(exports, 'createTestRouter', {
31
32
  enumerable: true,
@@ -51,6 +52,7 @@ Object.defineProperty(exports, 'createSchema', {
51
52
  enumerable: true,
52
53
  get: function () { return testing$1.createSchema; }
53
54
  });
55
+ exports.QuiltAppTesting = TestApp.QuiltAppTesting;
54
56
  Object.keys(testing$2).forEach(function (k) {
55
57
  if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
56
58
  enumerable: true,
@@ -0,0 +1,75 @@
1
+ import { HttpContext, CookieContext } from '@quilted/react-http';
2
+ import { useHtmlUpdater } from '@quilted/react-html';
3
+ import { Routing, useRoutes } from '@quilted/react-router';
4
+ import { PerformanceContext } from '@quilted/react-performance';
5
+ import { Localization } from '@quilted/react-localize';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+
8
+ // TODO: have craft options to remove the bundle impact of parts of this that are
9
+ // unused.
10
+ function QuiltApp({
11
+ http = true,
12
+ html = true,
13
+ routes,
14
+ routing = true,
15
+ localization = true,
16
+ children,
17
+ performance = true
18
+ }) {
19
+ const routesContent = routing !== false && routes ? /*#__PURE__*/jsx(StaticRoutes, {
20
+ routes: routes
21
+ }) : null;
22
+ const htmlContent = typeof html === 'boolean' ? html ? /*#__PURE__*/jsx(HtmlUpdater, {}) : null : /*#__PURE__*/jsxs(Fragment, {
23
+ children: [/*#__PURE__*/jsx(HtmlUpdater, {}), html]
24
+ });
25
+ const httpContent = typeof http === 'boolean' ? null : http;
26
+ const content = /*#__PURE__*/jsxs(Fragment, {
27
+ children: [httpContent, htmlContent, routesContent, children]
28
+ });
29
+ const withMaybeRouting = typeof routing === 'boolean' ? routing ? /*#__PURE__*/jsx(Routing, {
30
+ children: content
31
+ }) : content : 'navigate' in routing ? /*#__PURE__*/jsx(Routing, {
32
+ router: routing,
33
+ children: content
34
+ }) : /*#__PURE__*/jsx(Routing, {
35
+ ...routing,
36
+ children: content
37
+ });
38
+ const withMaybePerformance = typeof performance === 'boolean' ? performance ? /*#__PURE__*/jsx(PerformanceContext, {
39
+ children: withMaybeRouting
40
+ }) : withMaybeRouting : /*#__PURE__*/jsx(PerformanceContext, {
41
+ performance: performance,
42
+ children: withMaybeRouting
43
+ });
44
+ const withMaybeHttp = typeof http === 'boolean' ? http ? /*#__PURE__*/jsx(HttpContext, {
45
+ children: /*#__PURE__*/jsx(CookieContext, {
46
+ children: withMaybePerformance
47
+ })
48
+ }) : withMaybePerformance : /*#__PURE__*/jsx(HttpContext, {
49
+ children: /*#__PURE__*/jsx(CookieContext, {
50
+ children: withMaybePerformance
51
+ })
52
+ });
53
+ const withMaybeLocalization = typeof localization === 'boolean' ? localization ? /*#__PURE__*/jsx(Localization, {
54
+ locale: "en",
55
+ children: withMaybeHttp
56
+ }) : withMaybeHttp : typeof localization === 'string' ? /*#__PURE__*/jsx(Localization, {
57
+ locale: localization,
58
+ children: withMaybeHttp
59
+ }) : /*#__PURE__*/jsx(Localization, {
60
+ ...localization,
61
+ children: withMaybeHttp
62
+ });
63
+ return withMaybeLocalization;
64
+ }
65
+ function HtmlUpdater() {
66
+ useHtmlUpdater();
67
+ return null;
68
+ }
69
+ function StaticRoutes({
70
+ routes
71
+ }) {
72
+ return useRoutes(routes);
73
+ }
74
+
75
+ export { QuiltApp };
@@ -0,0 +1,18 @@
1
+ import { QuiltApp } from './App.mjs';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // TODO: have craft options to remove the bundle impact of parts of this that are
5
+ // unused.
6
+ function QuiltAppTesting({
7
+ routing = true,
8
+ localization = true,
9
+ children
10
+ }) {
11
+ return /*#__PURE__*/jsx(QuiltApp, {
12
+ routing: routing,
13
+ localization: localization,
14
+ children: children
15
+ });
16
+ }
17
+
18
+ export { QuiltAppTesting };
@@ -4,10 +4,10 @@ export { createAsyncComponent, useAsync, useAsyncAsset, usePreload } from '@quil
4
4
  export { GraphQLContext, createGraphQLHttpFetch, useGraphQLFetch } from '@quilted/react-graphql';
5
5
  export { useIdleCallback } from '@quilted/react-idle';
6
6
  export { ServerAction, useServerAction, useServerContext } from '@quilted/react-server-render';
7
- export { Localization, LocalizedLink, LocalizedRouter, createRouteLocalization, createRoutePathLocalization, createRouteSubdomainLocalization, useLocale, useLocaleFromEnvironment, useLocalizedFormatting, useRouteLocalization } from '@quilted/react-localize';
7
+ export { Localization, LocalizedLink, LocalizedRouting, createRouteLocalization, createRoutePathLocalization, createRouteSubdomainLocalization, useLocale, useLocaleFromEnvironment, useLocalizedFormatting, useRouteLocalization } from '@quilted/react-localize';
8
8
  export { PerformanceContext, createPerformance, usePerformance, usePerformanceNavigation, usePerformanceNavigationEvent } from '@quilted/react-performance';
9
- export { Link, NavigationBlock, Preloader, Redirect, Router, useCurrentUrl, useInitialUrl, useMatch, useNavigate, useNavigationBlock, useRedirect, useRouteChangeFocusRef, useRouter, useRoutes, useScrollRestoration } from '@quilted/react-router';
9
+ export { Link, NavigationBlock, Redirect, RoutePreloading, Routing, useCurrentUrl, useInitialUrl, useMatch, useNavigate, useNavigationBlock, useRedirect, useRouteChangeFocusRef, useRouter, useRoutes, useScrollRestoration } from '@quilted/react-router';
10
10
  export { CookieContext, useCookie, useCookies } from '@quilted/react-http';
11
11
  export { createOptionalContext, createUseContextHook, createUseOptionalValueHook } from '@quilted/react-utilities';
12
12
  export { Signal, computed as computedSignal, isSignal, resolveSignalOrValue, signal, batch as signalBatch, effect as signalEffect, useComputed, useSignal, useSignalEffect } from '@quilted/react-signals';
13
- export { AppContext } from './AppContext.mjs';
13
+ export { QuiltApp } from './App.mjs';
@@ -24,6 +24,7 @@ function createServerRenderingRequestHandler(render, {
24
24
  }
25
25
  async function renderToResponse(app, request, {
26
26
  assets,
27
+ renderHtml = defaultRenderHtml,
27
28
  ...options
28
29
  } = {}) {
29
30
  const accepts = request.headers.get('Accept');
@@ -65,17 +66,32 @@ async function renderToResponse(app, request, {
65
66
  timing: 'preload'
66
67
  }), {
67
68
  options: assetOptions
68
- })]) : [];
69
- return html(render( /*#__PURE__*/jsx(Html, {
69
+ })]) : [[], [], []];
70
+ const htmlElement = await renderHtml(markup, request, {
71
+ html: htmlManager,
72
+ http,
73
+ styles,
74
+ scripts,
75
+ preload
76
+ });
77
+ return html(render(htmlElement), {
78
+ headers,
79
+ status: statusCode
80
+ });
81
+ }
82
+ function defaultRenderHtml(content, request, {
83
+ html,
84
+ styles,
85
+ scripts,
86
+ preload
87
+ }) {
88
+ return /*#__PURE__*/jsx(Html, {
70
89
  url: new URL(request.url),
71
- manager: htmlManager,
90
+ manager: html,
72
91
  styles: styles,
73
92
  scripts: scripts,
74
93
  preloadAssets: preload,
75
- children: markup
76
- })), {
77
- headers,
78
- status: statusCode
94
+ children: content
79
95
  });
80
96
  }
81
97
 
@@ -1,4 +1,5 @@
1
1
  export * from '@quilted/testing';
2
2
  export { createMount, mount, mounted, unmountAll } from '@quilted/react-testing';
3
- export { TestRouter, createTestRouter } from '@quilted/react-router/testing';
3
+ export { TestRouting, createTestRouter } from '@quilted/react-router/testing';
4
4
  export { GraphQLController, TestGraphQL, createFiller, createGraphQLController, createSchema } from '@quilted/react-graphql/testing';
5
+ export { QuiltAppTesting } from './TestApp.mjs';
@@ -0,0 +1,75 @@
1
+ import { HttpContext, CookieContext } from '@quilted/react-http';
2
+ import { useHtmlUpdater } from '@quilted/react-html';
3
+ import { Routing, useRoutes } from '@quilted/react-router';
4
+ import { PerformanceContext } from '@quilted/react-performance';
5
+ import { Localization } from '@quilted/react-localize';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+
8
+ // TODO: have craft options to remove the bundle impact of parts of this that are
9
+ // unused.
10
+ function QuiltApp({
11
+ http = true,
12
+ html = true,
13
+ routes,
14
+ routing = true,
15
+ localization = true,
16
+ children,
17
+ performance = true
18
+ }) {
19
+ const routesContent = routing !== false && routes ? /*#__PURE__*/jsx(StaticRoutes, {
20
+ routes: routes
21
+ }) : null;
22
+ const htmlContent = typeof html === 'boolean' ? html ? /*#__PURE__*/jsx(HtmlUpdater, {}) : null : /*#__PURE__*/jsxs(Fragment, {
23
+ children: [/*#__PURE__*/jsx(HtmlUpdater, {}), html]
24
+ });
25
+ const httpContent = typeof http === 'boolean' ? null : http;
26
+ const content = /*#__PURE__*/jsxs(Fragment, {
27
+ children: [httpContent, htmlContent, routesContent, children]
28
+ });
29
+ const withMaybeRouting = typeof routing === 'boolean' ? routing ? /*#__PURE__*/jsx(Routing, {
30
+ children: content
31
+ }) : content : 'navigate' in routing ? /*#__PURE__*/jsx(Routing, {
32
+ router: routing,
33
+ children: content
34
+ }) : /*#__PURE__*/jsx(Routing, {
35
+ ...routing,
36
+ children: content
37
+ });
38
+ const withMaybePerformance = typeof performance === 'boolean' ? performance ? /*#__PURE__*/jsx(PerformanceContext, {
39
+ children: withMaybeRouting
40
+ }) : withMaybeRouting : /*#__PURE__*/jsx(PerformanceContext, {
41
+ performance: performance,
42
+ children: withMaybeRouting
43
+ });
44
+ const withMaybeHttp = typeof http === 'boolean' ? http ? /*#__PURE__*/jsx(HttpContext, {
45
+ children: /*#__PURE__*/jsx(CookieContext, {
46
+ children: withMaybePerformance
47
+ })
48
+ }) : withMaybePerformance : /*#__PURE__*/jsx(HttpContext, {
49
+ children: /*#__PURE__*/jsx(CookieContext, {
50
+ children: withMaybePerformance
51
+ })
52
+ });
53
+ const withMaybeLocalization = typeof localization === 'boolean' ? localization ? /*#__PURE__*/jsx(Localization, {
54
+ locale: "en",
55
+ children: withMaybeHttp
56
+ }) : withMaybeHttp : typeof localization === 'string' ? /*#__PURE__*/jsx(Localization, {
57
+ locale: localization,
58
+ children: withMaybeHttp
59
+ }) : /*#__PURE__*/jsx(Localization, {
60
+ ...localization,
61
+ children: withMaybeHttp
62
+ });
63
+ return withMaybeLocalization;
64
+ }
65
+ function HtmlUpdater() {
66
+ useHtmlUpdater();
67
+ return null;
68
+ }
69
+ function StaticRoutes({
70
+ routes
71
+ }) {
72
+ return useRoutes(routes);
73
+ }
74
+
75
+ export { QuiltApp };
@@ -0,0 +1,18 @@
1
+ import { QuiltApp } from './App.esnext';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // TODO: have craft options to remove the bundle impact of parts of this that are
5
+ // unused.
6
+ function QuiltAppTesting({
7
+ routing = true,
8
+ localization = true,
9
+ children
10
+ }) {
11
+ return /*#__PURE__*/jsx(QuiltApp, {
12
+ routing: routing,
13
+ localization: localization,
14
+ children: children
15
+ });
16
+ }
17
+
18
+ export { QuiltAppTesting };
@@ -4,10 +4,10 @@ export { createAsyncComponent, useAsync, useAsyncAsset, usePreload } from '@quil
4
4
  export { GraphQLContext, createGraphQLHttpFetch, useGraphQLFetch } from '@quilted/react-graphql';
5
5
  export { useIdleCallback } from '@quilted/react-idle';
6
6
  export { ServerAction, useServerAction, useServerContext } from '@quilted/react-server-render';
7
- export { Localization, LocalizedLink, LocalizedRouter, createRouteLocalization, createRoutePathLocalization, createRouteSubdomainLocalization, useLocale, useLocaleFromEnvironment, useLocalizedFormatting, useRouteLocalization } from '@quilted/react-localize';
7
+ export { Localization, LocalizedLink, LocalizedRouting, createRouteLocalization, createRoutePathLocalization, createRouteSubdomainLocalization, useLocale, useLocaleFromEnvironment, useLocalizedFormatting, useRouteLocalization } from '@quilted/react-localize';
8
8
  export { PerformanceContext, createPerformance, usePerformance, usePerformanceNavigation, usePerformanceNavigationEvent } from '@quilted/react-performance';
9
- export { Link, NavigationBlock, Preloader, Redirect, Router, useCurrentUrl, useInitialUrl, useMatch, useNavigate, useNavigationBlock, useRedirect, useRouteChangeFocusRef, useRouter, useRoutes, useScrollRestoration } from '@quilted/react-router';
9
+ export { Link, NavigationBlock, Redirect, RoutePreloading, Routing, useCurrentUrl, useInitialUrl, useMatch, useNavigate, useNavigationBlock, useRedirect, useRouteChangeFocusRef, useRouter, useRoutes, useScrollRestoration } from '@quilted/react-router';
10
10
  export { CookieContext, useCookie, useCookies } from '@quilted/react-http';
11
11
  export { createOptionalContext, createUseContextHook, createUseOptionalValueHook } from '@quilted/react-utilities';
12
12
  export { Signal, computed as computedSignal, isSignal, resolveSignalOrValue, signal, batch as signalBatch, effect as signalEffect, useComputed, useSignal, useSignalEffect } from '@quilted/react-signals';
13
- export { AppContext } from './AppContext.esnext';
13
+ export { QuiltApp } from './App.esnext';
@@ -24,6 +24,7 @@ function createServerRenderingRequestHandler(render, {
24
24
  }
25
25
  async function renderToResponse(app, request, {
26
26
  assets,
27
+ renderHtml = defaultRenderHtml,
27
28
  ...options
28
29
  } = {}) {
29
30
  const accepts = request.headers.get('Accept');
@@ -65,17 +66,32 @@ async function renderToResponse(app, request, {
65
66
  timing: 'preload'
66
67
  }), {
67
68
  options: assetOptions
68
- })]) : [];
69
- return html(render( /*#__PURE__*/jsx(Html, {
69
+ })]) : [[], [], []];
70
+ const htmlElement = await renderHtml(markup, request, {
71
+ html: htmlManager,
72
+ http,
73
+ styles,
74
+ scripts,
75
+ preload
76
+ });
77
+ return html(render(htmlElement), {
78
+ headers,
79
+ status: statusCode
80
+ });
81
+ }
82
+ function defaultRenderHtml(content, request, {
83
+ html,
84
+ styles,
85
+ scripts,
86
+ preload
87
+ }) {
88
+ return /*#__PURE__*/jsx(Html, {
70
89
  url: new URL(request.url),
71
- manager: htmlManager,
90
+ manager: html,
72
91
  styles: styles,
73
92
  scripts: scripts,
74
93
  preloadAssets: preload,
75
- children: markup
76
- })), {
77
- headers,
78
- status: statusCode
94
+ children: content
79
95
  });
80
96
  }
81
97
 
@@ -1,4 +1,5 @@
1
1
  export * from '@quilted/testing';
2
2
  export { createMount, mount, mounted, unmountAll } from '@quilted/react-testing';
3
- export { TestRouter, createTestRouter } from '@quilted/react-router/testing';
3
+ export { TestRouting, createTestRouter } from '@quilted/react-router/testing';
4
4
  export { GraphQLController, TestGraphQL, createFiller, createGraphQLController, createSchema } from '@quilted/react-graphql/testing';
5
+ export { QuiltAppTesting } from './TestApp.esnext';