@dr.pogodin/react-utils 1.46.2 → 1.47.0-alpha.2

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 (241) hide show
  1. package/babel.config.js +1 -0
  2. package/babel.libweb.config.js +16 -0
  3. package/bin/build.js +16 -10
  4. package/bin/setup.js +11 -8
  5. package/build/development/client/index.js.map +1 -1
  6. package/build/development/index.js +9 -4
  7. package/build/development/index.js.map +1 -1
  8. package/build/development/server/Cache.js.map +1 -1
  9. package/build/development/server/index.js +13 -8
  10. package/build/development/server/index.js.map +1 -1
  11. package/build/development/server/renderer.js +15 -8
  12. package/build/development/server/renderer.js.map +1 -1
  13. package/build/development/server/server.js +18 -15
  14. package/build/development/server/server.js.map +1 -1
  15. package/build/development/shared/components/Button/index.js +6 -6
  16. package/build/development/shared/components/Button/index.js.map +1 -1
  17. package/build/development/shared/components/Checkbox/index.js +8 -8
  18. package/build/development/shared/components/Checkbox/index.js.map +1 -1
  19. package/build/development/shared/components/GenericLink/index.js +5 -1
  20. package/build/development/shared/components/GenericLink/index.js.map +1 -1
  21. package/build/development/shared/components/Input/index.js +10 -9
  22. package/build/development/shared/components/Input/index.js.map +1 -1
  23. package/build/development/shared/components/Link.js.map +1 -1
  24. package/build/development/shared/components/Modal/index.js +8 -6
  25. package/build/development/shared/components/Modal/index.js.map +1 -1
  26. package/build/development/shared/components/NavLink.js.map +1 -1
  27. package/build/development/shared/components/PageLayout/index.js +6 -6
  28. package/build/development/shared/components/PageLayout/index.js.map +1 -1
  29. package/build/development/shared/components/TextArea/index.js +13 -9
  30. package/build/development/shared/components/TextArea/index.js.map +1 -1
  31. package/build/development/shared/components/Throbber/index.js +6 -6
  32. package/build/development/shared/components/Throbber/index.js.map +1 -1
  33. package/build/development/shared/components/WithTooltip/Tooltip.js +1 -0
  34. package/build/development/shared/components/WithTooltip/Tooltip.js.map +1 -1
  35. package/build/development/shared/components/WithTooltip/index.js +7 -7
  36. package/build/development/shared/components/WithTooltip/index.js.map +1 -1
  37. package/build/development/shared/components/YouTubeVideo/index.js +9 -9
  38. package/build/development/shared/components/YouTubeVideo/index.js.map +1 -1
  39. package/build/development/shared/components/index.js.map +1 -1
  40. package/build/development/shared/components/selectors/CustomDropdown/Options/index.js +1 -1
  41. package/build/development/shared/components/selectors/CustomDropdown/Options/index.js.map +1 -1
  42. package/build/development/shared/components/selectors/CustomDropdown/index.js +11 -11
  43. package/build/development/shared/components/selectors/CustomDropdown/index.js.map +1 -1
  44. package/build/development/shared/components/selectors/NativeDropdown/index.js +12 -12
  45. package/build/development/shared/components/selectors/NativeDropdown/index.js.map +1 -1
  46. package/build/development/shared/components/selectors/Switch/index.js +7 -7
  47. package/build/development/shared/components/selectors/Switch/index.js.map +1 -1
  48. package/build/development/shared/utils/config.js +5 -6
  49. package/build/development/shared/utils/config.js.map +1 -1
  50. package/build/development/shared/utils/globalState.js.map +1 -1
  51. package/build/development/shared/utils/index.js.map +1 -1
  52. package/build/development/shared/utils/jest/E2eSsrEnv.js +14 -10
  53. package/build/development/shared/utils/jest/E2eSsrEnv.js.map +1 -1
  54. package/build/development/shared/utils/splitComponent.js +18 -21
  55. package/build/development/shared/utils/splitComponent.js.map +1 -1
  56. package/build/development/shared/utils/time.js.map +1 -1
  57. package/build/production/client/index.js.map +1 -1
  58. package/build/production/index.js +5 -3
  59. package/build/production/index.js.map +1 -1
  60. package/build/production/server/Cache.js.map +1 -1
  61. package/build/production/server/index.js +5 -5
  62. package/build/production/server/index.js.map +1 -1
  63. package/build/production/server/renderer.js +7 -7
  64. package/build/production/server/renderer.js.map +1 -1
  65. package/build/production/server/server.js +5 -7
  66. package/build/production/server/server.js.map +1 -1
  67. package/build/production/shared/components/Button/index.js +1 -1
  68. package/build/production/shared/components/Button/index.js.map +1 -1
  69. package/build/production/shared/components/Checkbox/index.js +1 -1
  70. package/build/production/shared/components/Checkbox/index.js.map +1 -1
  71. package/build/production/shared/components/GenericLink/index.js +2 -2
  72. package/build/production/shared/components/GenericLink/index.js.map +1 -1
  73. package/build/production/shared/components/Input/index.js +1 -1
  74. package/build/production/shared/components/Input/index.js.map +1 -1
  75. package/build/production/shared/components/Link.js.map +1 -1
  76. package/build/production/shared/components/Modal/index.js +1 -1
  77. package/build/production/shared/components/Modal/index.js.map +1 -1
  78. package/build/production/shared/components/NavLink.js.map +1 -1
  79. package/build/production/shared/components/PageLayout/index.js +1 -1
  80. package/build/production/shared/components/PageLayout/index.js.map +1 -1
  81. package/build/production/shared/components/TextArea/index.js +1 -1
  82. package/build/production/shared/components/TextArea/index.js.map +1 -1
  83. package/build/production/shared/components/Throbber/index.js +1 -1
  84. package/build/production/shared/components/Throbber/index.js.map +1 -1
  85. package/build/production/shared/components/WithTooltip/Tooltip.js.map +1 -1
  86. package/build/production/shared/components/WithTooltip/index.js +1 -1
  87. package/build/production/shared/components/WithTooltip/index.js.map +1 -1
  88. package/build/production/shared/components/YouTubeVideo/index.js +1 -1
  89. package/build/production/shared/components/YouTubeVideo/index.js.map +1 -1
  90. package/build/production/shared/components/index.js.map +1 -1
  91. package/build/production/shared/components/selectors/CustomDropdown/Options/index.js +1 -1
  92. package/build/production/shared/components/selectors/CustomDropdown/Options/index.js.map +1 -1
  93. package/build/production/shared/components/selectors/CustomDropdown/index.js +1 -1
  94. package/build/production/shared/components/selectors/CustomDropdown/index.js.map +1 -1
  95. package/build/production/shared/components/selectors/NativeDropdown/index.js +1 -1
  96. package/build/production/shared/components/selectors/NativeDropdown/index.js.map +1 -1
  97. package/build/production/shared/components/selectors/Switch/index.js +1 -1
  98. package/build/production/shared/components/selectors/Switch/index.js.map +1 -1
  99. package/build/production/shared/utils/config.js +3 -5
  100. package/build/production/shared/utils/config.js.map +1 -1
  101. package/build/production/shared/utils/globalState.js.map +1 -1
  102. package/build/production/shared/utils/index.js.map +1 -1
  103. package/build/production/shared/utils/jest/E2eSsrEnv.js +8 -7
  104. package/build/production/shared/utils/jest/E2eSsrEnv.js.map +1 -1
  105. package/build/production/shared/utils/splitComponent.js +6 -17
  106. package/build/production/shared/utils/splitComponent.js.map +1 -1
  107. package/build/production/shared/utils/time.js.map +1 -1
  108. package/build/types-code/index.d.ts +2 -2
  109. package/build/web/client/getInj.js +47 -0
  110. package/build/web/client/getInj.js.map +1 -0
  111. package/build/web/client/index.js +31 -0
  112. package/build/web/client/index.js.map +1 -0
  113. package/build/web/client/init.js +47 -0
  114. package/build/web/client/init.js.map +1 -0
  115. package/build/web/index.js +23 -0
  116. package/build/web/index.js.map +1 -0
  117. package/build/web/server/Cache.js +54 -0
  118. package/build/web/server/Cache.js.map +1 -0
  119. package/build/web/server/index.js +211 -0
  120. package/build/web/server/index.js.map +1 -0
  121. package/build/web/server/renderer.js +516 -0
  122. package/build/web/server/renderer.js.map +1 -0
  123. package/build/web/server/server.js +233 -0
  124. package/build/web/server/server.js.map +1 -0
  125. package/build/web/server/utils/errors.js +103 -0
  126. package/build/web/server/utils/errors.js.map +1 -0
  127. package/build/web/server/utils/index.js +4 -0
  128. package/build/web/server/utils/index.js.map +1 -0
  129. package/build/web/shared/components/Button/index.js +90 -0
  130. package/build/web/shared/components/Button/index.js.map +1 -0
  131. package/build/web/shared/components/Button/style.scss +54 -0
  132. package/build/web/shared/components/Checkbox/index.js +35 -0
  133. package/build/web/shared/components/Checkbox/index.js.map +1 -0
  134. package/build/web/shared/components/Checkbox/theme.scss +63 -0
  135. package/build/web/shared/components/GenericLink/index.js +107 -0
  136. package/build/web/shared/components/GenericLink/index.js.map +1 -0
  137. package/build/web/shared/components/GenericLink/style.scss +3 -0
  138. package/build/web/shared/components/Input/index.js +71 -0
  139. package/build/web/shared/components/Input/index.js.map +1 -0
  140. package/build/web/shared/components/Input/theme.scss +52 -0
  141. package/build/web/shared/components/Link.js +20 -0
  142. package/build/web/shared/components/Link.js.map +1 -0
  143. package/build/web/shared/components/Modal/base-theme.scss +38 -0
  144. package/build/web/shared/components/Modal/index.js +128 -0
  145. package/build/web/shared/components/Modal/index.js.map +1 -0
  146. package/build/web/shared/components/Modal/styles.scss +3 -0
  147. package/build/web/shared/components/NavLink.js +13 -0
  148. package/build/web/shared/components/NavLink.js.map +1 -0
  149. package/build/web/shared/components/PageLayout/base-theme.scss +30 -0
  150. package/build/web/shared/components/PageLayout/index.js +38 -0
  151. package/build/web/shared/components/PageLayout/index.js.map +1 -0
  152. package/build/web/shared/components/TextArea/index.js +106 -0
  153. package/build/web/shared/components/TextArea/index.js.map +1 -0
  154. package/build/web/shared/components/TextArea/style.scss +68 -0
  155. package/build/web/shared/components/Throbber/index.js +26 -0
  156. package/build/web/shared/components/Throbber/index.js.map +1 -0
  157. package/build/web/shared/components/Throbber/theme.scss +26 -0
  158. package/build/web/shared/components/WithTooltip/Tooltip.js +226 -0
  159. package/build/web/shared/components/WithTooltip/Tooltip.js.map +1 -0
  160. package/build/web/shared/components/WithTooltip/default-theme.scss +36 -0
  161. package/build/web/shared/components/WithTooltip/index.js +117 -0
  162. package/build/web/shared/components/WithTooltip/index.js.map +1 -0
  163. package/build/web/shared/components/YouTubeVideo/base.scss +15 -0
  164. package/build/web/shared/components/YouTubeVideo/index.js +56 -0
  165. package/build/web/shared/components/YouTubeVideo/index.js.map +1 -0
  166. package/build/web/shared/components/YouTubeVideo/throbber.scss +11 -0
  167. package/build/web/shared/components/index.js +18 -0
  168. package/build/web/shared/components/index.js.map +1 -0
  169. package/build/web/shared/components/selectors/CustomDropdown/Options/index.js +79 -0
  170. package/build/web/shared/components/selectors/CustomDropdown/Options/index.js.map +1 -0
  171. package/build/web/shared/components/selectors/CustomDropdown/Options/style.scss +6 -0
  172. package/build/web/shared/components/selectors/CustomDropdown/index.js +120 -0
  173. package/build/web/shared/components/selectors/CustomDropdown/index.js.map +1 -0
  174. package/build/web/shared/components/selectors/CustomDropdown/theme.scss +118 -0
  175. package/build/web/shared/components/selectors/NativeDropdown/index.js +82 -0
  176. package/build/web/shared/components/selectors/NativeDropdown/index.js.map +1 -0
  177. package/build/web/shared/components/selectors/NativeDropdown/theme.scss +81 -0
  178. package/build/web/shared/components/selectors/Switch/index.js +49 -0
  179. package/build/web/shared/components/selectors/Switch/index.js.map +1 -0
  180. package/build/web/shared/components/selectors/Switch/theme.scss +39 -0
  181. package/build/web/shared/components/selectors/common.js +12 -0
  182. package/build/web/shared/components/selectors/common.js.map +1 -0
  183. package/build/web/shared/components/selectors/index.js +4 -0
  184. package/build/web/shared/components/selectors/index.js.map +1 -0
  185. package/build/web/shared/utils/config.js +19 -0
  186. package/build/web/shared/utils/config.js.map +1 -0
  187. package/build/web/shared/utils/globalState.js +15 -0
  188. package/build/web/shared/utils/globalState.js.map +1 -0
  189. package/build/web/shared/utils/index.js +13 -0
  190. package/build/web/shared/utils/index.js.map +1 -0
  191. package/build/web/shared/utils/isomorphy/buildInfo.js +44 -0
  192. package/build/web/shared/utils/isomorphy/buildInfo.js.map +1 -0
  193. package/build/web/shared/utils/isomorphy/environment-check.js +17 -0
  194. package/build/web/shared/utils/isomorphy/environment-check.js.map +1 -0
  195. package/build/web/shared/utils/isomorphy/index.js +36 -0
  196. package/build/web/shared/utils/isomorphy/index.js.map +1 -0
  197. package/build/web/shared/utils/jest/E2eSsrEnv.js +230 -0
  198. package/build/web/shared/utils/jest/E2eSsrEnv.js.map +1 -0
  199. package/build/web/shared/utils/jest/global.js +4 -0
  200. package/build/web/shared/utils/jest/global.js.map +1 -0
  201. package/build/web/shared/utils/jest/index.js +165 -0
  202. package/build/web/shared/utils/jest/index.js.map +1 -0
  203. package/build/web/shared/utils/splitComponent.js +218 -0
  204. package/build/web/shared/utils/splitComponent.js.map +1 -0
  205. package/build/web/shared/utils/time.js +85 -0
  206. package/build/web/shared/utils/time.js.map +1 -0
  207. package/build/web/shared/utils/webpack.js +61 -0
  208. package/build/web/shared/utils/webpack.js.map +1 -0
  209. package/build/web/styles/_global/reset.css +52 -0
  210. package/build/web/styles/_mixins/fonts.scss +40 -0
  211. package/build/web/styles/_mixins/media.scss +150 -0
  212. package/build/web/styles/_mixins/typography.scss +83 -0
  213. package/build/web/styles/global.scss +11 -0
  214. package/build/web/styles/mixins.scss +6 -0
  215. package/config/babel/node-ssr.js +5 -2
  216. package/config/jest/default.js +7 -2
  217. package/config/webpack/app-base.js +10 -7
  218. package/config/webpack/app-development.js +3 -2
  219. package/package.json +24 -34
  220. package/src/index.ts +9 -7
  221. package/src/server/index.ts +6 -8
  222. package/src/server/renderer.tsx +7 -9
  223. package/src/server/server.ts +13 -15
  224. package/src/shared/components/Modal/base-theme.scss +1 -1
  225. package/src/shared/components/PageLayout/base-theme.scss +1 -1
  226. package/src/shared/utils/config.ts +5 -10
  227. package/src/shared/utils/jest/E2eSsrEnv.ts +8 -1
  228. package/src/shared/utils/splitComponent.tsx +17 -20
  229. package/build/development/__chunk_groups__.json +0 -6
  230. package/build/development/style.css +0 -909
  231. package/build/development/web.bundle.js +0 -752
  232. package/build/production/__chunk_groups__.json +0 -6
  233. package/build/production/style.css +0 -2
  234. package/build/production/style.css.map +0 -1
  235. package/build/production/web.bundle.js +0 -3
  236. package/build/production/web.bundle.js.LICENSE.txt +0 -9
  237. package/build/production/web.bundle.js.map +0 -1
  238. package/dev-styles.js +0 -1
  239. package/node-entry.js +0 -15
  240. package/null.js +0 -1
  241. package/prod-styles.js +0 -1
@@ -4,14 +4,12 @@ import 'source-map-support/register';
4
4
  import http from 'node:http';
5
5
  import https from 'node:https';
6
6
 
7
- import {
8
- cloneDeep,
9
- defaults,
10
- isFinite,
11
- isNumber,
12
- isString,
13
- toNumber,
14
- } from 'lodash';
7
+ import cloneDeep from 'lodash/cloneDeep';
8
+ import defaults from 'lodash/defaults';
9
+ import isFinite from 'lodash/isFinite';
10
+ import isNumber from 'lodash/isNumber';
11
+ import isString from 'lodash/isString';
12
+ import toNumber from 'lodash/toNumber';
15
13
 
16
14
  // Polyfill required by ReactJS.
17
15
  // TODO: Double-check, if it is still required by React v19?
@@ -15,15 +15,13 @@ import winston from 'winston';
15
15
  import { GlobalStateProvider, SsrContext } from '@dr.pogodin/react-global-state';
16
16
  import { timer } from '@dr.pogodin/js-utils';
17
17
 
18
- import {
19
- clone,
20
- cloneDeep,
21
- defaults,
22
- get,
23
- isString,
24
- mapValues,
25
- omit,
26
- } from 'lodash';
18
+ import clone from 'lodash/clone';
19
+ import cloneDeep from 'lodash/cloneDeep';
20
+ import defaults from 'lodash/defaults';
21
+ import get from 'lodash/get';
22
+ import isString from 'lodash/isString';
23
+ import mapValues from 'lodash/mapValues';
24
+ import omit from 'lodash/omit';
27
25
 
28
26
  import config from 'config';
29
27
  import forge from 'node-forge';
@@ -5,11 +5,9 @@
5
5
  import { sep } from 'node:path';
6
6
  import { pathToFileURL } from 'node:url';
7
7
 
8
- import {
9
- cloneDeep,
10
- mapValues,
11
- pick,
12
- } from 'lodash';
8
+ import cloneDeep from 'lodash/cloneDeep';
9
+ import mapValues from 'lodash/mapValues';
10
+ import pick from 'lodash/pick';
13
11
 
14
12
  import compression from 'compression';
15
13
  import cookieParser from 'cookie-parser';
@@ -18,7 +16,6 @@ import csrf from '@dr.pogodin/csurf';
18
16
  import express, {
19
17
  type Express,
20
18
  type NextFunction,
21
- type RequestHandler,
22
19
  type Request,
23
20
  type Response,
24
21
  } from 'express';
@@ -29,7 +26,7 @@ import loggerMiddleware from 'morgan';
29
26
  import requestIp from 'request-ip';
30
27
  import { v4 as uuid } from 'uuid';
31
28
 
32
- import type { Compiler, Configuration } from 'webpack';
29
+ import type { Configuration } from 'webpack';
33
30
 
34
31
  import rendererFactory, {
35
32
  type LoggerI,
@@ -253,18 +250,19 @@ export default async function factory(
253
250
  } as Location;
254
251
  }
255
252
 
256
- /* eslint-disable @typescript-eslint/no-require-imports */
257
- const webpack = require('webpack') as (ops: Configuration) => Compiler;
253
+ const { webpack } = await import(/* webpackChunkName: "server-side-code" */ 'webpack');
258
254
 
259
- // TODO: Figure out the exact type for options, don't wanna waste time on it
260
- // right now.
261
- const webpackDevMiddleware = require('webpack-dev-middleware') as
262
- (c: Compiler, ops: unknown) => RequestHandler;
255
+ const { default: webpackDevMiddleware } = await import(
256
+ /* webpackChunkName: "server-side-code" */ 'webpack-dev-middleware'
257
+ );
263
258
 
264
- const webpackHotMiddleware = require('webpack-hot-middleware') as
265
- (c: Compiler) => RequestHandler;
259
+ const { default: webpackHotMiddleware } = await import(
260
+ /* webpackChunkName: "server-side-code" */ 'webpack-hot-middleware'
261
+ );
266
262
 
267
263
  const compiler = webpack(webpackConfig);
264
+ if (!compiler) throw Error('Internal error');
265
+
268
266
  server.use(webpackDevMiddleware(compiler, {
269
267
  publicPath,
270
268
  serverSideRender: true,
@@ -1,4 +1,4 @@
1
- @use "styles/mixins" as *;
1
+ @use "../../../styles/mixins" as *;
2
2
 
3
3
  *,
4
4
  .context,
@@ -5,7 +5,7 @@
5
5
  * columns on left and right.
6
6
  */
7
7
 
8
- @use "styles/mixins" as *;
8
+ @use "../../../styles/mixins" as *;
9
9
 
10
10
  *,
11
11
  .context,
@@ -1,6 +1,8 @@
1
1
  /* global document */
2
2
 
3
- import type CookieM from 'cookie';
3
+ import { parse } from 'cookie';
4
+
5
+ import clientGetInj from '../../client/getInj';
4
6
 
5
7
  import { IS_CLIENT_SIDE } from './isomorphy/environment-check';
6
8
  import { requireWeak } from './webpack';
@@ -8,21 +10,14 @@ import { requireWeak } from './webpack';
8
10
  // TODO: The internal type casting is somewhat messed up here,
9
11
  // to be corrected later.
10
12
  const config: Record<string, unknown> = (
11
- IS_CLIENT_SIDE
12
- // eslint-disable-next-line @typescript-eslint/no-require-imports
13
- ? (require('client/getInj') as {
14
- default: () => Record<string, unknown>;
15
- }).default().CONFIG
16
- : requireWeak('config')
13
+ IS_CLIENT_SIDE ? clientGetInj().CONFIG : requireWeak('config')
17
14
  ) as (Record<string, unknown> | undefined) ?? ({} as Record<string, unknown>);
18
15
 
19
16
  // The safeguard for "document" is necessary because in non-Node environments,
20
17
  // like React Native, IS_CLIENT_SIDE is "true", however "document" and a bunch
21
18
  // of other browser-world features are not available.
22
19
  if (IS_CLIENT_SIDE && typeof document !== 'undefined') {
23
- // eslint-disable-next-line @typescript-eslint/no-require-imports
24
- const cookie = require('cookie') as typeof CookieM;
25
- config.CSRF = cookie.parse(document.cookie).csrfToken;
20
+ config.CSRF = parse(document.cookie).csrfToken;
26
21
  }
27
22
 
28
23
  export default config;
@@ -19,7 +19,10 @@
19
19
  import path from 'node:path';
20
20
 
21
21
  import type { Request, Response } from 'express';
22
- import { defaults, noop, set } from 'lodash';
22
+
23
+ import defaults from 'lodash/defaults';
24
+ import set from 'lodash/set';
25
+
23
26
  import type { ReactNode } from 'react';
24
27
 
25
28
  // As this environment is a part of the Jest testing utils,
@@ -41,6 +44,10 @@ import ssrFactory from 'server/renderer';
41
44
 
42
45
  import { setBuildInfo } from '../isomorphy/buildInfo';
43
46
 
47
+ function noop() {
48
+ // NOOP
49
+ }
50
+
44
51
  export default class E2eSsrEnv extends JsdomEnv {
45
52
  pragmas: Record<string, string | string[]>;
46
53
 
@@ -20,23 +20,13 @@ import {
20
20
  getBuildInfo,
21
21
  } from './isomorphy';
22
22
 
23
- // Note: At the client side we can get chunk groups immediately when loading
24
- // the module; at the server-side we only can get them within React render flow.
25
- // Thus, we set and use the following variable at the client-side, and then when
26
- // needed on the server side, we'll fetch it differently.
27
- let clientChunkGroups: ChunkGroupsT;
28
-
29
- if (IS_CLIENT_SIDE) {
30
- // TODO: Rewrite to avoid these overrides of ESLint rules.
31
- /* eslint-disable @typescript-eslint/no-unsafe-assignment,
32
- @typescript-eslint/no-require-imports,
33
- @typescript-eslint/no-unsafe-call,
34
- @typescript-eslint/no-unsafe-member-access */
35
- clientChunkGroups = require('client/getInj').default().CHUNK_GROUPS ?? {};
36
- /* eslint-enable @typescript-eslint/no-unsafe-assignment,
37
- @typescript-eslint/no-require-imports,
38
- @typescript-eslint/no-unsafe-call,
39
- @typescript-eslint/no-unsafe-member-access */
23
+ function getClientChunkGroups(): Promise<ChunkGroupsT> | undefined {
24
+ if (!IS_CLIENT_SIDE) return undefined;
25
+
26
+ return (async () => {
27
+ const { default: getInj } = await import(/* webpackChunkName: "react-utils-client-side-code" */ '../../client/getInj');
28
+ return getInj().CHUNK_GROUPS ?? {};
29
+ })();
40
30
  }
41
31
 
42
32
  const refCounts: Record<string, number> = {};
@@ -202,15 +192,20 @@ export default function splitComponent<
202
192
  getComponent: () => Promise<ComponentOrModule<ComponentPropsT>>;
203
193
  placeholder?: ReactNode;
204
194
  }): FunctionComponent<ComponentPropsT> {
205
- // On the client side we can check right away if the chunk name is known.
206
- if (IS_CLIENT_SIDE) assertChunkName(chunkName, clientChunkGroups);
207
-
208
195
  // The correct usage of splitComponent() assumes a single call per chunk.
209
196
  if (usedChunkNames.has(chunkName)) {
210
197
  throw Error(`Repeated splitComponent() call for the chunk "${chunkName}"`);
211
198
  } else usedChunkNames.add(chunkName);
212
199
 
213
200
  const LazyComponent = lazy(async () => {
201
+ const clientChunkGroups = await getClientChunkGroups();
202
+
203
+ // On the client side we can check right away if the chunk name is known.
204
+ if (IS_CLIENT_SIDE) {
205
+ if (!clientChunkGroups) throw Error('Internal error');
206
+ assertChunkName(chunkName, clientChunkGroups);
207
+ }
208
+
214
209
  const resolved = await getComponent();
215
210
  const Component = 'default' in resolved ? resolved.default : resolved;
216
211
 
@@ -218,6 +213,7 @@ export default function splitComponent<
218
213
  // the component (the lazy load function is executed by React one at
219
214
  // the frist mount).
220
215
  if (IS_CLIENT_SIDE) {
216
+ if (!clientChunkGroups) throw Error('Internal error');
221
217
  await bookStyleSheets(chunkName, clientChunkGroups, false);
222
218
  }
223
219
 
@@ -237,6 +233,7 @@ export default function splitComponent<
237
233
  // This takes care about stylesheets management every time an instance of
238
234
  // this component is mounted / unmounted.
239
235
  useInsertionEffect(() => {
236
+ if (!clientChunkGroups) throw Error('Internal error');
240
237
  void bookStyleSheets(chunkName, clientChunkGroups, true);
241
238
  return () => {
242
239
  freeStyleSheets(chunkName, clientChunkGroups);
@@ -1,6 +0,0 @@
1
- {
2
- "main": [
3
- "style.css",
4
- "web.bundle.js"
5
- ]
6
- }