@tramvai/module-child-app 4.41.39 → 4.41.42
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/shared/pagePreload.browser.js +38 -22
- package/lib/shared/pagePreload.es.js +38 -22
- package/lib/shared/pagePreload.js +36 -20
- package/package.json +11 -11
|
@@ -1,30 +1,46 @@
|
|
|
1
1
|
import { provide, commandLineListTokens } from '@tramvai/core';
|
|
2
2
|
import { resolveLazyComponent } from '@tramvai/react';
|
|
3
|
-
import { CHILD_APP_PRELOAD_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
-
import {
|
|
3
|
+
import { CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
+
import { PAGE_SERVICE_TOKEN, LINK_PREFETCH_HANDLER_TOKEN } from '@tramvai/tokens-router';
|
|
5
5
|
|
|
6
|
-
const pagePreload = async ({
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
// for first preload on SPA-navigation, we need to prevent double action execution,
|
|
16
|
-
// and need to mark this Child App as not preloaded, to prevent running `spa` and `afterSpa` commands for it
|
|
17
|
-
if (mode === 'preload' && isSpaNavigation && !preloadManager.isPreloaded(request)) {
|
|
18
|
-
preloadManager.saveNotPreloadedForSpaNavigation(request);
|
|
19
|
-
}
|
|
20
|
-
return preloadManager[mode](request, route).catch(() => {
|
|
21
|
-
// actual error will be logged internally
|
|
22
|
-
});
|
|
23
|
-
}));
|
|
6
|
+
const pagePreload = async ({ preloadManager, preloadSourceList, }, mode, isSpaNavigation = false, route) => {
|
|
7
|
+
const childApps = (await Promise.all(preloadSourceList.map((source) => {
|
|
8
|
+
return source({ route });
|
|
9
|
+
}))).reduce((acc, source) => acc.concat(source), []);
|
|
10
|
+
await Promise.all(childApps.map((request) => {
|
|
11
|
+
// for first preload on SPA-navigation, we need to prevent double action execution,
|
|
12
|
+
// and need to mark this Child App as not preloaded, to prevent running `spa` and `afterSpa` commands for it
|
|
13
|
+
if (mode === 'preload' && isSpaNavigation && !preloadManager.isPreloaded(request)) {
|
|
14
|
+
preloadManager.saveNotPreloadedForSpaNavigation(request);
|
|
24
15
|
}
|
|
16
|
+
return preloadManager[mode](request, route).catch(() => {
|
|
17
|
+
// actual error will be logged internally
|
|
18
|
+
});
|
|
25
19
|
}));
|
|
26
20
|
};
|
|
27
21
|
const pagePreloadProviders = [
|
|
22
|
+
provide({
|
|
23
|
+
provide: CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
24
|
+
useFactory: ({ pageService }) => {
|
|
25
|
+
return async function resolveChildAppsFromRouteComponents({ route }) {
|
|
26
|
+
const childApps = [];
|
|
27
|
+
const components = await Promise.all([
|
|
28
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('layout', route)),
|
|
29
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('nestedLayout', route)),
|
|
30
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('page', route)),
|
|
31
|
+
]);
|
|
32
|
+
components.forEach((component) => {
|
|
33
|
+
if (component === null || component === void 0 ? void 0 : component.childApps) {
|
|
34
|
+
childApps.push(...component.childApps);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return childApps;
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
deps: {
|
|
41
|
+
pageService: PAGE_SERVICE_TOKEN,
|
|
42
|
+
},
|
|
43
|
+
}),
|
|
28
44
|
provide({
|
|
29
45
|
provide: LINK_PREFETCH_HANDLER_TOKEN,
|
|
30
46
|
useFactory: (deps) => {
|
|
@@ -34,8 +50,8 @@ const pagePreloadProviders = [
|
|
|
34
50
|
},
|
|
35
51
|
multi: true,
|
|
36
52
|
deps: {
|
|
37
|
-
pageService: PAGE_SERVICE_TOKEN,
|
|
38
53
|
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
54
|
+
preloadSourceList: CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
39
55
|
},
|
|
40
56
|
}),
|
|
41
57
|
provide({
|
|
@@ -52,8 +68,8 @@ const pagePreloadProviders = [
|
|
|
52
68
|
},
|
|
53
69
|
multi: true,
|
|
54
70
|
deps: {
|
|
55
|
-
pageService: PAGE_SERVICE_TOKEN,
|
|
56
71
|
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
72
|
+
preloadSourceList: CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
57
73
|
},
|
|
58
74
|
}),
|
|
59
75
|
];
|
|
@@ -1,30 +1,46 @@
|
|
|
1
1
|
import { provide, commandLineListTokens } from '@tramvai/core';
|
|
2
2
|
import { resolveLazyComponent } from '@tramvai/react';
|
|
3
|
-
import { CHILD_APP_PRELOAD_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
-
import {
|
|
3
|
+
import { CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
+
import { PAGE_SERVICE_TOKEN, LINK_PREFETCH_HANDLER_TOKEN } from '@tramvai/tokens-router';
|
|
5
5
|
|
|
6
|
-
const pagePreload = async ({
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
// for first preload on SPA-navigation, we need to prevent double action execution,
|
|
16
|
-
// and need to mark this Child App as not preloaded, to prevent running `spa` and `afterSpa` commands for it
|
|
17
|
-
if (mode === 'preload' && isSpaNavigation && !preloadManager.isPreloaded(request)) {
|
|
18
|
-
preloadManager.saveNotPreloadedForSpaNavigation(request);
|
|
19
|
-
}
|
|
20
|
-
return preloadManager[mode](request, route).catch(() => {
|
|
21
|
-
// actual error will be logged internally
|
|
22
|
-
});
|
|
23
|
-
}));
|
|
6
|
+
const pagePreload = async ({ preloadManager, preloadSourceList, }, mode, isSpaNavigation = false, route) => {
|
|
7
|
+
const childApps = (await Promise.all(preloadSourceList.map((source) => {
|
|
8
|
+
return source({ route });
|
|
9
|
+
}))).reduce((acc, source) => acc.concat(source), []);
|
|
10
|
+
await Promise.all(childApps.map((request) => {
|
|
11
|
+
// for first preload on SPA-navigation, we need to prevent double action execution,
|
|
12
|
+
// and need to mark this Child App as not preloaded, to prevent running `spa` and `afterSpa` commands for it
|
|
13
|
+
if (mode === 'preload' && isSpaNavigation && !preloadManager.isPreloaded(request)) {
|
|
14
|
+
preloadManager.saveNotPreloadedForSpaNavigation(request);
|
|
24
15
|
}
|
|
16
|
+
return preloadManager[mode](request, route).catch(() => {
|
|
17
|
+
// actual error will be logged internally
|
|
18
|
+
});
|
|
25
19
|
}));
|
|
26
20
|
};
|
|
27
21
|
const pagePreloadProviders = [
|
|
22
|
+
provide({
|
|
23
|
+
provide: CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
24
|
+
useFactory: ({ pageService }) => {
|
|
25
|
+
return async function resolveChildAppsFromRouteComponents({ route }) {
|
|
26
|
+
const childApps = [];
|
|
27
|
+
const components = await Promise.all([
|
|
28
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('layout', route)),
|
|
29
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('nestedLayout', route)),
|
|
30
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('page', route)),
|
|
31
|
+
]);
|
|
32
|
+
components.forEach((component) => {
|
|
33
|
+
if (component === null || component === void 0 ? void 0 : component.childApps) {
|
|
34
|
+
childApps.push(...component.childApps);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return childApps;
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
deps: {
|
|
41
|
+
pageService: PAGE_SERVICE_TOKEN,
|
|
42
|
+
},
|
|
43
|
+
}),
|
|
28
44
|
provide({
|
|
29
45
|
provide: LINK_PREFETCH_HANDLER_TOKEN,
|
|
30
46
|
useFactory: (deps) => {
|
|
@@ -34,8 +50,8 @@ const pagePreloadProviders = [
|
|
|
34
50
|
},
|
|
35
51
|
multi: true,
|
|
36
52
|
deps: {
|
|
37
|
-
pageService: PAGE_SERVICE_TOKEN,
|
|
38
53
|
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
54
|
+
preloadSourceList: CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
39
55
|
},
|
|
40
56
|
}),
|
|
41
57
|
provide({
|
|
@@ -52,8 +68,8 @@ const pagePreloadProviders = [
|
|
|
52
68
|
},
|
|
53
69
|
multi: true,
|
|
54
70
|
deps: {
|
|
55
|
-
pageService: PAGE_SERVICE_TOKEN,
|
|
56
71
|
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
72
|
+
preloadSourceList: CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
57
73
|
},
|
|
58
74
|
}),
|
|
59
75
|
];
|
|
@@ -7,28 +7,44 @@ var react = require('@tramvai/react');
|
|
|
7
7
|
var tokensChildApp = require('@tramvai/tokens-child-app');
|
|
8
8
|
var tokensRouter = require('@tramvai/tokens-router');
|
|
9
9
|
|
|
10
|
-
const pagePreload = async ({
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (
|
|
18
|
-
|
|
19
|
-
// for first preload on SPA-navigation, we need to prevent double action execution,
|
|
20
|
-
// and need to mark this Child App as not preloaded, to prevent running `spa` and `afterSpa` commands for it
|
|
21
|
-
if (mode === 'preload' && isSpaNavigation && !preloadManager.isPreloaded(request)) {
|
|
22
|
-
preloadManager.saveNotPreloadedForSpaNavigation(request);
|
|
23
|
-
}
|
|
24
|
-
return preloadManager[mode](request, route).catch(() => {
|
|
25
|
-
// actual error will be logged internally
|
|
26
|
-
});
|
|
27
|
-
}));
|
|
10
|
+
const pagePreload = async ({ preloadManager, preloadSourceList, }, mode, isSpaNavigation = false, route) => {
|
|
11
|
+
const childApps = (await Promise.all(preloadSourceList.map((source) => {
|
|
12
|
+
return source({ route });
|
|
13
|
+
}))).reduce((acc, source) => acc.concat(source), []);
|
|
14
|
+
await Promise.all(childApps.map((request) => {
|
|
15
|
+
// for first preload on SPA-navigation, we need to prevent double action execution,
|
|
16
|
+
// and need to mark this Child App as not preloaded, to prevent running `spa` and `afterSpa` commands for it
|
|
17
|
+
if (mode === 'preload' && isSpaNavigation && !preloadManager.isPreloaded(request)) {
|
|
18
|
+
preloadManager.saveNotPreloadedForSpaNavigation(request);
|
|
28
19
|
}
|
|
20
|
+
return preloadManager[mode](request, route).catch(() => {
|
|
21
|
+
// actual error will be logged internally
|
|
22
|
+
});
|
|
29
23
|
}));
|
|
30
24
|
};
|
|
31
25
|
const pagePreloadProviders = [
|
|
26
|
+
core.provide({
|
|
27
|
+
provide: tokensChildApp.CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
28
|
+
useFactory: ({ pageService }) => {
|
|
29
|
+
return async function resolveChildAppsFromRouteComponents({ route }) {
|
|
30
|
+
const childApps = [];
|
|
31
|
+
const components = await Promise.all([
|
|
32
|
+
react.resolveLazyComponent(pageService.resolveComponentFromConfig('layout', route)),
|
|
33
|
+
react.resolveLazyComponent(pageService.resolveComponentFromConfig('nestedLayout', route)),
|
|
34
|
+
react.resolveLazyComponent(pageService.resolveComponentFromConfig('page', route)),
|
|
35
|
+
]);
|
|
36
|
+
components.forEach((component) => {
|
|
37
|
+
if (component === null || component === void 0 ? void 0 : component.childApps) {
|
|
38
|
+
childApps.push(...component.childApps);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return childApps;
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
deps: {
|
|
45
|
+
pageService: tokensRouter.PAGE_SERVICE_TOKEN,
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
32
48
|
core.provide({
|
|
33
49
|
provide: tokensRouter.LINK_PREFETCH_HANDLER_TOKEN,
|
|
34
50
|
useFactory: (deps) => {
|
|
@@ -38,8 +54,8 @@ const pagePreloadProviders = [
|
|
|
38
54
|
},
|
|
39
55
|
multi: true,
|
|
40
56
|
deps: {
|
|
41
|
-
pageService: tokensRouter.PAGE_SERVICE_TOKEN,
|
|
42
57
|
preloadManager: tokensChildApp.CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
58
|
+
preloadSourceList: tokensChildApp.CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
43
59
|
},
|
|
44
60
|
}),
|
|
45
61
|
core.provide({
|
|
@@ -56,8 +72,8 @@ const pagePreloadProviders = [
|
|
|
56
72
|
},
|
|
57
73
|
multi: true,
|
|
58
74
|
deps: {
|
|
59
|
-
pageService: tokensRouter.PAGE_SERVICE_TOKEN,
|
|
60
75
|
preloadManager: tokensChildApp.CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
76
|
+
preloadSourceList: tokensChildApp.CHILD_APP_PRELOAD_SOURCE_LIST_TOKEN,
|
|
61
77
|
},
|
|
62
78
|
}),
|
|
63
79
|
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-child-app",
|
|
3
|
-
"version": "4.41.
|
|
3
|
+
"version": "4.41.42",
|
|
4
4
|
"description": "Module for child apps",
|
|
5
5
|
"browser": {
|
|
6
6
|
"./lib/server.js": "./lib/browser.js",
|
|
@@ -33,23 +33,23 @@
|
|
|
33
33
|
"@tinkoff/env-validators": "0.3.3",
|
|
34
34
|
"@tinkoff/module-loader-client": "0.6.6",
|
|
35
35
|
"@tinkoff/module-loader-server": "0.7.6",
|
|
36
|
-
"@tramvai/module-common": "4.41.
|
|
36
|
+
"@tramvai/module-common": "4.41.42",
|
|
37
37
|
"@tinkoff/url": "0.10.3",
|
|
38
|
-
"@tramvai/child-app-core": "4.41.
|
|
38
|
+
"@tramvai/child-app-core": "4.41.42",
|
|
39
39
|
"@tramvai/safe-strings": "0.7.9",
|
|
40
|
-
"@tramvai/tokens-child-app": "4.41.
|
|
40
|
+
"@tramvai/tokens-child-app": "4.41.42"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@tinkoff/dippy": "0.10.11",
|
|
45
|
-
"@tinkoff/router": "0.4.
|
|
45
|
+
"@tinkoff/router": "0.4.177",
|
|
46
46
|
"@tinkoff/utils": "^2.1.2",
|
|
47
|
-
"@tramvai/core": "4.41.
|
|
48
|
-
"@tramvai/state": "4.41.
|
|
49
|
-
"@tramvai/react": "4.41.
|
|
50
|
-
"@tramvai/tokens-common": "4.41.
|
|
51
|
-
"@tramvai/tokens-render": "4.41.
|
|
52
|
-
"@tramvai/tokens-router": "4.41.
|
|
47
|
+
"@tramvai/core": "4.41.42",
|
|
48
|
+
"@tramvai/state": "4.41.42",
|
|
49
|
+
"@tramvai/react": "4.41.42",
|
|
50
|
+
"@tramvai/tokens-common": "4.41.42",
|
|
51
|
+
"@tramvai/tokens-render": "4.41.42",
|
|
52
|
+
"@tramvai/tokens-router": "4.41.42",
|
|
53
53
|
"react": ">=16.14.0",
|
|
54
54
|
"react-dom": ">=16.14.0",
|
|
55
55
|
"object-assign": "^4.1.1",
|