@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 +9 -2
- package/lib/server.es.js +20 -23
- package/lib/server.js +20 -23
- package/lib/test/unit/resources.d.ts +1 -1
- package/package.json +16 -18
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 {
|
|
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:
|
|
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 (
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
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
|
|
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:
|
|
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 (
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
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.
|
|
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.
|
|
28
|
-
"@tramvai/module-client-hints": "1.
|
|
29
|
-
"@tramvai/module-router": "1.
|
|
30
|
-
"@tramvai/react": "1.
|
|
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.
|
|
33
|
-
"@tramvai/experiments": "1.
|
|
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.
|
|
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": "1.
|
|
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"
|