@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.
- package/babel.config.js +1 -0
- package/babel.libweb.config.js +16 -0
- package/bin/build.js +16 -10
- package/bin/setup.js +11 -8
- package/build/development/client/index.js.map +1 -1
- package/build/development/index.js +9 -4
- package/build/development/index.js.map +1 -1
- package/build/development/server/Cache.js.map +1 -1
- package/build/development/server/index.js +13 -8
- package/build/development/server/index.js.map +1 -1
- package/build/development/server/renderer.js +15 -8
- package/build/development/server/renderer.js.map +1 -1
- package/build/development/server/server.js +18 -15
- package/build/development/server/server.js.map +1 -1
- package/build/development/shared/components/Button/index.js +6 -6
- package/build/development/shared/components/Button/index.js.map +1 -1
- package/build/development/shared/components/Checkbox/index.js +8 -8
- package/build/development/shared/components/Checkbox/index.js.map +1 -1
- package/build/development/shared/components/GenericLink/index.js +5 -1
- package/build/development/shared/components/GenericLink/index.js.map +1 -1
- package/build/development/shared/components/Input/index.js +10 -9
- package/build/development/shared/components/Input/index.js.map +1 -1
- package/build/development/shared/components/Link.js.map +1 -1
- package/build/development/shared/components/Modal/index.js +8 -6
- package/build/development/shared/components/Modal/index.js.map +1 -1
- package/build/development/shared/components/NavLink.js.map +1 -1
- package/build/development/shared/components/PageLayout/index.js +6 -6
- package/build/development/shared/components/PageLayout/index.js.map +1 -1
- package/build/development/shared/components/TextArea/index.js +13 -9
- package/build/development/shared/components/TextArea/index.js.map +1 -1
- package/build/development/shared/components/Throbber/index.js +6 -6
- package/build/development/shared/components/Throbber/index.js.map +1 -1
- package/build/development/shared/components/WithTooltip/Tooltip.js +1 -0
- package/build/development/shared/components/WithTooltip/Tooltip.js.map +1 -1
- package/build/development/shared/components/WithTooltip/index.js +7 -7
- package/build/development/shared/components/WithTooltip/index.js.map +1 -1
- package/build/development/shared/components/YouTubeVideo/index.js +9 -9
- package/build/development/shared/components/YouTubeVideo/index.js.map +1 -1
- package/build/development/shared/components/index.js.map +1 -1
- package/build/development/shared/components/selectors/CustomDropdown/Options/index.js +1 -1
- package/build/development/shared/components/selectors/CustomDropdown/Options/index.js.map +1 -1
- package/build/development/shared/components/selectors/CustomDropdown/index.js +11 -11
- package/build/development/shared/components/selectors/CustomDropdown/index.js.map +1 -1
- package/build/development/shared/components/selectors/NativeDropdown/index.js +12 -12
- package/build/development/shared/components/selectors/NativeDropdown/index.js.map +1 -1
- package/build/development/shared/components/selectors/Switch/index.js +7 -7
- package/build/development/shared/components/selectors/Switch/index.js.map +1 -1
- package/build/development/shared/utils/config.js +5 -6
- package/build/development/shared/utils/config.js.map +1 -1
- package/build/development/shared/utils/globalState.js.map +1 -1
- package/build/development/shared/utils/index.js.map +1 -1
- package/build/development/shared/utils/jest/E2eSsrEnv.js +14 -10
- package/build/development/shared/utils/jest/E2eSsrEnv.js.map +1 -1
- package/build/development/shared/utils/splitComponent.js +18 -21
- package/build/development/shared/utils/splitComponent.js.map +1 -1
- package/build/development/shared/utils/time.js.map +1 -1
- package/build/production/client/index.js.map +1 -1
- package/build/production/index.js +5 -3
- package/build/production/index.js.map +1 -1
- package/build/production/server/Cache.js.map +1 -1
- package/build/production/server/index.js +5 -5
- package/build/production/server/index.js.map +1 -1
- package/build/production/server/renderer.js +7 -7
- package/build/production/server/renderer.js.map +1 -1
- package/build/production/server/server.js +5 -7
- package/build/production/server/server.js.map +1 -1
- package/build/production/shared/components/Button/index.js +1 -1
- package/build/production/shared/components/Button/index.js.map +1 -1
- package/build/production/shared/components/Checkbox/index.js +1 -1
- package/build/production/shared/components/Checkbox/index.js.map +1 -1
- package/build/production/shared/components/GenericLink/index.js +2 -2
- package/build/production/shared/components/GenericLink/index.js.map +1 -1
- package/build/production/shared/components/Input/index.js +1 -1
- package/build/production/shared/components/Input/index.js.map +1 -1
- package/build/production/shared/components/Link.js.map +1 -1
- package/build/production/shared/components/Modal/index.js +1 -1
- package/build/production/shared/components/Modal/index.js.map +1 -1
- package/build/production/shared/components/NavLink.js.map +1 -1
- package/build/production/shared/components/PageLayout/index.js +1 -1
- package/build/production/shared/components/PageLayout/index.js.map +1 -1
- package/build/production/shared/components/TextArea/index.js +1 -1
- package/build/production/shared/components/TextArea/index.js.map +1 -1
- package/build/production/shared/components/Throbber/index.js +1 -1
- package/build/production/shared/components/Throbber/index.js.map +1 -1
- package/build/production/shared/components/WithTooltip/Tooltip.js.map +1 -1
- package/build/production/shared/components/WithTooltip/index.js +1 -1
- package/build/production/shared/components/WithTooltip/index.js.map +1 -1
- package/build/production/shared/components/YouTubeVideo/index.js +1 -1
- package/build/production/shared/components/YouTubeVideo/index.js.map +1 -1
- package/build/production/shared/components/index.js.map +1 -1
- package/build/production/shared/components/selectors/CustomDropdown/Options/index.js +1 -1
- package/build/production/shared/components/selectors/CustomDropdown/Options/index.js.map +1 -1
- package/build/production/shared/components/selectors/CustomDropdown/index.js +1 -1
- package/build/production/shared/components/selectors/CustomDropdown/index.js.map +1 -1
- package/build/production/shared/components/selectors/NativeDropdown/index.js +1 -1
- package/build/production/shared/components/selectors/NativeDropdown/index.js.map +1 -1
- package/build/production/shared/components/selectors/Switch/index.js +1 -1
- package/build/production/shared/components/selectors/Switch/index.js.map +1 -1
- package/build/production/shared/utils/config.js +3 -5
- package/build/production/shared/utils/config.js.map +1 -1
- package/build/production/shared/utils/globalState.js.map +1 -1
- package/build/production/shared/utils/index.js.map +1 -1
- package/build/production/shared/utils/jest/E2eSsrEnv.js +8 -7
- package/build/production/shared/utils/jest/E2eSsrEnv.js.map +1 -1
- package/build/production/shared/utils/splitComponent.js +6 -17
- package/build/production/shared/utils/splitComponent.js.map +1 -1
- package/build/production/shared/utils/time.js.map +1 -1
- package/build/types-code/index.d.ts +2 -2
- package/build/web/client/getInj.js +47 -0
- package/build/web/client/getInj.js.map +1 -0
- package/build/web/client/index.js +31 -0
- package/build/web/client/index.js.map +1 -0
- package/build/web/client/init.js +47 -0
- package/build/web/client/init.js.map +1 -0
- package/build/web/index.js +23 -0
- package/build/web/index.js.map +1 -0
- package/build/web/server/Cache.js +54 -0
- package/build/web/server/Cache.js.map +1 -0
- package/build/web/server/index.js +211 -0
- package/build/web/server/index.js.map +1 -0
- package/build/web/server/renderer.js +516 -0
- package/build/web/server/renderer.js.map +1 -0
- package/build/web/server/server.js +233 -0
- package/build/web/server/server.js.map +1 -0
- package/build/web/server/utils/errors.js +103 -0
- package/build/web/server/utils/errors.js.map +1 -0
- package/build/web/server/utils/index.js +4 -0
- package/build/web/server/utils/index.js.map +1 -0
- package/build/web/shared/components/Button/index.js +90 -0
- package/build/web/shared/components/Button/index.js.map +1 -0
- package/build/web/shared/components/Button/style.scss +54 -0
- package/build/web/shared/components/Checkbox/index.js +35 -0
- package/build/web/shared/components/Checkbox/index.js.map +1 -0
- package/build/web/shared/components/Checkbox/theme.scss +63 -0
- package/build/web/shared/components/GenericLink/index.js +107 -0
- package/build/web/shared/components/GenericLink/index.js.map +1 -0
- package/build/web/shared/components/GenericLink/style.scss +3 -0
- package/build/web/shared/components/Input/index.js +71 -0
- package/build/web/shared/components/Input/index.js.map +1 -0
- package/build/web/shared/components/Input/theme.scss +52 -0
- package/build/web/shared/components/Link.js +20 -0
- package/build/web/shared/components/Link.js.map +1 -0
- package/build/web/shared/components/Modal/base-theme.scss +38 -0
- package/build/web/shared/components/Modal/index.js +128 -0
- package/build/web/shared/components/Modal/index.js.map +1 -0
- package/build/web/shared/components/Modal/styles.scss +3 -0
- package/build/web/shared/components/NavLink.js +13 -0
- package/build/web/shared/components/NavLink.js.map +1 -0
- package/build/web/shared/components/PageLayout/base-theme.scss +30 -0
- package/build/web/shared/components/PageLayout/index.js +38 -0
- package/build/web/shared/components/PageLayout/index.js.map +1 -0
- package/build/web/shared/components/TextArea/index.js +106 -0
- package/build/web/shared/components/TextArea/index.js.map +1 -0
- package/build/web/shared/components/TextArea/style.scss +68 -0
- package/build/web/shared/components/Throbber/index.js +26 -0
- package/build/web/shared/components/Throbber/index.js.map +1 -0
- package/build/web/shared/components/Throbber/theme.scss +26 -0
- package/build/web/shared/components/WithTooltip/Tooltip.js +226 -0
- package/build/web/shared/components/WithTooltip/Tooltip.js.map +1 -0
- package/build/web/shared/components/WithTooltip/default-theme.scss +36 -0
- package/build/web/shared/components/WithTooltip/index.js +117 -0
- package/build/web/shared/components/WithTooltip/index.js.map +1 -0
- package/build/web/shared/components/YouTubeVideo/base.scss +15 -0
- package/build/web/shared/components/YouTubeVideo/index.js +56 -0
- package/build/web/shared/components/YouTubeVideo/index.js.map +1 -0
- package/build/web/shared/components/YouTubeVideo/throbber.scss +11 -0
- package/build/web/shared/components/index.js +18 -0
- package/build/web/shared/components/index.js.map +1 -0
- package/build/web/shared/components/selectors/CustomDropdown/Options/index.js +79 -0
- package/build/web/shared/components/selectors/CustomDropdown/Options/index.js.map +1 -0
- package/build/web/shared/components/selectors/CustomDropdown/Options/style.scss +6 -0
- package/build/web/shared/components/selectors/CustomDropdown/index.js +120 -0
- package/build/web/shared/components/selectors/CustomDropdown/index.js.map +1 -0
- package/build/web/shared/components/selectors/CustomDropdown/theme.scss +118 -0
- package/build/web/shared/components/selectors/NativeDropdown/index.js +82 -0
- package/build/web/shared/components/selectors/NativeDropdown/index.js.map +1 -0
- package/build/web/shared/components/selectors/NativeDropdown/theme.scss +81 -0
- package/build/web/shared/components/selectors/Switch/index.js +49 -0
- package/build/web/shared/components/selectors/Switch/index.js.map +1 -0
- package/build/web/shared/components/selectors/Switch/theme.scss +39 -0
- package/build/web/shared/components/selectors/common.js +12 -0
- package/build/web/shared/components/selectors/common.js.map +1 -0
- package/build/web/shared/components/selectors/index.js +4 -0
- package/build/web/shared/components/selectors/index.js.map +1 -0
- package/build/web/shared/utils/config.js +19 -0
- package/build/web/shared/utils/config.js.map +1 -0
- package/build/web/shared/utils/globalState.js +15 -0
- package/build/web/shared/utils/globalState.js.map +1 -0
- package/build/web/shared/utils/index.js +13 -0
- package/build/web/shared/utils/index.js.map +1 -0
- package/build/web/shared/utils/isomorphy/buildInfo.js +44 -0
- package/build/web/shared/utils/isomorphy/buildInfo.js.map +1 -0
- package/build/web/shared/utils/isomorphy/environment-check.js +17 -0
- package/build/web/shared/utils/isomorphy/environment-check.js.map +1 -0
- package/build/web/shared/utils/isomorphy/index.js +36 -0
- package/build/web/shared/utils/isomorphy/index.js.map +1 -0
- package/build/web/shared/utils/jest/E2eSsrEnv.js +230 -0
- package/build/web/shared/utils/jest/E2eSsrEnv.js.map +1 -0
- package/build/web/shared/utils/jest/global.js +4 -0
- package/build/web/shared/utils/jest/global.js.map +1 -0
- package/build/web/shared/utils/jest/index.js +165 -0
- package/build/web/shared/utils/jest/index.js.map +1 -0
- package/build/web/shared/utils/splitComponent.js +218 -0
- package/build/web/shared/utils/splitComponent.js.map +1 -0
- package/build/web/shared/utils/time.js +85 -0
- package/build/web/shared/utils/time.js.map +1 -0
- package/build/web/shared/utils/webpack.js +61 -0
- package/build/web/shared/utils/webpack.js.map +1 -0
- package/build/web/styles/_global/reset.css +52 -0
- package/build/web/styles/_mixins/fonts.scss +40 -0
- package/build/web/styles/_mixins/media.scss +150 -0
- package/build/web/styles/_mixins/typography.scss +83 -0
- package/build/web/styles/global.scss +11 -0
- package/build/web/styles/mixins.scss +6 -0
- package/config/babel/node-ssr.js +5 -2
- package/config/jest/default.js +7 -2
- package/config/webpack/app-base.js +10 -7
- package/config/webpack/app-development.js +3 -2
- package/package.json +24 -34
- package/src/index.ts +9 -7
- package/src/server/index.ts +6 -8
- package/src/server/renderer.tsx +7 -9
- package/src/server/server.ts +13 -15
- package/src/shared/components/Modal/base-theme.scss +1 -1
- package/src/shared/components/PageLayout/base-theme.scss +1 -1
- package/src/shared/utils/config.ts +5 -10
- package/src/shared/utils/jest/E2eSsrEnv.ts +8 -1
- package/src/shared/utils/splitComponent.tsx +17 -20
- package/build/development/__chunk_groups__.json +0 -6
- package/build/development/style.css +0 -909
- package/build/development/web.bundle.js +0 -752
- package/build/production/__chunk_groups__.json +0 -6
- package/build/production/style.css +0 -2
- package/build/production/style.css.map +0 -1
- package/build/production/web.bundle.js +0 -3
- package/build/production/web.bundle.js.LICENSE.txt +0 -9
- package/build/production/web.bundle.js.map +0 -1
- package/dev-styles.js +0 -1
- package/node-entry.js +0 -15
- package/null.js +0 -1
- package/prod-styles.js +0 -1
package/src/server/index.ts
CHANGED
|
@@ -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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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?
|
package/src/server/renderer.tsx
CHANGED
|
@@ -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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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';
|
package/src/server/server.ts
CHANGED
|
@@ -5,11 +5,9 @@
|
|
|
5
5
|
import { sep } from 'node:path';
|
|
6
6
|
import { pathToFileURL } from 'node:url';
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
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 {
|
|
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
|
-
/*
|
|
257
|
-
const webpack = require('webpack') as (ops: Configuration) => Compiler;
|
|
253
|
+
const { webpack } = await import(/* webpackChunkName: "server-side-code" */ 'webpack');
|
|
258
254
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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 =
|
|
265
|
-
|
|
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,6 +1,8 @@
|
|
|
1
1
|
/* global document */
|
|
2
2
|
|
|
3
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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);
|