@tramvai/module-render 1.82.3 → 1.85.0

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
@@ -78,12 +78,19 @@ const ExecuteRenderCallback = ({ children, callback }) => {
78
78
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
79
  return children;
80
80
  };
81
- const renderer = ({ element, container, callback }) => {
81
+ const renderer = ({ element, container, callback, log }) => {
82
82
  if (process.env.__TRAMVAI_CONCURRENT_FEATURES) {
83
83
  const wrappedElement = createElement(ExecuteRenderCallback, { callback }, element);
84
84
  // eslint-disable-next-line import/no-unresolved, import/extensions
85
85
  const { hydrateRoot } = require('react-dom/client');
86
- return hydrateRoot(container, wrappedElement);
86
+ return hydrateRoot(container, wrappedElement, {
87
+ onRecoverableError: (error) => {
88
+ log.error({
89
+ error,
90
+ event: 'hydrate:recover-after-error',
91
+ });
92
+ },
93
+ });
87
94
  }
88
95
  const { hydrate } = require('react-dom');
89
96
  return hydrate(element, container, callback);
package/lib/server.es.js CHANGED
@@ -8,7 +8,7 @@ import { ClientHintsModule, USER_AGENT_TOKEN } from '@tramvai/module-client-hint
8
8
  import { ResourceType, ResourceSlot, DEFAULT_LAYOUT_COMPONENT, LAYOUT_OPTIONS, DEFAULT_FOOTER_COMPONENT, DEFAULT_HEADER_COMPONENT, TRAMVAI_RENDER_MODE, RESOURCES_REGISTRY, RESOURCE_INLINE_OPTIONS, RENDER_SLOTS, POLYFILL_CONDITION, HTML_ATTRS, CUSTOM_RENDER, EXTEND_RENDER } from '@tramvai/tokens-render';
9
9
  export * from '@tramvai/tokens-render';
10
10
  import { createToken, Scope } from '@tinkoff/dippy';
11
- import { WEB_APP_AFTER_INIT_TOKEN } from '@tramvai/tokens-server';
11
+ import { WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN } from '@tramvai/tokens-server-private';
12
12
  import { useDi, ERROR_BOUNDARY_TOKEN, ERROR_BOUNDARY_FALLBACK_COMPONENT_TOKEN, UniversalErrorBoundary, DIContext, ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN } from '@tramvai/react';
13
13
  import { resolve, isAbsoluteUrl as isAbsoluteUrl$1, parse } from '@tinkoff/url';
14
14
  import { satisfies } from '@tinkoff/user-agent';
@@ -884,30 +884,27 @@ RenderModule = RenderModule_1 = __decorate([
884
884
  },
885
885
  }),
886
886
  provide({
887
- provide: WEB_APP_AFTER_INIT_TOKEN,
887
+ provide: WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN,
888
888
  multi: true,
889
- useFactory: ({ RootErrorBoundary, logger }) => {
889
+ useFactory: ({ RootErrorBoundary, logger, }) => {
890
890
  const log = logger('module-render:error-handler');
891
- return (app) => {
892
- app.use((err, req, res, next) => {
893
- if (!RootErrorBoundary) {
894
- return next(err);
895
- }
896
- let body;
897
- try {
898
- log.info({ event: 'render-root-boundary' });
899
- body = renderToString(createElement(RootErrorBoundary, { error: err, url: parse(req.url) }));
900
- res.status(err.httpStatus || err.status || 500);
901
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
902
- res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'));
903
- res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
904
- return res.send(body);
905
- }
906
- catch (e) {
907
- log.warn({ event: 'render-root-boundary-error', error: e });
908
- return next(err);
909
- }
910
- });
891
+ return (error, request, reply) => {
892
+ if (!RootErrorBoundary) {
893
+ return;
894
+ }
895
+ let body;
896
+ try {
897
+ log.info({ event: 'render-root-boundary' });
898
+ body = renderToString(createElement(RootErrorBoundary, { error, url: parse(request.url) }));
899
+ reply.status(error.httpStatus || error.status || 500);
900
+ reply.header('Content-Type', 'text/html; charset=utf-8');
901
+ reply.header('Content-Length', Buffer.byteLength(body, 'utf8'));
902
+ reply.header('Cache-Control', 'no-cache, no-store, must-revalidate');
903
+ return body;
904
+ }
905
+ catch (e) {
906
+ log.warn({ event: 'render-root-boundary-error', error: e });
907
+ }
911
908
  };
912
909
  },
913
910
  deps: {
package/lib/server.js CHANGED
@@ -11,7 +11,7 @@ var tokensRouter = require('@tramvai/tokens-router');
11
11
  var moduleClientHints = require('@tramvai/module-client-hints');
12
12
  var tokensRender = require('@tramvai/tokens-render');
13
13
  var dippy = require('@tinkoff/dippy');
14
- var tokensServer = require('@tramvai/tokens-server');
14
+ var tokensServerPrivate = require('@tramvai/tokens-server-private');
15
15
  var react = require('@tramvai/react');
16
16
  var url = require('@tinkoff/url');
17
17
  var userAgent = require('@tinkoff/user-agent');
@@ -921,30 +921,27 @@ exports.RenderModule = RenderModule_1 = tslib.__decorate([
921
921
  },
922
922
  }),
923
923
  core.provide({
924
- provide: tokensServer.WEB_APP_AFTER_INIT_TOKEN,
924
+ provide: tokensServerPrivate.WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN,
925
925
  multi: true,
926
- useFactory: ({ RootErrorBoundary, logger }) => {
926
+ useFactory: ({ RootErrorBoundary, logger, }) => {
927
927
  const log = logger('module-render:error-handler');
928
- return (app) => {
929
- app.use((err, req, res, next) => {
930
- if (!RootErrorBoundary) {
931
- return next(err);
932
- }
933
- let body;
934
- try {
935
- log.info({ event: 'render-root-boundary' });
936
- body = server$1.renderToString(React.createElement(RootErrorBoundary, { error: err, url: url.parse(req.url) }));
937
- res.status(err.httpStatus || err.status || 500);
938
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
939
- res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'));
940
- res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
941
- return res.send(body);
942
- }
943
- catch (e) {
944
- log.warn({ event: 'render-root-boundary-error', error: e });
945
- return next(err);
946
- }
947
- });
928
+ return (error, request, reply) => {
929
+ if (!RootErrorBoundary) {
930
+ return;
931
+ }
932
+ let body;
933
+ try {
934
+ log.info({ event: 'render-root-boundary' });
935
+ body = server$1.renderToString(React.createElement(RootErrorBoundary, { error, url: url.parse(request.url) }));
936
+ reply.status(error.httpStatus || error.status || 500);
937
+ reply.header('Content-Type', 'text/html; charset=utf-8');
938
+ reply.header('Content-Length', Buffer.byteLength(body, 'utf8'));
939
+ reply.header('Cache-Control', 'no-cache, no-store, must-revalidate');
940
+ return body;
941
+ }
942
+ catch (e) {
943
+ log.warn({ event: 'render-root-boundary-error', error: e });
944
+ }
948
945
  };
949
946
  },
950
947
  deps: {
@@ -3,8 +3,8 @@ declare type Options = Parameters<typeof getDiWrapper>[0];
3
3
  export declare const testPageResources: (options: Options) => {
4
4
  render: () => {
5
5
  parsed: import("node-html-parser").HTMLElement;
6
- head: string;
7
6
  body: string;
7
+ head: string;
8
8
  application: string;
9
9
  };
10
10
  di: import("@tinkoff/dippy").Container;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-render",
3
- "version": "1.82.3",
3
+ "version": "1.85.0",
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.285",
28
- "@tramvai/module-client-hints": "1.82.3",
29
- "@tramvai/module-router": "1.82.3",
30
- "@tramvai/react": "1.82.3",
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",
31
31
  "@tramvai/safe-strings": "0.4.3",
32
- "@tramvai/tokens-render": "1.82.3",
33
- "@tramvai/experiments": "1.82.3",
32
+ "@tramvai/tokens-render": "1.85.0",
33
+ "@tramvai/experiments": "1.85.0",
34
34
  "@types/loadable__server": "^5.12.6",
35
35
  "node-fetch": "^2.6.1"
36
36
  },
@@ -38,23 +38,21 @@
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.82.3",
42
- "@tramvai/core": "1.82.3",
43
- "@tramvai/module-common": "1.82.3",
44
- "@tramvai/state": "1.82.3",
45
- "@tramvai/test-helpers": "1.82.3",
46
- "@tramvai/tokens-common": "1.82.3",
47
- "@tramvai/tokens-router": "1.82.3",
48
- "@tramvai/tokens-server": "1.82.3",
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",
49
49
  "express": "^4.17.1",
50
50
  "prop-types": "^15.6.2",
51
51
  "react": ">=16.8.0",
52
52
  "react-dom": ">=16.8.0",
53
53
  "tslib": "^2.0.3"
54
54
  },
55
- "devDependencies": {
56
- "@types/express": "^4.17.9"
57
- },
55
+ "devDependencies": {},
58
56
  "gitHead": "8e826a214c87b188fc4d254cdd8f2a2b2c55f3a8",
59
57
  "module": "lib/server.es.js",
60
58
  "license": "Apache-2.0"