@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 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, fallback } = props;
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 === null || initialState === void 0 ? void 0 : initialState.stores }, { children: jsx(DIContext.Provider, Object.assign({ value: di }, { children: jsx(Root, { pageService: pageService }, void 0) }), void 0) }), void 0));
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;
@@ -0,0 +1,5 @@
1
+ import type { PropsWithChildren } from 'react';
2
+ import type { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
3
+ export declare const PageErrorBoundary: (props: PropsWithChildren<{
4
+ pageService: typeof PAGE_SERVICE_TOKEN;
5
+ }>) => JSX.Element;
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, fallback } = props;
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 === null || initialState === void 0 ? void 0 : initialState.stores }, { children: jsx(DIContext.Provider, Object.assign({ value: di }, { children: jsx(Root, { pageService: pageService }, void 0) }), void 0) }), void 0));
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, fallback } = props;
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 === null || initialState === void 0 ? void 0 : initialState.stores }, { children: jsxRuntime.jsx(react$1.DIContext.Provider, Object.assign({ value: di }, { children: jsxRuntime.jsx(Root, { pageService: pageService }, void 0) }), void 0) }), void 0));
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.104.2",
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.353",
28
- "@tramvai/module-client-hints": "1.104.2",
29
- "@tramvai/module-router": "1.104.2",
30
- "@tramvai/react": "1.104.2",
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.104.2",
33
- "@tramvai/experiments": "1.104.2",
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.104.2",
42
- "@tramvai/core": "1.104.2",
43
- "@tramvai/module-common": "1.104.2",
44
- "@tramvai/state": "1.104.2",
45
- "@tramvai/test-helpers": "1.104.2",
46
- "@tramvai/tokens-common": "1.104.2",
47
- "@tramvai/tokens-router": "1.104.2",
48
- "@tramvai/tokens-server-private": "1.104.2",
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",