@tramvai/module-child-app 3.4.1 → 3.4.5

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.
@@ -1,8 +1,8 @@
1
1
  import { combineValidators, isUrl, endsWith } from '@tinkoff/env-validators';
2
- import { Scope } from '@tinkoff/dippy';
2
+ import { Scope, optional } from '@tinkoff/dippy';
3
3
  import { provide, commandLineListTokens } from '@tramvai/core';
4
4
  import { ENV_USED_TOKEN, LOGGER_TOKEN, CREATE_CACHE_TOKEN, STORE_TOKEN } from '@tramvai/tokens-common';
5
- import { RESOURCES_REGISTRY, RENDER_SLOTS, ResourceType, ResourceSlot, EXTEND_RENDER } from '@tramvai/tokens-render';
5
+ import { RESOURCES_REGISTRY, RENDER_SLOTS, ResourceType, ResourceSlot, REACT_SERVER_RENDER_MODE, EXTEND_RENDER } from '@tramvai/tokens-render';
6
6
  import { CHILD_APP_LOADER_TOKEN, CHILD_APP_STATE_MANAGER_TOKEN, CHILD_APP_DI_MANAGER_TOKEN, CHILD_APP_PRELOAD_MANAGER_TOKEN, CHILD_APP_COMMAND_LINE_RUNNER_TOKEN, CHILD_APP_RESOLUTION_CONFIG_MANAGER_TOKEN, CHILD_APP_RESOLVE_CONFIG_TOKEN, CHILD_APP_RENDER_MANAGER_TOKEN } from '@tramvai/tokens-child-app';
7
7
  import { safeStringify } from '@tramvai/safe-strings';
8
8
  import { ServerLoader } from './loader.es.js';
@@ -81,6 +81,7 @@ const serverProviders = [
81
81
  resolveFullConfig: CHILD_APP_RESOLVE_CONFIG_TOKEN,
82
82
  loader: CHILD_APP_LOADER_TOKEN,
83
83
  preloadManager: CHILD_APP_PRELOAD_MANAGER_TOKEN,
84
+ renderMode: optional(REACT_SERVER_RENDER_MODE),
84
85
  },
85
86
  }),
86
87
  provide({
@@ -85,6 +85,7 @@ const serverProviders = [
85
85
  resolveFullConfig: tokensChildApp.CHILD_APP_RESOLVE_CONFIG_TOKEN,
86
86
  loader: tokensChildApp.CHILD_APP_LOADER_TOKEN,
87
87
  preloadManager: tokensChildApp.CHILD_APP_PRELOAD_MANAGER_TOKEN,
88
+ renderMode: dippy.optional(tokensRender.REACT_SERVER_RENDER_MODE),
88
89
  },
89
90
  }),
90
91
  core.provide({
@@ -1,13 +1,14 @@
1
1
  import type { ExtractDependencyType } from '@tinkoff/dippy';
2
2
  import type { ChildAppDiManager, ChildAppLoader, ChildAppPreloadManager, CHILD_APP_RESOLVE_CONFIG_TOKEN } from '@tramvai/tokens-child-app';
3
3
  import type { LOGGER_TOKEN } from '@tramvai/tokens-common';
4
- import type { PageResource } from '@tramvai/tokens-render';
4
+ import type { PageResource, REACT_SERVER_RENDER_MODE } from '@tramvai/tokens-render';
5
5
  import type { ServerLoader } from './loader';
6
- export declare const registerChildAppRenderSlots: ({ logger, diManager, resolveFullConfig, preloadManager, loader, }: {
6
+ export declare const registerChildAppRenderSlots: ({ logger, diManager, resolveFullConfig, preloadManager, loader, renderMode, }: {
7
7
  logger: ExtractDependencyType<typeof LOGGER_TOKEN>;
8
8
  diManager: ChildAppDiManager;
9
9
  resolveFullConfig: ExtractDependencyType<typeof CHILD_APP_RESOLVE_CONFIG_TOKEN>;
10
10
  preloadManager: ChildAppPreloadManager;
11
11
  loader: ChildAppLoader | ServerLoader;
12
+ renderMode: typeof REACT_SERVER_RENDER_MODE | null;
12
13
  }) => PageResource[];
13
14
  //# sourceMappingURL=render-slots.d.ts.map
@@ -5,16 +5,26 @@ import { resolve } from '@tinkoff/url';
5
5
  import { RENDER_SLOTS, ResourceType, ResourceSlot } from '@tramvai/tokens-render';
6
6
  import { getSharedScope } from '../shared/webpack/moduleFederation.es.js';
7
7
 
8
- const registerChildAppRenderSlots = ({ logger, diManager, resolveFullConfig, preloadManager, loader, }) => {
8
+ const asyncScriptAttrs = {
9
+ defer: null,
10
+ async: 'async',
11
+ };
12
+ const deferScriptAttrs = {
13
+ defer: 'defer',
14
+ async: null,
15
+ };
16
+ const registerChildAppRenderSlots = ({ logger, diManager, resolveFullConfig, preloadManager, loader, renderMode, }) => {
9
17
  const log = logger('child-app:render:slots');
10
18
  const result = [];
19
+ // defer scripts is not suitable for React streaming, we need to ability to run them as early as possible
20
+ // https://github.com/reactwg/react-18/discussions/114
21
+ const scriptTypeAttr = renderMode === 'streaming' ? asyncScriptAttrs : deferScriptAttrs;
11
22
  const addChunk = (entry) => {
12
23
  if (!entry) {
13
24
  return;
14
25
  }
15
26
  const extension = extname(entry);
16
27
  switch (extension) {
17
- // @todo async scripts for streaming
18
28
  case '.js':
19
29
  result.push({
20
30
  type: ResourceType.script,
@@ -22,6 +32,7 @@ const registerChildAppRenderSlots = ({ logger, diManager, resolveFullConfig, pre
22
32
  payload: entry,
23
33
  attrs: {
24
34
  'data-critical': 'true',
35
+ ...scriptTypeAttr,
25
36
  },
26
37
  });
27
38
  break;
@@ -13,16 +13,26 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
13
13
 
14
14
  var flatten__default = /*#__PURE__*/_interopDefaultLegacy(flatten);
15
15
 
16
- const registerChildAppRenderSlots = ({ logger, diManager, resolveFullConfig, preloadManager, loader, }) => {
16
+ const asyncScriptAttrs = {
17
+ defer: null,
18
+ async: 'async',
19
+ };
20
+ const deferScriptAttrs = {
21
+ defer: 'defer',
22
+ async: null,
23
+ };
24
+ const registerChildAppRenderSlots = ({ logger, diManager, resolveFullConfig, preloadManager, loader, renderMode, }) => {
17
25
  const log = logger('child-app:render:slots');
18
26
  const result = [];
27
+ // defer scripts is not suitable for React streaming, we need to ability to run them as early as possible
28
+ // https://github.com/reactwg/react-18/discussions/114
29
+ const scriptTypeAttr = renderMode === 'streaming' ? asyncScriptAttrs : deferScriptAttrs;
19
30
  const addChunk = (entry) => {
20
31
  if (!entry) {
21
32
  return;
22
33
  }
23
34
  const extension = path.extname(entry);
24
35
  switch (extension) {
25
- // @todo async scripts for streaming
26
36
  case '.js':
27
37
  result.push({
28
38
  type: tokensRender.ResourceType.script,
@@ -30,6 +40,7 @@ const registerChildAppRenderSlots = ({ logger, diManager, resolveFullConfig, pre
30
40
  payload: entry,
31
41
  attrs: {
32
42
  'data-critical': 'true',
43
+ ...scriptTypeAttr,
33
44
  },
34
45
  });
35
46
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-child-app",
3
- "version": "3.4.1",
3
+ "version": "3.4.5",
4
4
  "description": "Module for child apps",
5
5
  "browser": {
6
6
  "./lib/server.js": "./lib/browser.js",
@@ -31,21 +31,21 @@
31
31
  "@tinkoff/module-loader-client": "0.5.1",
32
32
  "@tinkoff/module-loader-server": "0.6.1",
33
33
  "@tinkoff/url": "0.9.1",
34
- "@tramvai/child-app-core": "3.4.1",
34
+ "@tramvai/child-app-core": "3.4.5",
35
35
  "@tramvai/safe-strings": "0.6.1",
36
- "@tramvai/tokens-child-app": "3.4.1"
36
+ "@tramvai/tokens-child-app": "3.4.5"
37
37
  },
38
38
  "devDependencies": {},
39
39
  "peerDependencies": {
40
40
  "@tinkoff/dippy": "0.9.1",
41
41
  "@tinkoff/router": "0.3.1",
42
42
  "@tinkoff/utils": "^2.1.2",
43
- "@tramvai/core": "3.4.1",
44
- "@tramvai/state": "3.4.1",
45
- "@tramvai/react": "3.4.1",
46
- "@tramvai/tokens-common": "3.4.1",
47
- "@tramvai/tokens-render": "3.4.1",
48
- "@tramvai/tokens-router": "3.4.1",
43
+ "@tramvai/core": "3.4.5",
44
+ "@tramvai/state": "3.4.5",
45
+ "@tramvai/react": "3.4.5",
46
+ "@tramvai/tokens-common": "3.4.5",
47
+ "@tramvai/tokens-render": "3.4.5",
48
+ "@tramvai/tokens-router": "3.4.5",
49
49
  "react": ">=16.14.0",
50
50
  "react-dom": ">=16.14.0",
51
51
  "object-assign": "^4.1.1",