@tramvai/module-child-app 1.82.3 → 1.85.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/browser/preload.d.ts +4 -4
- package/lib/browser/render.d.ts +0 -2
- package/lib/browser/runCommand.d.ts +6 -0
- package/lib/server/preload.d.ts +2 -2
- package/lib/server.browser.js +117 -42
- package/lib/server.es.js +1 -1
- package/lib/server.js +1 -1
- package/package.json +9 -9
package/lib/browser/preload.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChildAppCommandLineRunner, ChildAppRequestConfig, ChildAppLoader, ChildAppPreloadManager, CHILD_APP_RESOLVE_CONFIG_TOKEN, CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
1
|
+
import type { ChildAppCommandLineRunner, ChildAppRequestConfig, ChildAppLoader, ChildAppPreloadManager, CHILD_APP_RESOLVE_CONFIG_TOKEN, ChildAppFinalConfig, CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
2
2
|
import type { STORE_TOKEN } from '@tramvai/tokens-common';
|
|
3
3
|
export declare class PreloadManager implements ChildAppPreloadManager {
|
|
4
4
|
private loader;
|
|
@@ -8,8 +8,8 @@ export declare class PreloadManager implements ChildAppPreloadManager {
|
|
|
8
8
|
private resolveExternalConfig;
|
|
9
9
|
private pageHasRendered;
|
|
10
10
|
private pageHasLoaded;
|
|
11
|
-
private
|
|
12
|
-
private
|
|
11
|
+
private currentlyPreloaded;
|
|
12
|
+
private hasPreloadBefore;
|
|
13
13
|
private hasInitialized;
|
|
14
14
|
constructor({ loader, runner, resolutionConfigManager, resolveExternalConfig, store, }: {
|
|
15
15
|
loader: ChildAppLoader;
|
|
@@ -23,7 +23,7 @@ export declare class PreloadManager implements ChildAppPreloadManager {
|
|
|
23
23
|
runPreloaded(): Promise<void>;
|
|
24
24
|
pageRender(): void;
|
|
25
25
|
clearPreloaded(): Promise<void>;
|
|
26
|
-
getPreloadedList():
|
|
26
|
+
getPreloadedList(): ChildAppFinalConfig[];
|
|
27
27
|
private initServerPreloaded;
|
|
28
28
|
private init;
|
|
29
29
|
private run;
|
package/lib/browser/render.d.ts
CHANGED
|
@@ -6,8 +6,6 @@ export declare class RenderManager implements ChildAppRenderManager {
|
|
|
6
6
|
private readonly diManager;
|
|
7
7
|
private readonly resolveExternalConfig;
|
|
8
8
|
private readonly log;
|
|
9
|
-
private readonly hasRenderedSet;
|
|
10
|
-
private readonly loadingInProgress;
|
|
11
9
|
constructor({ logger, preloadManager, diManager, resolveExternalConfig, }: {
|
|
12
10
|
logger: typeof LOGGER_TOKEN;
|
|
13
11
|
preloadManager: ChildAppPreloadManager;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CHILD_APP_COMMAND_LINE_RUNNER_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
2
|
+
export declare const runCommand: ({ status, runner, preloader, }: {
|
|
3
|
+
status: string;
|
|
4
|
+
runner: typeof CHILD_APP_COMMAND_LINE_RUNNER_TOKEN;
|
|
5
|
+
preloader: typeof CHILD_APP_PRELOAD_MANAGER_TOKEN;
|
|
6
|
+
}) => Promise<void>;
|
package/lib/server/preload.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChildAppCommandLineRunner, ChildAppRequestConfig, ChildAppLoader, ChildAppPreloadManager, ChildAppStateManager, CHILD_APP_RESOLVE_CONFIG_TOKEN, CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
1
|
+
import type { ChildAppCommandLineRunner, ChildAppRequestConfig, ChildAppLoader, ChildAppPreloadManager, ChildAppStateManager, CHILD_APP_RESOLVE_CONFIG_TOKEN, ChildAppFinalConfig, CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
2
2
|
export declare class PreloadManager implements ChildAppPreloadManager {
|
|
3
3
|
private loader;
|
|
4
4
|
private runner;
|
|
@@ -20,6 +20,6 @@ export declare class PreloadManager implements ChildAppPreloadManager {
|
|
|
20
20
|
runPreloaded(): Promise<void>;
|
|
21
21
|
pageRender(): void;
|
|
22
22
|
clearPreloaded(): Promise<void>;
|
|
23
|
-
getPreloadedList():
|
|
23
|
+
getPreloadedList(): ChildAppFinalConfig[];
|
|
24
24
|
private run;
|
|
25
25
|
}
|
package/lib/server.browser.js
CHANGED
|
@@ -5,13 +5,13 @@ import { commandLineListTokens, CHILD_APP_INTERNAL_ROOT_STATE_SUBSCRIPTION_TOKEN
|
|
|
5
5
|
export * from '@tramvai/tokens-child-app';
|
|
6
6
|
import { ACTION_PAGE_RUNNER_TOKEN, CONTEXT_TOKEN, LOGGER_TOKEN, DISPATCHER_TOKEN, STORE_TOKEN, DISPATCHER_CONTEXT_TOKEN, STORE_MIDDLEWARE, INITIAL_APP_STATE_TOKEN, COMBINE_REDUCERS, ENV_MANAGER_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN } from '@tramvai/tokens-common';
|
|
7
7
|
import { RENDER_SLOTS, EXTEND_RENDER } from '@tramvai/tokens-render';
|
|
8
|
-
import { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
|
|
8
|
+
import { ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN, PAGE_SERVICE_TOKEN, ROUTER_TOKEN } from '@tramvai/tokens-router';
|
|
9
9
|
import flatten from '@tinkoff/utils/array/flatten';
|
|
10
|
+
import noop from '@tinkoff/utils/function/noop';
|
|
10
11
|
import { Subscription, ChildDispatcherContext, createEvent, createReducer } from '@tramvai/state';
|
|
11
12
|
import React, { createContext, useContext, useMemo, useState, useEffect, createElement } from 'react';
|
|
12
13
|
import applyOrReturn from '@tinkoff/utils/function/applyOrReturn';
|
|
13
14
|
import { loadModule } from '@tinkoff/module-loader-client';
|
|
14
|
-
import noop from '@tinkoff/utils/function/noop';
|
|
15
15
|
import { useDi } from '@tramvai/react';
|
|
16
16
|
|
|
17
17
|
const getChildProviders$2 = (appDi) => {
|
|
@@ -53,6 +53,46 @@ const getChildProviders$2 = (appDi) => {
|
|
|
53
53
|
actions: CHILD_APP_INTERNAL_ACTION_TOKEN,
|
|
54
54
|
},
|
|
55
55
|
}),
|
|
56
|
+
provide({
|
|
57
|
+
provide: commandLineListTokens.spaTransition,
|
|
58
|
+
multi: true,
|
|
59
|
+
useFactory: ({ spaMode, actionRunner, actions }) => {
|
|
60
|
+
if (spaMode !== 'after') {
|
|
61
|
+
return function childAppRunActions() {
|
|
62
|
+
return actionRunner.runActions(flatten(actions));
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return noop;
|
|
66
|
+
},
|
|
67
|
+
deps: {
|
|
68
|
+
actionRunner: ACTION_PAGE_RUNNER_TOKEN,
|
|
69
|
+
actions: CHILD_APP_INTERNAL_ACTION_TOKEN,
|
|
70
|
+
spaMode: {
|
|
71
|
+
token: ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN,
|
|
72
|
+
optional: true,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
}),
|
|
76
|
+
provide({
|
|
77
|
+
provide: commandLineListTokens.afterSpaTransition,
|
|
78
|
+
multi: true,
|
|
79
|
+
useFactory: ({ spaMode, actionRunner, actions }) => {
|
|
80
|
+
if (spaMode === 'after') {
|
|
81
|
+
return function childAppRunActions() {
|
|
82
|
+
return actionRunner.runActions(flatten(actions));
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return noop;
|
|
86
|
+
},
|
|
87
|
+
deps: {
|
|
88
|
+
actionRunner: ACTION_PAGE_RUNNER_TOKEN,
|
|
89
|
+
actions: CHILD_APP_INTERNAL_ACTION_TOKEN,
|
|
90
|
+
spaMode: {
|
|
91
|
+
token: ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN,
|
|
92
|
+
optional: true,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
}),
|
|
56
96
|
];
|
|
57
97
|
};
|
|
58
98
|
|
|
@@ -671,8 +711,8 @@ class PreloadManager {
|
|
|
671
711
|
constructor({ loader, runner, resolutionConfigManager, resolveExternalConfig, store, }) {
|
|
672
712
|
this.pageHasRendered = false;
|
|
673
713
|
this.pageHasLoaded = false;
|
|
674
|
-
this.
|
|
675
|
-
this.
|
|
714
|
+
this.currentlyPreloaded = new Map();
|
|
715
|
+
this.hasPreloadBefore = new Set();
|
|
676
716
|
this.hasInitialized = false;
|
|
677
717
|
this.loader = loader;
|
|
678
718
|
this.runner = runner;
|
|
@@ -689,66 +729,64 @@ class PreloadManager {
|
|
|
689
729
|
// as it will lead to markup mismatch on markup hydration
|
|
690
730
|
if (this.pageHasRendered) {
|
|
691
731
|
// but in case render has happened load child-app as soon as possible
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
return config;
|
|
700
|
-
})();
|
|
701
|
-
this.map.set(key, promise);
|
|
702
|
-
await promise;
|
|
732
|
+
try {
|
|
733
|
+
await this.loader.load(config);
|
|
734
|
+
await this.run('customer', config);
|
|
735
|
+
await this.run('clear', config);
|
|
736
|
+
this.hasPreloadBefore.add(key);
|
|
737
|
+
}
|
|
738
|
+
catch (error) { }
|
|
703
739
|
}
|
|
704
740
|
}
|
|
741
|
+
if (this.pageHasRendered) {
|
|
742
|
+
this.currentlyPreloaded.set(key, config);
|
|
743
|
+
}
|
|
705
744
|
}
|
|
706
745
|
isPreloaded(request) {
|
|
707
746
|
const config = this.resolveExternalConfig(request);
|
|
708
747
|
const { key } = config;
|
|
709
|
-
return this.
|
|
748
|
+
return this.hasPreloadBefore.has(key);
|
|
710
749
|
}
|
|
711
750
|
async runPreloaded() {
|
|
712
751
|
await this.init();
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
this.map.forEach((childAppPromise) => {
|
|
716
|
-
promises.push((async () => {
|
|
717
|
-
await this.run('spa', await childAppPromise);
|
|
718
|
-
})());
|
|
719
|
-
});
|
|
720
|
-
}
|
|
721
|
-
else {
|
|
722
|
-
this.serverPreloaded.forEach((config) => {
|
|
723
|
-
promises.push((async () => {
|
|
724
|
-
await this.loader.init(config);
|
|
725
|
-
await this.run('customer', config);
|
|
726
|
-
})());
|
|
727
|
-
});
|
|
752
|
+
if (this.pageHasRendered) {
|
|
753
|
+
return;
|
|
728
754
|
}
|
|
755
|
+
const promises = [];
|
|
756
|
+
this.currentlyPreloaded.forEach((config) => {
|
|
757
|
+
promises.push((async () => {
|
|
758
|
+
await this.loader.init(config);
|
|
759
|
+
await this.run('customer', config);
|
|
760
|
+
})());
|
|
761
|
+
});
|
|
729
762
|
await Promise.all(promises);
|
|
730
763
|
}
|
|
731
764
|
pageRender() {
|
|
732
765
|
this.pageHasRendered = true;
|
|
733
766
|
}
|
|
734
767
|
async clearPreloaded() {
|
|
768
|
+
if (this.pageHasLoaded) {
|
|
769
|
+
this.currentlyPreloaded.clear();
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
735
772
|
this.pageHasLoaded = true;
|
|
736
773
|
const promises = [];
|
|
737
|
-
this.
|
|
774
|
+
this.currentlyPreloaded.forEach((config) => {
|
|
738
775
|
promises.push(this.run('clear', config));
|
|
739
776
|
});
|
|
740
|
-
this.
|
|
777
|
+
this.currentlyPreloaded.clear();
|
|
741
778
|
await Promise.all(promises);
|
|
742
779
|
}
|
|
743
780
|
getPreloadedList() {
|
|
744
|
-
return
|
|
781
|
+
return Array.from(this.currentlyPreloaded.values());
|
|
745
782
|
}
|
|
746
783
|
initServerPreloaded() {
|
|
747
784
|
if (!this.hasInitialized) {
|
|
748
785
|
const { preloaded } = this.store.getState(ChildAppStore);
|
|
749
786
|
preloaded.forEach((request) => {
|
|
750
787
|
const config = this.resolveExternalConfig(request);
|
|
751
|
-
this.
|
|
788
|
+
this.currentlyPreloaded.set(config.key, config);
|
|
789
|
+
this.hasPreloadBefore.add(config.key);
|
|
752
790
|
});
|
|
753
791
|
this.hasInitialized = true;
|
|
754
792
|
}
|
|
@@ -768,8 +806,6 @@ class PreloadManager {
|
|
|
768
806
|
|
|
769
807
|
class RenderManager {
|
|
770
808
|
constructor({ logger, preloadManager, diManager, resolveExternalConfig, }) {
|
|
771
|
-
this.hasRenderedSet = new Set();
|
|
772
|
-
this.loadingInProgress = new Map();
|
|
773
809
|
this.log = logger('child-app:render');
|
|
774
810
|
this.preloadManager = preloadManager;
|
|
775
811
|
this.diManager = diManager;
|
|
@@ -777,7 +813,6 @@ class RenderManager {
|
|
|
777
813
|
}
|
|
778
814
|
getChildDi(request) {
|
|
779
815
|
const config = this.resolveExternalConfig(request);
|
|
780
|
-
this.hasRenderedSet.add(config.key);
|
|
781
816
|
if (this.preloadManager.isPreloaded(request)) {
|
|
782
817
|
return [this.diManager.getChildDi(config), null];
|
|
783
818
|
}
|
|
@@ -785,7 +820,6 @@ class RenderManager {
|
|
|
785
820
|
message: 'Child-app has been used but not preloaded before React render',
|
|
786
821
|
request,
|
|
787
822
|
});
|
|
788
|
-
this.loadingInProgress.set(config.key, config);
|
|
789
823
|
const promiseDi = this.preloadManager.preload(request).then(() => {
|
|
790
824
|
return this.diManager.getChildDi(config);
|
|
791
825
|
});
|
|
@@ -797,6 +831,13 @@ class RenderManager {
|
|
|
797
831
|
clear() { }
|
|
798
832
|
}
|
|
799
833
|
|
|
834
|
+
const runCommand = async ({ status, runner, preloader, }) => {
|
|
835
|
+
const childApps = preloader.getPreloadedList();
|
|
836
|
+
await Promise.all(childApps.map((config) => {
|
|
837
|
+
return runner.run('client', status, config);
|
|
838
|
+
}));
|
|
839
|
+
};
|
|
840
|
+
|
|
800
841
|
const browserProviders = [
|
|
801
842
|
provide({
|
|
802
843
|
provide: CHILD_APP_LOADER_TOKEN,
|
|
@@ -848,16 +889,50 @@ const browserProviders = [
|
|
|
848
889
|
preloader: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
849
890
|
},
|
|
850
891
|
}),
|
|
892
|
+
provide({
|
|
893
|
+
provide: commandLineListTokens$1.customerStart,
|
|
894
|
+
multi: true,
|
|
895
|
+
useFactory: ({ router, preloader }) => {
|
|
896
|
+
router.registerHook('beforeNavigate', () => preloader.clearPreloaded());
|
|
897
|
+
router.registerHook('beforeUpdateCurrent', () => preloader.clearPreloaded());
|
|
898
|
+
},
|
|
899
|
+
deps: {
|
|
900
|
+
router: ROUTER_TOKEN,
|
|
901
|
+
preloader: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
902
|
+
},
|
|
903
|
+
}),
|
|
851
904
|
provide({
|
|
852
905
|
provide: commandLineListTokens$1.spaTransition,
|
|
853
906
|
multi: true,
|
|
854
|
-
useFactory: ({ preloader }) => {
|
|
855
|
-
return function childAppRunPreloaded() {
|
|
856
|
-
|
|
907
|
+
useFactory: ({ preloader, runner }) => {
|
|
908
|
+
return async function childAppRunPreloaded() {
|
|
909
|
+
await runCommand({
|
|
910
|
+
preloader,
|
|
911
|
+
runner,
|
|
912
|
+
status: 'spa',
|
|
913
|
+
});
|
|
914
|
+
};
|
|
915
|
+
},
|
|
916
|
+
deps: {
|
|
917
|
+
preloader: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
918
|
+
runner: CHILD_APP_COMMAND_LINE_RUNNER_TOKEN,
|
|
919
|
+
},
|
|
920
|
+
}),
|
|
921
|
+
provide({
|
|
922
|
+
provide: commandLineListTokens$1.afterSpaTransition,
|
|
923
|
+
multi: true,
|
|
924
|
+
useFactory: ({ preloader, runner }) => {
|
|
925
|
+
return async function childAppRunPreloaded() {
|
|
926
|
+
await runCommand({
|
|
927
|
+
preloader,
|
|
928
|
+
runner,
|
|
929
|
+
status: 'afterSpa',
|
|
930
|
+
});
|
|
857
931
|
};
|
|
858
932
|
},
|
|
859
933
|
deps: {
|
|
860
934
|
preloader: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
935
|
+
runner: CHILD_APP_COMMAND_LINE_RUNNER_TOKEN,
|
|
861
936
|
},
|
|
862
937
|
}),
|
|
863
938
|
];
|
package/lib/server.es.js
CHANGED
|
@@ -688,7 +688,7 @@ class PreloadManager {
|
|
|
688
688
|
await Promise.all(promises);
|
|
689
689
|
}
|
|
690
690
|
getPreloadedList() {
|
|
691
|
-
return
|
|
691
|
+
return Array.from(this.preloadMap.values());
|
|
692
692
|
}
|
|
693
693
|
async run(status, config) {
|
|
694
694
|
const childApp = this.loader.get(config);
|
package/lib/server.js
CHANGED
|
@@ -698,7 +698,7 @@ class PreloadManager {
|
|
|
698
698
|
await Promise.all(promises);
|
|
699
699
|
}
|
|
700
700
|
getPreloadedList() {
|
|
701
|
-
return
|
|
701
|
+
return Array.from(this.preloadMap.values());
|
|
702
702
|
}
|
|
703
703
|
async run(status, config) {
|
|
704
704
|
const childApp = this.loader.get(config);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-child-app",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.85.0",
|
|
4
4
|
"description": "Module for child apps",
|
|
5
5
|
"browser": {
|
|
6
6
|
"./lib/server.js": "./lib/browser.js",
|
|
@@ -31,20 +31,20 @@
|
|
|
31
31
|
"@tinkoff/env-validators": "0.0.3",
|
|
32
32
|
"@tinkoff/module-loader-client": "0.3.25",
|
|
33
33
|
"@tinkoff/module-loader-server": "0.4.41",
|
|
34
|
-
"@tramvai/child-app-core": "1.
|
|
34
|
+
"@tramvai/child-app-core": "1.85.0",
|
|
35
35
|
"@tramvai/safe-strings": "0.4.3",
|
|
36
|
-
"@tramvai/tokens-child-app": "1.
|
|
36
|
+
"@tramvai/tokens-child-app": "1.85.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@tinkoff/dippy": "0.7.39",
|
|
41
41
|
"@tinkoff/utils": "^2.1.2",
|
|
42
|
-
"@tramvai/core": "1.
|
|
43
|
-
"@tramvai/state": "1.
|
|
44
|
-
"@tramvai/react": "1.
|
|
45
|
-
"@tramvai/tokens-common": "1.
|
|
46
|
-
"@tramvai/tokens-render": "1.
|
|
47
|
-
"@tramvai/tokens-router": "1.
|
|
42
|
+
"@tramvai/core": "1.85.0",
|
|
43
|
+
"@tramvai/state": "1.85.0",
|
|
44
|
+
"@tramvai/react": "1.85.0",
|
|
45
|
+
"@tramvai/tokens-common": "1.85.0",
|
|
46
|
+
"@tramvai/tokens-render": "1.85.0",
|
|
47
|
+
"@tramvai/tokens-router": "1.85.0",
|
|
48
48
|
"react": ">=16.8.0",
|
|
49
49
|
"react-dom": ">=16.8.0",
|
|
50
50
|
"object-assign": "^4.1.1",
|