vike-react 0.3.1 → 0.3.2
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/dist/renderer/+config.d.ts +2 -2
- package/dist/renderer/+config.js +8 -2
- package/dist/renderer/getPageElement.js +1 -2
- package/dist/renderer/getTitle.d.ts +6 -5
- package/dist/renderer/getTitle.js +23 -24
- package/dist/renderer/onRenderClient.d.ts +3 -3
- package/dist/renderer/onRenderClient.js +15 -7
- package/dist/renderer/onRenderHtml.d.ts +3 -5
- package/dist/renderer/onRenderHtml.js +6 -6
- package/dist/renderer/types.d.ts +5 -2
- package/package.json +2 -2
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { ConfigEffect } from 'vike/types';
|
2
2
|
declare const _default: {
|
3
|
-
onRenderHtml: "import:vike-react/renderer/onRenderHtml";
|
4
|
-
onRenderClient: "import:vike-react/renderer/onRenderClient";
|
3
|
+
onRenderHtml: "import:vike-react/renderer/onRenderHtml:onRenderHtml";
|
4
|
+
onRenderClient: "import:vike-react/renderer/onRenderClient:onRenderClient";
|
5
5
|
passToClient: string[];
|
6
6
|
clientRouting: true;
|
7
7
|
hydrationCanBeAborted: true;
|
package/dist/renderer/+config.js
CHANGED
@@ -19,8 +19,14 @@ const toggleSsrRelatedConfig = ({ configDefinedAt, configValue }) => {
|
|
19
19
|
};
|
20
20
|
};
|
21
21
|
export default {
|
22
|
-
onRenderHtml: 'import:vike-react/renderer/onRenderHtml',
|
23
|
-
onRenderClient: 'import:vike-react/renderer/onRenderClient',
|
22
|
+
onRenderHtml: 'import:vike-react/renderer/onRenderHtml:onRenderHtml',
|
23
|
+
onRenderClient: 'import:vike-react/renderer/onRenderClient:onRenderClient',
|
24
|
+
// A page can define an onBeforeRender() hook to be run on the server, which
|
25
|
+
// can fetch data and return it as additional page context. Typically it will
|
26
|
+
// return the page's root React component's props and additional data that can
|
27
|
+
// be used by the renderers.
|
28
|
+
// It is a cumulative config option, so a web app using vike-react can extend
|
29
|
+
// this list.
|
24
30
|
passToClient: ['pageProps', 'title'],
|
25
31
|
clientRouting: true,
|
26
32
|
hydrationCanBeAborted: true,
|
@@ -13,8 +13,7 @@ function getPageElement(pageContext) {
|
|
13
13
|
const page = (React.createElement(React.StrictMode, null,
|
14
14
|
React.createElement(PageContextProvider, { pageContext: pageContext },
|
15
15
|
React.createElement(Wrapper, null,
|
16
|
-
React.createElement(Layout, null,
|
17
|
-
React.createElement(Page, { ...pageProps }))))));
|
16
|
+
React.createElement(Layout, null, Page ? React.createElement(Page, { ...pageProps }) : null)))));
|
18
17
|
return page;
|
19
18
|
}
|
20
19
|
function PassThrough({ children }) {
|
@@ -1,6 +1,7 @@
|
|
1
1
|
export { getTitle };
|
2
|
-
import type {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
import type { PageContext } from 'vike/types';
|
3
|
+
/**
|
4
|
+
* Get the page's title if defined, either from the additional data fetched by
|
5
|
+
* the page's onBeforeRender() hook or from the config.
|
6
|
+
*/
|
7
|
+
declare function getTitle(pageContext: PageContext): null | string;
|
@@ -1,33 +1,32 @@
|
|
1
1
|
export { getTitle };
|
2
2
|
import { isCallable } from './utils/isCallable.js';
|
3
|
+
/**
|
4
|
+
* Get the page's title if defined, either from the additional data fetched by
|
5
|
+
* the page's onBeforeRender() hook or from the config.
|
6
|
+
*/
|
3
7
|
function getTitle(pageContext) {
|
4
8
|
var _a;
|
5
|
-
if (pageContext.title) {
|
6
|
-
if (typeof pageContext.title !== 'string') {
|
7
|
-
throw new Error('pageContext.title should be a string');
|
8
|
-
}
|
9
|
+
if (pageContext.title !== undefined) {
|
9
10
|
return pageContext.title;
|
10
11
|
}
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
throw new Error(configDefinedAt + ' should return a string');
|
28
|
-
}
|
29
|
-
return val;
|
12
|
+
const titleConfig = (_a = pageContext.configEntries.title) === null || _a === void 0 ? void 0 : _a[0];
|
13
|
+
if (!titleConfig) {
|
14
|
+
return null;
|
15
|
+
}
|
16
|
+
const title = titleConfig.configValue;
|
17
|
+
if (typeof title === 'string') {
|
18
|
+
return title;
|
19
|
+
}
|
20
|
+
if (!title) {
|
21
|
+
return null;
|
22
|
+
}
|
23
|
+
const { configDefinedAt } = titleConfig;
|
24
|
+
if (isCallable(title)) {
|
25
|
+
const val = title(pageContext);
|
26
|
+
if (typeof val !== 'string') {
|
27
|
+
throw new Error(configDefinedAt + ' should return a string');
|
30
28
|
}
|
31
|
-
|
29
|
+
return val;
|
32
30
|
}
|
31
|
+
throw new Error(configDefinedAt + ' should be a string or a function returning a string');
|
33
32
|
}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
export
|
2
|
-
import type {
|
3
|
-
declare
|
1
|
+
export { onRenderClient };
|
2
|
+
import type { OnRenderClientAsync } from 'vike/types';
|
3
|
+
declare const onRenderClient: OnRenderClientAsync;
|
@@ -1,22 +1,30 @@
|
|
1
|
-
|
1
|
+
// https://vike.dev/onRenderClient
|
2
|
+
export { onRenderClient };
|
2
3
|
import ReactDOM from 'react-dom/client';
|
3
4
|
import { getTitle } from './getTitle.js';
|
4
5
|
import { getPageElement } from './getPageElement.js';
|
5
6
|
let root;
|
6
|
-
async
|
7
|
+
const onRenderClient = async (pageContext) => {
|
7
8
|
const page = getPageElement(pageContext);
|
8
9
|
const container = document.getElementById('page-view');
|
9
10
|
if (container.innerHTML !== '' && pageContext.isHydration) {
|
11
|
+
// Hydration
|
10
12
|
root = ReactDOM.hydrateRoot(container, page);
|
11
13
|
}
|
12
14
|
else {
|
13
15
|
if (!root) {
|
16
|
+
// First rendering
|
14
17
|
root = ReactDOM.createRoot(container);
|
15
18
|
}
|
19
|
+
else {
|
20
|
+
// Client routing
|
21
|
+
// See https://vike.dev/server-routing-vs-client-routing
|
22
|
+
// Get the page's `title` config value, which may be different from the
|
23
|
+
// previous page. It can even be null, in which case we should unset the
|
24
|
+
// document title.
|
25
|
+
const title = getTitle(pageContext);
|
26
|
+
document.title = title || '';
|
27
|
+
}
|
16
28
|
root.render(page);
|
17
29
|
}
|
18
|
-
|
19
|
-
if (title !== null) {
|
20
|
-
document.title = title;
|
21
|
-
}
|
22
|
-
}
|
30
|
+
};
|
@@ -1,5 +1,3 @@
|
|
1
|
-
export
|
2
|
-
import type {
|
3
|
-
declare
|
4
|
-
documentHtml: import("vike/dist/esm/node/runtime/html/renderHtml.js").TemplateWrapped;
|
5
|
-
}>;
|
1
|
+
export { onRenderHtml };
|
2
|
+
import type { OnRenderHtmlAsync } from 'vike/types';
|
3
|
+
declare const onRenderHtml: OnRenderHtmlAsync;
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
// https://vike.dev/onRenderHtml
|
2
|
+
export { onRenderHtml };
|
2
3
|
import { renderToString } from 'react-dom/server';
|
3
4
|
import { escapeInject, dangerouslySkipEscape, version } from 'vike/server';
|
4
5
|
import { getTitle } from './getTitle.js';
|
@@ -6,7 +7,7 @@ import { getPageElement } from './getPageElement.js';
|
|
6
7
|
import { PageContextProvider } from './PageContextProvider.js';
|
7
8
|
import React from 'react';
|
8
9
|
checkVikeVersion();
|
9
|
-
async
|
10
|
+
const onRenderHtml = async (pageContext) => {
|
10
11
|
let pageHtml = '';
|
11
12
|
if (!!pageContext.Page) {
|
12
13
|
const page = getPageElement(pageContext);
|
@@ -36,11 +37,10 @@ async function onRenderHtml(pageContext) {
|
|
36
37
|
<body>
|
37
38
|
<div id="page-view">${dangerouslySkipEscape(pageHtml)}</div>
|
38
39
|
</body>
|
40
|
+
<!-- built with https://github.com/vikejs/vike-react -->
|
39
41
|
</html>`;
|
40
|
-
return
|
41
|
-
|
42
|
-
};
|
43
|
-
}
|
42
|
+
return documentHtml;
|
43
|
+
};
|
44
44
|
function checkVikeVersion() {
|
45
45
|
if (version) {
|
46
46
|
const versionParts = version.split('.').map((s) => parseInt(s, 10));
|
package/dist/renderer/types.d.ts
CHANGED
@@ -4,8 +4,11 @@ type Component = (props: any) => ReactElement;
|
|
4
4
|
declare global {
|
5
5
|
namespace Vike {
|
6
6
|
interface PageContext {
|
7
|
-
Page
|
8
|
-
|
7
|
+
Page?: Component;
|
8
|
+
/** Properties of the page's root React component. */
|
9
|
+
pageProps?: Record<string, unknown>;
|
10
|
+
/** <title>${title}</title> - has precedence over the config */
|
11
|
+
title?: string;
|
9
12
|
}
|
10
13
|
}
|
11
14
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "vike-react",
|
3
|
-
"version": "0.3.
|
3
|
+
"version": "0.3.2",
|
4
4
|
"type": "module",
|
5
5
|
"main": "./dist/renderer/+config.js",
|
6
6
|
"types": "./dist/renderer/+config.d.ts",
|
@@ -23,7 +23,7 @@
|
|
23
23
|
"vite": "^4.3.8"
|
24
24
|
},
|
25
25
|
"devDependencies": {
|
26
|
-
"@brillout/release-me": "^0.1.
|
26
|
+
"@brillout/release-me": "^0.1.9",
|
27
27
|
"@types/node": "^18.17.18",
|
28
28
|
"@types/react": "^18.2.22",
|
29
29
|
"@types/react-dom": "^18.2.7",
|