@tramvai/module-common 2.36.0 → 2.37.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/index.es.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from 'tslib';
2
2
  import eachObj from '@tinkoff/utils/object/each';
3
- import { createBundle, Scope, Module, commandLineListTokens, COMMAND_LINE_RUNNER_TOKEN, COMMAND_LINES_TOKEN, DI_TOKEN, isTramvaiAction, ACTION_PARAMETERS, ACTIONS_LIST_TOKEN, provide as provide$1, IS_DI_CHILD_CONTAINER_TOKEN, BUNDLE_LIST_TOKEN } from '@tramvai/core';
3
+ import { createBundle, provide, Scope, Module, commandLineListTokens, COMMAND_LINE_RUNNER_TOKEN, COMMAND_LINES_TOKEN, DI_TOKEN, isTramvaiAction, ACTION_PARAMETERS, createToken, ACTIONS_LIST_TOKEN, IS_DI_CHILD_CONTAINER_TOKEN, BUNDLE_LIST_TOKEN } from '@tramvai/core';
4
4
  import { EnvironmentModule } from '@tramvai/module-environment';
5
5
  import { CookieModule } from '@tramvai/module-cookie';
6
6
  export { COOKIE_MANAGER_TOKEN } from '@tramvai/module-cookie';
@@ -8,6 +8,8 @@ import { LogModule } from '@tramvai/module-log';
8
8
  import { Hooks } from '@tinkoff/hook-runner';
9
9
  import { REQUEST_MANAGER_TOKEN, COMBINE_REDUCERS, CONTEXT_TOKEN, RESPONSE_MANAGER_TOKEN, ACTION_EXECUTION_TOKEN, ROOT_EXECUTION_CONTEXT_TOKEN, LOGGER_TOKEN, EXECUTION_CONTEXT_MANAGER_TOKEN, COMMAND_LINE_EXECUTION_CONTEXT_TOKEN, PUBSUB_FACTORY_TOKEN, PUBSUB_TOKEN, ROOT_PUBSUB_TOKEN, ACTION_REGISTRY_TOKEN, ACTION_CONDITIONALS, STORE_TOKEN, ACTION_PAGE_RUNNER_TOKEN, DISPATCHER_TOKEN, DISPATCHER_CONTEXT_TOKEN, STORE_MIDDLEWARE, INITIAL_APP_STATE_TOKEN, CLEAR_CACHE_TOKEN, CREATE_CACHE_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, HOOK_TOKEN, COMPONENT_REGISTRY_TOKEN, BUNDLE_MANAGER_TOKEN, ADDITIONAL_BUNDLE_TOKEN } from '@tramvai/tokens-common';
10
10
  export * from '@tramvai/tokens-common';
11
+ import isObject from '@tinkoff/utils/is/object';
12
+ import isArray from '@tinkoff/utils/is/array';
11
13
  import { resolveLazyComponent, __lazyErrorHandler } from '@tramvai/react';
12
14
  import { fileSystemPagesEnabled, getAllFileSystemPages, isFileSystemPageComponent } from '@tramvai/experiments';
13
15
  import pathOr from '@tinkoff/utils/object/pathOr';
@@ -18,7 +20,7 @@ import { format, parse } from '@tinkoff/url';
18
20
  import isEmpty from '@tinkoff/utils/is/empty';
19
21
  import values from '@tinkoff/utils/object/values';
20
22
  import { METRICS_MODULE_TOKEN } from '@tramvai/tokens-metrics';
21
- import { createChildContainer, provide, Scope as Scope$1, createToken } from '@tinkoff/dippy';
23
+ import { createChildContainer, provide as provide$1, Scope as Scope$1, createToken as createToken$1 } from '@tinkoff/dippy';
22
24
  import noop from '@tinkoff/utils/function/noop';
23
25
  import { isSilentError, ConditionFailError, ExecutionAbortError } from '@tinkoff/errors';
24
26
  import { PubSub } from '@tinkoff/pubsub';
@@ -79,16 +81,19 @@ class BundleManager {
79
81
  if (pageComponent && bundle.components[pageComponent]) {
80
82
  const componentOrLoader = bundle.components[pageComponent];
81
83
  const component = await resolveLazyComponent(componentOrLoader);
84
+ if (!component) {
85
+ return;
86
+ }
82
87
  // allow page components to register any other components
83
- if ('components' in component) {
88
+ if ('components' in component && isObject(component.components)) {
84
89
  eachObj((cmp, name) => {
85
90
  this.componentRegistry.add(name, cmp, pageComponent);
86
91
  }, component.components);
87
92
  }
88
- if ('actions' in component) {
93
+ if ('actions' in component && isArray(component.actions)) {
89
94
  this.actionRegistry.add(pageComponent, component.actions);
90
95
  }
91
- if ('reducers' in component) {
96
+ if ('reducers' in component && isArray(component.reducers)) {
92
97
  component.reducers.forEach((reducer) => {
93
98
  this.dispatcher.registerStore(reducer);
94
99
  });
@@ -196,19 +201,19 @@ class RequestManager {
196
201
  }
197
202
 
198
203
  const sharedProviders$1 = [
199
- {
204
+ provide({
200
205
  provide: REQUEST_MANAGER_TOKEN,
201
206
  scope: Scope.REQUEST,
202
207
  useClass: RequestManager,
203
208
  deps: {
204
209
  request: FASTIFY_REQUEST,
205
210
  },
206
- },
207
- {
211
+ }),
212
+ provide({
208
213
  provide: COMBINE_REDUCERS,
209
214
  multi: true,
210
215
  useValue: RequestManagerStore,
211
- },
216
+ }),
212
217
  ];
213
218
 
214
219
  let RequestManagerModule = class RequestManagerModule {
@@ -217,7 +222,7 @@ RequestManagerModule = __decorate([
217
222
  Module({
218
223
  providers: [
219
224
  ...sharedProviders$1,
220
- {
225
+ provide({
221
226
  provide: commandLineListTokens.customerStart,
222
227
  multi: true,
223
228
  useFactory: ({ context, requestManager }) => {
@@ -234,7 +239,7 @@ RequestManagerModule = __decorate([
234
239
  context: CONTEXT_TOKEN,
235
240
  requestManager: REQUEST_MANAGER_TOKEN,
236
241
  },
237
- },
242
+ }),
238
243
  ],
239
244
  })
240
245
  ], RequestManagerModule);
@@ -288,11 +293,11 @@ class ResponseManager {
288
293
  }
289
294
 
290
295
  const sharedProviders = [
291
- {
296
+ provide({
292
297
  provide: RESPONSE_MANAGER_TOKEN,
293
298
  scope: Scope.REQUEST,
294
299
  useClass: ResponseManager,
295
- },
300
+ }),
296
301
  ];
297
302
 
298
303
  let ResponseManagerModule = class ResponseManagerModule {
@@ -334,8 +339,8 @@ class ConsumerContext {
334
339
  this.dehydrate = () => ({
335
340
  dispatcher: this.dispatcher.dehydrate(),
336
341
  });
337
- this.getState = (reducer) => {
338
- return this.store.getState(reducer);
342
+ this.getState = (...args) => {
343
+ return this.store.getState(args[0]);
339
344
  };
340
345
  this.subscribe = (...args) => {
341
346
  return this.store.subscribe(args[0], args[1]);
@@ -344,6 +349,7 @@ class ConsumerContext {
344
349
  this.registerStore = (store) => this.dispatcher.registerStore(store);
345
350
  this.unregisterStore = (store) => this.dispatcher.unregisterStore(store);
346
351
  this.store = store;
352
+ // @ts-expect-error
347
353
  this.dispatcher = dispatcherContext;
348
354
  // TODO убрать, нужно для некоторых старых сторов на платформе
349
355
  this.dispatcher.setContext(this);
@@ -374,7 +380,7 @@ const resolveDi = (type, status, diContainer, providers) => {
374
380
  return di;
375
381
  };
376
382
  class CommandLineRunner {
377
- constructor({ lines, rootDi, logger, metrics, executionContextManager, }) {
383
+ constructor({ lines, rootDi, logger, metrics, executionContextManager }) {
378
384
  this.executionContextByDi = new WeakMap();
379
385
  this.abortControllerByDi = new WeakMap();
380
386
  this.lines = lines;
@@ -449,6 +455,7 @@ class CommandLineRunner {
449
455
  // пробегаемся по всем инстансам и для текущего получаем его запись, из которой можно получить стек
450
456
  for (let i = 0; i < instances.length; i++) {
451
457
  if (instances[i] === instance) {
458
+ // @ts-expect-error
452
459
  error.stack = `${error.stack}\n---- caused by: ----\n${record.multi[i].stack || ''}`;
453
460
  }
454
461
  }
@@ -531,7 +538,7 @@ let CommandModule = class CommandModule {
531
538
  CommandModule = __decorate([
532
539
  Module({
533
540
  providers: [
534
- provide({
541
+ provide$1({
535
542
  // Раннер процессов
536
543
  provide: COMMAND_LINE_RUNNER_TOKEN,
537
544
  scope: Scope$1.SINGLETON,
@@ -547,9 +554,9 @@ CommandModule = __decorate([
547
554
  executionContextManager: EXECUTION_CONTEXT_MANAGER_TOKEN,
548
555
  },
549
556
  }),
550
- provide({
557
+ provide$1({
551
558
  provide: COMMAND_LINE_EXECUTION_CONTEXT_TOKEN,
552
- useFactory: ({ di, commandLineRunner, }) => {
559
+ useFactory: ({ di, commandLineRunner }) => {
553
560
  return () => {
554
561
  return commandLineRunner.resolveExecutionContextFromDi(di);
555
562
  };
@@ -559,7 +566,7 @@ CommandModule = __decorate([
559
566
  commandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
560
567
  },
561
568
  }),
562
- provide({
569
+ provide$1({
563
570
  // Дефолтный список команл
564
571
  provide: COMMAND_LINES_TOKEN,
565
572
  scope: Scope$1.SINGLETON,
@@ -574,7 +581,7 @@ let PubSubModule = class PubSubModule {
574
581
  PubSubModule = __decorate([
575
582
  Module({
576
583
  providers: [
577
- {
584
+ provide({
578
585
  // Фабрика для создания pubsub
579
586
  provide: PUBSUB_FACTORY_TOKEN,
580
587
  scope: Scope.SINGLETON,
@@ -586,23 +593,23 @@ PubSubModule = __decorate([
586
593
  deps: {
587
594
  logger: LOGGER_TOKEN,
588
595
  },
589
- },
590
- {
596
+ }),
597
+ provide({
591
598
  provide: PUBSUB_TOKEN,
592
599
  scope: Scope.REQUEST,
593
600
  useFactory: ({ createPubsub }) => createPubsub(),
594
601
  deps: {
595
602
  createPubsub: PUBSUB_FACTORY_TOKEN,
596
603
  },
597
- },
598
- {
604
+ }),
605
+ provide({
599
606
  provide: ROOT_PUBSUB_TOKEN,
600
607
  scope: Scope.SINGLETON,
601
608
  useFactory: ({ createPubsub }) => createPubsub(),
602
609
  deps: {
603
610
  createPubsub: PUBSUB_FACTORY_TOKEN,
604
611
  },
605
- },
612
+ }),
606
613
  ],
607
614
  })
608
615
  ], PubSubModule);
@@ -901,24 +908,25 @@ const pageBrowser = {
901
908
  },
902
909
  };
903
910
 
911
+ const LIMIT_ACTION_GLOBAL_TIME_RUN = createToken('limitActionGlobalTimeRun');
904
912
  let ActionModule = class ActionModule {
905
913
  };
906
914
  ActionModule = __decorate([
907
915
  Module({
908
916
  providers: [
909
- {
917
+ provide({
910
918
  provide: COMBINE_REDUCERS,
911
919
  multi: true,
912
920
  useValue: actionTramvaiReducer,
913
- },
914
- {
921
+ }),
922
+ provide({
915
923
  // Регистер глобальных экшенов
916
924
  provide: ACTION_REGISTRY_TOKEN,
917
925
  scope: Scope.SINGLETON,
918
926
  useClass: ActionRegistry,
919
927
  deps: { actionsList: ACTIONS_LIST_TOKEN },
920
- },
921
- provide$1({
928
+ }),
929
+ provide({
922
930
  provide: ACTION_EXECUTION_TOKEN,
923
931
  scope: Scope.REQUEST,
924
932
  useClass: ActionExecution,
@@ -934,7 +942,7 @@ ActionModule = __decorate([
934
942
  },
935
943
  },
936
944
  }),
937
- provide$1({
945
+ provide({
938
946
  provide: ACTION_PAGE_RUNNER_TOKEN,
939
947
  scope: Scope.REQUEST,
940
948
  useClass: ActionPageRunner,
@@ -943,19 +951,19 @@ ActionModule = __decorate([
943
951
  executionContextManager: EXECUTION_CONTEXT_MANAGER_TOKEN,
944
952
  commandLineExecutionContext: COMMAND_LINE_EXECUTION_CONTEXT_TOKEN,
945
953
  store: STORE_TOKEN,
946
- limitTime: 'limitActionGlobalTimeRun',
954
+ limitTime: LIMIT_ACTION_GLOBAL_TIME_RUN,
947
955
  logger: LOGGER_TOKEN,
948
956
  },
949
957
  }),
950
- {
951
- provide: 'limitActionGlobalTimeRun',
958
+ provide({
959
+ provide: LIMIT_ACTION_GLOBAL_TIME_RUN,
952
960
  useValue: 500,
953
- },
954
- {
961
+ }),
962
+ provide({
955
963
  provide: ACTION_CONDITIONALS,
956
964
  multi: true,
957
965
  useValue: [alwaysCondition, onlyServer, onlyBrowser, pageServer, pageBrowser],
958
- },
966
+ }),
959
967
  ],
960
968
  })
961
969
  ], ActionModule);
@@ -965,7 +973,7 @@ let StateModule = class StateModule {
965
973
  StateModule = __decorate([
966
974
  Module({
967
975
  providers: [
968
- {
976
+ provide({
969
977
  provide: DISPATCHER_TOKEN,
970
978
  scope: Scope.SINGLETON,
971
979
  useFactory: ({ stores }) => createDispatcher({ stores: stores && flatten(stores) }),
@@ -975,8 +983,8 @@ StateModule = __decorate([
975
983
  optional: true,
976
984
  },
977
985
  },
978
- },
979
- {
986
+ }),
987
+ provide({
980
988
  provide: DISPATCHER_CONTEXT_TOKEN,
981
989
  scope: Scope.REQUEST,
982
990
  useFactory: ({ dispatcher, initialState, middlewares }) => {
@@ -990,19 +998,19 @@ StateModule = __decorate([
990
998
  middlewares: { token: STORE_MIDDLEWARE, optional: true },
991
999
  initialState: { token: INITIAL_APP_STATE_TOKEN, optional: true },
992
1000
  },
993
- },
994
- {
1001
+ }),
1002
+ provide({
995
1003
  provide: STORE_TOKEN,
996
1004
  scope: Scope.REQUEST,
997
1005
  useFactory: ({ dispatcherContext }) => ({
998
- getState: (reducer) => dispatcherContext.getState(reducer),
999
- dispatch: (action) => dispatcherContext.dispatch(action),
1000
- subscribe: (reducer, callback) => dispatcherContext.subscribe(reducer, callback),
1006
+ getState: dispatcherContext.getState.bind(dispatcherContext),
1007
+ dispatch: dispatcherContext.dispatch.bind(dispatcherContext),
1008
+ subscribe: dispatcherContext.subscribe.bind(dispatcherContext),
1001
1009
  }),
1002
1010
  deps: {
1003
1011
  dispatcherContext: DISPATCHER_CONTEXT_TOKEN,
1004
1012
  },
1005
- },
1013
+ }),
1006
1014
  ],
1007
1015
  })
1008
1016
  ], StateModule);
@@ -1027,7 +1035,7 @@ const papiClearCache = ({ clearCache, logger, }) => {
1027
1035
  };
1028
1036
 
1029
1037
  const providers$1 = [
1030
- {
1038
+ provide({
1031
1039
  provide: SERVER_MODULE_PAPI_PRIVATE_ROUTE,
1032
1040
  multi: true,
1033
1041
  useFactory: papiClearCache,
@@ -1035,10 +1043,10 @@ const providers$1 = [
1035
1043
  clearCache: CLEAR_CACHE_TOKEN,
1036
1044
  logger: LOGGER_TOKEN,
1037
1045
  },
1038
- },
1046
+ }),
1039
1047
  ];
1040
1048
 
1041
- const cachesToken = createToken('_cachesList');
1049
+ const cachesToken = createToken$1('_cachesList');
1042
1050
  let CacheModule = class CacheModule {
1043
1051
  };
1044
1052
  CacheModule = __decorate([
@@ -1133,7 +1141,8 @@ class ExecutionContextManager {
1133
1141
  throw error;
1134
1142
  }
1135
1143
  finally {
1136
- if (abortListener) {
1144
+ // @ts-expect-error
1145
+ if (abortListener && parentContext) {
1137
1146
  parentContext.abortSignal.removeEventListener('abort', abortListener);
1138
1147
  }
1139
1148
  }
@@ -1157,13 +1166,13 @@ CommonModule = __decorate([
1157
1166
  CacheModule,
1158
1167
  ],
1159
1168
  providers: [
1160
- provide$1({
1169
+ provide({
1161
1170
  // Инстанс хук системы
1162
1171
  provide: HOOK_TOKEN,
1163
1172
  scope: Scope.SINGLETON,
1164
1173
  useClass: Hooks,
1165
1174
  }),
1166
- provide$1({
1175
+ provide({
1167
1176
  // Регистр ui компонентов
1168
1177
  provide: COMPONENT_REGISTRY_TOKEN,
1169
1178
  scope: Scope.SINGLETON,
@@ -1172,7 +1181,7 @@ CommonModule = __decorate([
1172
1181
  componentList: { token: 'componentDefaultList', optional: true },
1173
1182
  },
1174
1183
  }),
1175
- provide$1({
1184
+ provide({
1176
1185
  // Управление бандлами, хранение и получение
1177
1186
  provide: BUNDLE_MANAGER_TOKEN,
1178
1187
  scope: Scope.SINGLETON,
@@ -1197,7 +1206,7 @@ CommonModule = __decorate([
1197
1206
  logger: LOGGER_TOKEN,
1198
1207
  },
1199
1208
  }),
1200
- provide$1({
1209
+ provide({
1201
1210
  // Клиентский контекст исполнения
1202
1211
  provide: CONTEXT_TOKEN,
1203
1212
  scope: Scope.REQUEST,
@@ -1209,7 +1218,7 @@ CommonModule = __decorate([
1209
1218
  store: STORE_TOKEN,
1210
1219
  },
1211
1220
  }),
1212
- provide$1({
1221
+ provide({
1213
1222
  provide: EXECUTION_CONTEXT_MANAGER_TOKEN,
1214
1223
  useClass: ExecutionContextManager,
1215
1224
  }),
@@ -1221,7 +1230,7 @@ CommonModule = __decorate([
1221
1230
  const providers = [];
1222
1231
 
1223
1232
  const stateProviders = [
1224
- provide$1({
1233
+ provide({
1225
1234
  provide: CHILD_APP_INTERNAL_ROOT_DI_BORROW_TOKEN,
1226
1235
  multi: true,
1227
1236
  useValue: [DISPATCHER_TOKEN, STORE_TOKEN, CONTEXT_TOKEN],
@@ -1247,12 +1256,12 @@ const lines = {
1247
1256
  client: command,
1248
1257
  };
1249
1258
  const commandProviders = [
1250
- provide$1({
1259
+ provide({
1251
1260
  provide: CHILD_APP_INTERNAL_ROOT_DI_BORROW_TOKEN,
1252
1261
  multi: true,
1253
1262
  useValue: COMMAND_LINE_RUNNER_TOKEN,
1254
1263
  }),
1255
- provide$1({
1264
+ provide({
1256
1265
  provide: COMMAND_LINES_TOKEN,
1257
1266
  scope: Scope.SINGLETON,
1258
1267
  useValue: lines,
@@ -1260,16 +1269,16 @@ const commandProviders = [
1260
1269
  ];
1261
1270
 
1262
1271
  const actionsProviders = [
1263
- provide$1({
1272
+ provide({
1264
1273
  provide: CHILD_APP_INTERNAL_ROOT_DI_BORROW_TOKEN,
1265
1274
  multi: true,
1266
1275
  useValue: [ACTION_EXECUTION_TOKEN, ACTION_PAGE_RUNNER_TOKEN],
1267
1276
  }),
1268
- {
1277
+ provide({
1269
1278
  provide: COMBINE_REDUCERS,
1270
1279
  multi: true,
1271
1280
  useValue: actionTramvaiReducer,
1272
- },
1281
+ }),
1273
1282
  ];
1274
1283
 
1275
1284
  let CommonChildAppModule = class CommonChildAppModule {
@@ -1281,7 +1290,7 @@ CommonChildAppModule = __decorate([
1281
1290
  ...stateProviders,
1282
1291
  ...commandProviders,
1283
1292
  ...actionsProviders,
1284
- provide$1({
1293
+ provide({
1285
1294
  provide: EXTEND_RENDER,
1286
1295
  multi: true,
1287
1296
  useFactory: ({ context }) => {