@tramvai/module-child-app 1.49.1 → 1.50.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/README.md +33 -0
- package/lib/server.browser.js +28 -0
- package/lib/server.es.js +28 -0
- package/lib/server.js +28 -0
- package/lib/shared/providers.d.ts +6 -0
- package/lib/shared/utils/resolveComponent.d.ts +6 -0
- package/package.json +9 -8
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
|
package/lib/server.browser.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 } 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[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-child-app",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.50.0",
|
|
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.
|
|
33
|
+
"@tramvai/child-app-core": "1.50.0",
|
|
34
34
|
"@tramvai/safe-strings": "0.4.3",
|
|
35
|
-
"@tramvai/tokens-child-app": "1.
|
|
35
|
+
"@tramvai/tokens-child-app": "1.50.0"
|
|
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.
|
|
42
|
-
"@tramvai/state": "1.
|
|
43
|
-
"@tramvai/react": "1.
|
|
44
|
-
"@tramvai/tokens-common": "1.
|
|
45
|
-
"@tramvai/tokens-render": "1.
|
|
41
|
+
"@tramvai/core": "1.50.0",
|
|
42
|
+
"@tramvai/state": "1.50.0",
|
|
43
|
+
"@tramvai/react": "1.50.0",
|
|
44
|
+
"@tramvai/tokens-common": "1.50.0",
|
|
45
|
+
"@tramvai/tokens-render": "1.50.0",
|
|
46
|
+
"@tramvai/tokens-router": "1.50.0",
|
|
46
47
|
"react": ">=16.8.0",
|
|
47
48
|
"react-dom": ">=16.8.0",
|
|
48
49
|
"object-assign": "^4.1.1",
|