@tramvai/module-render 2.24.1 → 2.25.1
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/lib/browser.js +4 -5
- package/lib/server/ReactRenderServer.d.ts +2 -1
- package/lib/server.es.js +8 -8
- package/lib/server.js +7 -7
- package/package.json +22 -22
package/lib/browser.js
CHANGED
|
@@ -16,7 +16,7 @@ import { composeLayoutOptions, createLayout } from '@tinkoff/layout-factory';
|
|
|
16
16
|
class RootComponent extends PureComponent {
|
|
17
17
|
render() {
|
|
18
18
|
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent } = this.props;
|
|
19
|
-
return (jsx(LayoutComponent,
|
|
19
|
+
return (jsx(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent, children: jsx(PageComponent, {}) }));
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
const Root = ({ pageService }) => {
|
|
@@ -24,7 +24,6 @@ const Root = ({ pageService }) => {
|
|
|
24
24
|
const { pageComponent } = config;
|
|
25
25
|
let PageComponent = pageService.getComponent(pageComponent);
|
|
26
26
|
if (!PageComponent) {
|
|
27
|
-
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
28
27
|
PageComponent = () => {
|
|
29
28
|
throw new Error(`Page component '${pageComponent}' not found`);
|
|
30
29
|
};
|
|
@@ -33,7 +32,7 @@ const Root = ({ pageService }) => {
|
|
|
33
32
|
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
34
33
|
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
35
34
|
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
36
|
-
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }
|
|
35
|
+
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }));
|
|
37
36
|
};
|
|
38
37
|
|
|
39
38
|
function serializeError(error) {
|
|
@@ -62,12 +61,12 @@ const PageErrorBoundary = (props) => {
|
|
|
62
61
|
const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
|
|
63
62
|
const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
|
|
64
63
|
const fallback = pageService.resolveComponentFromConfig('errorBoundary');
|
|
65
|
-
return (jsx(UniversalErrorBoundary,
|
|
64
|
+
return (jsx(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
|
|
66
65
|
};
|
|
67
66
|
|
|
68
67
|
function renderReact({ pageService, di }, context) {
|
|
69
68
|
const serverState = typeof window !== 'undefined' ? context.getState() : undefined;
|
|
70
|
-
return (jsx(Provider,
|
|
69
|
+
return (jsx(Provider, { context: context, serverState: serverState, children: jsx(DIContext.Provider, { value: di, children: jsx(PageErrorBoundary, { pageService: pageService, children: jsx(Root, { pageService: pageService }) }) }) }));
|
|
71
70
|
}
|
|
72
71
|
|
|
73
72
|
let hydrateRoot;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ExtractDependencyType } from '@tinkoff/dippy';
|
|
1
2
|
import type { DI_TOKEN } from '@tramvai/core';
|
|
2
3
|
import type { CONTEXT_TOKEN } from '@tramvai/module-common';
|
|
3
4
|
import type { EXTEND_RENDER, CUSTOM_RENDER } from '@tramvai/tokens-render';
|
|
@@ -5,7 +6,7 @@ import type { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
|
|
|
5
6
|
import type { ChunkExtractor } from '@loadable/server';
|
|
6
7
|
export declare class ReactRenderServer {
|
|
7
8
|
customRender: typeof CUSTOM_RENDER;
|
|
8
|
-
extendRender: typeof EXTEND_RENDER
|
|
9
|
+
extendRender: ExtractDependencyType<typeof EXTEND_RENDER>;
|
|
9
10
|
context: typeof CONTEXT_TOKEN;
|
|
10
11
|
pageService: typeof PAGE_SERVICE_TOKEN;
|
|
11
12
|
di: typeof DI_TOKEN;
|
package/lib/server.es.js
CHANGED
|
@@ -19,7 +19,7 @@ import startsWith from '@tinkoff/utils/string/startsWith';
|
|
|
19
19
|
import toArray from '@tinkoff/utils/array/toArray';
|
|
20
20
|
import flatten from '@tinkoff/utils/array/flatten';
|
|
21
21
|
import { buildPage, staticRender, dynamicRender } from '@tinkoff/htmlpagebuilder';
|
|
22
|
-
import {
|
|
22
|
+
import { safeStringify } from '@tramvai/safe-strings';
|
|
23
23
|
import { ChunkExtractor } from '@loadable/server';
|
|
24
24
|
import has from '@tinkoff/utils/object/has';
|
|
25
25
|
import last from '@tinkoff/utils/array/last';
|
|
@@ -573,9 +573,10 @@ class PageBuilder {
|
|
|
573
573
|
}
|
|
574
574
|
dehydrateState() {
|
|
575
575
|
this.resourcesRegistry.register({
|
|
576
|
-
type: ResourceType.
|
|
576
|
+
type: ResourceType.asIs,
|
|
577
577
|
slot: ResourceSlot.BODY_END,
|
|
578
|
-
|
|
578
|
+
// String much better than big object, source https://v8.dev/blog/cost-of-javascript-2019#json
|
|
579
|
+
payload: `<script id="__TRAMVAI_STATE__" type="application/json">${safeStringify(this.context.dehydrate().dispatcher)}</script>`,
|
|
579
580
|
});
|
|
580
581
|
}
|
|
581
582
|
async fetchChunksInfo(extractor) {
|
|
@@ -643,7 +644,7 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
|
|
|
643
644
|
class RootComponent extends PureComponent {
|
|
644
645
|
render() {
|
|
645
646
|
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent } = this.props;
|
|
646
|
-
return (jsx(LayoutComponent,
|
|
647
|
+
return (jsx(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent, children: jsx(PageComponent, {}) }));
|
|
647
648
|
}
|
|
648
649
|
}
|
|
649
650
|
const Root = ({ pageService }) => {
|
|
@@ -651,7 +652,6 @@ const Root = ({ pageService }) => {
|
|
|
651
652
|
const { pageComponent } = config;
|
|
652
653
|
let PageComponent = pageService.getComponent(pageComponent);
|
|
653
654
|
if (!PageComponent) {
|
|
654
|
-
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
655
655
|
PageComponent = () => {
|
|
656
656
|
throw new Error(`Page component '${pageComponent}' not found`);
|
|
657
657
|
};
|
|
@@ -660,7 +660,7 @@ const Root = ({ pageService }) => {
|
|
|
660
660
|
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
661
661
|
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
662
662
|
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
663
|
-
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }
|
|
663
|
+
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }));
|
|
664
664
|
};
|
|
665
665
|
|
|
666
666
|
function serializeError(error) {
|
|
@@ -689,12 +689,12 @@ const PageErrorBoundary = (props) => {
|
|
|
689
689
|
const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
|
|
690
690
|
const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
|
|
691
691
|
const fallback = pageService.resolveComponentFromConfig('errorBoundary');
|
|
692
|
-
return (jsx(UniversalErrorBoundary,
|
|
692
|
+
return (jsx(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
|
|
693
693
|
};
|
|
694
694
|
|
|
695
695
|
function renderReact({ pageService, di }, context) {
|
|
696
696
|
const serverState = typeof window !== 'undefined' ? context.getState() : undefined;
|
|
697
|
-
return (jsx(Provider,
|
|
697
|
+
return (jsx(Provider, { context: context, serverState: serverState, children: jsx(DIContext.Provider, { value: di, children: jsx(PageErrorBoundary, { pageService: pageService, children: jsx(Root, { pageService: pageService }) }) }) }));
|
|
698
698
|
}
|
|
699
699
|
|
|
700
700
|
class ReactRenderServer {
|
package/lib/server.js
CHANGED
|
@@ -609,9 +609,10 @@ class PageBuilder {
|
|
|
609
609
|
}
|
|
610
610
|
dehydrateState() {
|
|
611
611
|
this.resourcesRegistry.register({
|
|
612
|
-
type: tokensRender.ResourceType.
|
|
612
|
+
type: tokensRender.ResourceType.asIs,
|
|
613
613
|
slot: tokensRender.ResourceSlot.BODY_END,
|
|
614
|
-
|
|
614
|
+
// String much better than big object, source https://v8.dev/blog/cost-of-javascript-2019#json
|
|
615
|
+
payload: `<script id="__TRAMVAI_STATE__" type="application/json">${safeStrings.safeStringify(this.context.dehydrate().dispatcher)}</script>`,
|
|
615
616
|
});
|
|
616
617
|
}
|
|
617
618
|
async fetchChunksInfo(extractor) {
|
|
@@ -679,7 +680,7 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
|
|
|
679
680
|
class RootComponent extends react.PureComponent {
|
|
680
681
|
render() {
|
|
681
682
|
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent } = this.props;
|
|
682
|
-
return (jsxRuntime.jsx(LayoutComponent,
|
|
683
|
+
return (jsxRuntime.jsx(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent, children: jsxRuntime.jsx(PageComponent, {}) }));
|
|
683
684
|
}
|
|
684
685
|
}
|
|
685
686
|
const Root = ({ pageService }) => {
|
|
@@ -687,7 +688,6 @@ const Root = ({ pageService }) => {
|
|
|
687
688
|
const { pageComponent } = config;
|
|
688
689
|
let PageComponent = pageService.getComponent(pageComponent);
|
|
689
690
|
if (!PageComponent) {
|
|
690
|
-
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
691
691
|
PageComponent = () => {
|
|
692
692
|
throw new Error(`Page component '${pageComponent}' not found`);
|
|
693
693
|
};
|
|
@@ -696,7 +696,7 @@ const Root = ({ pageService }) => {
|
|
|
696
696
|
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
697
697
|
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
698
698
|
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
699
|
-
return (jsxRuntime.jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }
|
|
699
|
+
return (jsxRuntime.jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }));
|
|
700
700
|
};
|
|
701
701
|
|
|
702
702
|
function serializeError(error) {
|
|
@@ -725,12 +725,12 @@ const PageErrorBoundary = (props) => {
|
|
|
725
725
|
const errorHandlers = react$1.useDi({ token: react$1.ERROR_BOUNDARY_TOKEN, optional: true });
|
|
726
726
|
const fallbackFromDi = react$1.useDi({ token: react$1.ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
|
|
727
727
|
const fallback = pageService.resolveComponentFromConfig('errorBoundary');
|
|
728
|
-
return (jsxRuntime.jsx(react$1.UniversalErrorBoundary,
|
|
728
|
+
return (jsxRuntime.jsx(react$1.UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
|
|
729
729
|
};
|
|
730
730
|
|
|
731
731
|
function renderReact({ pageService, di }, context) {
|
|
732
732
|
const serverState = typeof window !== 'undefined' ? context.getState() : undefined;
|
|
733
|
-
return (jsxRuntime.jsx(state.Provider,
|
|
733
|
+
return (jsxRuntime.jsx(state.Provider, { context: context, serverState: serverState, children: jsxRuntime.jsx(react$1.DIContext.Provider, { value: di, children: jsxRuntime.jsx(PageErrorBoundary, { pageService: pageService, children: jsxRuntime.jsx(Root, { pageService: pageService }) }) }) }));
|
|
734
734
|
}
|
|
735
735
|
|
|
736
736
|
class ReactRenderServer {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-render",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.25.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -23,36 +23,36 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@loadable/server": "^5.15.0",
|
|
26
|
-
"@tinkoff/htmlpagebuilder": "0.5.
|
|
27
|
-
"@tinkoff/layout-factory": "0.3.
|
|
28
|
-
"@tinkoff/url": "0.8.
|
|
29
|
-
"@tinkoff/user-agent": "0.4.
|
|
30
|
-
"@tramvai/module-client-hints": "2.
|
|
31
|
-
"@tramvai/module-router": "2.
|
|
32
|
-
"@tramvai/react": "2.
|
|
33
|
-
"@tramvai/safe-strings": "0.5.
|
|
34
|
-
"@tramvai/tokens-render": "2.
|
|
35
|
-
"@tramvai/experiments": "2.
|
|
26
|
+
"@tinkoff/htmlpagebuilder": "0.5.3",
|
|
27
|
+
"@tinkoff/layout-factory": "0.3.3",
|
|
28
|
+
"@tinkoff/url": "0.8.3",
|
|
29
|
+
"@tinkoff/user-agent": "0.4.62",
|
|
30
|
+
"@tramvai/module-client-hints": "2.25.1",
|
|
31
|
+
"@tramvai/module-router": "2.25.1",
|
|
32
|
+
"@tramvai/react": "2.25.1",
|
|
33
|
+
"@tramvai/safe-strings": "0.5.4",
|
|
34
|
+
"@tramvai/tokens-render": "2.25.1",
|
|
35
|
+
"@tramvai/experiments": "2.25.1",
|
|
36
36
|
"@types/loadable__server": "^5.12.6",
|
|
37
37
|
"node-fetch": "^2.6.1"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@tinkoff/dippy": "0.8.
|
|
40
|
+
"@tinkoff/dippy": "0.8.5",
|
|
41
41
|
"@tinkoff/utils": "^2.1.2",
|
|
42
|
-
"@tinkoff/react-hooks": "0.1.
|
|
43
|
-
"@tramvai/cli": "2.
|
|
44
|
-
"@tramvai/core": "2.
|
|
45
|
-
"@tramvai/module-common": "2.
|
|
46
|
-
"@tramvai/state": "2.
|
|
47
|
-
"@tramvai/test-helpers": "2.
|
|
48
|
-
"@tramvai/tokens-common": "2.
|
|
49
|
-
"@tramvai/tokens-router": "2.
|
|
50
|
-
"@tramvai/tokens-server-private": "2.
|
|
42
|
+
"@tinkoff/react-hooks": "0.1.3",
|
|
43
|
+
"@tramvai/cli": "2.25.1",
|
|
44
|
+
"@tramvai/core": "2.25.1",
|
|
45
|
+
"@tramvai/module-common": "2.25.1",
|
|
46
|
+
"@tramvai/state": "2.25.1",
|
|
47
|
+
"@tramvai/test-helpers": "2.25.1",
|
|
48
|
+
"@tramvai/tokens-common": "2.25.1",
|
|
49
|
+
"@tramvai/tokens-router": "2.25.1",
|
|
50
|
+
"@tramvai/tokens-server-private": "2.25.1",
|
|
51
51
|
"express": "^4.17.1",
|
|
52
52
|
"prop-types": "^15.6.2",
|
|
53
53
|
"react": ">=16.14.0",
|
|
54
54
|
"react-dom": ">=16.14.0",
|
|
55
|
-
"tslib": "^2.0
|
|
55
|
+
"tslib": "^2.4.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {},
|
|
58
58
|
"gitHead": "8e826a214c87b188fc4d254cdd8f2a2b2c55f3a8",
|