@tramvai/module-server 2.89.2 → 2.90.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/server/error.d.ts +3 -3
- package/lib/server/error.es.js +35 -4
- package/lib/server/error.js +36 -5
- package/lib/server/webApp.d.ts +3 -3
- package/lib/server/webApp.es.js +2 -2
- package/lib/server/webApp.js +2 -2
- package/lib/server.es.js +20 -1
- package/lib/server.js +20 -1
- package/package.json +15 -14
package/lib/server/error.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { FastifyInstance } from 'fastify';
|
|
2
2
|
import type { LOGGER_TOKEN } from '@tramvai/module-common';
|
|
3
|
+
import type { FETCH_WEBPACK_STATS_TOKEN } from '@tramvai/tokens-render';
|
|
3
4
|
import type { WEB_FASTIFY_APP_AFTER_ERROR_TOKEN, WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN } from '@tramvai/tokens-server-private';
|
|
4
5
|
import type { ExtractDependencyType } from '@tinkoff/dippy';
|
|
5
|
-
|
|
6
|
-
export declare const errorHandler: (app: FastifyInstance, { log, beforeError, afterError, RootErrorBoundary, }: {
|
|
6
|
+
export declare const errorHandler: (app: FastifyInstance, { log, beforeError, afterError, fetchWebpackStats, }: {
|
|
7
7
|
log: ReturnType<typeof LOGGER_TOKEN>;
|
|
8
8
|
beforeError: ExtractDependencyType<typeof WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN>;
|
|
9
9
|
afterError: ExtractDependencyType<typeof WEB_FASTIFY_APP_AFTER_ERROR_TOKEN>;
|
|
10
|
-
|
|
10
|
+
fetchWebpackStats: ExtractDependencyType<typeof FETCH_WEBPACK_STATS_TOKEN>;
|
|
11
11
|
}) => void;
|
package/lib/server/error.es.js
CHANGED
|
@@ -3,8 +3,9 @@ import { createElement } from 'react';
|
|
|
3
3
|
import { renderToString } from 'react-dom/server';
|
|
4
4
|
import { parse } from '@tinkoff/url';
|
|
5
5
|
import { isRedirectFoundError, isNotFoundError, isHttpError } from '@tinkoff/errors';
|
|
6
|
+
import { ChunkExtractor } from '@loadable/server';
|
|
6
7
|
|
|
7
|
-
const errorHandler = (app, { log, beforeError, afterError,
|
|
8
|
+
const errorHandler = (app, { log, beforeError, afterError, fetchWebpackStats, }) => {
|
|
8
9
|
// eslint-disable-next-line max-statements
|
|
9
10
|
app.setErrorHandler(async (error, request, reply) => {
|
|
10
11
|
const runHandlers = async (handlers) => {
|
|
@@ -26,6 +27,17 @@ const errorHandler = (app, { log, beforeError, afterError, RootErrorBoundary, })
|
|
|
26
27
|
requestId: request.headers['x-request-id'],
|
|
27
28
|
url: request.url,
|
|
28
29
|
};
|
|
30
|
+
let RootErrorBoundary = null;
|
|
31
|
+
try {
|
|
32
|
+
// In case of direct `require` by path, e.g.
|
|
33
|
+
// `require(path.resolve(process.cwd(), 'src', 'error.tsx'))` file
|
|
34
|
+
// doesn't include in the bundle, that is why we are using a
|
|
35
|
+
// path alias here along with webpack config option.
|
|
36
|
+
// See usage of `ROOT_ERROR_BOUNDARY_ALIAS`.
|
|
37
|
+
// eslint-disable-next-line import/no-unresolved, import/extensions
|
|
38
|
+
RootErrorBoundary = require('@/__private__/error').default;
|
|
39
|
+
}
|
|
40
|
+
catch { }
|
|
29
41
|
if (isRedirectFoundError(error)) {
|
|
30
42
|
log.info({
|
|
31
43
|
event: 'redirect-found-error',
|
|
@@ -90,7 +102,7 @@ Not Found page is common use-case with this error - https://tramvai.dev/docs/fea
|
|
|
90
102
|
}
|
|
91
103
|
}
|
|
92
104
|
logMessage = `${logMessage}
|
|
93
|
-
${RootErrorBoundary
|
|
105
|
+
${RootErrorBoundary !== null
|
|
94
106
|
? 'Root Error Boundary will be rendered for the client'
|
|
95
107
|
: 'You can add Error Boundary for better UX - https://tramvai.dev/docs/features/error-boundaries'}'`;
|
|
96
108
|
log[logLevel]({
|
|
@@ -104,9 +116,28 @@ ${RootErrorBoundary
|
|
|
104
116
|
return afterErrorResult;
|
|
105
117
|
}
|
|
106
118
|
reply.status(httpStatus);
|
|
107
|
-
if (RootErrorBoundary) {
|
|
119
|
+
if (RootErrorBoundary !== null) {
|
|
108
120
|
try {
|
|
109
|
-
const
|
|
121
|
+
const stats = await fetchWebpackStats();
|
|
122
|
+
const extractor = new ChunkExtractor({ stats, entrypoints: ['rootErrorBoundary'] });
|
|
123
|
+
const url = parse(requestInfo.url);
|
|
124
|
+
const serializedError = {
|
|
125
|
+
status: httpStatus,
|
|
126
|
+
message: error.message,
|
|
127
|
+
stack: error.stack,
|
|
128
|
+
};
|
|
129
|
+
const body = renderToString(createElement(RootErrorBoundary, { error: serializedError, url })).replace('</head>', [
|
|
130
|
+
'<script>' +
|
|
131
|
+
`window.serverUrl = ${JSON.stringify(url)};` +
|
|
132
|
+
`window.serverError = new Error("${serializedError.message}");` +
|
|
133
|
+
`Object.assign(window.serverError, ${JSON.stringify(serializedError)});` +
|
|
134
|
+
'</script>',
|
|
135
|
+
extractor.getStyleTags(),
|
|
136
|
+
extractor.getScriptTags(),
|
|
137
|
+
'</head>',
|
|
138
|
+
]
|
|
139
|
+
.filter(Boolean)
|
|
140
|
+
.join('\n'));
|
|
110
141
|
log.info({
|
|
111
142
|
event: 'render-root-error-boundary',
|
|
112
143
|
message: 'Render Root Error Boundary for the client',
|
package/lib/server/error.js
CHANGED
|
@@ -4,15 +4,16 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var isNil = require('@tinkoff/utils/is/nil');
|
|
6
6
|
var react = require('react');
|
|
7
|
-
var server = require('react-dom/server');
|
|
7
|
+
var server$1 = require('react-dom/server');
|
|
8
8
|
var url = require('@tinkoff/url');
|
|
9
9
|
var errors = require('@tinkoff/errors');
|
|
10
|
+
var server = require('@loadable/server');
|
|
10
11
|
|
|
11
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
13
|
|
|
13
14
|
var isNil__default = /*#__PURE__*/_interopDefaultLegacy(isNil);
|
|
14
15
|
|
|
15
|
-
const errorHandler = (app, { log, beforeError, afterError,
|
|
16
|
+
const errorHandler = (app, { log, beforeError, afterError, fetchWebpackStats, }) => {
|
|
16
17
|
// eslint-disable-next-line max-statements
|
|
17
18
|
app.setErrorHandler(async (error, request, reply) => {
|
|
18
19
|
const runHandlers = async (handlers) => {
|
|
@@ -34,6 +35,17 @@ const errorHandler = (app, { log, beforeError, afterError, RootErrorBoundary, })
|
|
|
34
35
|
requestId: request.headers['x-request-id'],
|
|
35
36
|
url: request.url,
|
|
36
37
|
};
|
|
38
|
+
let RootErrorBoundary = null;
|
|
39
|
+
try {
|
|
40
|
+
// In case of direct `require` by path, e.g.
|
|
41
|
+
// `require(path.resolve(process.cwd(), 'src', 'error.tsx'))` file
|
|
42
|
+
// doesn't include in the bundle, that is why we are using a
|
|
43
|
+
// path alias here along with webpack config option.
|
|
44
|
+
// See usage of `ROOT_ERROR_BOUNDARY_ALIAS`.
|
|
45
|
+
// eslint-disable-next-line import/no-unresolved, import/extensions
|
|
46
|
+
RootErrorBoundary = require('@/__private__/error').default;
|
|
47
|
+
}
|
|
48
|
+
catch { }
|
|
37
49
|
if (errors.isRedirectFoundError(error)) {
|
|
38
50
|
log.info({
|
|
39
51
|
event: 'redirect-found-error',
|
|
@@ -98,7 +110,7 @@ Not Found page is common use-case with this error - https://tramvai.dev/docs/fea
|
|
|
98
110
|
}
|
|
99
111
|
}
|
|
100
112
|
logMessage = `${logMessage}
|
|
101
|
-
${RootErrorBoundary
|
|
113
|
+
${RootErrorBoundary !== null
|
|
102
114
|
? 'Root Error Boundary will be rendered for the client'
|
|
103
115
|
: 'You can add Error Boundary for better UX - https://tramvai.dev/docs/features/error-boundaries'}'`;
|
|
104
116
|
log[logLevel]({
|
|
@@ -112,9 +124,28 @@ ${RootErrorBoundary
|
|
|
112
124
|
return afterErrorResult;
|
|
113
125
|
}
|
|
114
126
|
reply.status(httpStatus);
|
|
115
|
-
if (RootErrorBoundary) {
|
|
127
|
+
if (RootErrorBoundary !== null) {
|
|
116
128
|
try {
|
|
117
|
-
const
|
|
129
|
+
const stats = await fetchWebpackStats();
|
|
130
|
+
const extractor = new server.ChunkExtractor({ stats, entrypoints: ['rootErrorBoundary'] });
|
|
131
|
+
const url$1 = url.parse(requestInfo.url);
|
|
132
|
+
const serializedError = {
|
|
133
|
+
status: httpStatus,
|
|
134
|
+
message: error.message,
|
|
135
|
+
stack: error.stack,
|
|
136
|
+
};
|
|
137
|
+
const body = server$1.renderToString(react.createElement(RootErrorBoundary, { error: serializedError, url: url$1 })).replace('</head>', [
|
|
138
|
+
'<script>' +
|
|
139
|
+
`window.serverUrl = ${JSON.stringify(url$1)};` +
|
|
140
|
+
`window.serverError = new Error("${serializedError.message}");` +
|
|
141
|
+
`Object.assign(window.serverError, ${JSON.stringify(serializedError)});` +
|
|
142
|
+
'</script>',
|
|
143
|
+
extractor.getStyleTags(),
|
|
144
|
+
extractor.getScriptTags(),
|
|
145
|
+
'</head>',
|
|
146
|
+
]
|
|
147
|
+
.filter(Boolean)
|
|
148
|
+
.join('\n'));
|
|
118
149
|
log.info({
|
|
119
150
|
event: 'render-root-error-boundary',
|
|
120
151
|
message: 'Render Root Error Boundary for the client',
|
package/lib/server/webApp.d.ts
CHANGED
|
@@ -2,12 +2,12 @@ import type { EXECUTION_CONTEXT_MANAGER_TOKEN, LOGGER_TOKEN } from '@tramvai/tok
|
|
|
2
2
|
import type { COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
|
|
3
3
|
import type { SERVER_TOKEN } from '@tramvai/tokens-server';
|
|
4
4
|
import type { WEB_FASTIFY_APP_TOKEN, WEB_FASTIFY_APP_AFTER_INIT_TOKEN, WEB_FASTIFY_APP_BEFORE_INIT_TOKEN, WEB_FASTIFY_APP_INIT_TOKEN, WEB_FASTIFY_APP_LIMITER_TOKEN, WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN, WEB_FASTIFY_APP_AFTER_ERROR_TOKEN, WEB_FASTIFY_APP_METRICS_TOKEN } from '@tramvai/tokens-server-private';
|
|
5
|
+
import type { FETCH_WEBPACK_STATS_TOKEN } from '@tramvai/tokens-render';
|
|
5
6
|
import type { ExtractDependencyType } from '@tinkoff/dippy';
|
|
6
|
-
import type { ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN } from '@tramvai/react';
|
|
7
7
|
export declare const webAppFactory: ({ server }: {
|
|
8
8
|
server: typeof SERVER_TOKEN;
|
|
9
9
|
}) => import("fastify").FastifyInstance<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault> & PromiseLike<import("fastify").FastifyInstance<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>>;
|
|
10
|
-
export declare const webAppInitCommand: ({ app, logger, commandLineRunner, executionContextManager, beforeInit, requestMetrics, limiterRequest, init, afterInit, beforeError, afterError,
|
|
10
|
+
export declare const webAppInitCommand: ({ app, logger, commandLineRunner, executionContextManager, beforeInit, requestMetrics, limiterRequest, init, afterInit, beforeError, afterError, fetchWebpackStats, }: {
|
|
11
11
|
app: ExtractDependencyType<typeof WEB_FASTIFY_APP_TOKEN>;
|
|
12
12
|
logger: ExtractDependencyType<typeof LOGGER_TOKEN>;
|
|
13
13
|
commandLineRunner: ExtractDependencyType<typeof COMMAND_LINE_RUNNER_TOKEN>;
|
|
@@ -19,5 +19,5 @@ export declare const webAppInitCommand: ({ app, logger, commandLineRunner, execu
|
|
|
19
19
|
afterInit: ExtractDependencyType<typeof WEB_FASTIFY_APP_AFTER_INIT_TOKEN>;
|
|
20
20
|
beforeError: ExtractDependencyType<typeof WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN>;
|
|
21
21
|
afterError: ExtractDependencyType<typeof WEB_FASTIFY_APP_AFTER_ERROR_TOKEN>;
|
|
22
|
-
|
|
22
|
+
fetchWebpackStats: ExtractDependencyType<typeof FETCH_WEBPACK_STATS_TOKEN>;
|
|
23
23
|
}) => () => Promise<void>;
|
package/lib/server/webApp.es.js
CHANGED
|
@@ -18,13 +18,13 @@ const webAppFactory = ({ server }) => {
|
|
|
18
18
|
});
|
|
19
19
|
return app;
|
|
20
20
|
};
|
|
21
|
-
const webAppInitCommand = ({ app, logger, commandLineRunner, executionContextManager, beforeInit, requestMetrics, limiterRequest, init, afterInit, beforeError, afterError,
|
|
21
|
+
const webAppInitCommand = ({ app, logger, commandLineRunner, executionContextManager, beforeInit, requestMetrics, limiterRequest, init, afterInit, beforeError, afterError, fetchWebpackStats, }) => {
|
|
22
22
|
const log = logger('server:webapp');
|
|
23
23
|
const runHandlers = (instance, handlers) => {
|
|
24
24
|
return Promise.all([handlers && Promise.all(handlers.map((handler) => handler(instance)))]);
|
|
25
25
|
};
|
|
26
26
|
return async function webAppInit() {
|
|
27
|
-
errorHandler(app, { log, beforeError, afterError,
|
|
27
|
+
errorHandler(app, { log, beforeError, afterError, fetchWebpackStats });
|
|
28
28
|
await app.register(async (instance) => {
|
|
29
29
|
await runHandlers(instance, beforeInit);
|
|
30
30
|
});
|
package/lib/server/webApp.js
CHANGED
|
@@ -27,13 +27,13 @@ const webAppFactory = ({ server }) => {
|
|
|
27
27
|
});
|
|
28
28
|
return app;
|
|
29
29
|
};
|
|
30
|
-
const webAppInitCommand = ({ app, logger, commandLineRunner, executionContextManager, beforeInit, requestMetrics, limiterRequest, init, afterInit, beforeError, afterError,
|
|
30
|
+
const webAppInitCommand = ({ app, logger, commandLineRunner, executionContextManager, beforeInit, requestMetrics, limiterRequest, init, afterInit, beforeError, afterError, fetchWebpackStats, }) => {
|
|
31
31
|
const log = logger('server:webapp');
|
|
32
32
|
const runHandlers = (instance, handlers) => {
|
|
33
33
|
return Promise.all([handlers && Promise.all(handlers.map((handler) => handler(instance)))]);
|
|
34
34
|
};
|
|
35
35
|
return async function webAppInit() {
|
|
36
|
-
error.errorHandler(app, { log, beforeError, afterError,
|
|
36
|
+
error.errorHandler(app, { log, beforeError, afterError, fetchWebpackStats });
|
|
37
37
|
await app.register(async (instance) => {
|
|
38
38
|
await runHandlers(instance, beforeInit);
|
|
39
39
|
});
|
package/lib/server.es.js
CHANGED
|
@@ -4,6 +4,7 @@ import EventEmitter from 'events';
|
|
|
4
4
|
import { Module, provide, Scope, commandLineListTokens, COMMAND_LINE_RUNNER_TOKEN, APP_INFO_TOKEN } from '@tramvai/core';
|
|
5
5
|
import { SERVER_TOKEN } from '@tramvai/tokens-server';
|
|
6
6
|
export * from '@tramvai/tokens-server';
|
|
7
|
+
import { FETCH_WEBPACK_STATS_TOKEN } from '@tramvai/tokens-render';
|
|
7
8
|
import { SERVER_FACTORY_TOKEN, WEB_FASTIFY_APP_FACTORY_TOKEN, WEB_FASTIFY_APP_TOKEN, WEB_FASTIFY_APP_BEFORE_INIT_TOKEN, WEB_FASTIFY_APP_INIT_TOKEN, WEB_FASTIFY_APP_AFTER_INIT_TOKEN, WEB_FASTIFY_APP_METRICS_TOKEN, WEB_FASTIFY_APP_LIMITER_TOKEN, WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN, WEB_FASTIFY_APP_AFTER_ERROR_TOKEN } from '@tramvai/tokens-server-private';
|
|
8
9
|
import { LOGGER_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, ENV_MANAGER_TOKEN, ENV_USED_TOKEN } from '@tramvai/tokens-common';
|
|
9
10
|
import { MetricsModule } from '@tramvai/module-metrics';
|
|
@@ -93,9 +94,27 @@ ServerModule = __decorate([
|
|
|
93
94
|
limiterRequest: { token: WEB_FASTIFY_APP_LIMITER_TOKEN, optional: true },
|
|
94
95
|
beforeError: { token: WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN, optional: true },
|
|
95
96
|
afterError: { token: WEB_FASTIFY_APP_AFTER_ERROR_TOKEN, optional: true },
|
|
96
|
-
|
|
97
|
+
fetchWebpackStats: FETCH_WEBPACK_STATS_TOKEN,
|
|
97
98
|
},
|
|
98
99
|
},
|
|
100
|
+
provide({
|
|
101
|
+
provide: commandLineListTokens.init,
|
|
102
|
+
multi: true,
|
|
103
|
+
useFactory: ({ rootErrorBoundary, logger }) => () => {
|
|
104
|
+
if (process.env.NODE_ENV === 'development' && rootErrorBoundary) {
|
|
105
|
+
logger.error({
|
|
106
|
+
event: 'tramvai-app-init',
|
|
107
|
+
message: 'You are using `ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN`, which was deprecated. Your boundary will not work.' +
|
|
108
|
+
'Use an `error.tsx` component instead. See more: ' +
|
|
109
|
+
'https://tramvai.dev/docs/features/error-boundaries/#root-error-boundary',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
deps: {
|
|
114
|
+
logger: LOGGER_TOKEN,
|
|
115
|
+
rootErrorBoundary: { token: ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN, optional: true },
|
|
116
|
+
},
|
|
117
|
+
}),
|
|
99
118
|
{
|
|
100
119
|
provide: commandLineListTokens.listen,
|
|
101
120
|
multi: true,
|
package/lib/server.js
CHANGED
|
@@ -7,6 +7,7 @@ var dns = require('dns');
|
|
|
7
7
|
var EventEmitter = require('events');
|
|
8
8
|
var core = require('@tramvai/core');
|
|
9
9
|
var tokensServer = require('@tramvai/tokens-server');
|
|
10
|
+
var tokensRender = require('@tramvai/tokens-render');
|
|
10
11
|
var tokensServerPrivate = require('@tramvai/tokens-server-private');
|
|
11
12
|
var tokensCommon = require('@tramvai/tokens-common');
|
|
12
13
|
var moduleMetrics = require('@tramvai/module-metrics');
|
|
@@ -100,9 +101,27 @@ exports.ServerModule = tslib.__decorate([
|
|
|
100
101
|
limiterRequest: { token: tokensServerPrivate.WEB_FASTIFY_APP_LIMITER_TOKEN, optional: true },
|
|
101
102
|
beforeError: { token: tokensServerPrivate.WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN, optional: true },
|
|
102
103
|
afterError: { token: tokensServerPrivate.WEB_FASTIFY_APP_AFTER_ERROR_TOKEN, optional: true },
|
|
103
|
-
|
|
104
|
+
fetchWebpackStats: tokensRender.FETCH_WEBPACK_STATS_TOKEN,
|
|
104
105
|
},
|
|
105
106
|
},
|
|
107
|
+
core.provide({
|
|
108
|
+
provide: core.commandLineListTokens.init,
|
|
109
|
+
multi: true,
|
|
110
|
+
useFactory: ({ rootErrorBoundary, logger }) => () => {
|
|
111
|
+
if (process.env.NODE_ENV === 'development' && rootErrorBoundary) {
|
|
112
|
+
logger.error({
|
|
113
|
+
event: 'tramvai-app-init',
|
|
114
|
+
message: 'You are using `ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN`, which was deprecated. Your boundary will not work.' +
|
|
115
|
+
'Use an `error.tsx` component instead. See more: ' +
|
|
116
|
+
'https://tramvai.dev/docs/features/error-boundaries/#root-error-boundary',
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
deps: {
|
|
121
|
+
logger: tokensCommon.LOGGER_TOKEN,
|
|
122
|
+
rootErrorBoundary: { token: react.ROOT_ERROR_BOUNDARY_COMPONENT_TOKEN, optional: true },
|
|
123
|
+
},
|
|
124
|
+
}),
|
|
106
125
|
{
|
|
107
126
|
provide: core.commandLineListTokens.listen,
|
|
108
127
|
multi: true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.90.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -25,29 +25,30 @@
|
|
|
25
25
|
"@tinkoff/monkeypatch": "2.0.5",
|
|
26
26
|
"@tinkoff/terminus": "0.1.8",
|
|
27
27
|
"@tinkoff/url": "0.8.6",
|
|
28
|
-
"@tramvai/module-cache-warmup": "2.
|
|
29
|
-
"@tramvai/module-metrics": "2.
|
|
30
|
-
"@tramvai/papi": "2.
|
|
31
|
-
"@tramvai/tokens-server": "2.
|
|
32
|
-
"@tramvai/tokens-server-private": "2.
|
|
28
|
+
"@tramvai/module-cache-warmup": "2.90.0",
|
|
29
|
+
"@tramvai/module-metrics": "2.90.0",
|
|
30
|
+
"@tramvai/papi": "2.90.0",
|
|
31
|
+
"@tramvai/tokens-server": "2.90.0",
|
|
32
|
+
"@tramvai/tokens-server-private": "2.90.0",
|
|
33
33
|
"fastify": "^4.14.1",
|
|
34
34
|
"@fastify/cookie": "^8.3.0",
|
|
35
35
|
"@fastify/compress": "^6.2.0",
|
|
36
36
|
"@fastify/formbody": "^7.4.0",
|
|
37
37
|
"@fastify/static": "^6.9.0",
|
|
38
|
+
"@loadable/server": "^5.15.0",
|
|
38
39
|
"http-proxy-middleware": "^2.0.2"
|
|
39
40
|
},
|
|
40
41
|
"peerDependencies": {
|
|
41
42
|
"@tinkoff/dippy": "0.8.15",
|
|
42
43
|
"@tinkoff/utils": "^2.1.2",
|
|
43
|
-
"@tramvai/cli": "2.
|
|
44
|
-
"@tramvai/core": "2.
|
|
45
|
-
"@tramvai/react": "2.
|
|
46
|
-
"@tramvai/module-common": "2.
|
|
47
|
-
"@tramvai/module-environment": "2.
|
|
48
|
-
"@tramvai/tokens-common": "2.
|
|
49
|
-
"@tramvai/tokens-core-private": "2.
|
|
50
|
-
"@tramvai/tokens-render": "2.
|
|
44
|
+
"@tramvai/cli": "2.90.0",
|
|
45
|
+
"@tramvai/core": "2.90.0",
|
|
46
|
+
"@tramvai/react": "2.90.0",
|
|
47
|
+
"@tramvai/module-common": "2.90.0",
|
|
48
|
+
"@tramvai/module-environment": "2.90.0",
|
|
49
|
+
"@tramvai/tokens-common": "2.90.0",
|
|
50
|
+
"@tramvai/tokens-core-private": "2.90.0",
|
|
51
|
+
"@tramvai/tokens-render": "2.90.0",
|
|
51
52
|
"react": ">=16.14.0",
|
|
52
53
|
"react-dom": ">=16.14.0",
|
|
53
54
|
"tslib": "^2.4.0"
|