@tramvai/module-render 2.63.0 → 2.65.9

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
@@ -9,11 +9,41 @@ import { useMemo, createElement, StrictMode } from 'react';
9
9
  import { jsx } from 'react/jsx-runtime';
10
10
  import { createEvent, createReducer, useStore, Provider } from '@tramvai/state';
11
11
  import { useDi, ERROR_BOUNDARY_TOKEN, ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, UniversalErrorBoundary, DIContext } from '@tramvai/react';
12
- import { usePageService, useUrl } from '@tramvai/module-router';
12
+ import { useUrl, usePageService } from '@tramvai/module-router';
13
13
  import debounce from '@tinkoff/utils/function/debounce';
14
14
  import { useIsomorphicLayoutEffect } from '@tinkoff/react-hooks';
15
15
  import { composeLayoutOptions, createLayout } from '@tinkoff/layout-factory';
16
16
 
17
+ function serializeError(error) {
18
+ return {
19
+ ...error,
20
+ message: error.message,
21
+ stack: error.stack,
22
+ };
23
+ }
24
+ function deserializeError(serializedError) {
25
+ const error = new Error(serializedError.message);
26
+ Object.assign(error, serializedError);
27
+ return error;
28
+ }
29
+ const setPageErrorEvent = createEvent('setPageError');
30
+ const initialState = null;
31
+ const PageErrorStore = createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
32
+
33
+ const PageErrorBoundary = (props) => {
34
+ const { children } = props;
35
+ const pageService = useDi(PAGE_SERVICE_TOKEN);
36
+ const url = useUrl();
37
+ const serializedError = useStore(PageErrorStore);
38
+ const error = useMemo(() => {
39
+ return serializedError && deserializeError(serializedError);
40
+ }, [serializedError]);
41
+ const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
42
+ const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
43
+ const fallback = pageService.resolveComponentFromConfig('errorBoundary');
44
+ return (jsx(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
45
+ };
46
+
17
47
  /**
18
48
  * Result component structure:
19
49
  *
@@ -21,7 +51,9 @@ import { composeLayoutOptions, createLayout } from '@tinkoff/layout-factory';
21
51
  * <RootComponent>
22
52
  * <LayoutComponent>
23
53
  * <NestedLayoutComponent>
24
- * <PageComponent />
54
+ * <ErrorBoundaryComponent>
55
+ * <PageComponent />
56
+ * </ErrorBoundaryComponent>
25
57
  * </NestedLayoutComponent>
26
58
  * </LayoutComponent>
27
59
  * </RootComponent>
@@ -55,7 +87,7 @@ const PageRenderComponent = () => {
55
87
  throw new Error(`Page component '${pageComponent}' not found`);
56
88
  };
57
89
  }
58
- const page = useMemo(() => jsx(PageComponent, {}), [PageComponent]);
90
+ const page = useMemo(() => (jsx(PageErrorBoundary, { children: jsx(PageComponent, {}) })), [PageComponent]);
59
91
  return page;
60
92
  };
61
93
  const Root = () => {
@@ -64,39 +96,9 @@ const Root = () => {
64
96
  return jsx(LayoutRenderComponent, { children: nestedLayoutRenderComponent });
65
97
  };
66
98
 
67
- function serializeError(error) {
68
- return {
69
- ...error,
70
- message: error.message,
71
- stack: error.stack,
72
- };
73
- }
74
- function deserializeError(serializedError) {
75
- const error = new Error(serializedError.message);
76
- Object.assign(error, serializedError);
77
- return error;
78
- }
79
- const setPageErrorEvent = createEvent('setPageError');
80
- const initialState = null;
81
- const PageErrorStore = createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
82
-
83
- const PageErrorBoundary = (props) => {
84
- const { children } = props;
85
- const pageService = useDi(PAGE_SERVICE_TOKEN);
86
- const url = useUrl();
87
- const serializedError = useStore(PageErrorStore);
88
- const error = useMemo(() => {
89
- return serializedError && deserializeError(serializedError);
90
- }, [serializedError]);
91
- const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
92
- const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
93
- const fallback = pageService.resolveComponentFromConfig('errorBoundary');
94
- return (jsx(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
95
- };
96
-
97
99
  function renderReact({ di }, context) {
98
100
  const serverState = typeof window !== 'undefined' ? context.getState() : undefined;
99
- return (jsx(Provider, { context: context, serverState: serverState, children: jsx(DIContext.Provider, { value: di, children: jsx(PageErrorBoundary, { children: jsx(Root, {}) }) }) }));
101
+ return (jsx(Provider, { context: context, serverState: serverState, children: jsx(DIContext.Provider, { value: di, children: jsx(Root, {}) }) }));
100
102
  }
101
103
 
102
104
  let hydrateRoot;
package/lib/server.es.js CHANGED
@@ -32,7 +32,7 @@ import { o as onload } from './server_inline.inline.es.js';
32
32
  import { Writable } from 'stream';
33
33
  import { jsx } from 'react/jsx-runtime';
34
34
  import { createEvent, createReducer, useStore, Provider } from '@tramvai/state';
35
- import { usePageService, useUrl } from '@tramvai/module-router';
35
+ import { useUrl, usePageService } from '@tramvai/module-router';
36
36
  import { composeLayoutOptions, createLayout } from '@tinkoff/layout-factory';
37
37
 
38
38
  const thirtySeconds = 1000 * 30;
@@ -353,8 +353,8 @@ let fetchStats = async () => {
353
353
  };
354
354
  if (process.env.NODE_ENV === 'development') {
355
355
  fetchStats = async () => {
356
- const { modern: configModern, staticHost, staticPort, build: { options: { outputClient }, }, } = appConfig;
357
- const getUrl = (filename) => `http://${staticHost}:${staticPort}/${outputClient}/${filename}`;
356
+ const { modern: configModern, staticHost, staticPort, output } = appConfig;
357
+ const getUrl = (filename) => `http://${staticHost}:${staticPort}/${output.client}/${filename}`;
358
358
  const request = await fetch(getUrl(configModern ? 'stats.modern.json' : 'stats.json'));
359
359
  const stats = await request.json();
360
360
  // static - популярная заглушка в env.development.js файлах, надо игнорировать, как было раньше
@@ -647,6 +647,36 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
647
647
  ];
648
648
  };
649
649
 
650
+ function serializeError(error) {
651
+ return {
652
+ ...error,
653
+ message: error.message,
654
+ stack: error.stack,
655
+ };
656
+ }
657
+ function deserializeError(serializedError) {
658
+ const error = new Error(serializedError.message);
659
+ Object.assign(error, serializedError);
660
+ return error;
661
+ }
662
+ const setPageErrorEvent = createEvent('setPageError');
663
+ const initialState = null;
664
+ const PageErrorStore = createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
665
+
666
+ const PageErrorBoundary = (props) => {
667
+ const { children } = props;
668
+ const pageService = useDi(PAGE_SERVICE_TOKEN);
669
+ const url = useUrl();
670
+ const serializedError = useStore(PageErrorStore);
671
+ const error = useMemo(() => {
672
+ return serializedError && deserializeError(serializedError);
673
+ }, [serializedError]);
674
+ const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
675
+ const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
676
+ const fallback = pageService.resolveComponentFromConfig('errorBoundary');
677
+ return (jsx(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
678
+ };
679
+
650
680
  /**
651
681
  * Result component structure:
652
682
  *
@@ -654,7 +684,9 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
654
684
  * <RootComponent>
655
685
  * <LayoutComponent>
656
686
  * <NestedLayoutComponent>
657
- * <PageComponent />
687
+ * <ErrorBoundaryComponent>
688
+ * <PageComponent />
689
+ * </ErrorBoundaryComponent>
658
690
  * </NestedLayoutComponent>
659
691
  * </LayoutComponent>
660
692
  * </RootComponent>
@@ -688,7 +720,7 @@ const PageRenderComponent = () => {
688
720
  throw new Error(`Page component '${pageComponent}' not found`);
689
721
  };
690
722
  }
691
- const page = useMemo(() => jsx(PageComponent, {}), [PageComponent]);
723
+ const page = useMemo(() => (jsx(PageErrorBoundary, { children: jsx(PageComponent, {}) })), [PageComponent]);
692
724
  return page;
693
725
  };
694
726
  const Root = () => {
@@ -697,39 +729,9 @@ const Root = () => {
697
729
  return jsx(LayoutRenderComponent, { children: nestedLayoutRenderComponent });
698
730
  };
699
731
 
700
- function serializeError(error) {
701
- return {
702
- ...error,
703
- message: error.message,
704
- stack: error.stack,
705
- };
706
- }
707
- function deserializeError(serializedError) {
708
- const error = new Error(serializedError.message);
709
- Object.assign(error, serializedError);
710
- return error;
711
- }
712
- const setPageErrorEvent = createEvent('setPageError');
713
- const initialState = null;
714
- const PageErrorStore = createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
715
-
716
- const PageErrorBoundary = (props) => {
717
- const { children } = props;
718
- const pageService = useDi(PAGE_SERVICE_TOKEN);
719
- const url = useUrl();
720
- const serializedError = useStore(PageErrorStore);
721
- const error = useMemo(() => {
722
- return serializedError && deserializeError(serializedError);
723
- }, [serializedError]);
724
- const errorHandlers = useDi({ token: ERROR_BOUNDARY_TOKEN, optional: true });
725
- const fallbackFromDi = useDi({ token: ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
726
- const fallback = pageService.resolveComponentFromConfig('errorBoundary');
727
- return (jsx(UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
728
- };
729
-
730
732
  function renderReact({ di }, context) {
731
733
  const serverState = typeof window !== 'undefined' ? context.getState() : undefined;
732
- return (jsx(Provider, { context: context, serverState: serverState, children: jsx(DIContext.Provider, { value: di, children: jsx(PageErrorBoundary, { children: jsx(Root, {}) }) }) }));
734
+ return (jsx(Provider, { context: context, serverState: serverState, children: jsx(DIContext.Provider, { value: di, children: jsx(Root, {}) }) }));
733
735
  }
734
736
 
735
737
  const RENDER_TIMEOUT = 500;
@@ -793,7 +795,9 @@ class ReactRenderServer {
793
795
  pipe(htmlWritable);
794
796
  },
795
797
  onError(error) {
796
- // error can be inside Suspense boundaries, this is not critical, continue rendering
798
+ // error can be inside Suspense boundaries, this is not critical, continue rendering.
799
+ // for criticall errors, this callback will be called with `onShellError`,
800
+ // so this is a best place to error logging
797
801
  log.error({
798
802
  event: 'streaming-render:error',
799
803
  error,
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$1 = require('react');
7
7
  var server$1 = require('react-dom/server');
8
8
  var core = require('@tramvai/core');
9
9
  var tokensCommon = require('@tramvai/tokens-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$1 = require('@tramvai/react');
15
+ var react = 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');
@@ -389,8 +389,8 @@ let fetchStats = async () => {
389
389
  };
390
390
  if (process.env.NODE_ENV === 'development') {
391
391
  fetchStats = async () => {
392
- const { modern: configModern, staticHost, staticPort, build: { options: { outputClient }, }, } = appConfig;
393
- const getUrl = (filename) => `http://${staticHost}:${staticPort}/${outputClient}/${filename}`;
392
+ const { modern: configModern, staticHost, staticPort, output } = appConfig;
393
+ const getUrl = (filename) => `http://${staticHost}:${staticPort}/${output.client}/${filename}`;
394
394
  const request = await fetch__default["default"](getUrl(configModern ? 'stats.modern.json' : 'stats.json'));
395
395
  const stats = await request.json();
396
396
  // static - популярная заглушка в env.development.js файлах, надо игнорировать, как было раньше
@@ -683,6 +683,36 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
683
683
  ];
684
684
  };
685
685
 
686
+ function serializeError(error) {
687
+ return {
688
+ ...error,
689
+ message: error.message,
690
+ stack: error.stack,
691
+ };
692
+ }
693
+ function deserializeError(serializedError) {
694
+ const error = new Error(serializedError.message);
695
+ Object.assign(error, serializedError);
696
+ return error;
697
+ }
698
+ const setPageErrorEvent = state.createEvent('setPageError');
699
+ const initialState = null;
700
+ const PageErrorStore = state.createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
701
+
702
+ const PageErrorBoundary = (props) => {
703
+ const { children } = props;
704
+ const pageService = react.useDi(tokensRouter.PAGE_SERVICE_TOKEN);
705
+ const url = moduleRouter.useUrl();
706
+ const serializedError = state.useStore(PageErrorStore);
707
+ const error = react$1.useMemo(() => {
708
+ return serializedError && deserializeError(serializedError);
709
+ }, [serializedError]);
710
+ const errorHandlers = react.useDi({ token: react.ERROR_BOUNDARY_TOKEN, optional: true });
711
+ const fallbackFromDi = react.useDi({ token: react.ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
712
+ const fallback = pageService.resolveComponentFromConfig('errorBoundary');
713
+ return (jsxRuntime.jsx(react.UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
714
+ };
715
+
686
716
  /**
687
717
  * Result component structure:
688
718
  *
@@ -690,7 +720,9 @@ const htmlPageSchemaFactory = ({ htmlAttrs, }) => {
690
720
  * <RootComponent>
691
721
  * <LayoutComponent>
692
722
  * <NestedLayoutComponent>
693
- * <PageComponent />
723
+ * <ErrorBoundaryComponent>
724
+ * <PageComponent />
725
+ * </ErrorBoundaryComponent>
694
726
  * </NestedLayoutComponent>
695
727
  * </LayoutComponent>
696
728
  * </RootComponent>
@@ -706,13 +738,13 @@ const LayoutRenderComponent = ({ children }) => {
706
738
  const LayoutComponent = pageService.resolveComponentFromConfig('layout');
707
739
  const HeaderComponent = pageService.resolveComponentFromConfig('header');
708
740
  const FooterComponent = pageService.resolveComponentFromConfig('footer');
709
- const layout = react.useMemo(() => (jsxRuntime.jsx(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent, children: children })), [LayoutComponent, HeaderComponent, FooterComponent, children]);
741
+ const layout = react$1.useMemo(() => (jsxRuntime.jsx(LayoutComponent, { Header: HeaderComponent, Footer: FooterComponent, children: children })), [LayoutComponent, HeaderComponent, FooterComponent, children]);
710
742
  return layout;
711
743
  };
712
744
  const NestedLayoutRenderComponent = ({ children }) => {
713
745
  const pageService = moduleRouter.usePageService();
714
746
  const NestedLayoutComponent = pageService.resolveComponentFromConfig('nestedLayout');
715
- const nestedLayout = react.useMemo(() => jsxRuntime.jsx(NestedLayoutComponent, { children: children }), [NestedLayoutComponent, children]);
747
+ const nestedLayout = react$1.useMemo(() => jsxRuntime.jsx(NestedLayoutComponent, { children: children }), [NestedLayoutComponent, children]);
716
748
  return nestedLayout;
717
749
  };
718
750
  const PageRenderComponent = () => {
@@ -724,48 +756,18 @@ const PageRenderComponent = () => {
724
756
  throw new Error(`Page component '${pageComponent}' not found`);
725
757
  };
726
758
  }
727
- const page = react.useMemo(() => jsxRuntime.jsx(PageComponent, {}), [PageComponent]);
759
+ const page = react$1.useMemo(() => (jsxRuntime.jsx(PageErrorBoundary, { children: jsxRuntime.jsx(PageComponent, {}) })), [PageComponent]);
728
760
  return page;
729
761
  };
730
762
  const Root = () => {
731
- const pageRenderComponent = react.useMemo(() => jsxRuntime.jsx(PageRenderComponent, {}), []);
732
- const nestedLayoutRenderComponent = react.useMemo(() => jsxRuntime.jsx(NestedLayoutRenderComponent, { children: pageRenderComponent }), [pageRenderComponent]);
763
+ const pageRenderComponent = react$1.useMemo(() => jsxRuntime.jsx(PageRenderComponent, {}), []);
764
+ const nestedLayoutRenderComponent = react$1.useMemo(() => jsxRuntime.jsx(NestedLayoutRenderComponent, { children: pageRenderComponent }), [pageRenderComponent]);
733
765
  return jsxRuntime.jsx(LayoutRenderComponent, { children: nestedLayoutRenderComponent });
734
766
  };
735
767
 
736
- function serializeError(error) {
737
- return {
738
- ...error,
739
- message: error.message,
740
- stack: error.stack,
741
- };
742
- }
743
- function deserializeError(serializedError) {
744
- const error = new Error(serializedError.message);
745
- Object.assign(error, serializedError);
746
- return error;
747
- }
748
- const setPageErrorEvent = state.createEvent('setPageError');
749
- const initialState = null;
750
- const PageErrorStore = state.createReducer('pageError', initialState).on(setPageErrorEvent, (state, error) => error && serializeError(error));
751
-
752
- const PageErrorBoundary = (props) => {
753
- const { children } = props;
754
- const pageService = react$1.useDi(tokensRouter.PAGE_SERVICE_TOKEN);
755
- const url = moduleRouter.useUrl();
756
- const serializedError = state.useStore(PageErrorStore);
757
- const error = react.useMemo(() => {
758
- return serializedError && deserializeError(serializedError);
759
- }, [serializedError]);
760
- const errorHandlers = react$1.useDi({ token: react$1.ERROR_BOUNDARY_TOKEN, optional: true });
761
- const fallbackFromDi = react$1.useDi({ token: react$1.ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, optional: true });
762
- const fallback = pageService.resolveComponentFromConfig('errorBoundary');
763
- return (jsxRuntime.jsx(react$1.UniversalErrorBoundary, { url: url, error: error, errorHandlers: errorHandlers, fallback: fallback, fallbackFromDi: fallbackFromDi, children: children }));
764
- };
765
-
766
768
  function renderReact({ di }, context) {
767
769
  const serverState = typeof window !== 'undefined' ? context.getState() : undefined;
768
- return (jsxRuntime.jsx(state.Provider, { context: context, serverState: serverState, children: jsxRuntime.jsx(react$1.DIContext.Provider, { value: di, children: jsxRuntime.jsx(PageErrorBoundary, { children: jsxRuntime.jsx(Root, {}) }) }) }));
770
+ return (jsxRuntime.jsx(state.Provider, { context: context, serverState: serverState, children: jsxRuntime.jsx(react.DIContext.Provider, { value: di, children: jsxRuntime.jsx(Root, {}) }) }));
769
771
  }
770
772
 
771
773
  const RENDER_TIMEOUT = 500;
@@ -829,7 +831,9 @@ class ReactRenderServer {
829
831
  pipe(htmlWritable);
830
832
  },
831
833
  onError(error) {
832
- // error can be inside Suspense boundaries, this is not critical, continue rendering
834
+ // error can be inside Suspense boundaries, this is not critical, continue rendering.
835
+ // for criticall errors, this callback will be called with `onShellError`,
836
+ // so this is a best place to error logging
833
837
  log.error({
834
838
  event: 'streaming-render:error',
835
839
  error,
@@ -1093,7 +1097,7 @@ exports.RenderModule = RenderModule_1 = tslib.__decorate([
1093
1097
  let body;
1094
1098
  try {
1095
1099
  log.info({ event: 'render-root-boundary-start' });
1096
- body = server$1.renderToString(react.createElement(RootErrorBoundary, { error, url: url.parse(request.url) }));
1100
+ body = server$1.renderToString(react$1.createElement(RootErrorBoundary, { error, url: url.parse(request.url) }));
1097
1101
  log.info({ event: 'render-root-boundary-success' });
1098
1102
  const status = error.status || error.httpStatus || 500;
1099
1103
  // log send-server-error only after successful Root Boundary render,
@@ -1123,7 +1127,7 @@ exports.RenderModule = RenderModule_1 = tslib.__decorate([
1123
1127
  };
1124
1128
  },
1125
1129
  deps: {
1126
- RootErrorBoundary: { token: react$1.ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN, optional: true },
1130
+ RootErrorBoundary: { token: react.ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN, optional: true },
1127
1131
  logger: tokensCommon.LOGGER_TOKEN,
1128
1132
  },
1129
1133
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-render",
3
- "version": "2.63.0",
3
+ "version": "2.65.9",
4
4
  "description": "",
5
5
  "browser": "lib/browser.js",
6
6
  "main": "lib/server.js",
@@ -26,28 +26,28 @@
26
26
  "@tinkoff/htmlpagebuilder": "0.5.5",
27
27
  "@tinkoff/layout-factory": "0.3.6",
28
28
  "@tinkoff/url": "0.8.4",
29
- "@tinkoff/user-agent": "0.4.151",
30
- "@tramvai/module-client-hints": "2.63.0",
31
- "@tramvai/module-router": "2.63.0",
32
- "@tramvai/react": "2.63.0",
29
+ "@tinkoff/user-agent": "0.4.166",
30
+ "@tramvai/module-client-hints": "2.65.9",
31
+ "@tramvai/module-router": "2.65.9",
32
+ "@tramvai/react": "2.65.9",
33
33
  "@tramvai/safe-strings": "0.5.6",
34
- "@tramvai/tokens-render": "2.63.0",
35
- "@tramvai/experiments": "2.63.0",
34
+ "@tramvai/tokens-render": "2.65.9",
35
+ "@tramvai/experiments": "2.65.9",
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.11",
40
+ "@tinkoff/dippy": "0.8.12",
41
41
  "@tinkoff/utils": "^2.1.2",
42
42
  "@tinkoff/react-hooks": "0.1.4",
43
- "@tramvai/cli": "2.63.0",
44
- "@tramvai/core": "2.63.0",
45
- "@tramvai/module-common": "2.63.0",
46
- "@tramvai/state": "2.63.0",
47
- "@tramvai/test-helpers": "2.63.0",
48
- "@tramvai/tokens-common": "2.63.0",
49
- "@tramvai/tokens-router": "2.63.0",
50
- "@tramvai/tokens-server-private": "2.63.0",
43
+ "@tramvai/cli": "2.65.9",
44
+ "@tramvai/core": "2.65.9",
45
+ "@tramvai/module-common": "2.65.9",
46
+ "@tramvai/state": "2.65.9",
47
+ "@tramvai/test-helpers": "2.65.9",
48
+ "@tramvai/tokens-common": "2.65.9",
49
+ "@tramvai/tokens-router": "2.65.9",
50
+ "@tramvai/tokens-server-private": "2.65.9",
51
51
  "express": "^4.17.1",
52
52
  "prop-types": "^15.6.2",
53
53
  "react": ">=16.14.0",