vike-react 0.5.6 → 0.5.8

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/README.md CHANGED
@@ -1,2 +1 @@
1
- Docs: [vike.dev/vike-react](https://vike.dev/vike-react)
2
- Source code: [GitHub > vikejs/vike-react](https://github.com/vikejs/vike-react)
1
+ See [Vike Docs > vike-react](https://vike.dev/vike-react).
package/dist/+config.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ export { config as default };
1
2
  import { ssrEffect } from './integration/ssrEffect.js';
2
- declare const _default: {
3
+ declare const config: {
3
4
  name: string;
4
5
  require: {
5
6
  vike: string;
@@ -101,6 +102,12 @@ declare const _default: {
101
102
  server: true;
102
103
  };
103
104
  };
105
+ onBeforeRenderHtml: {
106
+ env: {
107
+ server: true;
108
+ };
109
+ cumulative: true;
110
+ };
104
111
  onAfterRenderHtml: {
105
112
  env: {
106
113
  server: true;
@@ -140,6 +147,5 @@ declare const _default: {
140
147
  };
141
148
  };
142
149
  };
143
- export default _default;
144
150
  import './types/Config.js';
145
151
  import './types/PageContext.js';
package/dist/+config.js CHANGED
@@ -1,6 +1,7 @@
1
+ export { config as default };
1
2
  import { ssrEffect } from './integration/ssrEffect.js';
2
3
  import { isNotFalse } from './utils/isNotFalse.js';
3
- export default {
4
+ const config = {
4
5
  name: 'vike-react',
5
6
  require: {
6
7
  vike: '>=0.4.182',
@@ -77,6 +78,10 @@ export default {
77
78
  streamIsRequired: {
78
79
  env: { server: true },
79
80
  },
81
+ onBeforeRenderHtml: {
82
+ env: { server: true },
83
+ cumulative: true,
84
+ },
80
85
  onAfterRenderHtml: {
81
86
  env: { server: true },
82
87
  cumulative: true,
@@ -1,6 +1,6 @@
1
- import React from 'react';
2
1
  declare const _default: {
3
2
  component: typeof LoadingComponent;
4
3
  };
5
4
  export default _default;
5
+ import React from 'react';
6
6
  declare function LoadingComponent(): React.JSX.Element;
@@ -1,7 +1,7 @@
1
- import React from 'react';
2
1
  export default {
3
2
  component: LoadingComponent,
4
3
  };
4
+ import React from 'react';
5
5
  function LoadingComponent() {
6
6
  return (React.createElement("div", { style: {
7
7
  width: '100%',
@@ -1,3 +1,6 @@
1
1
  export { getPageElement };
2
2
  import type { PageContext } from 'vike/types';
3
- declare function getPageElement(pageContext: PageContext): JSX.Element;
3
+ declare function getPageElement(pageContext: PageContext): {
4
+ page: JSX.Element;
5
+ renderPromise: Promise<void>;
6
+ };
@@ -1,5 +1,5 @@
1
1
  export { getPageElement };
2
- import React, { Suspense } from 'react';
2
+ import React, { Suspense, useEffect } from 'react';
3
3
  import { PageContextProvider } from '../hooks/usePageContext.js';
4
4
  function getPageElement(pageContext) {
5
5
  const { Page, config: { Loading }, } = pageContext;
@@ -21,8 +21,15 @@ function getPageElement(pageContext) {
21
21
  page = addSuspense(page);
22
22
  });
23
23
  page = React.createElement(PageContextProvider, { pageContext: pageContext }, page);
24
+ let renderPromiseResolve;
25
+ let renderPromise = new Promise((r) => (renderPromiseResolve = r));
26
+ page = React.createElement(RenderPromiseProvider, { renderPromiseResolve: renderPromiseResolve }, page);
24
27
  if (pageContext.config.reactStrictMode !== false) {
25
28
  page = React.createElement(React.StrictMode, null, page);
26
29
  }
27
- return page;
30
+ return { page, renderPromise };
31
+ }
32
+ function RenderPromiseProvider({ children, renderPromiseResolve, }) {
33
+ useEffect(renderPromiseResolve);
34
+ return children;
28
35
  }
@@ -12,7 +12,7 @@ const onRenderClient = async (pageContext) => {
12
12
  // Use case:
13
13
  // - Store hydration https://github.com/vikejs/vike-react/issues/110
14
14
  await callCumulativeHooks(pageContext.config.onBeforeRenderClient, pageContext);
15
- const page = getPageElement(pageContext);
15
+ const { page, renderPromise } = getPageElement(pageContext);
16
16
  pageContext.page = page;
17
17
  // TODO: implement this? So that, upon errors, onRenderClient() throws an error and Vike can render the error. As of April 2024 it isn't released yet.
18
18
  // - https://react-dev-git-fork-rickhanlonii-rh-root-options-fbopensource.vercel.app/reference/react-dom/client/createRoot#show-a-dialog-for-uncaught-errors
@@ -39,6 +39,7 @@ const onRenderClient = async (pageContext) => {
39
39
  root.render(page);
40
40
  }
41
41
  pageContext.root = root;
42
+ await renderPromise;
42
43
  if (!pageContext.isHydration) {
43
44
  pageContext._headAlreadySet = true;
44
45
  applyHead(pageContext);
@@ -32,27 +32,26 @@ const onRenderHtml = async (pageContext) => {
32
32
  </html>`;
33
33
  };
34
34
  async function getPageHtml(pageContext) {
35
- let pageHtml;
36
- if (!pageContext.Page) {
37
- pageHtml = '';
38
- }
39
- else {
40
- const page = getPageElement(pageContext);
35
+ if (pageContext.Page)
36
+ pageContext.page = getPageElement(pageContext).page;
37
+ // https://github.com/vikejs/vike-react/issues/87#issuecomment-2488742744
38
+ await callCumulativeHooks(pageContext.config.onBeforeRenderHtml, pageContext);
39
+ let pageHtml = '';
40
+ if (pageContext.page) {
41
41
  const { stream, streamIsRequired } = pageContext.config;
42
42
  if (!stream && !streamIsRequired) {
43
- const pageHtmlString = renderToString(page);
43
+ const pageHtmlString = renderToString(pageContext.page);
44
44
  pageContext.pageHtmlString = pageHtmlString;
45
45
  pageHtml = dangerouslySkipEscape(pageHtmlString);
46
46
  }
47
47
  else {
48
- const disable = stream === false ? true : undefined;
49
- const pageHtmlStream = await renderToStream(page, {
48
+ const pageHtmlStream = await renderToStream(pageContext.page, {
50
49
  webStream: typeof stream === 'string' ? stream === 'web' : undefined,
51
50
  userAgent: pageContext.headers?.['user-agent'] ||
52
51
  // TODO/eventually: remove old way of acccessing the User Agent header.
53
52
  // @ts-ignore
54
53
  pageContext.userAgent,
55
- disable,
54
+ disable: stream === false ? true : undefined,
56
55
  });
57
56
  pageContext.pageHtmlStream = pageHtmlStream;
58
57
  pageHtml = pageHtmlStream;
@@ -165,7 +165,13 @@ declare global {
165
165
  */
166
166
  reactStrictMode?: boolean;
167
167
  /**
168
- * Server-side hook called right after rendering the page's root React component to HTML.
168
+ * Hook called right before rendering the page's root React component to HTML.
169
+ *
170
+ * https://vike.dev/onBeforeRenderHtml
171
+ */
172
+ onBeforeRenderHtml?: (pageContext: PageContextServer) => void;
173
+ /**
174
+ * Hook called right after rendering the page's root React component to HTML.
169
175
  *
170
176
  * https://vike.dev/onAfterRenderHtml
171
177
  */
@@ -197,6 +203,7 @@ declare global {
197
203
  bodyHtmlEnd?: BodyHtmlBoundary[];
198
204
  bodyAttributes?: TagAttributes[];
199
205
  htmlAttributes?: TagAttributes[];
206
+ onBeforeRenderHtml?: Function[];
200
207
  onAfterRenderHtml?: Function[];
201
208
  onBeforeRenderClient?: Function[];
202
209
  onAfterRenderClient?: Function[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike-react",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "repository": "https://github.com/vikejs/vike-react",
5
5
  "type": "module",
6
6
  "exports": {
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "devDependencies": {
46
46
  "@biomejs/biome": "^1.6.4",
47
- "@brillout/release-me": "^0.3.8",
47
+ "@brillout/release-me": "^0.4.2",
48
48
  "@types/node": "^20.11.17",
49
49
  "@types/react": "^18.2.55",
50
50
  "@types/react-dom": "^18.2.19",
@@ -53,7 +53,7 @@
53
53
  "react-streaming": "^0.3.43",
54
54
  "rimraf": "^5.0.5",
55
55
  "typescript": "^5.5.4",
56
- "vike": "^0.4.191",
56
+ "vike": "^0.4.203",
57
57
  "vite": "^5.4.0"
58
58
  },
59
59
  "typesVersions": {