@tramvai/module-child-app 5.16.0 → 5.16.2

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.
@@ -71,11 +71,21 @@ const getChildProviders = (appDi, loadableStats) => {
71
71
  provide: DISPATCHER_CONTEXT_TOKEN,
72
72
  scope: Scope.REQUEST,
73
73
  useFactory: ({ dispatcher, middlewares, initialState, parentAllowedStores }) => {
74
- const parentDispatcherContext = appDi
75
- .get(optional(ASYNC_LOCAL_STORAGE_TOKEN))
76
- ?.getStore()
77
- ?.tramvaiRequestDi?.get(DISPATCHER_CONTEXT_TOKEN) ??
78
- appDi.get(DISPATCHER_CONTEXT_TOKEN);
74
+ const parentDispatcherContext = typeof window !== 'undefined'
75
+ ? // ALS is not existing on the client,
76
+ // also if we resolve `DISPATCHER_CONTEXT_TOKEN` from Root DI in the server-side,
77
+ // it will lead to memory leak (with circular dependency) because of reducers event handlers:
78
+ // RootDi.recordValues -> DispatcherContext.storeInstances -> ReducerStore.listeners -> listener.this -> ChildDispatcherContext.parentDispatcherContext -> DispatcherContext
79
+ appDi.get(DISPATCHER_CONTEXT_TOKEN)
80
+ : appDi
81
+ .get(optional(ASYNC_LOCAL_STORAGE_TOKEN))
82
+ ?.getStore()
83
+ ?.tramvaiRequestDi?.get(DISPATCHER_CONTEXT_TOKEN);
84
+ if (!parentDispatcherContext) {
85
+ // this should not happen because we add subscribtion to root execution context abortSignal
86
+ // for Child Apps command line runner, and this token will not be resolved
87
+ throw Error('Cannot find DispatcherContext for current request, unexpected critical error');
88
+ }
79
89
  return new ChildDispatcherContext({
80
90
  dispatcher,
81
91
  // context will be set later by the CONTEXT_TOKEN
@@ -71,11 +71,21 @@ const getChildProviders = (appDi, loadableStats) => {
71
71
  provide: DISPATCHER_CONTEXT_TOKEN,
72
72
  scope: Scope.REQUEST,
73
73
  useFactory: ({ dispatcher, middlewares, initialState, parentAllowedStores }) => {
74
- const parentDispatcherContext = appDi
75
- .get(optional(ASYNC_LOCAL_STORAGE_TOKEN))
76
- ?.getStore()
77
- ?.tramvaiRequestDi?.get(DISPATCHER_CONTEXT_TOKEN) ??
78
- appDi.get(DISPATCHER_CONTEXT_TOKEN);
74
+ const parentDispatcherContext = typeof window !== 'undefined'
75
+ ? // ALS is not existing on the client,
76
+ // also if we resolve `DISPATCHER_CONTEXT_TOKEN` from Root DI in the server-side,
77
+ // it will lead to memory leak (with circular dependency) because of reducers event handlers:
78
+ // RootDi.recordValues -> DispatcherContext.storeInstances -> ReducerStore.listeners -> listener.this -> ChildDispatcherContext.parentDispatcherContext -> DispatcherContext
79
+ appDi.get(DISPATCHER_CONTEXT_TOKEN)
80
+ : appDi
81
+ .get(optional(ASYNC_LOCAL_STORAGE_TOKEN))
82
+ ?.getStore()
83
+ ?.tramvaiRequestDi?.get(DISPATCHER_CONTEXT_TOKEN);
84
+ if (!parentDispatcherContext) {
85
+ // this should not happen because we add subscribtion to root execution context abortSignal
86
+ // for Child Apps command line runner, and this token will not be resolved
87
+ throw Error('Cannot find DispatcherContext for current request, unexpected critical error');
88
+ }
79
89
  return new ChildDispatcherContext({
80
90
  dispatcher,
81
91
  // context will be set later by the CONTEXT_TOKEN
@@ -79,11 +79,21 @@ const getChildProviders = (appDi, loadableStats) => {
79
79
  provide: tokensCommon.DISPATCHER_CONTEXT_TOKEN,
80
80
  scope: core.Scope.REQUEST,
81
81
  useFactory: ({ dispatcher, middlewares, initialState, parentAllowedStores }) => {
82
- const parentDispatcherContext = appDi
83
- .get(core.optional(tokensCommon.ASYNC_LOCAL_STORAGE_TOKEN))
84
- ?.getStore()
85
- ?.tramvaiRequestDi?.get(tokensCommon.DISPATCHER_CONTEXT_TOKEN) ??
86
- appDi.get(tokensCommon.DISPATCHER_CONTEXT_TOKEN);
82
+ const parentDispatcherContext = typeof window !== 'undefined'
83
+ ? // ALS is not existing on the client,
84
+ // also if we resolve `DISPATCHER_CONTEXT_TOKEN` from Root DI in the server-side,
85
+ // it will lead to memory leak (with circular dependency) because of reducers event handlers:
86
+ // RootDi.recordValues -> DispatcherContext.storeInstances -> ReducerStore.listeners -> listener.this -> ChildDispatcherContext.parentDispatcherContext -> DispatcherContext
87
+ appDi.get(tokensCommon.DISPATCHER_CONTEXT_TOKEN)
88
+ : appDi
89
+ .get(core.optional(tokensCommon.ASYNC_LOCAL_STORAGE_TOKEN))
90
+ ?.getStore()
91
+ ?.tramvaiRequestDi?.get(tokensCommon.DISPATCHER_CONTEXT_TOKEN);
92
+ if (!parentDispatcherContext) {
93
+ // this should not happen because we add subscribtion to root execution context abortSignal
94
+ // for Child Apps command line runner, and this token will not be resolved
95
+ throw Error('Cannot find DispatcherContext for current request, unexpected critical error');
96
+ }
87
97
  return new state.ChildDispatcherContext({
88
98
  dispatcher,
89
99
  // context will be set later by the CONTEXT_TOKEN
@@ -1,16 +1,37 @@
1
- import { COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
1
+ import { isSilentError } from '@tinkoff/errors';
2
+ import { COMMAND_LINE_RUNNER_TOKEN, provide } from '@tramvai/core';
3
+ import { ROOT_EXECUTION_CONTEXT_TOKEN } from '@tramvai/tokens-common';
2
4
 
3
5
  class CommandLineRunner {
4
- constructor({ logger, rootCommandLineRunner, diManager, }) {
6
+ constructor({ logger, rootCommandLineRunner, diManager, commandLineExecutionContext, }) {
5
7
  this.log = logger('child-app:command-line-runner');
6
8
  this.rootCommandLineRunner = rootCommandLineRunner;
7
9
  this.diManager = diManager;
10
+ this.commandLineExecutionContext = commandLineExecutionContext;
8
11
  }
9
12
  async run(type, status, config) {
10
13
  const di = this.diManager.getChildDi(config);
14
+ const executionContext = this.commandLineExecutionContext();
11
15
  if (!di) {
12
16
  return;
13
17
  }
18
+ // Root App command line can be aborted before Child App command line run,
19
+ // for example in case of sync `RedirectFoundError` in page action (`resolvePageDeps` command),
20
+ // we need to prevent Child Apps preloading (also on `resolvePageDeps` command)
21
+ if (executionContext?.abortSignal?.aborted ||
22
+ (typeof window === 'undefined' && !executionContext)) {
23
+ this.log.error({
24
+ event: 'host-exection-context-aborted',
25
+ message: `Child App command line run was prevented from executing because ${executionContext?.abortSignal?.aborted
26
+ ? 'host command line was aborted'
27
+ : 'execution context is already destroyed'}`,
28
+ reason: executionContext?.abortSignal.reason,
29
+ type,
30
+ status,
31
+ childApp: { name: config.name, version: config.version, tag: config.tag },
32
+ });
33
+ return;
34
+ }
14
35
  try {
15
36
  const commandLineRunner = di.get({ token: COMMAND_LINE_RUNNER_TOKEN, optional: true });
16
37
  if (commandLineRunner && commandLineRunner !== this.rootCommandLineRunner) {
@@ -18,12 +39,21 @@ class CommandLineRunner {
18
39
  // for now just reuse metrics implementation from root as otherwise it fails after attempt to create metrics instance with the same name
19
40
  // @ts-ignore
20
41
  commandLineRunner.metricsInstance = this.rootCommandLineRunner.metricsInstance;
42
+ // provide current Root App execution context as Child App root execution context
43
+ if (executionContext) {
44
+ di.register(provide({
45
+ provide: ROOT_EXECUTION_CONTEXT_TOKEN,
46
+ useValue: executionContext,
47
+ }));
48
+ }
21
49
  await commandLineRunner.run(type, status, [], di);
22
50
  }
23
51
  }
24
52
  catch (error) {
25
53
  if (error.code !== 'E_STUB') {
26
- this.log.error({
54
+ this.log[
55
+ // for example, we don't need to log Child App run as failed in case of RedirectFoundError
56
+ isSilentError(error) || (error.reason && isSilentError(error.reason)) ? 'debug' : 'error']({
27
57
  event: 'run-failed',
28
58
  error,
29
59
  type,
@@ -1,15 +1,18 @@
1
1
  import type { CommandLineDescription, CommandLines } from '@tramvai/core';
2
2
  import { COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
3
3
  import type { ChildAppCommandLineRunner, ChildAppDiManager, ChildAppFinalConfig } from '@tramvai/tokens-child-app';
4
- import type { LOGGER_TOKEN } from '@tramvai/tokens-common';
4
+ import type { COMMAND_LINE_EXECUTION_CONTEXT_TOKEN } from '@tramvai/tokens-common';
5
+ import { type LOGGER_TOKEN } from '@tramvai/tokens-common';
5
6
  export declare class CommandLineRunner implements ChildAppCommandLineRunner {
6
7
  private readonly log;
7
8
  private readonly rootCommandLineRunner;
8
9
  private readonly diManager;
9
- constructor({ logger, rootCommandLineRunner, diManager, }: {
10
+ private readonly commandLineExecutionContext;
11
+ constructor({ logger, rootCommandLineRunner, diManager, commandLineExecutionContext, }: {
10
12
  logger: typeof LOGGER_TOKEN;
11
13
  rootCommandLineRunner: typeof COMMAND_LINE_RUNNER_TOKEN;
12
14
  diManager: ChildAppDiManager;
15
+ commandLineExecutionContext: typeof COMMAND_LINE_EXECUTION_CONTEXT_TOKEN;
13
16
  });
14
17
  run(type: keyof CommandLines, status: keyof CommandLineDescription, config: ChildAppFinalConfig): Promise<void>;
15
18
  }
@@ -1,16 +1,37 @@
1
- import { COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
1
+ import { isSilentError } from '@tinkoff/errors';
2
+ import { COMMAND_LINE_RUNNER_TOKEN, provide } from '@tramvai/core';
3
+ import { ROOT_EXECUTION_CONTEXT_TOKEN } from '@tramvai/tokens-common';
2
4
 
3
5
  class CommandLineRunner {
4
- constructor({ logger, rootCommandLineRunner, diManager, }) {
6
+ constructor({ logger, rootCommandLineRunner, diManager, commandLineExecutionContext, }) {
5
7
  this.log = logger('child-app:command-line-runner');
6
8
  this.rootCommandLineRunner = rootCommandLineRunner;
7
9
  this.diManager = diManager;
10
+ this.commandLineExecutionContext = commandLineExecutionContext;
8
11
  }
9
12
  async run(type, status, config) {
10
13
  const di = this.diManager.getChildDi(config);
14
+ const executionContext = this.commandLineExecutionContext();
11
15
  if (!di) {
12
16
  return;
13
17
  }
18
+ // Root App command line can be aborted before Child App command line run,
19
+ // for example in case of sync `RedirectFoundError` in page action (`resolvePageDeps` command),
20
+ // we need to prevent Child Apps preloading (also on `resolvePageDeps` command)
21
+ if (executionContext?.abortSignal?.aborted ||
22
+ (typeof window === 'undefined' && !executionContext)) {
23
+ this.log.error({
24
+ event: 'host-exection-context-aborted',
25
+ message: `Child App command line run was prevented from executing because ${executionContext?.abortSignal?.aborted
26
+ ? 'host command line was aborted'
27
+ : 'execution context is already destroyed'}`,
28
+ reason: executionContext?.abortSignal.reason,
29
+ type,
30
+ status,
31
+ childApp: { name: config.name, version: config.version, tag: config.tag },
32
+ });
33
+ return;
34
+ }
14
35
  try {
15
36
  const commandLineRunner = di.get({ token: COMMAND_LINE_RUNNER_TOKEN, optional: true });
16
37
  if (commandLineRunner && commandLineRunner !== this.rootCommandLineRunner) {
@@ -18,12 +39,21 @@ class CommandLineRunner {
18
39
  // for now just reuse metrics implementation from root as otherwise it fails after attempt to create metrics instance with the same name
19
40
  // @ts-ignore
20
41
  commandLineRunner.metricsInstance = this.rootCommandLineRunner.metricsInstance;
42
+ // provide current Root App execution context as Child App root execution context
43
+ if (executionContext) {
44
+ di.register(provide({
45
+ provide: ROOT_EXECUTION_CONTEXT_TOKEN,
46
+ useValue: executionContext,
47
+ }));
48
+ }
21
49
  await commandLineRunner.run(type, status, [], di);
22
50
  }
23
51
  }
24
52
  catch (error) {
25
53
  if (error.code !== 'E_STUB') {
26
- this.log.error({
54
+ this.log[
55
+ // for example, we don't need to log Child App run as failed in case of RedirectFoundError
56
+ isSilentError(error) || (error.reason && isSilentError(error.reason)) ? 'debug' : 'error']({
27
57
  event: 'run-failed',
28
58
  error,
29
59
  type,
@@ -2,19 +2,40 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var errors = require('@tinkoff/errors');
5
6
  var core = require('@tramvai/core');
7
+ var tokensCommon = require('@tramvai/tokens-common');
6
8
 
7
9
  class CommandLineRunner {
8
- constructor({ logger, rootCommandLineRunner, diManager, }) {
10
+ constructor({ logger, rootCommandLineRunner, diManager, commandLineExecutionContext, }) {
9
11
  this.log = logger('child-app:command-line-runner');
10
12
  this.rootCommandLineRunner = rootCommandLineRunner;
11
13
  this.diManager = diManager;
14
+ this.commandLineExecutionContext = commandLineExecutionContext;
12
15
  }
13
16
  async run(type, status, config) {
14
17
  const di = this.diManager.getChildDi(config);
18
+ const executionContext = this.commandLineExecutionContext();
15
19
  if (!di) {
16
20
  return;
17
21
  }
22
+ // Root App command line can be aborted before Child App command line run,
23
+ // for example in case of sync `RedirectFoundError` in page action (`resolvePageDeps` command),
24
+ // we need to prevent Child Apps preloading (also on `resolvePageDeps` command)
25
+ if (executionContext?.abortSignal?.aborted ||
26
+ (typeof window === 'undefined' && !executionContext)) {
27
+ this.log.error({
28
+ event: 'host-exection-context-aborted',
29
+ message: `Child App command line run was prevented from executing because ${executionContext?.abortSignal?.aborted
30
+ ? 'host command line was aborted'
31
+ : 'execution context is already destroyed'}`,
32
+ reason: executionContext?.abortSignal.reason,
33
+ type,
34
+ status,
35
+ childApp: { name: config.name, version: config.version, tag: config.tag },
36
+ });
37
+ return;
38
+ }
18
39
  try {
19
40
  const commandLineRunner = di.get({ token: core.COMMAND_LINE_RUNNER_TOKEN, optional: true });
20
41
  if (commandLineRunner && commandLineRunner !== this.rootCommandLineRunner) {
@@ -22,12 +43,21 @@ class CommandLineRunner {
22
43
  // for now just reuse metrics implementation from root as otherwise it fails after attempt to create metrics instance with the same name
23
44
  // @ts-ignore
24
45
  commandLineRunner.metricsInstance = this.rootCommandLineRunner.metricsInstance;
46
+ // provide current Root App execution context as Child App root execution context
47
+ if (executionContext) {
48
+ di.register(core.provide({
49
+ provide: tokensCommon.ROOT_EXECUTION_CONTEXT_TOKEN,
50
+ useValue: executionContext,
51
+ }));
52
+ }
25
53
  await commandLineRunner.run(type, status, [], di);
26
54
  }
27
55
  }
28
56
  catch (error) {
29
57
  if (error.code !== 'E_STUB') {
30
- this.log.error({
58
+ this.log[
59
+ // for example, we don't need to log Child App run as failed in case of RedirectFoundError
60
+ errors.isSilentError(error) || (error.reason && errors.isSilentError(error.reason)) ? 'debug' : 'error']({
31
61
  event: 'run-failed',
32
62
  error,
33
63
  type,
@@ -1,7 +1,7 @@
1
1
  import { Scope, DI_TOKEN, optional } from '@tinkoff/dippy';
2
2
  import { provide, commandLineListTokens, COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
3
3
  import { CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN, CHILD_APP_RESOLUTION_CONFIGS_TOKEN, CHILD_APP_RESOLVE_CONFIG_TOKEN, CHILD_APP_RESOLVE_BASE_URL_TOKEN, CHILD_APP_SINGLETON_DI_MANAGER_TOKEN, CHILD_APP_LOADER_TOKEN, CHILD_APP_ROOT_DI_ACCESS_MODE_TOKEN, CHILD_APP_CONTRACT_MANAGER, CHILD_APP_DI_MANAGER_TOKEN, CHILD_APP_COMMAND_LINE_RUNNER_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN, CHILD_APP_RENDER_MANAGER_TOKEN, HOST_PROVIDED_CONTRACTS, CHILD_APP_ERROR_BOUNDARY_TOKEN } from '@tramvai/tokens-child-app';
4
- import { COMBINE_REDUCERS, LOGGER_TOKEN, ENV_MANAGER_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN, COMPONENT_REGISTRY_TOKEN, LIMIT_ACTION_GLOBAL_TIME_RUN, ACTION_CONDITIONALS } from '@tramvai/tokens-common';
4
+ import { COMBINE_REDUCERS, LOGGER_TOKEN, ENV_MANAGER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN, COMPONENT_REGISTRY_TOKEN, LIMIT_ACTION_GLOBAL_TIME_RUN, ACTION_CONDITIONALS } from '@tramvai/tokens-common';
5
5
  import { EXTEND_RENDER } from '@tramvai/tokens-render';
6
6
  import { ROUTER_TOKEN, PAGE_SERVICE_TOKEN, LINK_PREFETCH_MANAGER_TOKEN, ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN } from '@tramvai/tokens-router';
7
7
  import { SingletonDiManager } from './singletonDi.browser.js';
@@ -143,6 +143,7 @@ const sharedProviders = [
143
143
  logger: LOGGER_TOKEN,
144
144
  rootCommandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
145
145
  diManager: CHILD_APP_DI_MANAGER_TOKEN,
146
+ commandLineExecutionContext: COMMAND_LINE_EXECUTION_CONTEXT_TOKEN,
146
147
  },
147
148
  }),
148
149
  provide({
@@ -1,7 +1,7 @@
1
1
  import { Scope, DI_TOKEN, optional } from '@tinkoff/dippy';
2
2
  import { provide, commandLineListTokens, COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
3
3
  import { CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN, CHILD_APP_RESOLUTION_CONFIGS_TOKEN, CHILD_APP_RESOLVE_CONFIG_TOKEN, CHILD_APP_RESOLVE_BASE_URL_TOKEN, CHILD_APP_SINGLETON_DI_MANAGER_TOKEN, CHILD_APP_LOADER_TOKEN, CHILD_APP_ROOT_DI_ACCESS_MODE_TOKEN, CHILD_APP_CONTRACT_MANAGER, CHILD_APP_DI_MANAGER_TOKEN, CHILD_APP_COMMAND_LINE_RUNNER_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN, CHILD_APP_RENDER_MANAGER_TOKEN, HOST_PROVIDED_CONTRACTS, CHILD_APP_ERROR_BOUNDARY_TOKEN } from '@tramvai/tokens-child-app';
4
- import { COMBINE_REDUCERS, LOGGER_TOKEN, ENV_MANAGER_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN, COMPONENT_REGISTRY_TOKEN, LIMIT_ACTION_GLOBAL_TIME_RUN, ACTION_CONDITIONALS } from '@tramvai/tokens-common';
4
+ import { COMBINE_REDUCERS, LOGGER_TOKEN, ENV_MANAGER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN, COMPONENT_REGISTRY_TOKEN, LIMIT_ACTION_GLOBAL_TIME_RUN, ACTION_CONDITIONALS } from '@tramvai/tokens-common';
5
5
  import { EXTEND_RENDER } from '@tramvai/tokens-render';
6
6
  import { ROUTER_TOKEN, PAGE_SERVICE_TOKEN, LINK_PREFETCH_MANAGER_TOKEN, ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN } from '@tramvai/tokens-router';
7
7
  import { SingletonDiManager } from './singletonDi.es.js';
@@ -143,6 +143,7 @@ const sharedProviders = [
143
143
  logger: LOGGER_TOKEN,
144
144
  rootCommandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
145
145
  diManager: CHILD_APP_DI_MANAGER_TOKEN,
146
+ commandLineExecutionContext: COMMAND_LINE_EXECUTION_CONTEXT_TOKEN,
146
147
  },
147
148
  }),
148
149
  provide({
@@ -147,6 +147,7 @@ const sharedProviders = [
147
147
  logger: tokensCommon.LOGGER_TOKEN,
148
148
  rootCommandLineRunner: core.COMMAND_LINE_RUNNER_TOKEN,
149
149
  diManager: tokensChildApp.CHILD_APP_DI_MANAGER_TOKEN,
150
+ commandLineExecutionContext: tokensCommon.COMMAND_LINE_EXECUTION_CONTEXT_TOKEN,
150
151
  },
151
152
  }),
152
153
  core.provide({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-child-app",
3
- "version": "5.16.0",
3
+ "version": "5.16.2",
4
4
  "description": "Module for child apps",
5
5
  "browser": {
6
6
  "./lib/server.js": "./lib/browser.js",
@@ -33,23 +33,24 @@
33
33
  "@tinkoff/env-validators": "0.4.2",
34
34
  "@tinkoff/module-loader-client": "0.7.3",
35
35
  "@tinkoff/module-loader-server": "0.8.4",
36
- "@tramvai/module-common": "5.16.0",
36
+ "@tramvai/module-common": "5.16.2",
37
37
  "@tinkoff/url": "0.11.2",
38
- "@tramvai/child-app-core": "5.16.0",
38
+ "@tinkoff/errors": "0.6.2",
39
+ "@tramvai/child-app-core": "5.16.2",
39
40
  "@tramvai/safe-strings": "0.8.4",
40
- "@tramvai/tokens-child-app": "5.16.0"
41
+ "@tramvai/tokens-child-app": "5.16.2"
41
42
  },
42
43
  "devDependencies": {},
43
44
  "peerDependencies": {
44
45
  "@tinkoff/dippy": "0.11.3",
45
- "@tinkoff/router": "0.5.52",
46
+ "@tinkoff/router": "0.5.54",
46
47
  "@tinkoff/utils": "^2.1.2",
47
- "@tramvai/core": "5.16.0",
48
- "@tramvai/state": "5.16.0",
49
- "@tramvai/react": "5.16.0",
50
- "@tramvai/tokens-common": "5.16.0",
51
- "@tramvai/tokens-render": "5.16.0",
52
- "@tramvai/tokens-router": "5.16.0",
48
+ "@tramvai/core": "5.16.2",
49
+ "@tramvai/state": "5.16.2",
50
+ "@tramvai/react": "5.16.2",
51
+ "@tramvai/tokens-common": "5.16.2",
52
+ "@tramvai/tokens-render": "5.16.2",
53
+ "@tramvai/tokens-router": "5.16.2",
53
54
  "react": ">=16.14.0",
54
55
  "react-dom": ">=16.14.0",
55
56
  "object-assign": "^4.1.1",