@tramvai/module-render 1.104.2 → 1.105.6
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 +26 -25
- package/lib/react/pageErrorBoundary.d.ts +5 -0
- package/lib/server.es.js +27 -26
- package/lib/server.js +27 -26
- package/package.json +15 -15
package/lib/browser.js
CHANGED
|
@@ -13,6 +13,29 @@ import { useRoute, useUrl } from '@tramvai/module-router';
|
|
|
13
13
|
import { useIsomorphicLayoutEffect } from '@tinkoff/react-hooks';
|
|
14
14
|
import { composeLayoutOptions, createLayout } from '@tinkoff/layout-factory';
|
|
15
15
|
|
|
16
|
+
class RootComponent extends PureComponent {
|
|
17
|
+
render() {
|
|
18
|
+
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent } = this.props;
|
|
19
|
+
return (jsx(LayoutComponent, Object.assign({ Header: HeaderComponent, Footer: FooterComponent }, { children: jsx(PageComponent, {}, void 0) }), void 0));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const Root = ({ pageService }) => {
|
|
23
|
+
const { config } = useRoute();
|
|
24
|
+
const { pageComponent } = config;
|
|
25
|
+
let PageComponent = pageService.getComponent(pageComponent);
|
|
26
|
+
if (!PageComponent) {
|
|
27
|
+
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
28
|
+
PageComponent = () => {
|
|
29
|
+
throw new Error(`Page component '${pageComponent}' not found`);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Get components for current page, otherwise use a defaults
|
|
33
|
+
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
34
|
+
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
35
|
+
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
36
|
+
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }, void 0));
|
|
37
|
+
};
|
|
38
|
+
|
|
16
39
|
function serializeError(error) {
|
|
17
40
|
return {
|
|
18
41
|
...error,
|
|
@@ -30,7 +53,7 @@ const initialState = null;
|
|
|
30
53
|
const PageErrorStore = createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
|
|
31
54
|
|
|
32
55
|
const PageErrorBoundary = (props) => {
|
|
33
|
-
const { children,
|
|
56
|
+
const { children, pageService } = props;
|
|
34
57
|
const url = useUrl();
|
|
35
58
|
const serializedError = useStore(PageErrorStore);
|
|
36
59
|
const error = useMemo(() => {
|
|
@@ -38,34 +61,12 @@ const PageErrorBoundary = (props) => {
|
|
|
38
61
|
}, [serializedError]);
|
|
39
62
|
const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
|
|
40
63
|
const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
|
|
64
|
+
const fallback = pageService.resolveComponentFromConfig('errorBoundary');
|
|
41
65
|
return (jsx(UniversalErrorBoundary, Object.assign({ url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, { children: children }), void 0));
|
|
42
66
|
};
|
|
43
|
-
class RootComponent extends PureComponent {
|
|
44
|
-
render() {
|
|
45
|
-
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent, ErrorBoundaryComponent, } = this.props;
|
|
46
|
-
return (jsx(LayoutComponent, Object.assign({ Header: HeaderComponent, Footer: FooterComponent }, { children: jsx(PageErrorBoundary, Object.assign({ fallback: ErrorBoundaryComponent }, { children: jsx(PageComponent, {}, void 0) }), void 0) }), void 0));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
const Root = ({ pageService }) => {
|
|
50
|
-
const { config } = useRoute();
|
|
51
|
-
const { pageComponent } = config;
|
|
52
|
-
let PageComponent = pageService.getComponent(pageComponent);
|
|
53
|
-
if (!PageComponent) {
|
|
54
|
-
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
55
|
-
PageComponent = () => {
|
|
56
|
-
throw new Error(`Page component '${pageComponent}' not found`);
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
// Get components for current page, otherwise use a defaults
|
|
60
|
-
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
61
|
-
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
62
|
-
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
63
|
-
const ErrorBoundaryComponent = pageService.resolveComponentFromConfig('errorBoundary');
|
|
64
|
-
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }, void 0));
|
|
65
|
-
};
|
|
66
67
|
|
|
67
68
|
function renderReact({ pageService, di, initialState }, context) {
|
|
68
|
-
return (jsx(Provider, Object.assign({ context: context, serverState: initialState
|
|
69
|
+
return (jsx(Provider, Object.assign({ context: context, serverState: initialState && context.getState() }, { children: jsx(DIContext.Provider, Object.assign({ value: di }, { children: jsx(PageErrorBoundary, Object.assign({ pageService: pageService }, { children: jsx(Root, { pageService: pageService }, void 0) }), void 0) }), void 0) }), void 0));
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
let hydrateRoot;
|
package/lib/server.es.js
CHANGED
|
@@ -403,7 +403,7 @@ if (process.env.NODE_ENV === 'production') {
|
|
|
403
403
|
return Promise.resolve(stats);
|
|
404
404
|
};
|
|
405
405
|
}
|
|
406
|
-
const fetchWebpackStats = async ({ modern, }) => {
|
|
406
|
+
const fetchWebpackStats = async ({ modern, } = {}) => {
|
|
407
407
|
return fetchStats(modern);
|
|
408
408
|
};
|
|
409
409
|
|
|
@@ -615,6 +615,29 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
|
|
|
615
615
|
];
|
|
616
616
|
};
|
|
617
617
|
|
|
618
|
+
class RootComponent extends PureComponent {
|
|
619
|
+
render() {
|
|
620
|
+
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent } = this.props;
|
|
621
|
+
return (jsx(LayoutComponent, Object.assign({ Header: HeaderComponent, Footer: FooterComponent }, { children: jsx(PageComponent, {}, void 0) }), void 0));
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
const Root = ({ pageService }) => {
|
|
625
|
+
const { config } = useRoute();
|
|
626
|
+
const { pageComponent } = config;
|
|
627
|
+
let PageComponent = pageService.getComponent(pageComponent);
|
|
628
|
+
if (!PageComponent) {
|
|
629
|
+
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
630
|
+
PageComponent = () => {
|
|
631
|
+
throw new Error(`Page component '${pageComponent}' not found`);
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
// Get components for current page, otherwise use a defaults
|
|
635
|
+
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
636
|
+
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
637
|
+
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
638
|
+
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }, void 0));
|
|
639
|
+
};
|
|
640
|
+
|
|
618
641
|
function serializeError(error) {
|
|
619
642
|
return {
|
|
620
643
|
...error,
|
|
@@ -632,7 +655,7 @@ const initialState = null;
|
|
|
632
655
|
const PageErrorStore = createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
|
|
633
656
|
|
|
634
657
|
const PageErrorBoundary = (props) => {
|
|
635
|
-
const { children,
|
|
658
|
+
const { children, pageService } = props;
|
|
636
659
|
const url = useUrl();
|
|
637
660
|
const serializedError = useStore(PageErrorStore);
|
|
638
661
|
const error = useMemo(() => {
|
|
@@ -640,34 +663,12 @@ const PageErrorBoundary = (props) => {
|
|
|
640
663
|
}, [serializedError]);
|
|
641
664
|
const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
|
|
642
665
|
const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
|
|
666
|
+
const fallback = pageService.resolveComponentFromConfig('errorBoundary');
|
|
643
667
|
return (jsx(UniversalErrorBoundary, Object.assign({ url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, { children: children }), void 0));
|
|
644
668
|
};
|
|
645
|
-
class RootComponent extends PureComponent {
|
|
646
|
-
render() {
|
|
647
|
-
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent, ErrorBoundaryComponent, } = this.props;
|
|
648
|
-
return (jsx(LayoutComponent, Object.assign({ Header: HeaderComponent, Footer: FooterComponent }, { children: jsx(PageErrorBoundary, Object.assign({ fallback: ErrorBoundaryComponent }, { children: jsx(PageComponent, {}, void 0) }), void 0) }), void 0));
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
const Root = ({ pageService }) => {
|
|
652
|
-
const { config } = useRoute();
|
|
653
|
-
const { pageComponent } = config;
|
|
654
|
-
let PageComponent = pageService.getComponent(pageComponent);
|
|
655
|
-
if (!PageComponent) {
|
|
656
|
-
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
657
|
-
PageComponent = () => {
|
|
658
|
-
throw new Error(`Page component '${pageComponent}' not found`);
|
|
659
|
-
};
|
|
660
|
-
}
|
|
661
|
-
// Get components for current page, otherwise use a defaults
|
|
662
|
-
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
663
|
-
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
664
|
-
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
665
|
-
const ErrorBoundaryComponent = pageService.resolveComponentFromConfig('errorBoundary');
|
|
666
|
-
return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }, void 0));
|
|
667
|
-
};
|
|
668
669
|
|
|
669
670
|
function renderReact({ pageService, di, initialState }, context) {
|
|
670
|
-
return (jsx(Provider, Object.assign({ context: context, serverState: initialState
|
|
671
|
+
return (jsx(Provider, Object.assign({ context: context, serverState: initialState && context.getState() }, { children: jsx(DIContext.Provider, Object.assign({ value: di }, { children: jsx(PageErrorBoundary, Object.assign({ pageService: pageService }, { children: jsx(Root, { pageService: pageService }, void 0) }), void 0) }), void 0) }), void 0));
|
|
671
672
|
}
|
|
672
673
|
|
|
673
674
|
class ReactRenderServer {
|
package/lib/server.js
CHANGED
|
@@ -439,7 +439,7 @@ if (process.env.NODE_ENV === 'production') {
|
|
|
439
439
|
return Promise.resolve(stats);
|
|
440
440
|
};
|
|
441
441
|
}
|
|
442
|
-
const fetchWebpackStats = async ({ modern, }) => {
|
|
442
|
+
const fetchWebpackStats = async ({ modern, } = {}) => {
|
|
443
443
|
return fetchStats(modern);
|
|
444
444
|
};
|
|
445
445
|
|
|
@@ -651,6 +651,29 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
|
|
|
651
651
|
];
|
|
652
652
|
};
|
|
653
653
|
|
|
654
|
+
class RootComponent extends react.PureComponent {
|
|
655
|
+
render() {
|
|
656
|
+
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent } = this.props;
|
|
657
|
+
return (jsxRuntime.jsx(LayoutComponent, Object.assign({ Header: HeaderComponent, Footer: FooterComponent }, { children: jsxRuntime.jsx(PageComponent, {}, void 0) }), void 0));
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
const Root = ({ pageService }) => {
|
|
661
|
+
const { config } = moduleRouter.useRoute();
|
|
662
|
+
const { pageComponent } = config;
|
|
663
|
+
let PageComponent = pageService.getComponent(pageComponent);
|
|
664
|
+
if (!PageComponent) {
|
|
665
|
+
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
666
|
+
PageComponent = () => {
|
|
667
|
+
throw new Error(`Page component '${pageComponent}' not found`);
|
|
668
|
+
};
|
|
669
|
+
}
|
|
670
|
+
// Get components for current page, otherwise use a defaults
|
|
671
|
+
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
672
|
+
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
673
|
+
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
674
|
+
return (jsxRuntime.jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent }, void 0));
|
|
675
|
+
};
|
|
676
|
+
|
|
654
677
|
function serializeError(error) {
|
|
655
678
|
return {
|
|
656
679
|
...error,
|
|
@@ -668,7 +691,7 @@ const initialState = null;
|
|
|
668
691
|
const PageErrorStore = state.createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
|
|
669
692
|
|
|
670
693
|
const PageErrorBoundary = (props) => {
|
|
671
|
-
const { children,
|
|
694
|
+
const { children, pageService } = props;
|
|
672
695
|
const url = moduleRouter.useUrl();
|
|
673
696
|
const serializedError = state.useStore(PageErrorStore);
|
|
674
697
|
const error = react.useMemo(() => {
|
|
@@ -676,34 +699,12 @@ const PageErrorBoundary = (props) => {
|
|
|
676
699
|
}, [serializedError]);
|
|
677
700
|
const errorHandlers = react$1.useDi({ token: react$1.ERROR_BOUNDARY_TOKEN, optional: true });
|
|
678
701
|
const fallbackFromDi = react$1.useDi({ token: react$1.ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
|
|
702
|
+
const fallback = pageService.resolveComponentFromConfig('errorBoundary');
|
|
679
703
|
return (jsxRuntime.jsx(react$1.UniversalErrorBoundary, Object.assign({ url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, { children: children }), void 0));
|
|
680
704
|
};
|
|
681
|
-
class RootComponent extends react.PureComponent {
|
|
682
|
-
render() {
|
|
683
|
-
const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent, ErrorBoundaryComponent, } = this.props;
|
|
684
|
-
return (jsxRuntime.jsx(LayoutComponent, Object.assign({ Header: HeaderComponent, Footer: FooterComponent }, { children: jsxRuntime.jsx(PageErrorBoundary, Object.assign({ fallback: ErrorBoundaryComponent }, { children: jsxRuntime.jsx(PageComponent, {}, void 0) }), void 0) }), void 0));
|
|
685
|
-
}
|
|
686
|
-
}
|
|
687
|
-
const Root = ({ pageService }) => {
|
|
688
|
-
const { config } = moduleRouter.useRoute();
|
|
689
|
-
const { pageComponent } = config;
|
|
690
|
-
let PageComponent = pageService.getComponent(pageComponent);
|
|
691
|
-
if (!PageComponent) {
|
|
692
|
-
// eslint-disable-next-line react-perf/jsx-no-new-function-as-prop
|
|
693
|
-
PageComponent = () => {
|
|
694
|
-
throw new Error(`Page component '${pageComponent}' not found`);
|
|
695
|
-
};
|
|
696
|
-
}
|
|
697
|
-
// Get components for current page, otherwise use a defaults
|
|
698
|
-
const LayoutComponent = pageService.resolveComponentFromConfig('layout');
|
|
699
|
-
const HeaderComponent = pageService.resolveComponentFromConfig('header');
|
|
700
|
-
const FooterComponent = pageService.resolveComponentFromConfig('footer');
|
|
701
|
-
const ErrorBoundaryComponent = pageService.resolveComponentFromConfig('errorBoundary');
|
|
702
|
-
return (jsxRuntime.jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }, void 0));
|
|
703
|
-
};
|
|
704
705
|
|
|
705
706
|
function renderReact({ pageService, di, initialState }, context) {
|
|
706
|
-
return (jsxRuntime.jsx(state.Provider, Object.assign({ context: context, serverState: initialState
|
|
707
|
+
return (jsxRuntime.jsx(state.Provider, Object.assign({ context: context, serverState: initialState && context.getState() }, { children: jsxRuntime.jsx(react$1.DIContext.Provider, Object.assign({ value: di }, { children: jsxRuntime.jsx(PageErrorBoundary, Object.assign({ pageService: pageService }, { children: jsxRuntime.jsx(Root, { pageService: pageService }, void 0) }), void 0) }), void 0) }), void 0));
|
|
707
708
|
}
|
|
708
709
|
|
|
709
710
|
class ReactRenderServer {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-render",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.105.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
"@tinkoff/htmlpagebuilder": "0.4.23",
|
|
25
25
|
"@tinkoff/layout-factory": "0.2.30",
|
|
26
26
|
"@tinkoff/url": "0.7.38",
|
|
27
|
-
"@tinkoff/user-agent": "0.3.
|
|
28
|
-
"@tramvai/module-client-hints": "1.
|
|
29
|
-
"@tramvai/module-router": "1.
|
|
30
|
-
"@tramvai/react": "1.
|
|
27
|
+
"@tinkoff/user-agent": "0.3.360",
|
|
28
|
+
"@tramvai/module-client-hints": "1.105.6",
|
|
29
|
+
"@tramvai/module-router": "1.105.6",
|
|
30
|
+
"@tramvai/react": "1.105.6",
|
|
31
31
|
"@tramvai/safe-strings": "0.4.4",
|
|
32
|
-
"@tramvai/tokens-render": "1.
|
|
33
|
-
"@tramvai/experiments": "1.
|
|
32
|
+
"@tramvai/tokens-render": "1.105.6",
|
|
33
|
+
"@tramvai/experiments": "1.105.6",
|
|
34
34
|
"@types/loadable__server": "^5.12.6",
|
|
35
35
|
"node-fetch": "^2.6.1"
|
|
36
36
|
},
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
"@tinkoff/dippy": "0.7.41",
|
|
39
39
|
"@tinkoff/utils": "^2.1.2",
|
|
40
40
|
"@tinkoff/react-hooks": "0.0.26",
|
|
41
|
-
"@tramvai/cli": "1.
|
|
42
|
-
"@tramvai/core": "1.
|
|
43
|
-
"@tramvai/module-common": "1.
|
|
44
|
-
"@tramvai/state": "1.
|
|
45
|
-
"@tramvai/test-helpers": "1.
|
|
46
|
-
"@tramvai/tokens-common": "1.
|
|
47
|
-
"@tramvai/tokens-router": "1.
|
|
48
|
-
"@tramvai/tokens-server-private": "1.
|
|
41
|
+
"@tramvai/cli": "1.105.6",
|
|
42
|
+
"@tramvai/core": "1.105.6",
|
|
43
|
+
"@tramvai/module-common": "1.105.6",
|
|
44
|
+
"@tramvai/state": "1.105.6",
|
|
45
|
+
"@tramvai/test-helpers": "1.105.6",
|
|
46
|
+
"@tramvai/tokens-common": "1.105.6",
|
|
47
|
+
"@tramvai/tokens-router": "1.105.6",
|
|
48
|
+
"@tramvai/tokens-server-private": "1.105.6",
|
|
49
49
|
"express": "^4.17.1",
|
|
50
50
|
"prop-types": "^15.6.2",
|
|
51
51
|
"react": ">=16.14.0",
|