@tramvai/module-child-app 7.11.1 → 7.16.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.
@@ -175,7 +175,16 @@ class PreloadManager {
175
175
  await this.run('customer', config);
176
176
  })());
177
177
  });
178
- await Promise.allSettled(promises);
178
+ const childAppInitResult = await Promise.allSettled(promises);
179
+ const errors = childAppInitResult
180
+ .map((promise) => (promise.status === 'rejected' ? promise.reason : undefined))
181
+ .filter(Boolean);
182
+ if (errors.length === 1) {
183
+ throw errors[0];
184
+ }
185
+ else if (errors.length > 1) {
186
+ throw new AggregateError(errors);
187
+ }
179
188
  }
180
189
  pageRender() {
181
190
  this.pageHasRendered = true;
@@ -72,10 +72,16 @@ const browserProviders = [
72
72
  isSpaNavigation = true;
73
73
  return preloader.runPreloaded().catch((error) => {
74
74
  const log = logger('child-app:run-preloaded');
75
- log.error({
75
+ const errorForLog = {
76
76
  event: 'client-failed',
77
77
  error,
78
- });
78
+ };
79
+ // TODO: TCORE-5465
80
+ if (error instanceof AggregateError) {
81
+ [errorForLog.error] = error.errors;
82
+ errorForLog.otherErrors = error.errors.slice(1);
83
+ }
84
+ log.error(errorForLog);
79
85
  });
80
86
  };
81
87
  },
@@ -128,10 +128,16 @@ const serverProviders = [
128
128
  return function childAppRunPreloaded() {
129
129
  return preloader.runPreloaded().catch((error) => {
130
130
  const log = logger('child-app:run-preloaded');
131
- log.error({
131
+ const errorForLog = {
132
132
  event: 'server-failed',
133
133
  error,
134
- });
134
+ };
135
+ // TODO: TCORE-5465
136
+ if (error instanceof AggregateError) {
137
+ [errorForLog.error] = error.errors;
138
+ errorForLog.otherErrors = error.errors.slice(1);
139
+ }
140
+ log.error(errorForLog);
135
141
  });
136
142
  };
137
143
  },
@@ -132,10 +132,16 @@ const serverProviders = [
132
132
  return function childAppRunPreloaded() {
133
133
  return preloader.runPreloaded().catch((error) => {
134
134
  const log = logger('child-app:run-preloaded');
135
- log.error({
135
+ const errorForLog = {
136
136
  event: 'server-failed',
137
137
  error,
138
- });
138
+ };
139
+ // TODO: TCORE-5465
140
+ if (error instanceof AggregateError) {
141
+ [errorForLog.error] = error.errors;
142
+ errorForLog.otherErrors = error.errors.slice(1);
143
+ }
144
+ log.error(errorForLog);
139
145
  });
140
146
  };
141
147
  },
@@ -88,20 +88,34 @@ async () => {
88
88
  preloadedConfigs.forEach((config) => {
89
89
  const stats = 'getStats' in loader ? loader.getStats(config) : undefined;
90
90
  const di = diManager.getChildDi(config);
91
- const loadableAssets = di?.get(CHILD_APP_INTERNAL_CHUNK_EXTRACTOR)?.getMainAssets();
92
91
  addChunk(config.client.entry, true);
93
92
  if (config.css) {
94
93
  addChunk(config.css.entry);
95
94
  }
96
- loadableAssets
97
- ?.map((asset) => resolve(config.client.baseUrl, asset.filename))
98
- .filter((file) => {
99
- // filter entry js and css chunks
100
- return config.client.entry !== file && config.css?.entry !== file;
101
- })
102
- .forEach((file) => {
103
- addChunk(file);
104
- });
95
+ // chunkExtractor.getMainAssets() can throw an error if loadable stats is not available
96
+ try {
97
+ const loadableAssets = di?.get(CHILD_APP_INTERNAL_CHUNK_EXTRACTOR)?.getMainAssets();
98
+ loadableAssets
99
+ ?.map((asset) => resolve(config.client.baseUrl, asset.filename))
100
+ .filter((file) => {
101
+ // filter entry js and css chunks
102
+ return config.client.entry !== file && config.css?.entry !== file;
103
+ })
104
+ .forEach((file) => {
105
+ addChunk(file);
106
+ });
107
+ }
108
+ catch (error) {
109
+ log[config.client.statsLoadable ? 'warn' : 'info']({
110
+ event: 'loadable-assets-failed',
111
+ error,
112
+ childApp: {
113
+ name: config.name,
114
+ version: config.version,
115
+ tag: config.tag,
116
+ },
117
+ });
118
+ }
105
119
  if (stats && stats.federatedModules) {
106
120
  for (const federatedModule of stats.federatedModules) {
107
121
  // entries are duplicated in the `exposes` field of federated stats for some reason
@@ -96,20 +96,34 @@ async () => {
96
96
  preloadedConfigs.forEach((config) => {
97
97
  const stats = 'getStats' in loader ? loader.getStats(config) : undefined;
98
98
  const di = diManager.getChildDi(config);
99
- const loadableAssets = di?.get(tokensChildApp.CHILD_APP_INTERNAL_CHUNK_EXTRACTOR)?.getMainAssets();
100
99
  addChunk(config.client.entry, true);
101
100
  if (config.css) {
102
101
  addChunk(config.css.entry);
103
102
  }
104
- loadableAssets
105
- ?.map((asset) => url.resolve(config.client.baseUrl, asset.filename))
106
- .filter((file) => {
107
- // filter entry js and css chunks
108
- return config.client.entry !== file && config.css?.entry !== file;
109
- })
110
- .forEach((file) => {
111
- addChunk(file);
112
- });
103
+ // chunkExtractor.getMainAssets() can throw an error if loadable stats is not available
104
+ try {
105
+ const loadableAssets = di?.get(tokensChildApp.CHILD_APP_INTERNAL_CHUNK_EXTRACTOR)?.getMainAssets();
106
+ loadableAssets
107
+ ?.map((asset) => url.resolve(config.client.baseUrl, asset.filename))
108
+ .filter((file) => {
109
+ // filter entry js and css chunks
110
+ return config.client.entry !== file && config.css?.entry !== file;
111
+ })
112
+ .forEach((file) => {
113
+ addChunk(file);
114
+ });
115
+ }
116
+ catch (error) {
117
+ log[config.client.statsLoadable ? 'warn' : 'info']({
118
+ event: 'loadable-assets-failed',
119
+ error,
120
+ childApp: {
121
+ name: config.name,
122
+ version: config.version,
123
+ tag: config.tag,
124
+ },
125
+ });
126
+ }
113
127
  if (stats && stats.federatedModules) {
114
128
  for (const federatedModule of stats.federatedModules) {
115
129
  // entries are duplicated in the `exposes` field of federated stats for some reason
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-child-app",
3
- "version": "7.11.1",
3
+ "version": "7.16.0",
4
4
  "description": "Module for child apps",
5
5
  "browser": {
6
6
  "./lib/server.es.js": "./lib/browser.js",
@@ -35,22 +35,22 @@
35
35
  "@tinkoff/module-loader-client": "0.9.1",
36
36
  "@tinkoff/module-loader-server": "0.10.3",
37
37
  "@tinkoff/url": "0.13.1",
38
- "@tramvai/child-app-core": "7.11.1",
39
- "@tramvai/module-common": "7.11.1",
40
- "@tramvai/module-router": "7.11.1",
38
+ "@tramvai/child-app-core": "7.16.0",
39
+ "@tramvai/module-common": "7.16.0",
40
+ "@tramvai/module-router": "7.16.0",
41
41
  "@tramvai/safe-strings": "0.10.1",
42
- "@tramvai/tokens-child-app": "7.11.1"
42
+ "@tramvai/tokens-child-app": "7.16.0"
43
43
  },
44
44
  "peerDependencies": {
45
- "@tinkoff/dippy": "0.13.2",
46
- "@tinkoff/router": "0.7.33",
45
+ "@tinkoff/dippy": "^1.0.0",
46
+ "@tinkoff/router": "0.7.55",
47
47
  "@tinkoff/utils": "^2.1.2",
48
- "@tramvai/core": "7.11.1",
49
- "@tramvai/react": "7.11.1",
50
- "@tramvai/state": "7.11.1",
51
- "@tramvai/tokens-common": "7.11.1",
52
- "@tramvai/tokens-render": "7.11.1",
53
- "@tramvai/tokens-router": "7.11.1",
48
+ "@tramvai/core": "7.16.0",
49
+ "@tramvai/react": "7.16.0",
50
+ "@tramvai/state": "7.16.0",
51
+ "@tramvai/tokens-common": "7.16.0",
52
+ "@tramvai/tokens-render": "7.16.0",
53
+ "@tramvai/tokens-router": "7.16.0",
54
54
  "object-assign": "^4.1.1",
55
55
  "react": ">=16.14.0",
56
56
  "react-dom": ">=16.14.0",