@tramvai/module-child-app 2.70.0 → 2.72.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.
Files changed (73) hide show
  1. package/lib/browser/child/singletonProviders.browser.js +91 -0
  2. package/lib/browser/loader.browser.js +64 -0
  3. package/lib/browser/preload.browser.js +115 -0
  4. package/lib/browser/providers.browser.js +113 -0
  5. package/lib/browser/render.browser.js +28 -0
  6. package/lib/browser/runCommand.browser.js +8 -0
  7. package/lib/browser.browser.js +17 -0
  8. package/lib/server/child/singletonProviders.es.js +24 -0
  9. package/lib/server/child/singletonProviders.js +32 -0
  10. package/lib/server/loader.es.js +48 -0
  11. package/lib/server/loader.js +52 -0
  12. package/lib/server/preload.es.js +77 -0
  13. package/lib/server/preload.js +81 -0
  14. package/lib/server/providers.es.js +131 -0
  15. package/lib/server/providers.js +135 -0
  16. package/lib/server/render-slots.es.js +50 -0
  17. package/lib/server/render-slots.js +54 -0
  18. package/lib/server/render.es.js +39 -0
  19. package/lib/server/render.js +43 -0
  20. package/lib/server/stateManager.es.js +49 -0
  21. package/lib/server/stateManager.js +54 -0
  22. package/lib/server.browser.js +2 -1082
  23. package/lib/server.es.js +5 -1067
  24. package/lib/server.js +5 -1072
  25. package/lib/shared/child/providers.browser.js +36 -0
  26. package/lib/shared/child/providers.es.js +36 -0
  27. package/lib/shared/child/providers.js +44 -0
  28. package/lib/shared/child/singletonProviders.browser.js +24 -0
  29. package/lib/shared/child/singletonProviders.es.js +24 -0
  30. package/lib/shared/child/singletonProviders.js +28 -0
  31. package/lib/shared/child/stubs.browser.js +18 -0
  32. package/lib/shared/child/stubs.es.js +18 -0
  33. package/lib/shared/child/stubs.js +22 -0
  34. package/lib/shared/child/validate.browser.js +11 -0
  35. package/lib/shared/child/validate.es.js +11 -0
  36. package/lib/shared/child/validate.js +15 -0
  37. package/lib/shared/command.browser.js +38 -0
  38. package/lib/shared/command.es.js +38 -0
  39. package/lib/shared/command.js +42 -0
  40. package/lib/shared/constants.browser.js +3 -0
  41. package/lib/shared/constants.es.js +3 -0
  42. package/lib/shared/constants.js +7 -0
  43. package/lib/shared/di.browser.js +44 -0
  44. package/lib/shared/di.es.js +44 -0
  45. package/lib/shared/di.js +48 -0
  46. package/lib/shared/loader.browser.js +7 -0
  47. package/lib/shared/loader.es.js +7 -0
  48. package/lib/shared/loader.js +11 -0
  49. package/lib/shared/providers.browser.js +231 -0
  50. package/lib/shared/providers.es.js +231 -0
  51. package/lib/shared/providers.js +235 -0
  52. package/lib/shared/react/component.browser.js +104 -0
  53. package/lib/shared/react/component.es.js +104 -0
  54. package/lib/shared/react/component.js +112 -0
  55. package/lib/shared/react/render-context.browser.js +5 -0
  56. package/lib/shared/react/render-context.es.js +5 -0
  57. package/lib/shared/react/render-context.js +9 -0
  58. package/lib/shared/render.browser.js +10 -0
  59. package/lib/shared/render.es.js +10 -0
  60. package/lib/shared/render.js +14 -0
  61. package/lib/shared/resolutionConfigManager.browser.js +58 -0
  62. package/lib/shared/resolutionConfigManager.es.js +58 -0
  63. package/lib/shared/resolutionConfigManager.js +67 -0
  64. package/lib/shared/singletonDi.browser.js +95 -0
  65. package/lib/shared/singletonDi.es.js +95 -0
  66. package/lib/shared/singletonDi.js +103 -0
  67. package/lib/shared/store.browser.js +13 -0
  68. package/lib/shared/store.es.js +13 -0
  69. package/lib/shared/store.js +18 -0
  70. package/lib/shared/webpack/moduleFederation.browser.js +49 -0
  71. package/lib/shared/webpack/moduleFederation.es.js +49 -0
  72. package/lib/shared/webpack/moduleFederation.js +54 -0
  73. 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;