@tramvai/module-child-app 1.48.3 → 1.50.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.
package/README.md CHANGED
@@ -200,6 +200,39 @@ This token is considered dangerous as it leads to high coupling with stores from
200
200
  ];
201
201
  ```
202
202
 
203
+ ### Preload child-app
204
+
205
+ Preloading is vital for using child-app without extensive overhead on its loading.
206
+
207
+ You may preload using next ways:
208
+
209
+ 1. Preload with `CHILD_APP_PRELOAD_MANAGER_TOKEN`
210
+
211
+ ```ts
212
+ provide({
213
+ provide: commandLineListTokens.customerStart,
214
+ multi: true,
215
+ useFactory: ({ preloadManager }) => {
216
+ return function preloadHeaderChildApp() {
217
+ return preloadManager.preload({ name: '[name]' });
218
+ };
219
+ },
220
+ deps: {
221
+ preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
222
+ },
223
+ });
224
+ ```
225
+
226
+ 1. Add needed child-apps to the pageComponent or layoutComponent through field `childApps`
227
+
228
+ ```ts
229
+ const PageComponent = () => {
230
+ return 'Page';
231
+ };
232
+
233
+ PageComponent.childApps = [{ name: '[name]' }];
234
+ ```
235
+
203
236
  ### Debug child-app
204
237
 
205
238
  #### Single child-app
@@ -6,6 +6,7 @@ import { commandLineListTokens, CHILD_APP_INTERNAL_ROOT_STATE_SUBSCRIPTION_TOKEN
6
6
  export * from '@tramvai/tokens-child-app';
7
7
  import { ACTION_PAGE_RUNNER_TOKEN, CONTEXT_TOKEN, LOGGER_TOKEN, DISPATCHER_TOKEN, STORE_TOKEN, COMBINE_REDUCERS, ENV_MANAGER_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN } from '@tramvai/tokens-common';
8
8
  import { RENDER_SLOTS, EXTEND_RENDER } from '@tramvai/tokens-render';
9
+ import { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
9
10
  import { Subscription, createEvent, createReducer } from '@tramvai/state';
10
11
  import React, { createContext, useContext, useMemo, useState, useEffect, createElement } from 'react';
11
12
  import { loadModule } from '@tinkoff/module-loader-client';
@@ -291,6 +292,12 @@ const getModuleFederation = async (container, name = 'entry') => {
291
292
  return container.get(name);
292
293
  };
293
294
 
295
+ const resolveComponent = async (componentOrLoader) => {
296
+ return 'load' in componentOrLoader && typeof componentOrLoader.load === 'function'
297
+ ? (await componentOrLoader.load()).default
298
+ : componentOrLoader;
299
+ };
300
+
294
301
  const sharedProviders = [
295
302
  provide({
296
303
  provide: COMBINE_REDUCERS,
@@ -417,6 +424,27 @@ const sharedProviders = [
417
424
  diManager: CHILD_APP_DI_MANAGER_TOKEN,
418
425
  },
419
426
  }),
427
+ provide({
428
+ provide: commandLineListTokens$1.resolvePageDeps,
429
+ useFactory: ({ pageService, preloadManager }) => {
430
+ return async function preloadChildAppByComponent() {
431
+ var _a, _b, _c, _d;
432
+ const [layoutComponent, pageComponent] = await Promise.all([
433
+ resolveComponent(pageService.resolveComponentFromConfig('layout')),
434
+ resolveComponent(pageService.resolveComponentFromConfig('page')),
435
+ ]);
436
+ await Promise.all([
437
+ ...((_b = (_a = layoutComponent.childApps) === null || _a === void 0 ? void 0 : _a.map((request) => preloadManager.preload(request))) !== null && _b !== void 0 ? _b : []),
438
+ ...((_d = (_c = pageComponent.childApps) === null || _c === void 0 ? void 0 : _c.map((request) => preloadManager.preload(request))) !== null && _d !== void 0 ? _d : []),
439
+ ]);
440
+ };
441
+ },
442
+ multi: true,
443
+ deps: {
444
+ pageService: PAGE_SERVICE_TOKEN,
445
+ preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
446
+ },
447
+ }),
420
448
  provide({
421
449
  provide: commandLineListTokens$1.clear,
422
450
  multi: true,
package/lib/server.es.js CHANGED
@@ -6,6 +6,7 @@ import { commandLineListTokens, CHILD_APP_INTERNAL_ROOT_STATE_SUBSCRIPTION_TOKEN
6
6
  export * from '@tramvai/tokens-child-app';
7
7
  import { ACTION_PAGE_RUNNER_TOKEN, CONTEXT_TOKEN, LOGGER_TOKEN, DISPATCHER_TOKEN, STORE_TOKEN, COMBINE_REDUCERS, ENV_MANAGER_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN, CREATE_CACHE_TOKEN } from '@tramvai/tokens-common';
8
8
  import { RENDER_SLOTS, EXTEND_RENDER, ResourceType, ResourceSlot, RESOURCES_REGISTRY, CUSTOM_RENDER } from '@tramvai/tokens-render';
9
+ import { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
9
10
  import { createEvent, createReducer } from '@tramvai/state';
10
11
  import React, { createContext, useContext, useMemo, useState, useEffect, createElement } from 'react';
11
12
  import { combineValidators, isUrl, endsWith } from '@tinkoff/env-validators';
@@ -289,6 +290,12 @@ const getModuleFederation = async (container, name = 'entry') => {
289
290
  return container.get(name);
290
291
  };
291
292
 
293
+ const resolveComponent = async (componentOrLoader) => {
294
+ return 'load' in componentOrLoader && typeof componentOrLoader.load === 'function'
295
+ ? (await componentOrLoader.load()).default
296
+ : componentOrLoader;
297
+ };
298
+
292
299
  const sharedProviders = [
293
300
  provide({
294
301
  provide: COMBINE_REDUCERS,
@@ -415,6 +422,27 @@ const sharedProviders = [
415
422
  diManager: CHILD_APP_DI_MANAGER_TOKEN,
416
423
  },
417
424
  }),
425
+ provide({
426
+ provide: commandLineListTokens$1.resolvePageDeps,
427
+ useFactory: ({ pageService, preloadManager }) => {
428
+ return async function preloadChildAppByComponent() {
429
+ var _a, _b, _c, _d;
430
+ const [layoutComponent, pageComponent] = await Promise.all([
431
+ resolveComponent(pageService.resolveComponentFromConfig('layout')),
432
+ resolveComponent(pageService.resolveComponentFromConfig('page')),
433
+ ]);
434
+ await Promise.all([
435
+ ...((_b = (_a = layoutComponent.childApps) === null || _a === void 0 ? void 0 : _a.map((request) => preloadManager.preload(request))) !== null && _b !== void 0 ? _b : []),
436
+ ...((_d = (_c = pageComponent.childApps) === null || _c === void 0 ? void 0 : _c.map((request) => preloadManager.preload(request))) !== null && _d !== void 0 ? _d : []),
437
+ ]);
438
+ };
439
+ },
440
+ multi: true,
441
+ deps: {
442
+ pageService: PAGE_SERVICE_TOKEN,
443
+ preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
444
+ },
445
+ }),
418
446
  provide({
419
447
  provide: commandLineListTokens$1.clear,
420
448
  multi: true,
package/lib/server.js CHANGED
@@ -9,6 +9,7 @@ var dippy = require('@tinkoff/dippy');
9
9
  var tokensChildApp = require('@tramvai/tokens-child-app');
10
10
  var tokensCommon = require('@tramvai/tokens-common');
11
11
  var tokensRender = require('@tramvai/tokens-render');
12
+ var tokensRouter = require('@tramvai/tokens-router');
12
13
  var state = require('@tramvai/state');
13
14
  var React = require('react');
14
15
  var envValidators = require('@tinkoff/env-validators');
@@ -298,6 +299,12 @@ const getModuleFederation = async (container, name = 'entry') => {
298
299
  return container.get(name);
299
300
  };
300
301
 
302
+ const resolveComponent = async (componentOrLoader) => {
303
+ return 'load' in componentOrLoader && typeof componentOrLoader.load === 'function'
304
+ ? (await componentOrLoader.load()).default
305
+ : componentOrLoader;
306
+ };
307
+
301
308
  const sharedProviders = [
302
309
  core.provide({
303
310
  provide: tokensCommon.COMBINE_REDUCERS,
@@ -424,6 +431,27 @@ const sharedProviders = [
424
431
  diManager: tokensChildApp.CHILD_APP_DI_MANAGER_TOKEN,
425
432
  },
426
433
  }),
434
+ core.provide({
435
+ provide: core.commandLineListTokens.resolvePageDeps,
436
+ useFactory: ({ pageService, preloadManager }) => {
437
+ return async function preloadChildAppByComponent() {
438
+ var _a, _b, _c, _d;
439
+ const [layoutComponent, pageComponent] = await Promise.all([
440
+ resolveComponent(pageService.resolveComponentFromConfig('layout')),
441
+ resolveComponent(pageService.resolveComponentFromConfig('page')),
442
+ ]);
443
+ await Promise.all([
444
+ ...((_b = (_a = layoutComponent.childApps) === null || _a === void 0 ? void 0 : _a.map((request) => preloadManager.preload(request))) !== null && _b !== void 0 ? _b : []),
445
+ ...((_d = (_c = pageComponent.childApps) === null || _c === void 0 ? void 0 : _c.map((request) => preloadManager.preload(request))) !== null && _d !== void 0 ? _d : []),
446
+ ]);
447
+ };
448
+ },
449
+ multi: true,
450
+ deps: {
451
+ pageService: tokensRouter.PAGE_SERVICE_TOKEN,
452
+ preloadManager: tokensChildApp.CHILD_APP_PRELOAD_MANAGER_TOKEN,
453
+ },
454
+ }),
427
455
  core.provide({
428
456
  provide: core.commandLineListTokens.clear,
429
457
  multi: true,
@@ -1,2 +1,8 @@
1
1
  import type { Provider } from '@tinkoff/dippy';
2
+ import type { ChildAppRequestConfig } from '@tramvai/tokens-child-app';
3
+ declare module '@tramvai/tokens-common' {
4
+ interface RegistryComponentExtend {
5
+ childApps?: ChildAppRequestConfig[];
6
+ }
7
+ }
2
8
  export declare const sharedProviders: Provider[];
@@ -0,0 +1,6 @@
1
+ import type { Component } from '@tramvai/tokens-common';
2
+ export declare const resolveComponent: <T extends Component>(componentOrLoader: T | {
3
+ load: () => Promise<{
4
+ default: T;
5
+ }>;
6
+ }) => Promise<T>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-child-app",
3
- "version": "1.48.3",
3
+ "version": "1.50.1",
4
4
  "description": "Module for child apps",
5
5
  "browser": {
6
6
  "./lib/server.js": "./lib/browser.js",
@@ -30,19 +30,20 @@
30
30
  "@tinkoff/env-validators": "0.0.2",
31
31
  "@tinkoff/module-loader-client": "0.3.25",
32
32
  "@tinkoff/module-loader-server": "0.4.41",
33
- "@tramvai/child-app-core": "1.48.3",
33
+ "@tramvai/child-app-core": "1.50.1",
34
34
  "@tramvai/safe-strings": "0.4.3",
35
- "@tramvai/tokens-child-app": "1.48.3"
35
+ "@tramvai/tokens-child-app": "1.50.1"
36
36
  },
37
37
  "devDependencies": {},
38
38
  "peerDependencies": {
39
39
  "@tinkoff/dippy": "0.7.36",
40
40
  "@tinkoff/utils": "^2.1.2",
41
- "@tramvai/core": "1.48.3",
42
- "@tramvai/state": "1.48.3",
43
- "@tramvai/react": "1.48.3",
44
- "@tramvai/tokens-common": "1.48.3",
45
- "@tramvai/tokens-render": "1.48.3",
41
+ "@tramvai/core": "1.50.1",
42
+ "@tramvai/state": "1.50.1",
43
+ "@tramvai/react": "1.50.1",
44
+ "@tramvai/tokens-common": "1.50.1",
45
+ "@tramvai/tokens-render": "1.50.1",
46
+ "@tramvai/tokens-router": "1.50.1",
46
47
  "react": ">=16.8.0",
47
48
  "react-dom": ">=16.8.0",
48
49
  "object-assign": "^4.1.1",