@tramvai/module-child-app 2.70.1 → 2.72.3
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/child/singletonProviders.browser.js +91 -0
- package/lib/browser/loader.browser.js +64 -0
- package/lib/browser/preload.browser.js +115 -0
- package/lib/browser/providers.browser.js +113 -0
- package/lib/browser/render.browser.js +28 -0
- package/lib/browser/runCommand.browser.js +8 -0
- package/lib/browser.browser.js +17 -0
- package/lib/server/child/singletonProviders.es.js +24 -0
- package/lib/server/child/singletonProviders.js +32 -0
- package/lib/server/loader.es.js +48 -0
- package/lib/server/loader.js +52 -0
- package/lib/server/preload.es.js +77 -0
- package/lib/server/preload.js +81 -0
- package/lib/server/providers.es.js +131 -0
- package/lib/server/providers.js +135 -0
- package/lib/server/render-slots.es.js +50 -0
- package/lib/server/render-slots.js +54 -0
- package/lib/server/render.es.js +39 -0
- package/lib/server/render.js +43 -0
- package/lib/server/stateManager.es.js +49 -0
- package/lib/server/stateManager.js +54 -0
- package/lib/server.browser.js +2 -1082
- package/lib/server.es.js +5 -1067
- package/lib/server.js +5 -1072
- package/lib/shared/child/providers.browser.js +36 -0
- package/lib/shared/child/providers.es.js +36 -0
- package/lib/shared/child/providers.js +44 -0
- package/lib/shared/child/singletonProviders.browser.js +24 -0
- package/lib/shared/child/singletonProviders.es.js +24 -0
- package/lib/shared/child/singletonProviders.js +28 -0
- package/lib/shared/child/stubs.browser.js +18 -0
- package/lib/shared/child/stubs.es.js +18 -0
- package/lib/shared/child/stubs.js +22 -0
- package/lib/shared/child/validate.browser.js +11 -0
- package/lib/shared/child/validate.es.js +11 -0
- package/lib/shared/child/validate.js +15 -0
- package/lib/shared/command.browser.js +38 -0
- package/lib/shared/command.es.js +38 -0
- package/lib/shared/command.js +42 -0
- package/lib/shared/constants.browser.js +3 -0
- package/lib/shared/constants.es.js +3 -0
- package/lib/shared/constants.js +7 -0
- package/lib/shared/di.browser.js +44 -0
- package/lib/shared/di.es.js +44 -0
- package/lib/shared/di.js +48 -0
- package/lib/shared/loader.browser.js +7 -0
- package/lib/shared/loader.es.js +7 -0
- package/lib/shared/loader.js +11 -0
- package/lib/shared/providers.browser.js +231 -0
- package/lib/shared/providers.es.js +231 -0
- package/lib/shared/providers.js +235 -0
- package/lib/shared/react/component.browser.js +104 -0
- package/lib/shared/react/component.es.js +104 -0
- package/lib/shared/react/component.js +112 -0
- package/lib/shared/react/render-context.browser.js +5 -0
- package/lib/shared/react/render-context.es.js +5 -0
- package/lib/shared/react/render-context.js +9 -0
- package/lib/shared/render.browser.js +10 -0
- package/lib/shared/render.es.js +10 -0
- package/lib/shared/render.js +14 -0
- package/lib/shared/resolutionConfigManager.browser.js +58 -0
- package/lib/shared/resolutionConfigManager.es.js +58 -0
- package/lib/shared/resolutionConfigManager.js +67 -0
- package/lib/shared/singletonDi.browser.js +95 -0
- package/lib/shared/singletonDi.es.js +95 -0
- package/lib/shared/singletonDi.js +103 -0
- package/lib/shared/store.browser.js +13 -0
- package/lib/shared/store.es.js +13 -0
- package/lib/shared/store.js +18 -0
- package/lib/shared/webpack/moduleFederation.browser.js +49 -0
- package/lib/shared/webpack/moduleFederation.es.js +49 -0
- package/lib/shared/webpack/moduleFederation.js +54 -0
- package/package.json +17 -18
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { Scope, DI_TOKEN } from '@tinkoff/dippy';
|
|
2
|
+
import { provide, commandLineListTokens, COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
|
|
3
|
+
import { CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN, CHILD_APP_RESOLUTION_CONFIGS_TOKEN, CHILD_APP_RESOLVE_CONFIG_TOKEN, CHILD_APP_RESOLVE_BASE_URL_TOKEN, CHILD_APP_SINGLETON_DI_MANAGER_TOKEN, CHILD_APP_LOADER_TOKEN, CHILD_APP_DI_MANAGER_TOKEN, CHILD_APP_COMMAND_LINE_RUNNER_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN, CHILD_APP_RENDER_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
+
import { COMBINE_REDUCERS, LOGGER_TOKEN, ENV_MANAGER_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN } from '@tramvai/tokens-common';
|
|
5
|
+
import { EXTEND_RENDER } from '@tramvai/tokens-render';
|
|
6
|
+
import { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
|
|
7
|
+
import { resolveLazyComponent } from '@tramvai/react';
|
|
8
|
+
import { SingletonDiManager } from './singletonDi.browser.js';
|
|
9
|
+
import { DiManager } from './di.browser.js';
|
|
10
|
+
import { CommandLineRunner } from './command.browser.js';
|
|
11
|
+
import { ChildAppStore } from './store.browser.js';
|
|
12
|
+
import { extendRender } from './render.browser.js';
|
|
13
|
+
import { initModuleFederation } from './webpack/moduleFederation.browser.js';
|
|
14
|
+
import { ChildAppResolutionConfigManager } from './resolutionConfigManager.browser.js';
|
|
15
|
+
|
|
16
|
+
const sharedProviders = [
|
|
17
|
+
provide({
|
|
18
|
+
provide: COMBINE_REDUCERS,
|
|
19
|
+
multi: true,
|
|
20
|
+
useValue: ChildAppStore,
|
|
21
|
+
}),
|
|
22
|
+
provide({
|
|
23
|
+
provide: commandLineListTokens.init,
|
|
24
|
+
multi: true,
|
|
25
|
+
useValue: () => initModuleFederation(),
|
|
26
|
+
}),
|
|
27
|
+
provide({
|
|
28
|
+
provide: CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
29
|
+
useClass: ChildAppResolutionConfigManager,
|
|
30
|
+
deps: {
|
|
31
|
+
configs: { token: CHILD_APP_RESOLUTION_CONFIGS_TOKEN, optional: true },
|
|
32
|
+
logger: LOGGER_TOKEN,
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
provide({
|
|
36
|
+
provide: commandLineListTokens.resolvePageDeps,
|
|
37
|
+
multi: true,
|
|
38
|
+
useFactory: ({ resolutionConfigManager }) => {
|
|
39
|
+
return async function fallbackResolutionConfigManagerInit() {
|
|
40
|
+
await resolutionConfigManager.init();
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
deps: {
|
|
44
|
+
resolutionConfigManager: CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
provide({
|
|
48
|
+
provide: CHILD_APP_RESOLVE_CONFIG_TOKEN,
|
|
49
|
+
useFactory: ({ envManager, logger, rootBaseUrl, resolutionConfigManager }) => {
|
|
50
|
+
const rawEnv = envManager.get('CHILD_APP_DEBUG');
|
|
51
|
+
const log = logger('child-app:resolve-config');
|
|
52
|
+
const debug = new Map();
|
|
53
|
+
rawEnv === null || rawEnv === void 0 ? void 0 : rawEnv.split(';').reduce((acc, entry) => {
|
|
54
|
+
const [name, url] = entry.split('=');
|
|
55
|
+
return acc.set(name, url);
|
|
56
|
+
}, debug);
|
|
57
|
+
return (request) => {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
const { name, tag = debug.has(name) ? 'debug' : 'latest' } = request;
|
|
60
|
+
const req = { name, tag, version: request.version };
|
|
61
|
+
const config = resolutionConfigManager.resolve(req);
|
|
62
|
+
if (!config) {
|
|
63
|
+
log.error(`Child-app "${name}" with tag "${tag}" has not found`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const { version, baseUrl: configBaseUrl, client, server, css, withoutCss } = config;
|
|
67
|
+
const baseUrl = (_b = (_a = debug.get(name)) !== null && _a !== void 0 ? _a : configBaseUrl) !== null && _b !== void 0 ? _b : rootBaseUrl;
|
|
68
|
+
if (!baseUrl) {
|
|
69
|
+
throw new Error('CHILD_APP_EXTERNAL_URL was not defined');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
name,
|
|
73
|
+
tag,
|
|
74
|
+
version,
|
|
75
|
+
key: `${name}@${version}`,
|
|
76
|
+
server: {
|
|
77
|
+
entry: `${baseUrl}${name}/${name}_server@${version}.js`,
|
|
78
|
+
...server,
|
|
79
|
+
},
|
|
80
|
+
client: {
|
|
81
|
+
baseUrl: `${baseUrl}${name}/`,
|
|
82
|
+
entry: `${baseUrl}${name}/${name}_client@${version}.js`,
|
|
83
|
+
...client,
|
|
84
|
+
},
|
|
85
|
+
css: withoutCss
|
|
86
|
+
? undefined
|
|
87
|
+
: {
|
|
88
|
+
entry: `${baseUrl}${name}/${name}@${version}.css`,
|
|
89
|
+
...css,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
deps: {
|
|
95
|
+
envManager: ENV_MANAGER_TOKEN,
|
|
96
|
+
logger: LOGGER_TOKEN,
|
|
97
|
+
rootBaseUrl: CHILD_APP_RESOLVE_BASE_URL_TOKEN,
|
|
98
|
+
resolutionConfigManager: CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
99
|
+
},
|
|
100
|
+
}),
|
|
101
|
+
provide({
|
|
102
|
+
provide: CHILD_APP_RESOLVE_BASE_URL_TOKEN,
|
|
103
|
+
useFactory: ({ envManager }) => {
|
|
104
|
+
return envManager.get('CHILD_APP_EXTERNAL_URL');
|
|
105
|
+
},
|
|
106
|
+
deps: {
|
|
107
|
+
envManager: ENV_MANAGER_TOKEN,
|
|
108
|
+
},
|
|
109
|
+
}),
|
|
110
|
+
provide({
|
|
111
|
+
provide: CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
112
|
+
scope: Scope.SINGLETON,
|
|
113
|
+
useClass: SingletonDiManager,
|
|
114
|
+
deps: {
|
|
115
|
+
logger: LOGGER_TOKEN,
|
|
116
|
+
appDi: DI_TOKEN,
|
|
117
|
+
loader: CHILD_APP_LOADER_TOKEN,
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
provide({
|
|
121
|
+
provide: CHILD_APP_DI_MANAGER_TOKEN,
|
|
122
|
+
useClass: DiManager,
|
|
123
|
+
deps: {
|
|
124
|
+
appDi: DI_TOKEN,
|
|
125
|
+
loader: CHILD_APP_LOADER_TOKEN,
|
|
126
|
+
singletonDiManager: CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
127
|
+
},
|
|
128
|
+
}),
|
|
129
|
+
provide({
|
|
130
|
+
provide: CHILD_APP_COMMAND_LINE_RUNNER_TOKEN,
|
|
131
|
+
useClass: CommandLineRunner,
|
|
132
|
+
deps: {
|
|
133
|
+
logger: LOGGER_TOKEN,
|
|
134
|
+
rootCommandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
|
|
135
|
+
diManager: CHILD_APP_DI_MANAGER_TOKEN,
|
|
136
|
+
},
|
|
137
|
+
}),
|
|
138
|
+
provide({
|
|
139
|
+
provide: commandLineListTokens.resolvePageDeps,
|
|
140
|
+
useFactory: ({ pageService, preloadManager }) => {
|
|
141
|
+
return async function preloadChildAppByComponent() {
|
|
142
|
+
var _a, _b, _c, _d, _e, _f;
|
|
143
|
+
const [layoutComponent, nestedLayoutComponent, pageComponent] = await Promise.all([
|
|
144
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('layout')),
|
|
145
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('nestedLayout')),
|
|
146
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('page')),
|
|
147
|
+
]);
|
|
148
|
+
await Promise.all([
|
|
149
|
+
...((_b = (_a = layoutComponent === null || layoutComponent === void 0 ? void 0 : layoutComponent.childApps) === null || _a === void 0 ? void 0 : _a.map((request) => preloadManager.preload(request))) !== null && _b !== void 0 ? _b : []),
|
|
150
|
+
...((_d = (_c = nestedLayoutComponent === null || nestedLayoutComponent === void 0 ? void 0 : nestedLayoutComponent.childApps) === null || _c === void 0 ? void 0 : _c.map((request) => preloadManager.preload(request))) !== null && _d !== void 0 ? _d : []),
|
|
151
|
+
...((_f = (_e = pageComponent === null || pageComponent === void 0 ? void 0 : pageComponent.childApps) === null || _e === void 0 ? void 0 : _e.map((request) => preloadManager.preload(request))) !== null && _f !== void 0 ? _f : []),
|
|
152
|
+
]);
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
multi: true,
|
|
156
|
+
deps: {
|
|
157
|
+
pageService: PAGE_SERVICE_TOKEN,
|
|
158
|
+
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
159
|
+
},
|
|
160
|
+
}),
|
|
161
|
+
provide({
|
|
162
|
+
provide: commandLineListTokens.generatePage,
|
|
163
|
+
multi: true,
|
|
164
|
+
useFactory: ({ preloadManager }) => {
|
|
165
|
+
return function childAppPageRender() {
|
|
166
|
+
preloadManager.pageRender();
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
deps: {
|
|
170
|
+
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
171
|
+
},
|
|
172
|
+
}),
|
|
173
|
+
provide({
|
|
174
|
+
provide: commandLineListTokens.clear,
|
|
175
|
+
multi: true,
|
|
176
|
+
useFactory: ({ preloader }) => {
|
|
177
|
+
return function childAppClear() {
|
|
178
|
+
return preloader.clearPreloaded();
|
|
179
|
+
};
|
|
180
|
+
},
|
|
181
|
+
deps: {
|
|
182
|
+
preloader: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
183
|
+
},
|
|
184
|
+
}),
|
|
185
|
+
provide({
|
|
186
|
+
provide: REGISTER_CLEAR_CACHE_TOKEN,
|
|
187
|
+
multi: true,
|
|
188
|
+
useFactory: ({ diManager }) => {
|
|
189
|
+
return (type) => {
|
|
190
|
+
diManager.forEachChildDi((di) => {
|
|
191
|
+
var _a;
|
|
192
|
+
const clearCache = di.get({ token: CLEAR_CACHE_TOKEN, optional: true });
|
|
193
|
+
if (clearCache) {
|
|
194
|
+
// first if child-app has its own CLEAR_CACHE_TOKEN implementation use only it
|
|
195
|
+
return clearCache(type);
|
|
196
|
+
}
|
|
197
|
+
// otherwise pick up any REGISTER_CLEAR_CACHE_TOKEN hooks and call it
|
|
198
|
+
const registeredClearCache = (_a = di.get({
|
|
199
|
+
token: REGISTER_CLEAR_CACHE_TOKEN,
|
|
200
|
+
optional: true,
|
|
201
|
+
})) !== null && _a !== void 0 ? _a : [];
|
|
202
|
+
return Promise.all(registeredClearCache.map((clear) => clear(type)));
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
},
|
|
206
|
+
deps: {
|
|
207
|
+
diManager: CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
208
|
+
},
|
|
209
|
+
}),
|
|
210
|
+
provide({
|
|
211
|
+
provide: EXTEND_RENDER,
|
|
212
|
+
multi: true,
|
|
213
|
+
useFactory: extendRender,
|
|
214
|
+
deps: {
|
|
215
|
+
renderManager: CHILD_APP_RENDER_MANAGER_TOKEN,
|
|
216
|
+
},
|
|
217
|
+
}),
|
|
218
|
+
provide({
|
|
219
|
+
provide: ENV_USED_TOKEN,
|
|
220
|
+
multi: true,
|
|
221
|
+
useValue: [
|
|
222
|
+
{
|
|
223
|
+
key: 'CHILD_APP_DEBUG',
|
|
224
|
+
dehydrate: true,
|
|
225
|
+
optional: true,
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
}),
|
|
229
|
+
];
|
|
230
|
+
|
|
231
|
+
export { sharedProviders };
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { Scope, DI_TOKEN } from '@tinkoff/dippy';
|
|
2
|
+
import { provide, commandLineListTokens, COMMAND_LINE_RUNNER_TOKEN } from '@tramvai/core';
|
|
3
|
+
import { CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN, CHILD_APP_RESOLUTION_CONFIGS_TOKEN, CHILD_APP_RESOLVE_CONFIG_TOKEN, CHILD_APP_RESOLVE_BASE_URL_TOKEN, CHILD_APP_SINGLETON_DI_MANAGER_TOKEN, CHILD_APP_LOADER_TOKEN, CHILD_APP_DI_MANAGER_TOKEN, CHILD_APP_COMMAND_LINE_RUNNER_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN, CHILD_APP_RENDER_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
+
import { COMBINE_REDUCERS, LOGGER_TOKEN, ENV_MANAGER_TOKEN, REGISTER_CLEAR_CACHE_TOKEN, CLEAR_CACHE_TOKEN, ENV_USED_TOKEN } from '@tramvai/tokens-common';
|
|
5
|
+
import { EXTEND_RENDER } from '@tramvai/tokens-render';
|
|
6
|
+
import { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
|
|
7
|
+
import { resolveLazyComponent } from '@tramvai/react';
|
|
8
|
+
import { SingletonDiManager } from './singletonDi.es.js';
|
|
9
|
+
import { DiManager } from './di.es.js';
|
|
10
|
+
import { CommandLineRunner } from './command.es.js';
|
|
11
|
+
import { ChildAppStore } from './store.es.js';
|
|
12
|
+
import { extendRender } from './render.es.js';
|
|
13
|
+
import { initModuleFederation } from './webpack/moduleFederation.es.js';
|
|
14
|
+
import { ChildAppResolutionConfigManager } from './resolutionConfigManager.es.js';
|
|
15
|
+
|
|
16
|
+
const sharedProviders = [
|
|
17
|
+
provide({
|
|
18
|
+
provide: COMBINE_REDUCERS,
|
|
19
|
+
multi: true,
|
|
20
|
+
useValue: ChildAppStore,
|
|
21
|
+
}),
|
|
22
|
+
provide({
|
|
23
|
+
provide: commandLineListTokens.init,
|
|
24
|
+
multi: true,
|
|
25
|
+
useValue: () => initModuleFederation(),
|
|
26
|
+
}),
|
|
27
|
+
provide({
|
|
28
|
+
provide: CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
29
|
+
useClass: ChildAppResolutionConfigManager,
|
|
30
|
+
deps: {
|
|
31
|
+
configs: { token: CHILD_APP_RESOLUTION_CONFIGS_TOKEN, optional: true },
|
|
32
|
+
logger: LOGGER_TOKEN,
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
provide({
|
|
36
|
+
provide: commandLineListTokens.resolvePageDeps,
|
|
37
|
+
multi: true,
|
|
38
|
+
useFactory: ({ resolutionConfigManager }) => {
|
|
39
|
+
return async function fallbackResolutionConfigManagerInit() {
|
|
40
|
+
await resolutionConfigManager.init();
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
deps: {
|
|
44
|
+
resolutionConfigManager: CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
provide({
|
|
48
|
+
provide: CHILD_APP_RESOLVE_CONFIG_TOKEN,
|
|
49
|
+
useFactory: ({ envManager, logger, rootBaseUrl, resolutionConfigManager }) => {
|
|
50
|
+
const rawEnv = envManager.get('CHILD_APP_DEBUG');
|
|
51
|
+
const log = logger('child-app:resolve-config');
|
|
52
|
+
const debug = new Map();
|
|
53
|
+
rawEnv === null || rawEnv === void 0 ? void 0 : rawEnv.split(';').reduce((acc, entry) => {
|
|
54
|
+
const [name, url] = entry.split('=');
|
|
55
|
+
return acc.set(name, url);
|
|
56
|
+
}, debug);
|
|
57
|
+
return (request) => {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
const { name, tag = debug.has(name) ? 'debug' : 'latest' } = request;
|
|
60
|
+
const req = { name, tag, version: request.version };
|
|
61
|
+
const config = resolutionConfigManager.resolve(req);
|
|
62
|
+
if (!config) {
|
|
63
|
+
log.error(`Child-app "${name}" with tag "${tag}" has not found`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const { version, baseUrl: configBaseUrl, client, server, css, withoutCss } = config;
|
|
67
|
+
const baseUrl = (_b = (_a = debug.get(name)) !== null && _a !== void 0 ? _a : configBaseUrl) !== null && _b !== void 0 ? _b : rootBaseUrl;
|
|
68
|
+
if (!baseUrl) {
|
|
69
|
+
throw new Error('CHILD_APP_EXTERNAL_URL was not defined');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
name,
|
|
73
|
+
tag,
|
|
74
|
+
version,
|
|
75
|
+
key: `${name}@${version}`,
|
|
76
|
+
server: {
|
|
77
|
+
entry: `${baseUrl}${name}/${name}_server@${version}.js`,
|
|
78
|
+
...server,
|
|
79
|
+
},
|
|
80
|
+
client: {
|
|
81
|
+
baseUrl: `${baseUrl}${name}/`,
|
|
82
|
+
entry: `${baseUrl}${name}/${name}_client@${version}.js`,
|
|
83
|
+
...client,
|
|
84
|
+
},
|
|
85
|
+
css: withoutCss
|
|
86
|
+
? undefined
|
|
87
|
+
: {
|
|
88
|
+
entry: `${baseUrl}${name}/${name}@${version}.css`,
|
|
89
|
+
...css,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
deps: {
|
|
95
|
+
envManager: ENV_MANAGER_TOKEN,
|
|
96
|
+
logger: LOGGER_TOKEN,
|
|
97
|
+
rootBaseUrl: CHILD_APP_RESOLVE_BASE_URL_TOKEN,
|
|
98
|
+
resolutionConfigManager: CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
99
|
+
},
|
|
100
|
+
}),
|
|
101
|
+
provide({
|
|
102
|
+
provide: CHILD_APP_RESOLVE_BASE_URL_TOKEN,
|
|
103
|
+
useFactory: ({ envManager }) => {
|
|
104
|
+
return envManager.get('CHILD_APP_EXTERNAL_URL');
|
|
105
|
+
},
|
|
106
|
+
deps: {
|
|
107
|
+
envManager: ENV_MANAGER_TOKEN,
|
|
108
|
+
},
|
|
109
|
+
}),
|
|
110
|
+
provide({
|
|
111
|
+
provide: CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
112
|
+
scope: Scope.SINGLETON,
|
|
113
|
+
useClass: SingletonDiManager,
|
|
114
|
+
deps: {
|
|
115
|
+
logger: LOGGER_TOKEN,
|
|
116
|
+
appDi: DI_TOKEN,
|
|
117
|
+
loader: CHILD_APP_LOADER_TOKEN,
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
provide({
|
|
121
|
+
provide: CHILD_APP_DI_MANAGER_TOKEN,
|
|
122
|
+
useClass: DiManager,
|
|
123
|
+
deps: {
|
|
124
|
+
appDi: DI_TOKEN,
|
|
125
|
+
loader: CHILD_APP_LOADER_TOKEN,
|
|
126
|
+
singletonDiManager: CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
127
|
+
},
|
|
128
|
+
}),
|
|
129
|
+
provide({
|
|
130
|
+
provide: CHILD_APP_COMMAND_LINE_RUNNER_TOKEN,
|
|
131
|
+
useClass: CommandLineRunner,
|
|
132
|
+
deps: {
|
|
133
|
+
logger: LOGGER_TOKEN,
|
|
134
|
+
rootCommandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
|
|
135
|
+
diManager: CHILD_APP_DI_MANAGER_TOKEN,
|
|
136
|
+
},
|
|
137
|
+
}),
|
|
138
|
+
provide({
|
|
139
|
+
provide: commandLineListTokens.resolvePageDeps,
|
|
140
|
+
useFactory: ({ pageService, preloadManager }) => {
|
|
141
|
+
return async function preloadChildAppByComponent() {
|
|
142
|
+
var _a, _b, _c, _d, _e, _f;
|
|
143
|
+
const [layoutComponent, nestedLayoutComponent, pageComponent] = await Promise.all([
|
|
144
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('layout')),
|
|
145
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('nestedLayout')),
|
|
146
|
+
resolveLazyComponent(pageService.resolveComponentFromConfig('page')),
|
|
147
|
+
]);
|
|
148
|
+
await Promise.all([
|
|
149
|
+
...((_b = (_a = layoutComponent === null || layoutComponent === void 0 ? void 0 : layoutComponent.childApps) === null || _a === void 0 ? void 0 : _a.map((request) => preloadManager.preload(request))) !== null && _b !== void 0 ? _b : []),
|
|
150
|
+
...((_d = (_c = nestedLayoutComponent === null || nestedLayoutComponent === void 0 ? void 0 : nestedLayoutComponent.childApps) === null || _c === void 0 ? void 0 : _c.map((request) => preloadManager.preload(request))) !== null && _d !== void 0 ? _d : []),
|
|
151
|
+
...((_f = (_e = pageComponent === null || pageComponent === void 0 ? void 0 : pageComponent.childApps) === null || _e === void 0 ? void 0 : _e.map((request) => preloadManager.preload(request))) !== null && _f !== void 0 ? _f : []),
|
|
152
|
+
]);
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
multi: true,
|
|
156
|
+
deps: {
|
|
157
|
+
pageService: PAGE_SERVICE_TOKEN,
|
|
158
|
+
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
159
|
+
},
|
|
160
|
+
}),
|
|
161
|
+
provide({
|
|
162
|
+
provide: commandLineListTokens.generatePage,
|
|
163
|
+
multi: true,
|
|
164
|
+
useFactory: ({ preloadManager }) => {
|
|
165
|
+
return function childAppPageRender() {
|
|
166
|
+
preloadManager.pageRender();
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
deps: {
|
|
170
|
+
preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
171
|
+
},
|
|
172
|
+
}),
|
|
173
|
+
provide({
|
|
174
|
+
provide: commandLineListTokens.clear,
|
|
175
|
+
multi: true,
|
|
176
|
+
useFactory: ({ preloader }) => {
|
|
177
|
+
return function childAppClear() {
|
|
178
|
+
return preloader.clearPreloaded();
|
|
179
|
+
};
|
|
180
|
+
},
|
|
181
|
+
deps: {
|
|
182
|
+
preloader: CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
183
|
+
},
|
|
184
|
+
}),
|
|
185
|
+
provide({
|
|
186
|
+
provide: REGISTER_CLEAR_CACHE_TOKEN,
|
|
187
|
+
multi: true,
|
|
188
|
+
useFactory: ({ diManager }) => {
|
|
189
|
+
return (type) => {
|
|
190
|
+
diManager.forEachChildDi((di) => {
|
|
191
|
+
var _a;
|
|
192
|
+
const clearCache = di.get({ token: CLEAR_CACHE_TOKEN, optional: true });
|
|
193
|
+
if (clearCache) {
|
|
194
|
+
// first if child-app has its own CLEAR_CACHE_TOKEN implementation use only it
|
|
195
|
+
return clearCache(type);
|
|
196
|
+
}
|
|
197
|
+
// otherwise pick up any REGISTER_CLEAR_CACHE_TOKEN hooks and call it
|
|
198
|
+
const registeredClearCache = (_a = di.get({
|
|
199
|
+
token: REGISTER_CLEAR_CACHE_TOKEN,
|
|
200
|
+
optional: true,
|
|
201
|
+
})) !== null && _a !== void 0 ? _a : [];
|
|
202
|
+
return Promise.all(registeredClearCache.map((clear) => clear(type)));
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
},
|
|
206
|
+
deps: {
|
|
207
|
+
diManager: CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
208
|
+
},
|
|
209
|
+
}),
|
|
210
|
+
provide({
|
|
211
|
+
provide: EXTEND_RENDER,
|
|
212
|
+
multi: true,
|
|
213
|
+
useFactory: extendRender,
|
|
214
|
+
deps: {
|
|
215
|
+
renderManager: CHILD_APP_RENDER_MANAGER_TOKEN,
|
|
216
|
+
},
|
|
217
|
+
}),
|
|
218
|
+
provide({
|
|
219
|
+
provide: ENV_USED_TOKEN,
|
|
220
|
+
multi: true,
|
|
221
|
+
useValue: [
|
|
222
|
+
{
|
|
223
|
+
key: 'CHILD_APP_DEBUG',
|
|
224
|
+
dehydrate: true,
|
|
225
|
+
optional: true,
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
}),
|
|
229
|
+
];
|
|
230
|
+
|
|
231
|
+
export { sharedProviders };
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var dippy = require('@tinkoff/dippy');
|
|
6
|
+
var core = require('@tramvai/core');
|
|
7
|
+
var tokensChildApp = require('@tramvai/tokens-child-app');
|
|
8
|
+
var tokensCommon = require('@tramvai/tokens-common');
|
|
9
|
+
var tokensRender = require('@tramvai/tokens-render');
|
|
10
|
+
var tokensRouter = require('@tramvai/tokens-router');
|
|
11
|
+
var react = require('@tramvai/react');
|
|
12
|
+
var singletonDi = require('./singletonDi.js');
|
|
13
|
+
var di = require('./di.js');
|
|
14
|
+
var command = require('./command.js');
|
|
15
|
+
var store = require('./store.js');
|
|
16
|
+
var render = require('./render.js');
|
|
17
|
+
var moduleFederation = require('./webpack/moduleFederation.js');
|
|
18
|
+
var resolutionConfigManager = require('./resolutionConfigManager.js');
|
|
19
|
+
|
|
20
|
+
const sharedProviders = [
|
|
21
|
+
core.provide({
|
|
22
|
+
provide: tokensCommon.COMBINE_REDUCERS,
|
|
23
|
+
multi: true,
|
|
24
|
+
useValue: store.ChildAppStore,
|
|
25
|
+
}),
|
|
26
|
+
core.provide({
|
|
27
|
+
provide: core.commandLineListTokens.init,
|
|
28
|
+
multi: true,
|
|
29
|
+
useValue: () => moduleFederation.initModuleFederation(),
|
|
30
|
+
}),
|
|
31
|
+
core.provide({
|
|
32
|
+
provide: tokensChildApp.CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
33
|
+
useClass: resolutionConfigManager.ChildAppResolutionConfigManager,
|
|
34
|
+
deps: {
|
|
35
|
+
configs: { token: tokensChildApp.CHILD_APP_RESOLUTION_CONFIGS_TOKEN, optional: true },
|
|
36
|
+
logger: tokensCommon.LOGGER_TOKEN,
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
core.provide({
|
|
40
|
+
provide: core.commandLineListTokens.resolvePageDeps,
|
|
41
|
+
multi: true,
|
|
42
|
+
useFactory: ({ resolutionConfigManager }) => {
|
|
43
|
+
return async function fallbackResolutionConfigManagerInit() {
|
|
44
|
+
await resolutionConfigManager.init();
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
deps: {
|
|
48
|
+
resolutionConfigManager: tokensChildApp.CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
core.provide({
|
|
52
|
+
provide: tokensChildApp.CHILD_APP_RESOLVE_CONFIG_TOKEN,
|
|
53
|
+
useFactory: ({ envManager, logger, rootBaseUrl, resolutionConfigManager }) => {
|
|
54
|
+
const rawEnv = envManager.get('CHILD_APP_DEBUG');
|
|
55
|
+
const log = logger('child-app:resolve-config');
|
|
56
|
+
const debug = new Map();
|
|
57
|
+
rawEnv === null || rawEnv === void 0 ? void 0 : rawEnv.split(';').reduce((acc, entry) => {
|
|
58
|
+
const [name, url] = entry.split('=');
|
|
59
|
+
return acc.set(name, url);
|
|
60
|
+
}, debug);
|
|
61
|
+
return (request) => {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
const { name, tag = debug.has(name) ? 'debug' : 'latest' } = request;
|
|
64
|
+
const req = { name, tag, version: request.version };
|
|
65
|
+
const config = resolutionConfigManager.resolve(req);
|
|
66
|
+
if (!config) {
|
|
67
|
+
log.error(`Child-app "${name}" with tag "${tag}" has not found`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const { version, baseUrl: configBaseUrl, client, server, css, withoutCss } = config;
|
|
71
|
+
const baseUrl = (_b = (_a = debug.get(name)) !== null && _a !== void 0 ? _a : configBaseUrl) !== null && _b !== void 0 ? _b : rootBaseUrl;
|
|
72
|
+
if (!baseUrl) {
|
|
73
|
+
throw new Error('CHILD_APP_EXTERNAL_URL was not defined');
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
name,
|
|
77
|
+
tag,
|
|
78
|
+
version,
|
|
79
|
+
key: `${name}@${version}`,
|
|
80
|
+
server: {
|
|
81
|
+
entry: `${baseUrl}${name}/${name}_server@${version}.js`,
|
|
82
|
+
...server,
|
|
83
|
+
},
|
|
84
|
+
client: {
|
|
85
|
+
baseUrl: `${baseUrl}${name}/`,
|
|
86
|
+
entry: `${baseUrl}${name}/${name}_client@${version}.js`,
|
|
87
|
+
...client,
|
|
88
|
+
},
|
|
89
|
+
css: withoutCss
|
|
90
|
+
? undefined
|
|
91
|
+
: {
|
|
92
|
+
entry: `${baseUrl}${name}/${name}@${version}.css`,
|
|
93
|
+
...css,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
},
|
|
98
|
+
deps: {
|
|
99
|
+
envManager: tokensCommon.ENV_MANAGER_TOKEN,
|
|
100
|
+
logger: tokensCommon.LOGGER_TOKEN,
|
|
101
|
+
rootBaseUrl: tokensChildApp.CHILD_APP_RESOLVE_BASE_URL_TOKEN,
|
|
102
|
+
resolutionConfigManager: tokensChildApp.CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN,
|
|
103
|
+
},
|
|
104
|
+
}),
|
|
105
|
+
core.provide({
|
|
106
|
+
provide: tokensChildApp.CHILD_APP_RESOLVE_BASE_URL_TOKEN,
|
|
107
|
+
useFactory: ({ envManager }) => {
|
|
108
|
+
return envManager.get('CHILD_APP_EXTERNAL_URL');
|
|
109
|
+
},
|
|
110
|
+
deps: {
|
|
111
|
+
envManager: tokensCommon.ENV_MANAGER_TOKEN,
|
|
112
|
+
},
|
|
113
|
+
}),
|
|
114
|
+
core.provide({
|
|
115
|
+
provide: tokensChildApp.CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
116
|
+
scope: dippy.Scope.SINGLETON,
|
|
117
|
+
useClass: singletonDi.SingletonDiManager,
|
|
118
|
+
deps: {
|
|
119
|
+
logger: tokensCommon.LOGGER_TOKEN,
|
|
120
|
+
appDi: dippy.DI_TOKEN,
|
|
121
|
+
loader: tokensChildApp.CHILD_APP_LOADER_TOKEN,
|
|
122
|
+
},
|
|
123
|
+
}),
|
|
124
|
+
core.provide({
|
|
125
|
+
provide: tokensChildApp.CHILD_APP_DI_MANAGER_TOKEN,
|
|
126
|
+
useClass: di.DiManager,
|
|
127
|
+
deps: {
|
|
128
|
+
appDi: dippy.DI_TOKEN,
|
|
129
|
+
loader: tokensChildApp.CHILD_APP_LOADER_TOKEN,
|
|
130
|
+
singletonDiManager: tokensChildApp.CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
131
|
+
},
|
|
132
|
+
}),
|
|
133
|
+
core.provide({
|
|
134
|
+
provide: tokensChildApp.CHILD_APP_COMMAND_LINE_RUNNER_TOKEN,
|
|
135
|
+
useClass: command.CommandLineRunner,
|
|
136
|
+
deps: {
|
|
137
|
+
logger: tokensCommon.LOGGER_TOKEN,
|
|
138
|
+
rootCommandLineRunner: core.COMMAND_LINE_RUNNER_TOKEN,
|
|
139
|
+
diManager: tokensChildApp.CHILD_APP_DI_MANAGER_TOKEN,
|
|
140
|
+
},
|
|
141
|
+
}),
|
|
142
|
+
core.provide({
|
|
143
|
+
provide: core.commandLineListTokens.resolvePageDeps,
|
|
144
|
+
useFactory: ({ pageService, preloadManager }) => {
|
|
145
|
+
return async function preloadChildAppByComponent() {
|
|
146
|
+
var _a, _b, _c, _d, _e, _f;
|
|
147
|
+
const [layoutComponent, nestedLayoutComponent, pageComponent] = await Promise.all([
|
|
148
|
+
react.resolveLazyComponent(pageService.resolveComponentFromConfig('layout')),
|
|
149
|
+
react.resolveLazyComponent(pageService.resolveComponentFromConfig('nestedLayout')),
|
|
150
|
+
react.resolveLazyComponent(pageService.resolveComponentFromConfig('page')),
|
|
151
|
+
]);
|
|
152
|
+
await Promise.all([
|
|
153
|
+
...((_b = (_a = layoutComponent === null || layoutComponent === void 0 ? void 0 : layoutComponent.childApps) === null || _a === void 0 ? void 0 : _a.map((request) => preloadManager.preload(request))) !== null && _b !== void 0 ? _b : []),
|
|
154
|
+
...((_d = (_c = nestedLayoutComponent === null || nestedLayoutComponent === void 0 ? void 0 : nestedLayoutComponent.childApps) === null || _c === void 0 ? void 0 : _c.map((request) => preloadManager.preload(request))) !== null && _d !== void 0 ? _d : []),
|
|
155
|
+
...((_f = (_e = pageComponent === null || pageComponent === void 0 ? void 0 : pageComponent.childApps) === null || _e === void 0 ? void 0 : _e.map((request) => preloadManager.preload(request))) !== null && _f !== void 0 ? _f : []),
|
|
156
|
+
]);
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
multi: true,
|
|
160
|
+
deps: {
|
|
161
|
+
pageService: tokensRouter.PAGE_SERVICE_TOKEN,
|
|
162
|
+
preloadManager: tokensChildApp.CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
163
|
+
},
|
|
164
|
+
}),
|
|
165
|
+
core.provide({
|
|
166
|
+
provide: core.commandLineListTokens.generatePage,
|
|
167
|
+
multi: true,
|
|
168
|
+
useFactory: ({ preloadManager }) => {
|
|
169
|
+
return function childAppPageRender() {
|
|
170
|
+
preloadManager.pageRender();
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
deps: {
|
|
174
|
+
preloadManager: tokensChildApp.CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
175
|
+
},
|
|
176
|
+
}),
|
|
177
|
+
core.provide({
|
|
178
|
+
provide: core.commandLineListTokens.clear,
|
|
179
|
+
multi: true,
|
|
180
|
+
useFactory: ({ preloader }) => {
|
|
181
|
+
return function childAppClear() {
|
|
182
|
+
return preloader.clearPreloaded();
|
|
183
|
+
};
|
|
184
|
+
},
|
|
185
|
+
deps: {
|
|
186
|
+
preloader: tokensChildApp.CHILD_APP_PRELOAD_MANAGER_TOKEN,
|
|
187
|
+
},
|
|
188
|
+
}),
|
|
189
|
+
core.provide({
|
|
190
|
+
provide: tokensCommon.REGISTER_CLEAR_CACHE_TOKEN,
|
|
191
|
+
multi: true,
|
|
192
|
+
useFactory: ({ diManager }) => {
|
|
193
|
+
return (type) => {
|
|
194
|
+
diManager.forEachChildDi((di) => {
|
|
195
|
+
var _a;
|
|
196
|
+
const clearCache = di.get({ token: tokensCommon.CLEAR_CACHE_TOKEN, optional: true });
|
|
197
|
+
if (clearCache) {
|
|
198
|
+
// first if child-app has its own CLEAR_CACHE_TOKEN implementation use only it
|
|
199
|
+
return clearCache(type);
|
|
200
|
+
}
|
|
201
|
+
// otherwise pick up any REGISTER_CLEAR_CACHE_TOKEN hooks and call it
|
|
202
|
+
const registeredClearCache = (_a = di.get({
|
|
203
|
+
token: tokensCommon.REGISTER_CLEAR_CACHE_TOKEN,
|
|
204
|
+
optional: true,
|
|
205
|
+
})) !== null && _a !== void 0 ? _a : [];
|
|
206
|
+
return Promise.all(registeredClearCache.map((clear) => clear(type)));
|
|
207
|
+
});
|
|
208
|
+
};
|
|
209
|
+
},
|
|
210
|
+
deps: {
|
|
211
|
+
diManager: tokensChildApp.CHILD_APP_SINGLETON_DI_MANAGER_TOKEN,
|
|
212
|
+
},
|
|
213
|
+
}),
|
|
214
|
+
core.provide({
|
|
215
|
+
provide: tokensRender.EXTEND_RENDER,
|
|
216
|
+
multi: true,
|
|
217
|
+
useFactory: render.extendRender,
|
|
218
|
+
deps: {
|
|
219
|
+
renderManager: tokensChildApp.CHILD_APP_RENDER_MANAGER_TOKEN,
|
|
220
|
+
},
|
|
221
|
+
}),
|
|
222
|
+
core.provide({
|
|
223
|
+
provide: tokensCommon.ENV_USED_TOKEN,
|
|
224
|
+
multi: true,
|
|
225
|
+
useValue: [
|
|
226
|
+
{
|
|
227
|
+
key: 'CHILD_APP_DEBUG',
|
|
228
|
+
dehydrate: true,
|
|
229
|
+
optional: true,
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
}),
|
|
233
|
+
];
|
|
234
|
+
|
|
235
|
+
exports.sharedProviders = sharedProviders;
|