@quilted/quilt 0.0.0-Simpler-Quilt-app-context-component-20220421223224
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +189 -0
- package/build/cjs/AppContext.cjs +22 -0
- package/build/cjs/email.cjs +32 -0
- package/build/cjs/env.cjs +7 -0
- package/build/cjs/global.cjs +5 -0
- package/build/cjs/html.cjs +112 -0
- package/build/cjs/http-handlers/index.cjs +14 -0
- package/build/cjs/http-handlers/node.cjs +14 -0
- package/build/cjs/http.cjs +108 -0
- package/build/cjs/index.cjs +187 -0
- package/build/cjs/matchers.cjs +5 -0
- package/build/cjs/polyfills/base.cjs +4 -0
- package/build/cjs/polyfills/crypto.cjs +4 -0
- package/build/cjs/polyfills/fetch.cjs +4 -0
- package/build/cjs/polyfills/noop.cjs +4 -0
- package/build/cjs/react/index.cjs +22 -0
- package/build/cjs/react/jsx-runtime.cjs +14 -0
- package/build/cjs/react/server.cjs +14 -0
- package/build/cjs/react/test-utils.cjs +14 -0
- package/build/cjs/server/ServerContext.cjs +22 -0
- package/build/cjs/server/http-handler.cjs +87 -0
- package/build/cjs/server/index.cjs +89 -0
- package/build/cjs/server/render.cjs +46 -0
- package/build/cjs/static/StaticContext.cjs +22 -0
- package/build/cjs/static/index.cjs +306 -0
- package/build/cjs/static/render.cjs +46 -0
- package/build/cjs/testing.cjs +42 -0
- package/build/cjs/utilities/react.cjs +14 -0
- package/build/cjs/workers/index.cjs +14 -0
- package/build/cjs/workers/worker.cjs +14 -0
- package/build/esm/AppContext.mjs +18 -0
- package/build/esm/email.mjs +1 -0
- package/build/esm/env.mjs +3 -0
- package/build/esm/global.mjs +3 -0
- package/build/esm/html.mjs +1 -0
- package/build/esm/http-handlers/index.mjs +1 -0
- package/build/esm/http-handlers/node.mjs +1 -0
- package/build/esm/http.mjs +1 -0
- package/build/esm/index.mjs +11 -0
- package/build/esm/matchers.mjs +2 -0
- package/build/esm/polyfills/base.mjs +1 -0
- package/build/esm/polyfills/crypto.mjs +1 -0
- package/build/esm/polyfills/fetch.mjs +1 -0
- package/build/esm/polyfills/noop.mjs +1 -0
- package/build/esm/react/index.mjs +2 -0
- package/build/esm/react/jsx-runtime.mjs +1 -0
- package/build/esm/react/server.mjs +1 -0
- package/build/esm/react/test-utils.mjs +1 -0
- package/build/esm/server/ServerContext.mjs +18 -0
- package/build/esm/server/http-handler.mjs +81 -0
- package/build/esm/server/index.mjs +9 -0
- package/build/esm/server/render.mjs +42 -0
- package/build/esm/static/StaticContext.mjs +18 -0
- package/build/esm/static/index.mjs +284 -0
- package/build/esm/static/render.mjs +42 -0
- package/build/esm/testing.mjs +3 -0
- package/build/esm/utilities/react.mjs +10 -0
- package/build/esm/workers/index.mjs +1 -0
- package/build/esm/workers/worker.mjs +1 -0
- package/build/esnext/AppContext.esnext +18 -0
- package/build/esnext/email.esnext +1 -0
- package/build/esnext/env.esnext +3 -0
- package/build/esnext/global.esnext +3 -0
- package/build/esnext/html.esnext +1 -0
- package/build/esnext/http-handlers/index.esnext +1 -0
- package/build/esnext/http-handlers/node.esnext +1 -0
- package/build/esnext/http.esnext +1 -0
- package/build/esnext/index.esnext +11 -0
- package/build/esnext/matchers.esnext +2 -0
- package/build/esnext/polyfills/base.esnext +1 -0
- package/build/esnext/polyfills/crypto.esnext +1 -0
- package/build/esnext/polyfills/fetch.esnext +1 -0
- package/build/esnext/polyfills/noop.esnext +1 -0
- package/build/esnext/react/index.esnext +2 -0
- package/build/esnext/react/jsx-runtime.esnext +1 -0
- package/build/esnext/react/server.esnext +1 -0
- package/build/esnext/react/test-utils.esnext +1 -0
- package/build/esnext/server/ServerContext.esnext +18 -0
- package/build/esnext/server/http-handler.esnext +81 -0
- package/build/esnext/server/index.esnext +9 -0
- package/build/esnext/server/render.esnext +40 -0
- package/build/esnext/static/StaticContext.esnext +18 -0
- package/build/esnext/static/index.esnext +280 -0
- package/build/esnext/static/render.esnext +40 -0
- package/build/esnext/testing.esnext +3 -0
- package/build/esnext/utilities/react.esnext +10 -0
- package/build/esnext/workers/index.esnext +1 -0
- package/build/esnext/workers/worker.esnext +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/build/typescript/App.d.ts +15 -0
- package/build/typescript/App.d.ts.map +1 -0
- package/build/typescript/AppContext.d.ts +8 -0
- package/build/typescript/AppContext.d.ts.map +1 -0
- package/build/typescript/email.d.ts +3 -0
- package/build/typescript/email.d.ts.map +1 -0
- package/build/typescript/env.d.ts +5 -0
- package/build/typescript/env.d.ts.map +1 -0
- package/build/typescript/global.d.ts +2 -0
- package/build/typescript/global.d.ts.map +1 -0
- package/build/typescript/html.d.ts +3 -0
- package/build/typescript/html.d.ts.map +1 -0
- package/build/typescript/http-handlers/index.d.ts +2 -0
- package/build/typescript/http-handlers/index.d.ts.map +1 -0
- package/build/typescript/http-handlers/node.d.ts +2 -0
- package/build/typescript/http-handlers/node.d.ts.map +1 -0
- package/build/typescript/http.d.ts +2 -0
- package/build/typescript/http.d.ts.map +1 -0
- package/build/typescript/index.d.ts +21 -0
- package/build/typescript/index.d.ts.map +1 -0
- package/build/typescript/magic/app.d.ts +4 -0
- package/build/typescript/magic/app.d.ts.map +1 -0
- package/build/typescript/magic/asset-loader.d.ts +6 -0
- package/build/typescript/magic/asset-loader.d.ts.map +1 -0
- package/build/typescript/magic/http-handler.d.ts +4 -0
- package/build/typescript/magic/http-handler.d.ts.map +1 -0
- package/build/typescript/matchers.d.ts +3 -0
- package/build/typescript/matchers.d.ts.map +1 -0
- package/build/typescript/polyfills/base.d.ts +2 -0
- package/build/typescript/polyfills/base.d.ts.map +1 -0
- package/build/typescript/polyfills/crypto.d.ts +2 -0
- package/build/typescript/polyfills/crypto.d.ts.map +1 -0
- package/build/typescript/polyfills/fetch.d.ts +2 -0
- package/build/typescript/polyfills/fetch.d.ts.map +1 -0
- package/build/typescript/polyfills/noop.d.ts +2 -0
- package/build/typescript/polyfills/noop.d.ts.map +1 -0
- package/build/typescript/react/index.d.ts +3 -0
- package/build/typescript/react/index.d.ts.map +1 -0
- package/build/typescript/react/jsx-runtime.d.ts +2 -0
- package/build/typescript/react/jsx-runtime.d.ts.map +1 -0
- package/build/typescript/react/server.d.ts +2 -0
- package/build/typescript/react/server.d.ts.map +1 -0
- package/build/typescript/react/test-utils.d.ts +2 -0
- package/build/typescript/react/test-utils.d.ts.map +1 -0
- package/build/typescript/server/ServerContext.d.ts +13 -0
- package/build/typescript/server/ServerContext.d.ts.map +1 -0
- package/build/typescript/server/http-handler.d.ts +15 -0
- package/build/typescript/server/http-handler.d.ts.map +1 -0
- package/build/typescript/server/index.d.ts +13 -0
- package/build/typescript/server/index.d.ts.map +1 -0
- package/build/typescript/server/render.d.ts +17 -0
- package/build/typescript/server/render.d.ts.map +1 -0
- package/build/typescript/static/StaticContext.d.ts +13 -0
- package/build/typescript/static/StaticContext.d.ts.map +1 -0
- package/build/typescript/static/index.d.ts +22 -0
- package/build/typescript/static/index.d.ts.map +1 -0
- package/build/typescript/static/render.d.ts +17 -0
- package/build/typescript/static/render.d.ts.map +1 -0
- package/build/typescript/testing.d.ts +4 -0
- package/build/typescript/testing.d.ts.map +1 -0
- package/build/typescript/utilities/react.d.ts +3 -0
- package/build/typescript/utilities/react.d.ts.map +1 -0
- package/build/typescript/workers/index.d.ts +2 -0
- package/build/typescript/workers/index.d.ts.map +1 -0
- package/build/typescript/workers/worker.d.ts +2 -0
- package/build/typescript/workers/worker.d.ts.map +1 -0
- package/package.json +282 -0
- package/quilt.project.ts +48 -0
- package/source/AppContext.tsx +21 -0
- package/source/email.ts +9 -0
- package/source/env.ts +5 -0
- package/source/global.ts +3 -0
- package/source/html.ts +29 -0
- package/source/http-handlers/index.ts +1 -0
- package/source/http-handlers/node.ts +1 -0
- package/source/http.ts +27 -0
- package/source/index.ts +103 -0
- package/source/magic/app.ts +5 -0
- package/source/magic/asset-loader.ts +5 -0
- package/source/magic/http-handler.ts +5 -0
- package/source/matchers.ts +2 -0
- package/source/polyfills/README.md +3 -0
- package/source/polyfills/base.ts +1 -0
- package/source/polyfills/crypto.ts +1 -0
- package/source/polyfills/fetch.ts +1 -0
- package/source/polyfills/noop.ts +1 -0
- package/source/react/index.ts +4 -0
- package/source/react/jsx-runtime.ts +2 -0
- package/source/react/server.ts +2 -0
- package/source/react/test-utils.ts +2 -0
- package/source/server/ServerContext.tsx +42 -0
- package/source/server/http-handler.tsx +101 -0
- package/source/server/index.ts +45 -0
- package/source/server/render.tsx +43 -0
- package/source/static/StaticContext.tsx +42 -0
- package/source/static/index.tsx +307 -0
- package/source/static/render.tsx +43 -0
- package/source/testing.ts +7 -0
- package/source/utilities/react.tsx +13 -0
- package/source/workers/index.ts +1 -0
- package/source/workers/worker.ts +1 -0
- package/tsconfig.json +30 -0
package/source/index.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
export {createAsyncLoader} from '@quilted/async';
|
|
2
|
+
export type {AsyncLoader} from '@quilted/async';
|
|
3
|
+
export {
|
|
4
|
+
useAsync,
|
|
5
|
+
useAsyncAsset,
|
|
6
|
+
usePreload,
|
|
7
|
+
createAsyncComponent,
|
|
8
|
+
} from '@quilted/react-async';
|
|
9
|
+
export type {
|
|
10
|
+
NoOptions,
|
|
11
|
+
AssetLoadTiming,
|
|
12
|
+
HydrationTiming,
|
|
13
|
+
RenderTiming,
|
|
14
|
+
AsyncComponentType,
|
|
15
|
+
Preloadable,
|
|
16
|
+
} from '@quilted/react-async';
|
|
17
|
+
export {
|
|
18
|
+
GraphQLContext,
|
|
19
|
+
createGraphQL,
|
|
20
|
+
createGraphQLHttpFetch,
|
|
21
|
+
useQuery,
|
|
22
|
+
useGraphQL,
|
|
23
|
+
useMutation,
|
|
24
|
+
} from '@quilted/react-graphql';
|
|
25
|
+
export type {
|
|
26
|
+
GraphQL,
|
|
27
|
+
GraphQLResult,
|
|
28
|
+
GraphQLFetch,
|
|
29
|
+
GraphQLData,
|
|
30
|
+
GraphQLVariables,
|
|
31
|
+
GraphQLRequest,
|
|
32
|
+
GraphQLRequestContext,
|
|
33
|
+
GraphQLOperation,
|
|
34
|
+
GraphQLOperationType,
|
|
35
|
+
GraphQLDeepPartialData,
|
|
36
|
+
GraphQLHttpFetchContext,
|
|
37
|
+
GraphQLHttpFetchOptions,
|
|
38
|
+
PickGraphQLType,
|
|
39
|
+
GraphQLVariableOptions,
|
|
40
|
+
GraphQLQueryOptions,
|
|
41
|
+
GraphQLMutationOptions,
|
|
42
|
+
} from '@quilted/react-graphql';
|
|
43
|
+
export {useIdleCallback} from '@quilted/react-idle';
|
|
44
|
+
export {ServerAction, useServerAction} from '@quilted/react-server-render';
|
|
45
|
+
export type {
|
|
46
|
+
ServerActionKind,
|
|
47
|
+
ServerActionOptions,
|
|
48
|
+
ServerActionPerform,
|
|
49
|
+
ServerRenderPass,
|
|
50
|
+
} from '@quilted/react-server-render';
|
|
51
|
+
export {
|
|
52
|
+
Localization,
|
|
53
|
+
useLocale,
|
|
54
|
+
useLocaleFromEnvironment,
|
|
55
|
+
useLocalizedFormatting,
|
|
56
|
+
} from '@quilted/react-localize';
|
|
57
|
+
export type {
|
|
58
|
+
LocalizedFormatting,
|
|
59
|
+
LocalizedFormattingCache,
|
|
60
|
+
LocalizedNumberFormatOptions,
|
|
61
|
+
LocalizedDateTimeFormatOptions,
|
|
62
|
+
} from '@quilted/react-localize';
|
|
63
|
+
export {
|
|
64
|
+
PerformanceContext,
|
|
65
|
+
usePerformance,
|
|
66
|
+
usePerformanceNavigation,
|
|
67
|
+
} from '@quilted/react-performance';
|
|
68
|
+
export type {
|
|
69
|
+
Performance,
|
|
70
|
+
PerformanceNavigation,
|
|
71
|
+
PerformanceInflightNavigation,
|
|
72
|
+
} from '@quilted/react-performance';
|
|
73
|
+
export {
|
|
74
|
+
Link,
|
|
75
|
+
Redirect,
|
|
76
|
+
Router,
|
|
77
|
+
Preloader,
|
|
78
|
+
NavigationBlock,
|
|
79
|
+
useCurrentUrl,
|
|
80
|
+
useInitialUrl,
|
|
81
|
+
useRouter,
|
|
82
|
+
useRoutes,
|
|
83
|
+
useMatch,
|
|
84
|
+
useNavigate,
|
|
85
|
+
useRedirect,
|
|
86
|
+
useNavigationBlock,
|
|
87
|
+
useScrollRestoration,
|
|
88
|
+
useRouteChangeFocusRef,
|
|
89
|
+
} from '@quilted/react-router';
|
|
90
|
+
export type {NavigateTo, RouteDefinition} from '@quilted/react-router';
|
|
91
|
+
export {
|
|
92
|
+
useWorker,
|
|
93
|
+
createWorker,
|
|
94
|
+
createCallableWorker,
|
|
95
|
+
} from '@quilted/react-workers';
|
|
96
|
+
export type {
|
|
97
|
+
BasicWorkerCreator,
|
|
98
|
+
CallableWorkerCreator,
|
|
99
|
+
} from '@quilted/react-workers';
|
|
100
|
+
export {useCookie, useCookies, CookieContext} from '@quilted/react-http';
|
|
101
|
+
export type {PropsWithChildren} from '@quilted/useful-react-types';
|
|
102
|
+
|
|
103
|
+
export {AppContext} from './AppContext';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# `@quilted/quilt/polyfills/*`
|
|
2
|
+
|
|
3
|
+
This directory re-exports the polyfills provided by `@quilted/polyfills`. This is done because most consumers will have a dependency only on `@quilted/quilt`, not `@quilted/polyfills`, but we need to insert imports for polyfills into “app code”. Strict package managers, like `pnpm`, will then install `@quilted/polyfills` in such a way that imports of that package fail to resolve. To fix this, we re-export all the entry points that can be inserted in app code from `@quilted/quilt/polyfills/*`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@quilted/polyfills/base';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@quilted/polyfills/crypto';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@quilted/polyfills/fetch';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@quilted/polyfills/noop';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type {PropsWithChildren} from 'react';
|
|
2
|
+
|
|
3
|
+
import {InitialUrlContext} from '@quilted/react-router';
|
|
4
|
+
import {HtmlContext} from '@quilted/react-html/server';
|
|
5
|
+
import type {HtmlManager} from '@quilted/react-html/server';
|
|
6
|
+
import {AsyncAssetContext} from '@quilted/react-async/server';
|
|
7
|
+
import type {AsyncAssetManager} from '@quilted/react-async/server';
|
|
8
|
+
import {HttpServerContext} from '@quilted/react-http/server';
|
|
9
|
+
import type {HttpManager} from '@quilted/react-http/server';
|
|
10
|
+
|
|
11
|
+
import {maybeWrapContext} from '../utilities/react';
|
|
12
|
+
|
|
13
|
+
interface Props {
|
|
14
|
+
url?: string | URL;
|
|
15
|
+
html?: HtmlManager;
|
|
16
|
+
http?: HttpManager;
|
|
17
|
+
asyncAssets?: AsyncAssetManager;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function ServerContext({
|
|
21
|
+
url,
|
|
22
|
+
html,
|
|
23
|
+
http,
|
|
24
|
+
asyncAssets,
|
|
25
|
+
children,
|
|
26
|
+
}: PropsWithChildren<Props>) {
|
|
27
|
+
const normalizedUrl = typeof url === 'string' ? new URL(url) : url;
|
|
28
|
+
|
|
29
|
+
return maybeWrapContext(
|
|
30
|
+
AsyncAssetContext,
|
|
31
|
+
asyncAssets,
|
|
32
|
+
maybeWrapContext(
|
|
33
|
+
HttpServerContext,
|
|
34
|
+
http,
|
|
35
|
+
maybeWrapContext(
|
|
36
|
+
HtmlContext,
|
|
37
|
+
html,
|
|
38
|
+
maybeWrapContext(InitialUrlContext, normalizedUrl, children),
|
|
39
|
+
),
|
|
40
|
+
),
|
|
41
|
+
);
|
|
42
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type {ComponentType, ReactElement} from 'react';
|
|
2
|
+
|
|
3
|
+
import type {AssetLoader} from '@quilted/async/server';
|
|
4
|
+
import {render as renderToString, Html} from '@quilted/react-html/server';
|
|
5
|
+
import type {Options as ExtractOptions} from '@quilted/react-server-render/server';
|
|
6
|
+
|
|
7
|
+
import {createHttpHandler, html, redirect} from '@quilted/http-handlers';
|
|
8
|
+
import type {
|
|
9
|
+
Request,
|
|
10
|
+
HttpHandler,
|
|
11
|
+
RequestHandler,
|
|
12
|
+
} from '@quilted/http-handlers';
|
|
13
|
+
|
|
14
|
+
import {renderApp} from './render';
|
|
15
|
+
|
|
16
|
+
export interface Options<Props = Record<string, never>> extends ExtractOptions {
|
|
17
|
+
assets?: AssetLoader<unknown>;
|
|
18
|
+
handler?: HttpHandler;
|
|
19
|
+
renderProps?(options: {request: Request}): Props;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function createServerRenderingHttpHandler<Props>(
|
|
23
|
+
App: ComponentType<Props>,
|
|
24
|
+
{handler = createHttpHandler(), ...options}: Options<Props>,
|
|
25
|
+
) {
|
|
26
|
+
handler.get(createServerRenderingRequestHandler(App, options));
|
|
27
|
+
return handler;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function createServerRenderingRequestHandler<Props>(
|
|
31
|
+
App: ComponentType<Props>,
|
|
32
|
+
{renderProps, ...options}: Omit<Options<Props>, 'handler'> = {},
|
|
33
|
+
): RequestHandler {
|
|
34
|
+
return (request) => {
|
|
35
|
+
return renderToResponse(
|
|
36
|
+
<App {...(renderProps?.({request}) as any)} />,
|
|
37
|
+
request,
|
|
38
|
+
options,
|
|
39
|
+
);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function renderToResponse<Props>(
|
|
44
|
+
element: ReactElement<Props>,
|
|
45
|
+
request: Request,
|
|
46
|
+
{assets, ...options}: Omit<Options<Props>, 'handler' | 'renderProps'> = {},
|
|
47
|
+
) {
|
|
48
|
+
const accepts = request.headers.get('Accept');
|
|
49
|
+
|
|
50
|
+
if (accepts != null && !accepts.includes('text/html')) return;
|
|
51
|
+
|
|
52
|
+
const {
|
|
53
|
+
html: htmlManager,
|
|
54
|
+
http,
|
|
55
|
+
markup,
|
|
56
|
+
asyncAssets,
|
|
57
|
+
} = await renderApp(element, {
|
|
58
|
+
...options,
|
|
59
|
+
url: request.url,
|
|
60
|
+
headers: request.headers,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const {headers, statusCode = 200, redirectUrl} = http.state;
|
|
64
|
+
|
|
65
|
+
if (redirectUrl) {
|
|
66
|
+
return redirect(redirectUrl, {
|
|
67
|
+
status: statusCode as 301,
|
|
68
|
+
headers,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const usedAssets = asyncAssets.used({timing: 'load'});
|
|
73
|
+
const assetOptions = {userAgent: request.headers.get('User-Agent')};
|
|
74
|
+
|
|
75
|
+
const [styles, scripts, preload] = assets
|
|
76
|
+
? await Promise.all([
|
|
77
|
+
assets.styles({async: usedAssets, options: assetOptions}),
|
|
78
|
+
assets.scripts({async: usedAssets, options: assetOptions}),
|
|
79
|
+
assets.asyncAssets(asyncAssets.used({timing: 'preload'}), {
|
|
80
|
+
options: assetOptions,
|
|
81
|
+
}),
|
|
82
|
+
])
|
|
83
|
+
: [];
|
|
84
|
+
|
|
85
|
+
return html(
|
|
86
|
+
renderToString(
|
|
87
|
+
<Html
|
|
88
|
+
manager={htmlManager}
|
|
89
|
+
styles={styles}
|
|
90
|
+
scripts={scripts}
|
|
91
|
+
preloadAssets={preload}
|
|
92
|
+
>
|
|
93
|
+
{markup}
|
|
94
|
+
</Html>,
|
|
95
|
+
),
|
|
96
|
+
{
|
|
97
|
+
headers,
|
|
98
|
+
status: statusCode,
|
|
99
|
+
},
|
|
100
|
+
);
|
|
101
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export {
|
|
2
|
+
render,
|
|
3
|
+
Html,
|
|
4
|
+
Serialize,
|
|
5
|
+
HtmlManager,
|
|
6
|
+
HtmlContext,
|
|
7
|
+
SERVER_ACTION_ID as HTML_SERVER_ACTION_ID,
|
|
8
|
+
} from '@quilted/react-html/server';
|
|
9
|
+
export {
|
|
10
|
+
ServerAction,
|
|
11
|
+
useServerAction,
|
|
12
|
+
ServerRenderManager,
|
|
13
|
+
ServerRenderContext,
|
|
14
|
+
extract,
|
|
15
|
+
} from '@quilted/react-server-render/server';
|
|
16
|
+
export {createAssetLoader} from '@quilted/async/server';
|
|
17
|
+
export type {
|
|
18
|
+
Asset,
|
|
19
|
+
AssetLoader,
|
|
20
|
+
AssetSelector,
|
|
21
|
+
AssetManifest,
|
|
22
|
+
AssetManifestEntry,
|
|
23
|
+
} from '@quilted/async/server';
|
|
24
|
+
export {
|
|
25
|
+
AsyncAssetContext,
|
|
26
|
+
AsyncAssetManager,
|
|
27
|
+
SERVER_ACTION_ID as ASYNC_ASSETS_SERVER_ACTION_ID,
|
|
28
|
+
} from '@quilted/react-async/server';
|
|
29
|
+
export type {
|
|
30
|
+
ServerActionKind,
|
|
31
|
+
ServerActionOptions,
|
|
32
|
+
ServerActionPerform,
|
|
33
|
+
ServerRenderPass,
|
|
34
|
+
} from '@quilted/react-server-render/server';
|
|
35
|
+
export {renderEmail} from '@quilted/react-email/server';
|
|
36
|
+
export type {HttpState} from '@quilted/react-http/server';
|
|
37
|
+
export {createHttpHandler} from '@quilted/http-handlers';
|
|
38
|
+
|
|
39
|
+
export {renderApp} from './render';
|
|
40
|
+
export {ServerContext} from './ServerContext';
|
|
41
|
+
export {
|
|
42
|
+
createServerRenderingRequestHandler,
|
|
43
|
+
createServerRenderingHttpHandler,
|
|
44
|
+
renderToResponse,
|
|
45
|
+
} from './http-handler';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type {ReactElement} from 'react';
|
|
2
|
+
|
|
3
|
+
import {extract} from '@quilted/react-server-render/server';
|
|
4
|
+
import type {Options as ExtractOptions} from '@quilted/react-server-render/server';
|
|
5
|
+
import {HtmlManager} from '@quilted/react-html/server';
|
|
6
|
+
import {HttpManager} from '@quilted/react-http/server';
|
|
7
|
+
import {AsyncAssetManager} from '@quilted/react-async/server';
|
|
8
|
+
|
|
9
|
+
import {ServerContext} from './ServerContext';
|
|
10
|
+
|
|
11
|
+
interface Options extends ExtractOptions {
|
|
12
|
+
url?: string | URL;
|
|
13
|
+
headers?: NonNullable<
|
|
14
|
+
ConstructorParameters<typeof HttpManager>[0]
|
|
15
|
+
>['headers'];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function renderApp(
|
|
19
|
+
app: ReactElement<any>,
|
|
20
|
+
{decorate, url, headers, ...rest}: Options = {},
|
|
21
|
+
) {
|
|
22
|
+
const html = new HtmlManager();
|
|
23
|
+
const asyncAssets = new AsyncAssetManager();
|
|
24
|
+
const http = new HttpManager({headers});
|
|
25
|
+
|
|
26
|
+
const markup = await extract(app, {
|
|
27
|
+
decorate(app) {
|
|
28
|
+
return (
|
|
29
|
+
<ServerContext
|
|
30
|
+
asyncAssets={asyncAssets}
|
|
31
|
+
http={http}
|
|
32
|
+
html={html}
|
|
33
|
+
url={url}
|
|
34
|
+
>
|
|
35
|
+
{decorate?.(app) ?? app}
|
|
36
|
+
</ServerContext>
|
|
37
|
+
);
|
|
38
|
+
},
|
|
39
|
+
...rest,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return {markup, http, html, asyncAssets};
|
|
43
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type {PropsWithChildren} from 'react';
|
|
2
|
+
|
|
3
|
+
import {InitialUrlContext} from '@quilted/react-router';
|
|
4
|
+
import {HtmlContext} from '@quilted/react-html/server';
|
|
5
|
+
import type {HtmlManager} from '@quilted/react-html/server';
|
|
6
|
+
import {AsyncAssetContext} from '@quilted/react-async/server';
|
|
7
|
+
import type {AsyncAssetManager} from '@quilted/react-async/server';
|
|
8
|
+
import {HttpServerContext} from '@quilted/react-http/server';
|
|
9
|
+
import type {HttpManager} from '@quilted/react-http/server';
|
|
10
|
+
|
|
11
|
+
import {maybeWrapContext} from '../utilities/react';
|
|
12
|
+
|
|
13
|
+
interface Props {
|
|
14
|
+
url?: string | URL;
|
|
15
|
+
html?: HtmlManager;
|
|
16
|
+
http?: HttpManager;
|
|
17
|
+
asyncAssets?: AsyncAssetManager;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function StaticContext({
|
|
21
|
+
url,
|
|
22
|
+
html,
|
|
23
|
+
http,
|
|
24
|
+
asyncAssets,
|
|
25
|
+
children,
|
|
26
|
+
}: PropsWithChildren<Props>) {
|
|
27
|
+
const normalizedUrl = typeof url === 'string' ? new URL(url) : url;
|
|
28
|
+
|
|
29
|
+
return maybeWrapContext(
|
|
30
|
+
AsyncAssetContext,
|
|
31
|
+
asyncAssets,
|
|
32
|
+
maybeWrapContext(
|
|
33
|
+
HttpServerContext,
|
|
34
|
+
http,
|
|
35
|
+
maybeWrapContext(
|
|
36
|
+
HtmlContext,
|
|
37
|
+
html,
|
|
38
|
+
maybeWrapContext(InitialUrlContext, normalizedUrl, children),
|
|
39
|
+
),
|
|
40
|
+
),
|
|
41
|
+
);
|
|
42
|
+
}
|