@tramvai/module-common 2.143.1 → 2.145.1

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.
Files changed (32) hide show
  1. package/lib/actions/ActionModule.browser.js +8 -2
  2. package/lib/actions/ActionModule.es.js +8 -2
  3. package/lib/actions/ActionModule.js +6 -0
  4. package/lib/actions/actionPageRunner.browser.browser.js +24 -2
  5. package/lib/actions/actionPageRunner.browser.d.ts +7 -6
  6. package/lib/actions/actionPageRunner.d.ts +8 -1
  7. package/lib/actions/actionPageRunner.es.js +48 -2
  8. package/lib/actions/actionPageRunner.js +47 -1
  9. package/lib/actions/deferred/await.browser.js +36 -0
  10. package/lib/actions/deferred/await.d.ts +6 -0
  11. package/lib/actions/deferred/await.es.js +36 -0
  12. package/lib/actions/deferred/await.js +40 -0
  13. package/lib/actions/deferred/clientScriptsUtils.d.ts +8 -0
  14. package/lib/actions/deferred/clientScriptsUtils.es.js +10 -0
  15. package/lib/actions/deferred/clientScriptsUtils.js +15 -0
  16. package/lib/actions/deferred/deferred.browser.js +22 -0
  17. package/lib/actions/deferred/deferred.d.ts +11 -0
  18. package/lib/actions/deferred/deferred.es.js +22 -0
  19. package/lib/actions/deferred/deferred.inline.d.ts +2 -0
  20. package/lib/actions/deferred/deferred.inline.es.js +20 -0
  21. package/lib/actions/deferred/deferred.inline.js +24 -0
  22. package/lib/actions/deferred/deferred.js +26 -0
  23. package/lib/actions/deferred/providers.browser.browser.js +28 -0
  24. package/lib/actions/deferred/providers.browser.d.ts +9 -0
  25. package/lib/actions/deferred/providers.d.ts +20 -0
  26. package/lib/actions/deferred/providers.es.js +59 -0
  27. package/lib/actions/deferred/providers.js +63 -0
  28. package/lib/index.browser.js +2 -0
  29. package/lib/index.d.ts +2 -0
  30. package/lib/index.es.js +2 -0
  31. package/lib/index.js +4 -0
  32. package/package.json +19 -17
@@ -1,6 +1,7 @@
1
1
  import { __decorate } from 'tslib';
2
- import { createToken, Module, provide, Scope, ACTIONS_LIST_TOKEN, DI_TOKEN } from '@tramvai/core';
3
- import { COMBINE_REDUCERS, ACTION_REGISTRY_TOKEN, ACTION_EXECUTION_TOKEN, ACTION_CONDITIONALS, CONTEXT_TOKEN, STORE_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, ACTION_PAGE_RUNNER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, LOGGER_TOKEN } from '@tramvai/tokens-common';
2
+ import { createToken, Module, provide, Scope, ACTIONS_LIST_TOKEN, DI_TOKEN, optional } from '@tramvai/core';
3
+ import { COMBINE_REDUCERS, ACTION_REGISTRY_TOKEN, ACTION_EXECUTION_TOKEN, ACTION_CONDITIONALS, CONTEXT_TOKEN, STORE_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, ACTION_PAGE_RUNNER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, LOGGER_TOKEN, DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
4
+ import { SERVER_RESPONSE_TASK_MANAGER, SERVER_RESPONSE_STREAM } from '@tramvai/tokens-server-private';
4
5
  import { actionTramvaiReducer } from './actionTramvaiReducer.browser.js';
5
6
  import { ActionExecution } from './actionExecution.browser.js';
6
7
  import { ActionRegistry } from './actionRegistry.browser.js';
@@ -15,6 +16,7 @@ import { pageServer } from './conditions/pageServer.browser.js';
15
16
  export { pageServer } from './conditions/pageServer.browser.js';
16
17
  import { pageBrowser } from './conditions/pageBrowser.browser.js';
17
18
  export { pageBrowser } from './conditions/pageBrowser.browser.js';
19
+ import { providers } from './deferred/providers.browser.browser.js';
18
20
 
19
21
  const LIMIT_ACTION_GLOBAL_TIME_RUN = createToken('limitActionGlobalTimeRun');
20
22
  let ActionModule = class ActionModule {
@@ -61,6 +63,9 @@ ActionModule = __decorate([
61
63
  store: STORE_TOKEN,
62
64
  limitTime: LIMIT_ACTION_GLOBAL_TIME_RUN,
63
65
  logger: LOGGER_TOKEN,
66
+ deferredMap: DEFERRED_ACTIONS_MAP_TOKEN,
67
+ responseTaskManager: optional(SERVER_RESPONSE_TASK_MANAGER),
68
+ serverResponseStream: optional(SERVER_RESPONSE_STREAM),
64
69
  },
65
70
  }),
66
71
  provide({
@@ -72,6 +77,7 @@ ActionModule = __decorate([
72
77
  multi: true,
73
78
  useValue: [alwaysCondition, onlyServer, onlyBrowser, pageServer, pageBrowser],
74
79
  }),
80
+ ...providers,
75
81
  ],
76
82
  })
77
83
  ], ActionModule);
@@ -1,6 +1,7 @@
1
1
  import { __decorate } from 'tslib';
2
- import { createToken, Module, provide, Scope, ACTIONS_LIST_TOKEN, DI_TOKEN } from '@tramvai/core';
3
- import { COMBINE_REDUCERS, ACTION_REGISTRY_TOKEN, ACTION_EXECUTION_TOKEN, ACTION_CONDITIONALS, CONTEXT_TOKEN, STORE_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, ACTION_PAGE_RUNNER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, LOGGER_TOKEN } from '@tramvai/tokens-common';
2
+ import { createToken, Module, provide, Scope, ACTIONS_LIST_TOKEN, DI_TOKEN, optional } from '@tramvai/core';
3
+ import { COMBINE_REDUCERS, ACTION_REGISTRY_TOKEN, ACTION_EXECUTION_TOKEN, ACTION_CONDITIONALS, CONTEXT_TOKEN, STORE_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, ACTION_PAGE_RUNNER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, LOGGER_TOKEN, DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
4
+ import { SERVER_RESPONSE_TASK_MANAGER, SERVER_RESPONSE_STREAM } from '@tramvai/tokens-server-private';
4
5
  import { actionTramvaiReducer } from './actionTramvaiReducer.es.js';
5
6
  import { ActionExecution } from './actionExecution.es.js';
6
7
  import { ActionRegistry } from './actionRegistry.es.js';
@@ -15,6 +16,7 @@ import { pageServer } from './conditions/pageServer.es.js';
15
16
  export { pageServer } from './conditions/pageServer.es.js';
16
17
  import { pageBrowser } from './conditions/pageBrowser.es.js';
17
18
  export { pageBrowser } from './conditions/pageBrowser.es.js';
19
+ import { providers } from './deferred/providers.es.js';
18
20
 
19
21
  const LIMIT_ACTION_GLOBAL_TIME_RUN = createToken('limitActionGlobalTimeRun');
20
22
  let ActionModule = class ActionModule {
@@ -61,6 +63,9 @@ ActionModule = __decorate([
61
63
  store: STORE_TOKEN,
62
64
  limitTime: LIMIT_ACTION_GLOBAL_TIME_RUN,
63
65
  logger: LOGGER_TOKEN,
66
+ deferredMap: DEFERRED_ACTIONS_MAP_TOKEN,
67
+ responseTaskManager: optional(SERVER_RESPONSE_TASK_MANAGER),
68
+ serverResponseStream: optional(SERVER_RESPONSE_STREAM),
64
69
  },
65
70
  }),
66
71
  provide({
@@ -72,6 +77,7 @@ ActionModule = __decorate([
72
77
  multi: true,
73
78
  useValue: [alwaysCondition, onlyServer, onlyBrowser, pageServer, pageBrowser],
74
79
  }),
80
+ ...providers,
75
81
  ],
76
82
  })
77
83
  ], ActionModule);
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var tslib = require('tslib');
6
6
  var core = require('@tramvai/core');
7
7
  var tokensCommon = require('@tramvai/tokens-common');
8
+ var tokensServerPrivate = require('@tramvai/tokens-server-private');
8
9
  var actionTramvaiReducer = require('./actionTramvaiReducer.js');
9
10
  var actionExecution = require('./actionExecution.js');
10
11
  var actionRegistry = require('./actionRegistry.js');
@@ -14,6 +15,7 @@ var onlyServer = require('./conditions/onlyServer.js');
14
15
  var onlyBrowser = require('./conditions/onlyBrowser.js');
15
16
  var pageServer = require('./conditions/pageServer.js');
16
17
  var pageBrowser = require('./conditions/pageBrowser.js');
18
+ var providers = require('./deferred/providers.js');
17
19
 
18
20
  const LIMIT_ACTION_GLOBAL_TIME_RUN = core.createToken('limitActionGlobalTimeRun');
19
21
  exports.ActionModule = class ActionModule {
@@ -60,6 +62,9 @@ exports.ActionModule = tslib.__decorate([
60
62
  store: tokensCommon.STORE_TOKEN,
61
63
  limitTime: LIMIT_ACTION_GLOBAL_TIME_RUN,
62
64
  logger: tokensCommon.LOGGER_TOKEN,
65
+ deferredMap: tokensCommon.DEFERRED_ACTIONS_MAP_TOKEN,
66
+ responseTaskManager: core.optional(tokensServerPrivate.SERVER_RESPONSE_TASK_MANAGER),
67
+ serverResponseStream: core.optional(tokensServerPrivate.SERVER_RESPONSE_STREAM),
63
68
  },
64
69
  }),
65
70
  core.provide({
@@ -71,6 +76,7 @@ exports.ActionModule = tslib.__decorate([
71
76
  multi: true,
72
77
  useValue: [always.alwaysCondition, onlyServer.onlyServer, onlyBrowser.onlyBrowser, pageServer.pageServer, pageBrowser.pageBrowser],
73
78
  }),
79
+ ...providers.providers,
74
80
  ],
75
81
  })
76
82
  ], exports.ActionModule);
@@ -1,5 +1,6 @@
1
1
  import { isSilentError } from '@tinkoff/errors';
2
- import { isTramvaiAction, ACTION_PARAMETERS } from '@tramvai/core';
2
+ import { ACTION_PARAMETERS, isTramvaiAction } from '@tramvai/core';
3
+ import { Deferred } from './deferred/deferred.browser.js';
3
4
 
4
5
  const DEFAULT_PAYLOAD = {};
5
6
  class ActionPageRunner {
@@ -10,8 +11,29 @@ class ActionPageRunner {
10
11
  runActions(actions, stopRunAtError = () => false) {
11
12
  return this.deps.executionContextManager.withContext(this.deps.commandLineExecutionContext(), { name: 'pageActions', values: { pageActions: true } }, async (executionContext) => {
12
13
  const actionMapper = (action) => {
14
+ const isDeferredAction = ACTION_PARAMETERS in action && action[ACTION_PARAMETERS].deferred;
15
+ if (isDeferredAction && !this.deps.deferredMap.get(action.name)) {
16
+ const deferred = new Deferred();
17
+ // avoid unhandled promise rejection
18
+ deferred.promise.catch(() => { });
19
+ this.deps.deferredMap.set(action.name, deferred);
20
+ }
13
21
  return Promise.resolve()
14
- .then(() => this.deps.actionExecution.runInContext(executionContext, action, DEFAULT_PAYLOAD))
22
+ .then(() => {
23
+ const promise = this.deps.actionExecution.runInContext(executionContext, action, DEFAULT_PAYLOAD);
24
+ if (isDeferredAction) {
25
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
26
+ const deferred = this.deps.deferredMap.get(action.name);
27
+ // @todo check always: true actions
28
+ if (!deferred.isResolved() && !deferred.isRejected()) {
29
+ // eslint-disable-next-line promise/no-nesting
30
+ promise.then(deferred.resolve).catch(deferred.reject);
31
+ }
32
+ // eslint-disable-next-line promise/no-return-wrap
33
+ return Promise.resolve();
34
+ }
35
+ return promise;
36
+ })
15
37
  .catch((error) => {
16
38
  var _a;
17
39
  if (!isSilentError(error)) {
@@ -1,15 +1,16 @@
1
- import type { Action, TramvaiAction } from '@tramvai/core';
1
+ import type { Action, ExtractDependencyType, TramvaiAction } from '@tramvai/core';
2
2
  import type { LOGGER_TOKEN } from '@tramvai/module-log';
3
- import type { COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN } from '@tramvai/tokens-common';
3
+ import type { COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
4
4
  import type { ActionExecution } from './actionExecution';
5
5
  export declare class ActionPageRunner {
6
6
  private deps;
7
- log: ReturnType<typeof LOGGER_TOKEN>;
7
+ log: ReturnType<ExtractDependencyType<typeof LOGGER_TOKEN>>;
8
8
  constructor(deps: {
9
9
  actionExecution: ActionExecution;
10
- executionContextManager: typeof EXECUTION_CONTEXT_MANAGER_TOKEN;
11
- commandLineExecutionContext: typeof COMMAND_LINE_EXECUTION_CONTEXT_TOKEN;
12
- logger: typeof LOGGER_TOKEN;
10
+ executionContextManager: ExtractDependencyType<typeof EXECUTION_CONTEXT_MANAGER_TOKEN>;
11
+ commandLineExecutionContext: ExtractDependencyType<typeof COMMAND_LINE_EXECUTION_CONTEXT_TOKEN>;
12
+ logger: ExtractDependencyType<typeof LOGGER_TOKEN>;
13
+ deferredMap: ExtractDependencyType<typeof DEFERRED_ACTIONS_MAP_TOKEN>;
13
14
  });
14
15
  runActions(actions: Array<Action | TramvaiAction<any[], any, any>>, stopRunAtError?: (error: Error) => boolean): Promise<void>;
15
16
  }
@@ -1,5 +1,6 @@
1
1
  import type { Action, ExtractDependencyType, TramvaiAction } from '@tramvai/core';
2
- import type { LOGGER_TOKEN, ActionPageRunner as ActionPageRunnerInterface, STORE_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, ACTION_EXECUTION_TOKEN } from '@tramvai/tokens-common';
2
+ import type { LOGGER_TOKEN, ActionPageRunner as ActionPageRunnerInterface, STORE_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, ACTION_EXECUTION_TOKEN, DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
3
+ import type { SERVER_RESPONSE_STREAM, SERVER_RESPONSE_TASK_MANAGER } from '@tramvai/tokens-server-private';
3
4
  declare module '@tramvai/tokens-common' {
4
5
  interface ExecutionContextValues {
5
6
  pageActions?: boolean;
@@ -8,6 +9,9 @@ declare module '@tramvai/tokens-common' {
8
9
  export declare class ActionPageRunner implements ActionPageRunnerInterface {
9
10
  private deps;
10
11
  private log;
12
+ private deferredMap;
13
+ private responseTaskManager;
14
+ private serverResponseStream;
11
15
  constructor(deps: {
12
16
  store: ExtractDependencyType<typeof STORE_TOKEN>;
13
17
  actionExecution: ExtractDependencyType<typeof ACTION_EXECUTION_TOKEN>;
@@ -15,6 +19,9 @@ export declare class ActionPageRunner implements ActionPageRunnerInterface {
15
19
  commandLineExecutionContext: ExtractDependencyType<typeof COMMAND_LINE_EXECUTION_CONTEXT_TOKEN>;
16
20
  limitTime: number;
17
21
  logger: ExtractDependencyType<typeof LOGGER_TOKEN>;
22
+ deferredMap: ExtractDependencyType<typeof DEFERRED_ACTIONS_MAP_TOKEN>;
23
+ responseTaskManager: ExtractDependencyType<typeof SERVER_RESPONSE_TASK_MANAGER> | null;
24
+ serverResponseStream: ExtractDependencyType<typeof SERVER_RESPONSE_STREAM> | null;
18
25
  });
19
26
  runActions(actions: Array<Action | TramvaiAction<any[], any, any>>, stopRunAtError?: (error: Error) => boolean): Promise<void>;
20
27
  private syncStateActions;
@@ -1,12 +1,17 @@
1
- import { isTramvaiAction, ACTION_PARAMETERS } from '@tramvai/core';
1
+ import { ACTION_PARAMETERS, isTramvaiAction } from '@tramvai/core';
2
2
  import { isSilentError } from '@tinkoff/errors';
3
3
  import { actionServerStateEvent } from './actionTramvaiReducer.es.js';
4
+ import { Deferred } from './deferred/deferred.es.js';
5
+ import { generateDeferredResolve, generateDeferredReject } from './deferred/clientScriptsUtils.es.js';
4
6
 
5
7
  const DEFAULT_PAYLOAD = {};
6
8
  class ActionPageRunner {
7
9
  constructor(deps) {
8
10
  this.deps = deps;
9
11
  this.log = deps.logger('action:action-page-runner');
12
+ this.deferredMap = deps.deferredMap;
13
+ this.responseTaskManager = deps.responseTaskManager;
14
+ this.serverResponseStream = deps.serverResponseStream;
10
15
  }
11
16
  // TODO stopRunAtError нужен только для редиректов на стороне сервера в экшенах. И нужно пересмотреть реализацию редиректов
12
17
  runActions(actions, stopRunAtError = () => false) {
@@ -32,8 +37,49 @@ class ActionPageRunner {
32
37
  resolve();
33
38
  };
34
39
  const actionMapper = (action) => {
40
+ const isDeferredAction = ACTION_PARAMETERS in action && action[ACTION_PARAMETERS].deferred;
41
+ if (isDeferredAction && !this.deferredMap.get(action.name)) {
42
+ const deferred = new Deferred();
43
+ // avoid unhandled promise rejection
44
+ deferred.promise.catch(() => { });
45
+ this.deferredMap.set(action.name, deferred);
46
+ }
35
47
  return Promise.resolve()
36
- .then(() => this.deps.actionExecution.runInContext(executionContext, action, DEFAULT_PAYLOAD))
48
+ .then(() => {
49
+ var _a;
50
+ const promise = this.deps.actionExecution.runInContext(executionContext, action, DEFAULT_PAYLOAD);
51
+ if (isDeferredAction) {
52
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
53
+ const deferred = this.deferredMap.get(action.name);
54
+ // eslint-disable-next-line promise/no-nesting
55
+ promise.then(deferred.resolve).catch(deferred.reject);
56
+ (_a = this.responseTaskManager) === null || _a === void 0 ? void 0 : _a.push(async () => {
57
+ // scripts will already be present on the page HTML
58
+ if (deferred.isResolved() || deferred.isRejected()) {
59
+ return;
60
+ }
61
+ // eslint-disable-next-line promise/no-nesting
62
+ await deferred.promise
63
+ .then((data) => {
64
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
65
+ this.serverResponseStream.push(`<script>${generateDeferredResolve({
66
+ key: action.name,
67
+ data,
68
+ })}</script>`);
69
+ })
70
+ .catch((reason) => {
71
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
72
+ this.serverResponseStream.push(`<script>${generateDeferredReject({
73
+ key: action.name,
74
+ error: reason,
75
+ })}</script>`);
76
+ });
77
+ });
78
+ // eslint-disable-next-line promise/no-return-wrap
79
+ return Promise.resolve();
80
+ }
81
+ return promise;
82
+ })
37
83
  .catch((error) => {
38
84
  var _a;
39
85
  const isCriticalError = stopRunAtError(error);
@@ -5,12 +5,17 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var core = require('@tramvai/core');
6
6
  var errors = require('@tinkoff/errors');
7
7
  var actionTramvaiReducer = require('./actionTramvaiReducer.js');
8
+ var deferred = require('./deferred/deferred.js');
9
+ var clientScriptsUtils = require('./deferred/clientScriptsUtils.js');
8
10
 
9
11
  const DEFAULT_PAYLOAD = {};
10
12
  class ActionPageRunner {
11
13
  constructor(deps) {
12
14
  this.deps = deps;
13
15
  this.log = deps.logger('action:action-page-runner');
16
+ this.deferredMap = deps.deferredMap;
17
+ this.responseTaskManager = deps.responseTaskManager;
18
+ this.serverResponseStream = deps.serverResponseStream;
14
19
  }
15
20
  // TODO stopRunAtError нужен только для редиректов на стороне сервера в экшенах. И нужно пересмотреть реализацию редиректов
16
21
  runActions(actions, stopRunAtError = () => false) {
@@ -36,8 +41,49 @@ class ActionPageRunner {
36
41
  resolve();
37
42
  };
38
43
  const actionMapper = (action) => {
44
+ const isDeferredAction = core.ACTION_PARAMETERS in action && action[core.ACTION_PARAMETERS].deferred;
45
+ if (isDeferredAction && !this.deferredMap.get(action.name)) {
46
+ const deferred$1 = new deferred.Deferred();
47
+ // avoid unhandled promise rejection
48
+ deferred$1.promise.catch(() => { });
49
+ this.deferredMap.set(action.name, deferred$1);
50
+ }
39
51
  return Promise.resolve()
40
- .then(() => this.deps.actionExecution.runInContext(executionContext, action, DEFAULT_PAYLOAD))
52
+ .then(() => {
53
+ var _a;
54
+ const promise = this.deps.actionExecution.runInContext(executionContext, action, DEFAULT_PAYLOAD);
55
+ if (isDeferredAction) {
56
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
57
+ const deferred = this.deferredMap.get(action.name);
58
+ // eslint-disable-next-line promise/no-nesting
59
+ promise.then(deferred.resolve).catch(deferred.reject);
60
+ (_a = this.responseTaskManager) === null || _a === void 0 ? void 0 : _a.push(async () => {
61
+ // scripts will already be present on the page HTML
62
+ if (deferred.isResolved() || deferred.isRejected()) {
63
+ return;
64
+ }
65
+ // eslint-disable-next-line promise/no-nesting
66
+ await deferred.promise
67
+ .then((data) => {
68
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
69
+ this.serverResponseStream.push(`<script>${clientScriptsUtils.generateDeferredResolve({
70
+ key: action.name,
71
+ data,
72
+ })}</script>`);
73
+ })
74
+ .catch((reason) => {
75
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
76
+ this.serverResponseStream.push(`<script>${clientScriptsUtils.generateDeferredReject({
77
+ key: action.name,
78
+ error: reason,
79
+ })}</script>`);
80
+ });
81
+ });
82
+ // eslint-disable-next-line promise/no-return-wrap
83
+ return Promise.resolve();
84
+ }
85
+ return promise;
86
+ })
41
87
  .catch((error) => {
42
88
  var _a;
43
89
  const isCriticalError = stopRunAtError(error);
@@ -0,0 +1,36 @@
1
+ import { useDi } from '@tramvai/react';
2
+ import { DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
3
+ import { deserializeError } from '@tramvai/safe-strings';
4
+ import { Deferred } from './deferred.browser.js';
5
+
6
+ function Await({ action, children, error, }) {
7
+ const deferredMap = useDi(DEFERRED_ACTIONS_MAP_TOKEN);
8
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
9
+ let deferred = deferredMap.get(action.name);
10
+ if (!action.deferred) {
11
+ throw new Error(`Action ${action.name} is not deferred`);
12
+ }
13
+ // for SPA-transitions, when actions will be called after rendering
14
+ if (!deferred) {
15
+ deferred = new Deferred();
16
+ // avoid unhandled promise rejection
17
+ deferred.promise.catch(() => { });
18
+ deferredMap.set(action.name, deferred);
19
+ }
20
+ if (deferred.isResolved()) {
21
+ return children(deferred.resolveData);
22
+ }
23
+ if (deferred.isRejected()) {
24
+ const reason = deferred.rejectReason instanceof Error
25
+ ? deferred.rejectReason
26
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
27
+ deserializeError(deferred.rejectReason);
28
+ if (!error) {
29
+ throw reason;
30
+ }
31
+ return error(reason);
32
+ }
33
+ throw deferred.promise;
34
+ }
35
+
36
+ export { Await };
@@ -0,0 +1,6 @@
1
+ import type { TramvaiAction } from '@tramvai/types-actions-state-context';
2
+ export declare function Await<Result>({ action, children, error, }: {
3
+ action: TramvaiAction<any, Result, any>;
4
+ children: (data: Result extends Promise<infer R> ? R : Result) => JSX.Element;
5
+ error?: (reason: any) => JSX.Element;
6
+ }): JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { useDi } from '@tramvai/react';
2
+ import { DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
3
+ import { deserializeError } from '@tramvai/safe-strings';
4
+ import { Deferred } from './deferred.es.js';
5
+
6
+ function Await({ action, children, error, }) {
7
+ const deferredMap = useDi(DEFERRED_ACTIONS_MAP_TOKEN);
8
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
9
+ let deferred = deferredMap.get(action.name);
10
+ if (!action.deferred) {
11
+ throw new Error(`Action ${action.name} is not deferred`);
12
+ }
13
+ // for SPA-transitions, when actions will be called after rendering
14
+ if (!deferred) {
15
+ deferred = new Deferred();
16
+ // avoid unhandled promise rejection
17
+ deferred.promise.catch(() => { });
18
+ deferredMap.set(action.name, deferred);
19
+ }
20
+ if (deferred.isResolved()) {
21
+ return children(deferred.resolveData);
22
+ }
23
+ if (deferred.isRejected()) {
24
+ const reason = deferred.rejectReason instanceof Error
25
+ ? deferred.rejectReason
26
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
27
+ deserializeError(deferred.rejectReason);
28
+ if (!error) {
29
+ throw reason;
30
+ }
31
+ return error(reason);
32
+ }
33
+ throw deferred.promise;
34
+ }
35
+
36
+ export { Await };
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('@tramvai/react');
6
+ var tokensCommon = require('@tramvai/tokens-common');
7
+ var safeStrings = require('@tramvai/safe-strings');
8
+ var deferred = require('./deferred.js');
9
+
10
+ function Await({ action, children, error, }) {
11
+ const deferredMap = react.useDi(tokensCommon.DEFERRED_ACTIONS_MAP_TOKEN);
12
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13
+ let deferred$1 = deferredMap.get(action.name);
14
+ if (!action.deferred) {
15
+ throw new Error(`Action ${action.name} is not deferred`);
16
+ }
17
+ // for SPA-transitions, when actions will be called after rendering
18
+ if (!deferred$1) {
19
+ deferred$1 = new deferred.Deferred();
20
+ // avoid unhandled promise rejection
21
+ deferred$1.promise.catch(() => { });
22
+ deferredMap.set(action.name, deferred$1);
23
+ }
24
+ if (deferred$1.isResolved()) {
25
+ return children(deferred$1.resolveData);
26
+ }
27
+ if (deferred$1.isRejected()) {
28
+ const reason = deferred$1.rejectReason instanceof Error
29
+ ? deferred$1.rejectReason
30
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
31
+ safeStrings.deserializeError(deferred$1.rejectReason);
32
+ if (!error) {
33
+ throw reason;
34
+ }
35
+ return error(reason);
36
+ }
37
+ throw deferred$1.promise;
38
+ }
39
+
40
+ exports.Await = Await;
@@ -0,0 +1,8 @@
1
+ export declare const generateDeferredResolve: ({ key, data }: {
2
+ key: string;
3
+ data: any;
4
+ }) => string;
5
+ export declare const generateDeferredReject: ({ key, error }: {
6
+ key: string;
7
+ error: Error;
8
+ }) => string;
@@ -0,0 +1,10 @@
1
+ import { safeStringifyJSON, serializeError } from '@tramvai/safe-strings';
2
+
3
+ const generateDeferredResolve = ({ key, data }) => {
4
+ return `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'].resolve(${safeStringifyJSON(data)});`;
5
+ };
6
+ const generateDeferredReject = ({ key, error }) => {
7
+ return `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'].reject(${safeStringifyJSON(serializeError(error))});`;
8
+ };
9
+
10
+ export { generateDeferredReject, generateDeferredResolve };
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var safeStrings = require('@tramvai/safe-strings');
6
+
7
+ const generateDeferredResolve = ({ key, data }) => {
8
+ return `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'].resolve(${safeStrings.safeStringifyJSON(data)});`;
9
+ };
10
+ const generateDeferredReject = ({ key, error }) => {
11
+ return `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'].reject(${safeStrings.safeStringifyJSON(safeStrings.serializeError(error))});`;
12
+ };
13
+
14
+ exports.generateDeferredReject = generateDeferredReject;
15
+ exports.generateDeferredResolve = generateDeferredResolve;
@@ -0,0 +1,22 @@
1
+ class Deferred {
2
+ constructor() {
3
+ this.promise = new Promise((resolve, reject) => {
4
+ this.resolve = (value) => {
5
+ this.resolveData = value;
6
+ resolve(value);
7
+ };
8
+ this.reject = (reason) => {
9
+ this.rejectReason = reason;
10
+ reject(reason);
11
+ };
12
+ });
13
+ }
14
+ isResolved() {
15
+ return typeof this.resolveData !== 'undefined';
16
+ }
17
+ isRejected() {
18
+ return typeof this.rejectReason !== 'undefined';
19
+ }
20
+ }
21
+
22
+ export { Deferred };
@@ -0,0 +1,11 @@
1
+ import type { Deferred as IDeferred } from '@tramvai/tokens-common';
2
+ export declare class Deferred implements IDeferred {
3
+ promise: Promise<any>;
4
+ resolve: (value: any) => void;
5
+ reject: (reason: any) => void;
6
+ resolveData: any;
7
+ rejectReason: any;
8
+ constructor();
9
+ isResolved(): boolean;
10
+ isRejected(): boolean;
11
+ }
@@ -0,0 +1,22 @@
1
+ class Deferred {
2
+ constructor() {
3
+ this.promise = new Promise((resolve, reject) => {
4
+ this.resolve = (value) => {
5
+ this.resolveData = value;
6
+ resolve(value);
7
+ };
8
+ this.reject = (reason) => {
9
+ this.rejectReason = reason;
10
+ reject(reason);
11
+ };
12
+ });
13
+ }
14
+ isResolved() {
15
+ return typeof this.resolveData !== 'undefined';
16
+ }
17
+ isRejected() {
18
+ return typeof this.rejectReason !== 'undefined';
19
+ }
20
+ }
21
+
22
+ export { Deferred };
@@ -0,0 +1,2 @@
1
+ import type { Deferred } from '@tramvai/tokens-common';
2
+ export declare function __Deferred(this: Deferred): void;
@@ -0,0 +1,20 @@
1
+ function __Deferred() {
2
+ this.promise = new Promise((resolve, reject) => {
3
+ this.resolve = (value) => {
4
+ this.resolveData = value;
5
+ resolve(value);
6
+ };
7
+ this.reject = (reason) => {
8
+ this.rejectReason = reason;
9
+ reject(reason);
10
+ };
11
+ });
12
+ this.isResolved = () => {
13
+ return typeof this.resolveData !== 'undefined';
14
+ };
15
+ this.isRejected = () => {
16
+ return typeof this.rejectReason !== 'undefined';
17
+ };
18
+ }
19
+
20
+ export { __Deferred };
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function __Deferred() {
6
+ this.promise = new Promise((resolve, reject) => {
7
+ this.resolve = (value) => {
8
+ this.resolveData = value;
9
+ resolve(value);
10
+ };
11
+ this.reject = (reason) => {
12
+ this.rejectReason = reason;
13
+ reject(reason);
14
+ };
15
+ });
16
+ this.isResolved = () => {
17
+ return typeof this.resolveData !== 'undefined';
18
+ };
19
+ this.isRejected = () => {
20
+ return typeof this.rejectReason !== 'undefined';
21
+ };
22
+ }
23
+
24
+ exports.__Deferred = __Deferred;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ class Deferred {
6
+ constructor() {
7
+ this.promise = new Promise((resolve, reject) => {
8
+ this.resolve = (value) => {
9
+ this.resolveData = value;
10
+ resolve(value);
11
+ };
12
+ this.reject = (reason) => {
13
+ this.rejectReason = reason;
14
+ reject(reason);
15
+ };
16
+ });
17
+ }
18
+ isResolved() {
19
+ return typeof this.resolveData !== 'undefined';
20
+ }
21
+ isRejected() {
22
+ return typeof this.rejectReason !== 'undefined';
23
+ }
24
+ }
25
+
26
+ exports.Deferred = Deferred;
@@ -0,0 +1,28 @@
1
+ import { provide } from '@tramvai/core';
2
+ import { DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
3
+
4
+ const providers = [
5
+ provide({
6
+ provide: DEFERRED_ACTIONS_MAP_TOKEN,
7
+ useFactory: () => {
8
+ return {
9
+ get(key) {
10
+ return window.__TRAMVAI_DEFERRED_ACTIONS[key];
11
+ },
12
+ set(key, value) {
13
+ window.__TRAMVAI_DEFERRED_ACTIONS[key] = value;
14
+ },
15
+ has(key) {
16
+ return key in window.__TRAMVAI_DEFERRED_ACTIONS;
17
+ },
18
+ forEach(callback) {
19
+ Object.keys(window.__TRAMVAI_DEFERRED_ACTIONS).forEach((key) => {
20
+ callback(window.__TRAMVAI_DEFERRED_ACTIONS[key], key);
21
+ });
22
+ },
23
+ };
24
+ },
25
+ }),
26
+ ];
27
+
28
+ export { providers };
@@ -0,0 +1,9 @@
1
+ import type { Deferred } from '@tramvai/tokens-common';
2
+ declare global {
3
+ interface Window {
4
+ __TRAMVAI_DEFERRED_ACTIONS: Record<string, Deferred>;
5
+ }
6
+ }
7
+ export declare const providers: import("@tramvai/core").Provider<unknown, import("@tramvai/tokens-common").DeferredActionsMap & {
8
+ __type?: "base token" | undefined;
9
+ }>[];
@@ -0,0 +1,20 @@
1
+ export declare const providers: (import("@tramvai/core").Provider<unknown, import("@tramvai/tokens-common").DeferredActionsMap & {
2
+ __type?: "base token" | undefined;
3
+ }> | import("@tramvai/core").Provider<{
4
+ resourcesRegistry: import("@tramvai/tokens-render").ResourcesRegistry & {
5
+ __type?: "base token" | undefined;
6
+ };
7
+ deferredMap: import("@tramvai/tokens-common").DeferredActionsMap & {
8
+ __type?: "base token" | undefined;
9
+ };
10
+ renderMode: {
11
+ token: ("sync" & {
12
+ __type?: "base token" | undefined;
13
+ }) | ("streaming" & {
14
+ __type?: "base token" | undefined;
15
+ });
16
+ optional: true;
17
+ };
18
+ }, import("@tramvai/core").Command & {
19
+ __type?: "multi token" | undefined;
20
+ }>)[];
@@ -0,0 +1,59 @@
1
+ import { provide, commandLineListTokens, optional } from '@tramvai/core';
2
+ import { ResourceSlot, ResourceType, RESOURCES_REGISTRY, REACT_SERVER_RENDER_MODE } from '@tramvai/tokens-render';
3
+ import { DEFERRED_ACTIONS_MAP_TOKEN } from '@tramvai/tokens-common';
4
+ import { __Deferred } from './deferred.inline.es.js';
5
+ import { generateDeferredResolve, generateDeferredReject } from './clientScriptsUtils.es.js';
6
+
7
+ const providers = [
8
+ provide({
9
+ provide: DEFERRED_ACTIONS_MAP_TOKEN,
10
+ useFactory: () => new Map(),
11
+ }),
12
+ provide({
13
+ provide: commandLineListTokens.generatePage,
14
+ useFactory: ({ resourcesRegistry, deferredMap, renderMode }) => {
15
+ // eslint-disable-next-line max-statements
16
+ return async function render() {
17
+ if (renderMode === 'streaming') {
18
+ resourcesRegistry.register({
19
+ slot: ResourceSlot.HEAD_CORE_SCRIPTS,
20
+ type: ResourceType.inlineScript,
21
+ payload: `window.__Deferred = ${__Deferred}
22
+ window.__TRAMVAI_DEFERRED_ACTIONS = {};`,
23
+ });
24
+ deferredMap.forEach((deferred, key) => {
25
+ const scriptLines = [
26
+ `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'] = new __Deferred();`,
27
+ `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'].promise.catch(function(){});`,
28
+ ];
29
+ if (deferred.isResolved()) {
30
+ scriptLines.push(generateDeferredResolve({
31
+ key,
32
+ data: deferred.resolveData,
33
+ }));
34
+ }
35
+ else if (deferred.isRejected()) {
36
+ scriptLines.push(generateDeferredReject({
37
+ key,
38
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
39
+ error: deferred.rejectReason,
40
+ }));
41
+ }
42
+ resourcesRegistry.register({
43
+ slot: ResourceSlot.HEAD_CORE_SCRIPTS,
44
+ type: ResourceType.inlineScript,
45
+ payload: scriptLines.join('\n'),
46
+ });
47
+ });
48
+ }
49
+ };
50
+ },
51
+ deps: {
52
+ resourcesRegistry: RESOURCES_REGISTRY,
53
+ deferredMap: DEFERRED_ACTIONS_MAP_TOKEN,
54
+ renderMode: optional(REACT_SERVER_RENDER_MODE),
55
+ },
56
+ }),
57
+ ];
58
+
59
+ export { providers };
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var core = require('@tramvai/core');
6
+ var tokensRender = require('@tramvai/tokens-render');
7
+ var tokensCommon = require('@tramvai/tokens-common');
8
+ var deferred_inline = require('./deferred.inline.js');
9
+ var clientScriptsUtils = require('./clientScriptsUtils.js');
10
+
11
+ const providers = [
12
+ core.provide({
13
+ provide: tokensCommon.DEFERRED_ACTIONS_MAP_TOKEN,
14
+ useFactory: () => new Map(),
15
+ }),
16
+ core.provide({
17
+ provide: core.commandLineListTokens.generatePage,
18
+ useFactory: ({ resourcesRegistry, deferredMap, renderMode }) => {
19
+ // eslint-disable-next-line max-statements
20
+ return async function render() {
21
+ if (renderMode === 'streaming') {
22
+ resourcesRegistry.register({
23
+ slot: tokensRender.ResourceSlot.HEAD_CORE_SCRIPTS,
24
+ type: tokensRender.ResourceType.inlineScript,
25
+ payload: `window.__Deferred = ${deferred_inline.__Deferred}
26
+ window.__TRAMVAI_DEFERRED_ACTIONS = {};`,
27
+ });
28
+ deferredMap.forEach((deferred, key) => {
29
+ const scriptLines = [
30
+ `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'] = new __Deferred();`,
31
+ `window.__TRAMVAI_DEFERRED_ACTIONS['${key}'].promise.catch(function(){});`,
32
+ ];
33
+ if (deferred.isResolved()) {
34
+ scriptLines.push(clientScriptsUtils.generateDeferredResolve({
35
+ key,
36
+ data: deferred.resolveData,
37
+ }));
38
+ }
39
+ else if (deferred.isRejected()) {
40
+ scriptLines.push(clientScriptsUtils.generateDeferredReject({
41
+ key,
42
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
43
+ error: deferred.rejectReason,
44
+ }));
45
+ }
46
+ resourcesRegistry.register({
47
+ slot: tokensRender.ResourceSlot.HEAD_CORE_SCRIPTS,
48
+ type: tokensRender.ResourceType.inlineScript,
49
+ payload: scriptLines.join('\n'),
50
+ });
51
+ });
52
+ }
53
+ };
54
+ },
55
+ deps: {
56
+ resourcesRegistry: tokensRender.RESOURCES_REGISTRY,
57
+ deferredMap: tokensCommon.DEFERRED_ACTIONS_MAP_TOKEN,
58
+ renderMode: core.optional(tokensRender.REACT_SERVER_RENDER_MODE),
59
+ },
60
+ }),
61
+ ];
62
+
63
+ exports.providers = providers;
@@ -1,6 +1,8 @@
1
1
  export { CommonModule } from './CommonModule.browser.js';
2
2
  export { CommandModule } from './command/CommandModule.browser.js';
3
3
  export { ActionExecution } from './actions/actionExecution.browser.js';
4
+ export { Deferred } from './actions/deferred/deferred.browser.js';
5
+ export { Await } from './actions/deferred/await.browser.js';
4
6
  export { ExecutionContextManager } from './executionContext/executionContextManager.browser.js';
5
7
  import './actions/ActionModule.browser.js';
6
8
  export { createConsumerContext } from './createConsumerContext/createConsumerContext.browser.js';
package/lib/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { CommonModule } from './CommonModule';
2
2
  export { CommandModule } from './command/CommandModule';
3
3
  export { ActionExecution } from './actions/actionExecution';
4
+ export { Deferred } from './actions/deferred/deferred';
5
+ export { Await } from './actions/deferred/await';
4
6
  export { ExecutionContextManager } from './executionContext/executionContextManager';
5
7
  export { alwaysCondition, onlyServer, onlyBrowser, pageServer, pageBrowser, } from './actions/ActionModule';
6
8
  export { createConsumerContext } from './createConsumerContext/createConsumerContext';
package/lib/index.es.js CHANGED
@@ -1,6 +1,8 @@
1
1
  export { CommonModule } from './CommonModule.es.js';
2
2
  export { CommandModule } from './command/CommandModule.es.js';
3
3
  export { ActionExecution } from './actions/actionExecution.es.js';
4
+ export { Deferred } from './actions/deferred/deferred.es.js';
5
+ export { Await } from './actions/deferred/await.es.js';
4
6
  export { ExecutionContextManager } from './executionContext/executionContextManager.es.js';
5
7
  import './actions/ActionModule.es.js';
6
8
  export { createConsumerContext } from './createConsumerContext/createConsumerContext.es.js';
package/lib/index.js CHANGED
@@ -5,6 +5,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var CommonModule = require('./CommonModule.js');
6
6
  var CommandModule = require('./command/CommandModule.js');
7
7
  var actionExecution = require('./actions/actionExecution.js');
8
+ var deferred = require('./actions/deferred/deferred.js');
9
+ var _await = require('./actions/deferred/await.js');
8
10
  var executionContextManager = require('./executionContext/executionContextManager.js');
9
11
  require('./actions/ActionModule.js');
10
12
  var createConsumerContext = require('./createConsumerContext/createConsumerContext.js');
@@ -28,6 +30,8 @@ Object.defineProperty(exports, 'CommandModule', {
28
30
  get: function () { return CommandModule.CommandModule; }
29
31
  });
30
32
  exports.ActionExecution = actionExecution.ActionExecution;
33
+ exports.Deferred = deferred.Deferred;
34
+ exports.Await = _await.Await;
31
35
  exports.ExecutionContextManager = executionContextManager.ExecutionContextManager;
32
36
  exports.createConsumerContext = createConsumerContext.createConsumerContext;
33
37
  Object.defineProperty(exports, 'CommonChildAppModule', {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-common",
3
- "version": "2.143.1",
3
+ "version": "2.145.1",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -10,6 +10,7 @@
10
10
  ],
11
11
  "browser": {
12
12
  "./lib/actions/actionPageRunner.js": "./lib/actions/actionPageRunner.browser.js",
13
+ "./lib/actions/deferred/providers.js": "./lib/actions/deferred/providers.browser.js",
13
14
  "./lib/cache/serverProviders.js": "./lib/cache/clientProviders.js",
14
15
  "./lib/cache/cacheFactory.js": "./lib/cache/cacheFactory.browser.js",
15
16
  "./lib/index.es.js": "./lib/index.browser.js",
@@ -34,28 +35,29 @@
34
35
  "@akashbabu/lfu-cache": "1.0.2",
35
36
  "@tinkoff/pubsub": "0.5.7",
36
37
  "@tinkoff/url": "0.8.6",
37
- "@tramvai/experiments": "2.143.1",
38
- "@tramvai/module-cookie": "2.143.1",
39
- "@tramvai/module-environment": "2.143.1",
40
- "@tramvai/module-log": "2.143.1",
41
- "@tramvai/tokens-child-app": "2.143.1",
42
- "@tramvai/tokens-core-private": "2.143.1",
43
- "@tramvai/tokens-common": "2.143.1",
44
- "@tramvai/tokens-render": "2.143.1",
45
- "@tramvai/tokens-server-private": "2.143.1",
46
- "@tramvai/types-actions-state-context": "2.143.1",
38
+ "@tramvai/safe-strings": "0.5.12",
39
+ "@tramvai/experiments": "2.145.1",
40
+ "@tramvai/module-cookie": "2.145.1",
41
+ "@tramvai/module-environment": "2.145.1",
42
+ "@tramvai/module-log": "2.145.1",
43
+ "@tramvai/tokens-child-app": "2.145.1",
44
+ "@tramvai/tokens-core-private": "2.145.1",
45
+ "@tramvai/tokens-common": "2.145.1",
46
+ "@tramvai/tokens-render": "2.145.1",
47
+ "@tramvai/tokens-server-private": "2.145.1",
48
+ "@tramvai/types-actions-state-context": "2.145.1",
47
49
  "hoist-non-react-statics": "^3.3.1",
48
50
  "node-abort-controller": "^3.0.1"
49
51
  },
50
52
  "peerDependencies": {
51
53
  "@tinkoff/dippy": "0.8.15",
52
54
  "@tinkoff/utils": "^2.1.2",
53
- "@tramvai/cli": "2.143.1",
54
- "@tramvai/core": "2.143.1",
55
- "@tramvai/papi": "2.143.1",
56
- "@tramvai/react": "2.143.1",
57
- "@tramvai/state": "2.143.1",
58
- "@tramvai/tokens-server": "2.143.1",
55
+ "@tramvai/cli": "2.145.1",
56
+ "@tramvai/core": "2.145.1",
57
+ "@tramvai/papi": "2.145.1",
58
+ "@tramvai/react": "2.145.1",
59
+ "@tramvai/state": "2.145.1",
60
+ "@tramvai/tokens-server": "2.145.1",
59
61
  "react": ">=16.14.0",
60
62
  "tslib": "^2.4.0"
61
63
  },