@tramvai/module-render 1.85.0 → 1.89.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 CHANGED
@@ -1,17 +1,17 @@
1
1
  import { __decorate } from 'tslib';
2
2
  import { Module, provide, commandLineListTokens, DI_TOKEN } from '@tramvai/core';
3
- import { STORE_TOKEN, LOGGER_TOKEN, CONTEXT_TOKEN } from '@tramvai/module-common';
3
+ import { COMBINE_REDUCERS, STORE_TOKEN, LOGGER_TOKEN, CONTEXT_TOKEN, INITIAL_APP_STATE_TOKEN } from '@tramvai/tokens-common';
4
4
  import { DEFAULT_LAYOUT_COMPONENT, LAYOUT_OPTIONS, DEFAULT_FOOTER_COMPONENT, DEFAULT_HEADER_COMPONENT, TRAMVAI_RENDER_MODE, RESOURCES_REGISTRY, CUSTOM_RENDER, EXTEND_RENDER, RENDERER_CALLBACK, USE_REACT_STRICT_MODE, RENDER_MODE } from '@tramvai/tokens-render';
5
5
  export * from '@tramvai/tokens-render';
6
6
  import { ROUTER_TOKEN, PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
7
7
  import each from '@tinkoff/utils/array/each';
8
- import React, { PureComponent, useMemo, createElement, StrictMode } from 'react';
8
+ import { PureComponent, useMemo, createElement, StrictMode } from 'react';
9
+ import { jsx } from 'react/jsx-runtime';
9
10
  import { createEvent, createReducer, useStore, Provider } from '@tramvai/state';
10
11
  import { useDi, ERROR_BOUNDARY_TOKEN, ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, UniversalErrorBoundary, DIContext } from '@tramvai/react';
11
12
  import { useRoute, useUrl } from '@tramvai/module-router';
12
13
  import { useIsomorphicLayoutEffect } from '@tinkoff/react-hooks';
13
14
  import { composeLayoutOptions, createLayout } from '@tinkoff/layout-factory';
14
- import { COMBINE_REDUCERS } from '@tramvai/tokens-common';
15
15
 
16
16
  function serializeError(error) {
17
17
  return {
@@ -38,14 +38,12 @@ const PageErrorBoundary = (props) => {
38
38
  }, [serializedError]);
39
39
  const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
40
40
  const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
41
- return (React.createElement(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, children));
41
+ return (jsx(UniversalErrorBoundary, Object.assign({ url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, { children: children }), void 0));
42
42
  };
43
43
  class RootComponent extends PureComponent {
44
44
  render() {
45
45
  const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent, ErrorBoundaryComponent, } = this.props;
46
- return (React.createElement(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent },
47
- React.createElement(PageErrorBoundary, { fallback: ErrorBoundaryComponent },
48
- React.createElement(PageComponent, null))));
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));
49
47
  }
50
48
  }
51
49
  const Root = ({ pageService }) => {
@@ -63,26 +61,28 @@ const Root = ({ pageService }) => {
63
61
  const HeaderComponent = pageService.resolveComponentFromConfig('header');
64
62
  const FooterComponent = pageService.resolveComponentFromConfig('footer');
65
63
  const ErrorBoundaryComponent = pageService.resolveComponentFromConfig('errorBoundary');
66
- return (React.createElement(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }));
64
+ return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }, void 0));
67
65
  };
68
66
 
69
- function renderReact({ pageService, di }, context) {
70
- return (React.createElement(Provider, { context: context },
71
- React.createElement(DIContext.Provider, { value: di },
72
- React.createElement(Root, { pageService: pageService }))));
67
+ 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));
73
69
  }
74
70
 
75
- const ExecuteRenderCallback = ({ children, callback }) => {
71
+ let hydrateRoot;
72
+ try {
73
+ // eslint-disable-next-line import/no-unresolved, import/extensions
74
+ hydrateRoot = require('react-dom/client').hydrateRoot;
75
+ }
76
+ catch { }
77
+ const ExecuteRenderCallback = ({ children, callback, }) => {
76
78
  // eslint-disable-next-line react-hooks/exhaustive-deps
77
79
  useIsomorphicLayoutEffect(callback, []);
78
80
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
81
  return children;
80
82
  };
81
83
  const renderer = ({ element, container, callback, log }) => {
82
- if (process.env.__TRAMVAI_CONCURRENT_FEATURES) {
84
+ if (process.env.__TRAMVAI_CONCURRENT_FEATURES !== 'false' && typeof hydrateRoot === 'function') {
83
85
  const wrappedElement = createElement(ExecuteRenderCallback, { callback }, element);
84
- // eslint-disable-next-line import/no-unresolved, import/extensions
85
- const { hydrateRoot } = require('react-dom/client');
86
86
  return hydrateRoot(container, wrappedElement, {
87
87
  onRecoverableError: (error) => {
88
88
  log.error({
@@ -96,9 +96,9 @@ const renderer = ({ element, container, callback, log }) => {
96
96
  return hydrate(element, container, callback);
97
97
  };
98
98
 
99
- function rendering({ pageService, log, consumerContext, customRender, extendRender, di, useStrictMode, rendererCallback, }) {
99
+ function rendering({ pageService, log, consumerContext, customRender, extendRender, di, useStrictMode, rendererCallback, initialState, }) {
100
100
  return new Promise((resolve, reject) => {
101
- let renderResult = renderReact({ pageService, di }, consumerContext);
101
+ let renderResult = renderReact({ pageService, di, initialState }, consumerContext);
102
102
  if (extendRender) {
103
103
  each((render) => {
104
104
  renderResult = render(renderResult);
@@ -252,6 +252,7 @@ RenderModule = RenderModule_1 = __decorate([
252
252
  consumerContext: CONTEXT_TOKEN,
253
253
  di: DI_TOKEN,
254
254
  useStrictMode: USE_REACT_STRICT_MODE,
255
+ initialState: INITIAL_APP_STATE_TOKEN,
255
256
  },
256
257
  multi: true,
257
258
  }),
@@ -1,6 +1,7 @@
1
1
  import type { EXTEND_RENDER, RENDERER_CALLBACK, USE_REACT_STRICT_MODE } from '@tramvai/tokens-render';
2
2
  import type { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
3
- export declare function rendering({ pageService, log, consumerContext, customRender, extendRender, di, useStrictMode, rendererCallback, }: {
3
+ import type { INITIAL_APP_STATE_TOKEN } from '@tramvai/tokens-common';
4
+ export declare function rendering({ pageService, log, consumerContext, customRender, extendRender, di, useStrictMode, rendererCallback, initialState, }: {
4
5
  pageService: typeof PAGE_SERVICE_TOKEN;
5
6
  log: any;
6
7
  consumerContext: any;
@@ -9,4 +10,5 @@ export declare function rendering({ pageService, log, consumerContext, customRen
9
10
  di: any;
10
11
  useStrictMode: typeof USE_REACT_STRICT_MODE;
11
12
  rendererCallback?: typeof RENDERER_CALLBACK;
13
+ initialState?: typeof INITIAL_APP_STATE_TOKEN;
12
14
  }): Promise<void>;
@@ -1,4 +1,5 @@
1
- export declare function renderReact({ pageService, di }: {
1
+ export declare function renderReact({ pageService, di, initialState }: {
2
2
  pageService: any;
3
3
  di: any;
4
+ initialState: any;
4
5
  }, context: any): JSX.Element;
package/lib/server.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from 'tslib';
2
- import React, { PureComponent, useMemo, createElement } from 'react';
2
+ import { PureComponent, useMemo, createElement } from 'react';
3
3
  import { renderToString } from 'react-dom/server';
4
4
  import { Module, provide, commandLineListTokens, DI_TOKEN } from '@tramvai/core';
5
5
  import { CREATE_CACHE_TOKEN, LOGGER_TOKEN, REQUEST_MANAGER_TOKEN, RESPONSE_MANAGER_TOKEN, CONTEXT_TOKEN } from '@tramvai/module-common';
@@ -29,6 +29,7 @@ import * as path from 'path';
29
29
  import each from '@tinkoff/utils/array/each';
30
30
  import path$1 from '@tinkoff/utils/object/path';
31
31
  import { o as onload } from './server_inline.inline.es.js';
32
+ import { jsx } from 'react/jsx-runtime';
32
33
  import { createEvent, createReducer, useStore, Provider } from '@tramvai/state';
33
34
  import { useRoute, useUrl } from '@tramvai/module-router';
34
35
  import { composeLayoutOptions, createLayout } from '@tinkoff/layout-factory';
@@ -625,14 +626,12 @@ const PageErrorBoundary = (props) => {
625
626
  }, [serializedError]);
626
627
  const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
627
628
  const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
628
- return (React.createElement(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, children));
629
+ return (jsx(UniversalErrorBoundary, Object.assign({ url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, { children: children }), void 0));
629
630
  };
630
631
  class RootComponent extends PureComponent {
631
632
  render() {
632
633
  const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent, ErrorBoundaryComponent, } = this.props;
633
- return (React.createElement(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent },
634
- React.createElement(PageErrorBoundary, { fallback: ErrorBoundaryComponent },
635
- React.createElement(PageComponent, null))));
634
+ 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));
636
635
  }
637
636
  }
638
637
  const Root = ({ pageService }) => {
@@ -650,13 +649,11 @@ const Root = ({ pageService }) => {
650
649
  const HeaderComponent = pageService.resolveComponentFromConfig('header');
651
650
  const FooterComponent = pageService.resolveComponentFromConfig('footer');
652
651
  const ErrorBoundaryComponent = pageService.resolveComponentFromConfig('errorBoundary');
653
- return (React.createElement(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }));
652
+ return (jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }, void 0));
654
653
  };
655
654
 
656
- function renderReact({ pageService, di }, context) {
657
- return (React.createElement(Provider, { context: context },
658
- React.createElement(DIContext.Provider, { value: di },
659
- React.createElement(Root, { pageService: pageService }))));
655
+ function renderReact({ pageService, di, initialState }, context) {
656
+ 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));
660
657
  }
661
658
 
662
659
  class ReactRenderServer {
@@ -669,7 +666,7 @@ class ReactRenderServer {
669
666
  }
670
667
  render(extractor) {
671
668
  var _a;
672
- let renderResult = renderReact({ pageService: this.pageService, di: this.di }, this.context);
669
+ let renderResult = renderReact({ pageService: this.pageService, di: this.di, initialState: null }, this.context);
673
670
  each((render) => {
674
671
  renderResult = render(renderResult);
675
672
  }, (_a = this.extendRender) !== null && _a !== void 0 ? _a : []);
package/lib/server.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib = require('tslib');
6
- var React = require('react');
6
+ var react = require('react');
7
7
  var server$1 = require('react-dom/server');
8
8
  var core = require('@tramvai/core');
9
9
  var moduleCommon = require('@tramvai/module-common');
@@ -12,7 +12,7 @@ var moduleClientHints = require('@tramvai/module-client-hints');
12
12
  var tokensRender = require('@tramvai/tokens-render');
13
13
  var dippy = require('@tinkoff/dippy');
14
14
  var tokensServerPrivate = require('@tramvai/tokens-server-private');
15
- var react = require('@tramvai/react');
15
+ var react$1 = require('@tramvai/react');
16
16
  var url = require('@tinkoff/url');
17
17
  var userAgent = require('@tinkoff/user-agent');
18
18
  var isUndefined = require('@tinkoff/utils/is/undefined');
@@ -32,6 +32,7 @@ var path = require('path');
32
32
  var each = require('@tinkoff/utils/array/each');
33
33
  var path$1 = require('@tinkoff/utils/object/path');
34
34
  var inline_inline = require('./server_inline.inline.js');
35
+ var jsxRuntime = require('react/jsx-runtime');
35
36
  var state = require('@tramvai/state');
36
37
  var moduleRouter = require('@tramvai/module-router');
37
38
  var layoutFactory = require('@tinkoff/layout-factory');
@@ -57,7 +58,6 @@ function _interopNamespace(e) {
57
58
  return n;
58
59
  }
59
60
 
60
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
61
61
  var isUndefined__default = /*#__PURE__*/_interopDefaultLegacy(isUndefined);
62
62
  var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
63
63
  var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch);
@@ -657,19 +657,17 @@ const PageErrorBoundary = (props) => {
657
657
  const { children, fallback } = props;
658
658
  const url = moduleRouter.useUrl();
659
659
  const serializedError = state.useStore(PageErrorStore);
660
- const error = React.useMemo(() => {
660
+ const error = react.useMemo(() => {
661
661
  return serializedError && deserializeError(serializedError);
662
662
  }, [serializedError]);
663
- const errorHandlers = react.useDi({ token: react.ERROR_BOUNDARY_TOKEN, optional: true });
664
- const fallbackFromDi = react.useDi({ token: react.ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
665
- return (React__default["default"].createElement(react.UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, children));
663
+ const errorHandlers = react$1.useDi({ token: react$1.ERROR_BOUNDARY_TOKEN, optional: true });
664
+ const fallbackFromDi = react$1.useDi({ token: react$1.ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
665
+ return (jsxRuntime.jsx(react$1.UniversalErrorBoundary, Object.assign({ url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi }, { children: children }), void 0));
666
666
  };
667
- class RootComponent extends React.PureComponent {
667
+ class RootComponent extends react.PureComponent {
668
668
  render() {
669
669
  const { LayoutComponent, PageComponent, HeaderComponent, FooterComponent, ErrorBoundaryComponent, } = this.props;
670
- return (React__default["default"].createElement(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent },
671
- React__default["default"].createElement(PageErrorBoundary, { fallback: ErrorBoundaryComponent },
672
- React__default["default"].createElement(PageComponent, null))));
670
+ 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));
673
671
  }
674
672
  }
675
673
  const Root = ({ pageService }) => {
@@ -687,13 +685,11 @@ const Root = ({ pageService }) => {
687
685
  const HeaderComponent = pageService.resolveComponentFromConfig('header');
688
686
  const FooterComponent = pageService.resolveComponentFromConfig('footer');
689
687
  const ErrorBoundaryComponent = pageService.resolveComponentFromConfig('errorBoundary');
690
- return (React__default["default"].createElement(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }));
688
+ return (jsxRuntime.jsx(RootComponent, { HeaderComponent: HeaderComponent, FooterComponent: FooterComponent, LayoutComponent: LayoutComponent, PageComponent: PageComponent, ErrorBoundaryComponent: ErrorBoundaryComponent }, void 0));
691
689
  };
692
690
 
693
- function renderReact({ pageService, di }, context) {
694
- return (React__default["default"].createElement(state.Provider, { context: context },
695
- React__default["default"].createElement(react.DIContext.Provider, { value: di },
696
- React__default["default"].createElement(Root, { pageService: pageService }))));
691
+ function renderReact({ pageService, di, initialState }, context) {
692
+ 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));
697
693
  }
698
694
 
699
695
  class ReactRenderServer {
@@ -706,7 +702,7 @@ class ReactRenderServer {
706
702
  }
707
703
  render(extractor) {
708
704
  var _a;
709
- let renderResult = renderReact({ pageService: this.pageService, di: this.di }, this.context);
705
+ let renderResult = renderReact({ pageService: this.pageService, di: this.di, initialState: null }, this.context);
710
706
  each__default["default"]((render) => {
711
707
  renderResult = render(renderResult);
712
708
  }, (_a = this.extendRender) !== null && _a !== void 0 ? _a : []);
@@ -932,7 +928,7 @@ exports.RenderModule = RenderModule_1 = tslib.__decorate([
932
928
  let body;
933
929
  try {
934
930
  log.info({ event: 'render-root-boundary' });
935
- body = server$1.renderToString(React.createElement(RootErrorBoundary, { error, url: url.parse(request.url) }));
931
+ body = server$1.renderToString(react.createElement(RootErrorBoundary, { error, url: url.parse(request.url) }));
936
932
  reply.status(error.httpStatus || error.status || 500);
937
933
  reply.header('Content-Type', 'text/html; charset=utf-8');
938
934
  reply.header('Content-Length', Buffer.byteLength(body, 'utf8'));
@@ -945,7 +941,7 @@ exports.RenderModule = RenderModule_1 = tslib.__decorate([
945
941
  };
946
942
  },
947
943
  deps: {
948
- RootErrorBoundary: { token: react.ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN, optional: true },
944
+ RootErrorBoundary: { token: react$1.ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN, optional: true },
949
945
  logger: moduleCommon.LOGGER_TOKEN,
950
946
  },
951
947
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-render",
3
- "version": "1.85.0",
3
+ "version": "1.89.1",
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.22",
25
25
  "@tinkoff/layout-factory": "0.2.28",
26
26
  "@tinkoff/url": "0.7.37",
27
- "@tinkoff/user-agent": "0.3.290",
28
- "@tramvai/module-client-hints": "1.85.0",
29
- "@tramvai/module-router": "1.85.0",
30
- "@tramvai/react": "1.85.0",
27
+ "@tinkoff/user-agent": "0.3.300",
28
+ "@tramvai/module-client-hints": "1.89.1",
29
+ "@tramvai/module-router": "1.89.1",
30
+ "@tramvai/react": "1.89.1",
31
31
  "@tramvai/safe-strings": "0.4.3",
32
- "@tramvai/tokens-render": "1.85.0",
33
- "@tramvai/experiments": "1.85.0",
32
+ "@tramvai/tokens-render": "1.89.1",
33
+ "@tramvai/experiments": "1.89.1",
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.39",
39
39
  "@tinkoff/utils": "^2.1.2",
40
40
  "@tinkoff/react-hooks": "0.0.24",
41
- "@tramvai/cli": "1.85.0",
42
- "@tramvai/core": "1.85.0",
43
- "@tramvai/module-common": "1.85.0",
44
- "@tramvai/state": "1.85.0",
45
- "@tramvai/test-helpers": "1.85.0",
46
- "@tramvai/tokens-common": "1.85.0",
47
- "@tramvai/tokens-router": "1.85.0",
48
- "@tramvai/tokens-server-private": "1.85.0",
41
+ "@tramvai/cli": "1.89.1",
42
+ "@tramvai/core": "1.89.1",
43
+ "@tramvai/module-common": "1.89.1",
44
+ "@tramvai/state": "1.89.1",
45
+ "@tramvai/test-helpers": "1.89.1",
46
+ "@tramvai/tokens-common": "1.89.1",
47
+ "@tramvai/tokens-router": "1.89.1",
48
+ "@tramvai/tokens-server-private": "1.89.1",
49
49
  "express": "^4.17.1",
50
50
  "prop-types": "^15.6.2",
51
51
  "react": ">=16.8.0",