@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.
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,95 @@
1
+ import flatten from '@tinkoff/utils/array/flatten';
2
+ import { Container } from '@tinkoff/dippy';
3
+ import { walkOfModules, getModuleParameters } from '@tramvai/core';
4
+ import { CHILD_APP_INTERNAL_CONFIG_TOKEN, IS_CHILD_APP_DI_TOKEN, CHILD_APP_INTERNAL_ACTION_TOKEN, CHILD_APP_INTERNAL_ROOT_DI_BORROW_TOKEN } from '@tramvai/tokens-child-app';
5
+ import { getChildProviders } from './child/singletonProviders.es.js';
6
+ import { commonModuleStubs } from './child/stubs.es.js';
7
+ import { validateChildAppProvider } from './child/validate.es.js';
8
+
9
+ class SingletonDiManager {
10
+ constructor({ logger, appDi, loader, }) {
11
+ this.cache = new Map();
12
+ this.log = logger('child-app:singleton-di-manager');
13
+ this.appDi = appDi;
14
+ this.loader = loader;
15
+ }
16
+ getChildDi(config) {
17
+ const { key, tag } = config;
18
+ if (this.cache.has(key)) {
19
+ return this.cache.get(key);
20
+ }
21
+ try {
22
+ const di = this.resolveDi(config);
23
+ if (di && tag !== 'debug') {
24
+ this.cache.set(key, di);
25
+ }
26
+ return di;
27
+ }
28
+ catch (error) {
29
+ this.log.error({
30
+ event: 'resolve-di-fail',
31
+ error,
32
+ config,
33
+ });
34
+ }
35
+ }
36
+ forEachChildDi(cb) {
37
+ this.cache.forEach((di) => {
38
+ cb(di);
39
+ });
40
+ }
41
+ resolveDi(config) {
42
+ const children = this.loader.get(config);
43
+ if (!children) {
44
+ return;
45
+ }
46
+ const di = new Container([
47
+ {
48
+ provide: CHILD_APP_INTERNAL_CONFIG_TOKEN,
49
+ useValue: config,
50
+ },
51
+ {
52
+ provide: IS_CHILD_APP_DI_TOKEN,
53
+ useValue: true,
54
+ },
55
+ ], this.appDi);
56
+ const { modules = [], providers = [], actions = [] } = children;
57
+ // add providers on the Singleton Level to make it possible to reuse providers from the root-app Container
58
+ const childProviders = getChildProviders(this.appDi);
59
+ childProviders.forEach((provider) => {
60
+ di.register(provider);
61
+ });
62
+ const resolvedModules = walkOfModules(modules);
63
+ resolvedModules.forEach((mod) => {
64
+ const moduleParameters = getModuleParameters(mod);
65
+ moduleParameters.providers.forEach((provider) => {
66
+ di.register(provider);
67
+ });
68
+ });
69
+ providers.forEach((provider) => {
70
+ if (process.env.NODE_ENV === 'development') {
71
+ validateChildAppProvider(provider);
72
+ }
73
+ di.register(provider);
74
+ });
75
+ di.register({
76
+ provide: CHILD_APP_INTERNAL_ACTION_TOKEN,
77
+ multi: true,
78
+ useValue: actions,
79
+ });
80
+ const borrowTokens = di.get({ token: CHILD_APP_INTERNAL_ROOT_DI_BORROW_TOKEN, optional: true });
81
+ if (borrowTokens) {
82
+ flatten(borrowTokens).forEach((token) => {
83
+ di.borrowToken(this.appDi, token);
84
+ });
85
+ }
86
+ commonModuleStubs.forEach((stub) => {
87
+ if (!di.has(stub.provide)) {
88
+ di.register(stub);
89
+ }
90
+ });
91
+ return di;
92
+ }
93
+ }
94
+
95
+ export { SingletonDiManager };
@@ -0,0 +1,103 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var flatten = require('@tinkoff/utils/array/flatten');
6
+ var dippy = require('@tinkoff/dippy');
7
+ var core = require('@tramvai/core');
8
+ var tokensChildApp = require('@tramvai/tokens-child-app');
9
+ var singletonProviders = require('./child/singletonProviders.js');
10
+ var stubs = require('./child/stubs.js');
11
+ var validate = require('./child/validate.js');
12
+
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ var flatten__default = /*#__PURE__*/_interopDefaultLegacy(flatten);
16
+
17
+ class SingletonDiManager {
18
+ constructor({ logger, appDi, loader, }) {
19
+ this.cache = new Map();
20
+ this.log = logger('child-app:singleton-di-manager');
21
+ this.appDi = appDi;
22
+ this.loader = loader;
23
+ }
24
+ getChildDi(config) {
25
+ const { key, tag } = config;
26
+ if (this.cache.has(key)) {
27
+ return this.cache.get(key);
28
+ }
29
+ try {
30
+ const di = this.resolveDi(config);
31
+ if (di && tag !== 'debug') {
32
+ this.cache.set(key, di);
33
+ }
34
+ return di;
35
+ }
36
+ catch (error) {
37
+ this.log.error({
38
+ event: 'resolve-di-fail',
39
+ error,
40
+ config,
41
+ });
42
+ }
43
+ }
44
+ forEachChildDi(cb) {
45
+ this.cache.forEach((di) => {
46
+ cb(di);
47
+ });
48
+ }
49
+ resolveDi(config) {
50
+ const children = this.loader.get(config);
51
+ if (!children) {
52
+ return;
53
+ }
54
+ const di = new dippy.Container([
55
+ {
56
+ provide: tokensChildApp.CHILD_APP_INTERNAL_CONFIG_TOKEN,
57
+ useValue: config,
58
+ },
59
+ {
60
+ provide: tokensChildApp.IS_CHILD_APP_DI_TOKEN,
61
+ useValue: true,
62
+ },
63
+ ], this.appDi);
64
+ const { modules = [], providers = [], actions = [] } = children;
65
+ // add providers on the Singleton Level to make it possible to reuse providers from the root-app Container
66
+ const childProviders = singletonProviders.getChildProviders(this.appDi);
67
+ childProviders.forEach((provider) => {
68
+ di.register(provider);
69
+ });
70
+ const resolvedModules = core.walkOfModules(modules);
71
+ resolvedModules.forEach((mod) => {
72
+ const moduleParameters = core.getModuleParameters(mod);
73
+ moduleParameters.providers.forEach((provider) => {
74
+ di.register(provider);
75
+ });
76
+ });
77
+ providers.forEach((provider) => {
78
+ if (process.env.NODE_ENV === 'development') {
79
+ validate.validateChildAppProvider(provider);
80
+ }
81
+ di.register(provider);
82
+ });
83
+ di.register({
84
+ provide: tokensChildApp.CHILD_APP_INTERNAL_ACTION_TOKEN,
85
+ multi: true,
86
+ useValue: actions,
87
+ });
88
+ const borrowTokens = di.get({ token: tokensChildApp.CHILD_APP_INTERNAL_ROOT_DI_BORROW_TOKEN, optional: true });
89
+ if (borrowTokens) {
90
+ flatten__default["default"](borrowTokens).forEach((token) => {
91
+ di.borrowToken(this.appDi, token);
92
+ });
93
+ }
94
+ stubs.commonModuleStubs.forEach((stub) => {
95
+ if (!di.has(stub.provide)) {
96
+ di.register(stub);
97
+ }
98
+ });
99
+ return di;
100
+ }
101
+ }
102
+
103
+ exports.SingletonDiManager = SingletonDiManager;
@@ -0,0 +1,13 @@
1
+ import { createEvent, createReducer } from '@tramvai/state';
2
+
3
+ const setPreloaded = createEvent('child-app set preloaded');
4
+ const initialState = {
5
+ preloaded: [],
6
+ };
7
+ const ChildAppStore = createReducer('child-app', initialState).on(setPreloaded, (_, preloaded) => {
8
+ return {
9
+ preloaded,
10
+ };
11
+ });
12
+
13
+ export { ChildAppStore, setPreloaded };
@@ -0,0 +1,13 @@
1
+ import { createEvent, createReducer } from '@tramvai/state';
2
+
3
+ const setPreloaded = createEvent('child-app set preloaded');
4
+ const initialState = {
5
+ preloaded: [],
6
+ };
7
+ const ChildAppStore = createReducer('child-app', initialState).on(setPreloaded, (_, preloaded) => {
8
+ return {
9
+ preloaded,
10
+ };
11
+ });
12
+
13
+ export { ChildAppStore, setPreloaded };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var state = require('@tramvai/state');
6
+
7
+ const setPreloaded = state.createEvent('child-app set preloaded');
8
+ const initialState = {
9
+ preloaded: [],
10
+ };
11
+ const ChildAppStore = state.createReducer('child-app', initialState).on(setPreloaded, (_, preloaded) => {
12
+ return {
13
+ preloaded,
14
+ };
15
+ });
16
+
17
+ exports.ChildAppStore = ChildAppStore;
18
+ exports.setPreloaded = setPreloaded;
@@ -0,0 +1,49 @@
1
+ const initModuleFederation = async (container, scope = 'default') => {
2
+ if (container) {
3
+ await container.init(__webpack_share_scopes__[scope]);
4
+ return;
5
+ }
6
+ await __webpack_init_sharing__('default');
7
+ // currently module federation has problems with external modules
8
+ // and unfourtanelly react and react-dom are marked as externals in defaults
9
+ // fill sharedScope manually here
10
+ const shareScope = __webpack_share_scopes__[scope];
11
+ if (!shareScope.react) {
12
+ shareScope.react = {
13
+ '*': {
14
+ get: () => () => require('react'),
15
+ from: 'tramvai-mf-fix',
16
+ eager: true,
17
+ loaded: true,
18
+ },
19
+ };
20
+ }
21
+ if (!shareScope['react-dom']) {
22
+ shareScope['react-dom'] = {
23
+ '*': {
24
+ get: () => () => require('react-dom'),
25
+ from: 'tramvai-mf-fix',
26
+ eager: true,
27
+ loaded: true,
28
+ },
29
+ };
30
+ }
31
+ if (process.env.NODE_ENV === 'development') {
32
+ // explicitly add react/jsx-runtime to support production builds of the child-app in dev mode
33
+ if (!shareScope['react/jsx-runtime']) {
34
+ shareScope['react/jsx-runtime'] = {
35
+ '*': {
36
+ get: () => () => require('react/jsx-runtime'),
37
+ from: 'tramvai-mf-fix',
38
+ eager: true,
39
+ loaded: true,
40
+ },
41
+ };
42
+ }
43
+ }
44
+ };
45
+ const getModuleFederation = async (container, name = 'entry') => {
46
+ return container.get(name);
47
+ };
48
+
49
+ export { getModuleFederation, initModuleFederation };
@@ -0,0 +1,49 @@
1
+ const initModuleFederation = async (container, scope = 'default') => {
2
+ if (container) {
3
+ await container.init(__webpack_share_scopes__[scope]);
4
+ return;
5
+ }
6
+ await __webpack_init_sharing__('default');
7
+ // currently module federation has problems with external modules
8
+ // and unfourtanelly react and react-dom are marked as externals in defaults
9
+ // fill sharedScope manually here
10
+ const shareScope = __webpack_share_scopes__[scope];
11
+ if (!shareScope.react) {
12
+ shareScope.react = {
13
+ '*': {
14
+ get: () => () => require('react'),
15
+ from: 'tramvai-mf-fix',
16
+ eager: true,
17
+ loaded: true,
18
+ },
19
+ };
20
+ }
21
+ if (!shareScope['react-dom']) {
22
+ shareScope['react-dom'] = {
23
+ '*': {
24
+ get: () => () => require('react-dom'),
25
+ from: 'tramvai-mf-fix',
26
+ eager: true,
27
+ loaded: true,
28
+ },
29
+ };
30
+ }
31
+ if (process.env.NODE_ENV === 'development') {
32
+ // explicitly add react/jsx-runtime to support production builds of the child-app in dev mode
33
+ if (!shareScope['react/jsx-runtime']) {
34
+ shareScope['react/jsx-runtime'] = {
35
+ '*': {
36
+ get: () => () => require('react/jsx-runtime'),
37
+ from: 'tramvai-mf-fix',
38
+ eager: true,
39
+ loaded: true,
40
+ },
41
+ };
42
+ }
43
+ }
44
+ };
45
+ const getModuleFederation = async (container, name = 'entry') => {
46
+ return container.get(name);
47
+ };
48
+
49
+ export { getModuleFederation, initModuleFederation };
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const initModuleFederation = async (container, scope = 'default') => {
6
+ if (container) {
7
+ await container.init(__webpack_share_scopes__[scope]);
8
+ return;
9
+ }
10
+ await __webpack_init_sharing__('default');
11
+ // currently module federation has problems with external modules
12
+ // and unfourtanelly react and react-dom are marked as externals in defaults
13
+ // fill sharedScope manually here
14
+ const shareScope = __webpack_share_scopes__[scope];
15
+ if (!shareScope.react) {
16
+ shareScope.react = {
17
+ '*': {
18
+ get: () => () => require('react'),
19
+ from: 'tramvai-mf-fix',
20
+ eager: true,
21
+ loaded: true,
22
+ },
23
+ };
24
+ }
25
+ if (!shareScope['react-dom']) {
26
+ shareScope['react-dom'] = {
27
+ '*': {
28
+ get: () => () => require('react-dom'),
29
+ from: 'tramvai-mf-fix',
30
+ eager: true,
31
+ loaded: true,
32
+ },
33
+ };
34
+ }
35
+ if (process.env.NODE_ENV === 'development') {
36
+ // explicitly add react/jsx-runtime to support production builds of the child-app in dev mode
37
+ if (!shareScope['react/jsx-runtime']) {
38
+ shareScope['react/jsx-runtime'] = {
39
+ '*': {
40
+ get: () => () => require('react/jsx-runtime'),
41
+ from: 'tramvai-mf-fix',
42
+ eager: true,
43
+ loaded: true,
44
+ },
45
+ };
46
+ }
47
+ }
48
+ };
49
+ const getModuleFederation = async (container, name = 'entry') => {
50
+ return container.get(name);
51
+ };
52
+
53
+ exports.getModuleFederation = getModuleFederation;
54
+ exports.initModuleFederation = initModuleFederation;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-child-app",
3
- "version": "2.70.1",
3
+ "version": "2.72.3",
4
4
  "description": "Module for child apps",
5
5
  "browser": {
6
6
  "./lib/server.js": "./lib/browser.js",
@@ -20,32 +20,31 @@
20
20
  "url": "git@github.com:Tinkoff/tramvai.git"
21
21
  },
22
22
  "scripts": {
23
- "build": "tramvai-build --for-publish",
24
- "watch": "tsc -w",
25
- "build-for-publish": "true"
23
+ "build": "tramvai-build --forPublish --preserveModules",
24
+ "watch": "tsc -w"
26
25
  },
27
26
  "publishConfig": {
28
27
  "registry": "https://registry.npmjs.org/"
29
28
  },
30
29
  "dependencies": {
31
- "@tinkoff/env-validators": "0.1.4",
32
- "@tinkoff/module-loader-client": "0.4.4",
33
- "@tinkoff/module-loader-server": "0.5.6",
34
- "@tramvai/child-app-core": "2.70.1",
35
- "@tramvai/module-router": "2.70.1",
36
- "@tramvai/safe-strings": "0.5.6",
37
- "@tramvai/tokens-child-app": "2.70.1"
30
+ "@tinkoff/env-validators": "0.1.5",
31
+ "@tinkoff/module-loader-client": "0.4.5",
32
+ "@tinkoff/module-loader-server": "0.5.7",
33
+ "@tramvai/child-app-core": "2.72.3",
34
+ "@tramvai/module-router": "2.72.3",
35
+ "@tramvai/safe-strings": "0.5.7",
36
+ "@tramvai/tokens-child-app": "2.72.3"
38
37
  },
39
38
  "devDependencies": {},
40
39
  "peerDependencies": {
41
- "@tinkoff/dippy": "0.8.12",
40
+ "@tinkoff/dippy": "0.8.13",
42
41
  "@tinkoff/utils": "^2.1.2",
43
- "@tramvai/core": "2.70.1",
44
- "@tramvai/state": "2.70.1",
45
- "@tramvai/react": "2.70.1",
46
- "@tramvai/tokens-common": "2.70.1",
47
- "@tramvai/tokens-render": "2.70.1",
48
- "@tramvai/tokens-router": "2.70.1",
42
+ "@tramvai/core": "2.72.3",
43
+ "@tramvai/state": "2.72.3",
44
+ "@tramvai/react": "2.72.3",
45
+ "@tramvai/tokens-common": "2.72.3",
46
+ "@tramvai/tokens-render": "2.72.3",
47
+ "@tramvai/tokens-router": "2.72.3",
49
48
  "react": ">=16.14.0",
50
49
  "react-dom": ">=16.14.0",
51
50
  "object-assign": "^4.1.1",