@foxford/den-preact 0.1.0 → 0.2.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.
- package/{chunk-R2CWAR74.js → chunk-MBFQZ6VG.js} +3 -3
- package/client.cjs +5 -3
- package/client.js +3 -3
- package/index.cjs +3 -1
- package/index.js +2 -2
- package/package.json +13 -4
- package/preset.cjs +16 -1
- package/preset.js +18 -3
- package/use-sync-external-store.cjs +33 -0
- package/use-sync-external-store.d.cts +20 -0
- package/use-sync-external-store.d.ts +20 -0
- package/use-sync-external-store.js +33 -0
|
@@ -22,7 +22,7 @@ function useContainer() {
|
|
|
22
22
|
}
|
|
23
23
|
function installIslandResolver() {
|
|
24
24
|
installResolver((token) => {
|
|
25
|
-
var _a
|
|
25
|
+
var _a;
|
|
26
26
|
let container = (_a = useContext(ContainerContext)) != null ? _a : void 0;
|
|
27
27
|
if (!container) {
|
|
28
28
|
logger.error(`\u0440\u0435\u0437\u043E\u043B\u0432 \xAB${token.description}\xBB \u0432\u043D\u0435 \u043E\u0441\u0442\u0440\u043E\u0432\u0430 (\u043D\u0435\u0442 container-context)`);
|
|
@@ -33,7 +33,7 @@ function installIslandResolver() {
|
|
|
33
33
|
logger.debug(`\u0440\u0435\u0437\u043E\u043B\u0432 \xAB${token.description}\xBB \u0432\u043E view`);
|
|
34
34
|
return container.resolve(token);
|
|
35
35
|
}
|
|
36
|
-
container =
|
|
36
|
+
container = container.getParent?.();
|
|
37
37
|
}
|
|
38
38
|
logger.error(`\u0442\u043E\u043A\u0435\u043D \xAB${token.description}\xBB \u043D\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D \u0432 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0435 \u043E\u0441\u0442\u0440\u043E\u0432\u0430`);
|
|
39
39
|
throw new Error(`den-preact: \u0442\u043E\u043A\u0435\u043D \xAB${token.description}\xBB \u043D\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D \u0432 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0435 \u043E\u0441\u0442\u0440\u043E\u0432\u0430`);
|
|
@@ -117,7 +117,7 @@ function IslandRuntime({
|
|
|
117
117
|
return;
|
|
118
118
|
}
|
|
119
119
|
void activateIslandViewModels(container, descriptor, activeRoute).then(() => {
|
|
120
|
-
onDocument
|
|
120
|
+
onDocument?.(collectDocumentContribution(container, descriptor));
|
|
121
121
|
});
|
|
122
122
|
}, [activeRoute, container, denState, descriptor, onDocument]);
|
|
123
123
|
useEffect(() => {
|
package/client.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
var _chunkJ2T5F5Q5cjs = require('./chunk-J2T5F5Q5.cjs');
|
|
@@ -8,6 +8,7 @@ require('./chunk-P4DSWCF6.cjs');
|
|
|
8
8
|
var _preact = require('preact');
|
|
9
9
|
var _island = require('@foxford/den/island');
|
|
10
10
|
var _logger = require('@foxford/logger');
|
|
11
|
+
var import_meta = {};
|
|
11
12
|
var logger = _logger.log.getLogger("den-preact").getLogger("client");
|
|
12
13
|
var ROOT_MARK = "data-den-root";
|
|
13
14
|
var STATE_MARK = "data-den-state";
|
|
@@ -33,8 +34,9 @@ function currentRoute() {
|
|
|
33
34
|
}
|
|
34
35
|
var hydrated = /* @__PURE__ */ new WeakSet();
|
|
35
36
|
function hydrateApp(descriptor) {
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
var _a;
|
|
38
|
+
if ((_a = import_meta.env) == null ? void 0 : _a.DEV) {
|
|
39
|
+
void Promise.resolve().then(() => _interopRequireWildcard(require("preact/debug"))).then(() => {
|
|
38
40
|
mountApp(descriptor);
|
|
39
41
|
});
|
|
40
42
|
return;
|
package/client.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createPreactIsland,
|
|
3
3
|
installIslandResolver
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MBFQZ6VG.js";
|
|
5
5
|
import "./chunk-5JBD5THX.js";
|
|
6
6
|
|
|
7
7
|
// src/client.ts
|
|
@@ -13,7 +13,7 @@ var ROOT_MARK = "data-den-root";
|
|
|
13
13
|
var STATE_MARK = "data-den-state";
|
|
14
14
|
function readState(name) {
|
|
15
15
|
const tag = document.querySelector(`script[${STATE_MARK}="${name}"]`);
|
|
16
|
-
if (!
|
|
16
|
+
if (!tag?.textContent) {
|
|
17
17
|
logger.warn(`\u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \xAB${name}\xBB \u0432 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u2014 \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u0435\u043C\u0441\u044F \u043D\u0430 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u043C`);
|
|
18
18
|
return {};
|
|
19
19
|
}
|
|
@@ -33,7 +33,7 @@ function currentRoute() {
|
|
|
33
33
|
}
|
|
34
34
|
var hydrated = /* @__PURE__ */ new WeakSet();
|
|
35
35
|
function hydrateApp(descriptor) {
|
|
36
|
-
if (import.meta.env
|
|
36
|
+
if (import.meta.env?.DEV) {
|
|
37
37
|
void import("preact/debug").then(() => {
|
|
38
38
|
mountApp(descriptor);
|
|
39
39
|
});
|
package/index.cjs
CHANGED
|
@@ -22,7 +22,9 @@ function renderPreactIsland(descriptor, { container, slots }) {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// src/index.ts
|
|
25
|
-
var
|
|
25
|
+
var import_meta = {};
|
|
26
|
+
var _a, _b;
|
|
27
|
+
var CLIENT_BUNDLE = ((_a = import_meta.env) == null ? void 0 : _a.PROD) && !((_b = import_meta.env) == null ? void 0 : _b.SSR);
|
|
26
28
|
function renderIslandOnClient() {
|
|
27
29
|
throw new Error("den-preact: \u0441\u0435\u0440\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u043D\u0434\u0435\u0440 \u043E\u0441\u0442\u0440\u043E\u0432\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043D\u043E\u043C \u0432\u044B\u0445\u043E\u0434\u0435 \u043D\u0435 \u0441\u043E\u0431\u0440\u0430\u043D");
|
|
28
30
|
}
|
package/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
createPreactIsland,
|
|
6
6
|
installIslandResolver,
|
|
7
7
|
useContainer
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-MBFQZ6VG.js";
|
|
9
9
|
import "./chunk-5JBD5THX.js";
|
|
10
10
|
|
|
11
11
|
// src/render-island.tsx
|
|
@@ -22,7 +22,7 @@ function renderPreactIsland(descriptor, { container, slots }) {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// src/index.ts
|
|
25
|
-
var CLIENT_BUNDLE = import.meta.env
|
|
25
|
+
var CLIENT_BUNDLE = import.meta.env?.PROD && !import.meta.env?.SSR;
|
|
26
26
|
function renderIslandOnClient() {
|
|
27
27
|
throw new Error("den-preact: \u0441\u0435\u0440\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u043D\u0434\u0435\u0440 \u043E\u0441\u0442\u0440\u043E\u0432\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043D\u043E\u043C \u0432\u044B\u0445\u043E\u0434\u0435 \u043D\u0435 \u0441\u043E\u0431\u0440\u0430\u043D");
|
|
28
28
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foxford/den-preact",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Den Preact view adapter — остров, серверная отрисовка, слоты, пресет сборки",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"foxford",
|
|
@@ -49,14 +49,19 @@
|
|
|
49
49
|
"import": "./preset.js",
|
|
50
50
|
"require": "./preset.cjs",
|
|
51
51
|
"types": "./preset.d.ts"
|
|
52
|
+
},
|
|
53
|
+
"./use-sync-external-store": {
|
|
54
|
+
"import": "./use-sync-external-store.js",
|
|
55
|
+
"require": "./use-sync-external-store.cjs",
|
|
56
|
+
"types": "./use-sync-external-store.d.ts"
|
|
52
57
|
}
|
|
53
58
|
},
|
|
54
59
|
"files": [
|
|
55
60
|
"README.mdx",
|
|
56
61
|
"chunk-5JBD5THX.js",
|
|
57
62
|
"chunk-J2T5F5Q5.cjs",
|
|
63
|
+
"chunk-MBFQZ6VG.js",
|
|
58
64
|
"chunk-P4DSWCF6.cjs",
|
|
59
|
-
"chunk-R2CWAR74.js",
|
|
60
65
|
"client.cjs",
|
|
61
66
|
"client.d.cts",
|
|
62
67
|
"client.d.ts",
|
|
@@ -69,8 +74,12 @@
|
|
|
69
74
|
"preset.cjs",
|
|
70
75
|
"preset.d.cts",
|
|
71
76
|
"preset.d.ts",
|
|
72
|
-
"preset.js"
|
|
77
|
+
"preset.js",
|
|
78
|
+
"use-sync-external-store.cjs",
|
|
79
|
+
"use-sync-external-store.d.cts",
|
|
80
|
+
"use-sync-external-store.d.ts",
|
|
81
|
+
"use-sync-external-store.js"
|
|
73
82
|
],
|
|
74
|
-
"sha": "
|
|
83
|
+
"sha": "c56bc50",
|
|
75
84
|
"scripts": {}
|
|
76
85
|
}
|
package/preset.cjs
CHANGED
|
@@ -4,6 +4,17 @@
|
|
|
4
4
|
var _presetvite = require('@preact/preset-vite'); var _presetvite2 = _interopRequireDefault(_presetvite);
|
|
5
5
|
var CLIENT_ENTRY = "@foxford/den-preact/client";
|
|
6
6
|
var STYLED = "styled-components";
|
|
7
|
+
var SHIM = /^use-sync-external-store(\/|$)/;
|
|
8
|
+
var SHIM_MODULE = "@foxford/den-preact/use-sync-external-store";
|
|
9
|
+
var SHIM_ID = "\0den-preact:use-sync-external-store";
|
|
10
|
+
var useSyncExternalStoreShim = {
|
|
11
|
+
enforce: "pre",
|
|
12
|
+
load: (id) => id === SHIM_ID ? `export * from '${SHIM_MODULE}'
|
|
13
|
+
export { default } from '${SHIM_MODULE}'
|
|
14
|
+
` : null,
|
|
15
|
+
name: "den-preact:use-sync-external-store",
|
|
16
|
+
resolveId: (source) => SHIM.test(source) ? SHIM_ID : null
|
|
17
|
+
};
|
|
7
18
|
var runtimeSingleton = {
|
|
8
19
|
config: () => ({
|
|
9
20
|
resolve: { dedupe: ["preact", "preact-render-to-string"] },
|
|
@@ -18,7 +29,11 @@ function preact(options = {}) {
|
|
|
18
29
|
clientEntry: CLIENT_ENTRY,
|
|
19
30
|
// Prefresh выключен: у приложения нет dev-сервера сборщика — `den dev` пересобирает
|
|
20
31
|
// выход и перезапускает процесс.
|
|
21
|
-
plugins: [
|
|
32
|
+
plugins: [
|
|
33
|
+
_presetvite2.default.call(void 0, { babel: { plugins }, prefreshEnabled: false }),
|
|
34
|
+
runtimeSingleton,
|
|
35
|
+
useSyncExternalStoreShim
|
|
36
|
+
],
|
|
22
37
|
// Проверка тут потому, что цена ошибки — МОЛЧАНИЕ. Без сборочной поддержки
|
|
23
38
|
// styled-components считает идентификатор компонента счётчиком: порядок вычисления в
|
|
24
39
|
// серверном и клиентском выходах разный, имена классов расходятся, и это видно только
|
package/preset.js
CHANGED
|
@@ -4,6 +4,17 @@ import "./chunk-5JBD5THX.js";
|
|
|
4
4
|
import preactPlugin from "@preact/preset-vite";
|
|
5
5
|
var CLIENT_ENTRY = "@foxford/den-preact/client";
|
|
6
6
|
var STYLED = "styled-components";
|
|
7
|
+
var SHIM = /^use-sync-external-store(\/|$)/;
|
|
8
|
+
var SHIM_MODULE = "@foxford/den-preact/use-sync-external-store";
|
|
9
|
+
var SHIM_ID = "\0den-preact:use-sync-external-store";
|
|
10
|
+
var useSyncExternalStoreShim = {
|
|
11
|
+
enforce: "pre",
|
|
12
|
+
load: (id) => id === SHIM_ID ? `export * from '${SHIM_MODULE}'
|
|
13
|
+
export { default } from '${SHIM_MODULE}'
|
|
14
|
+
` : null,
|
|
15
|
+
name: "den-preact:use-sync-external-store",
|
|
16
|
+
resolveId: (source) => SHIM.test(source) ? SHIM_ID : null
|
|
17
|
+
};
|
|
7
18
|
var runtimeSingleton = {
|
|
8
19
|
config: () => ({
|
|
9
20
|
resolve: { dedupe: ["preact", "preact-render-to-string"] },
|
|
@@ -12,13 +23,17 @@ var runtimeSingleton = {
|
|
|
12
23
|
name: "den-preact:runtime-singleton"
|
|
13
24
|
};
|
|
14
25
|
function preact(options = {}) {
|
|
15
|
-
var _a
|
|
16
|
-
const plugins = (
|
|
26
|
+
var _a;
|
|
27
|
+
const plugins = (_a = options.babel?.plugins) != null ? _a : [];
|
|
17
28
|
return {
|
|
18
29
|
clientEntry: CLIENT_ENTRY,
|
|
19
30
|
// Prefresh выключен: у приложения нет dev-сервера сборщика — `den dev` пересобирает
|
|
20
31
|
// выход и перезапускает процесс.
|
|
21
|
-
plugins: [
|
|
32
|
+
plugins: [
|
|
33
|
+
preactPlugin({ babel: { plugins }, prefreshEnabled: false }),
|
|
34
|
+
runtimeSingleton,
|
|
35
|
+
useSyncExternalStoreShim
|
|
36
|
+
],
|
|
22
37
|
// Проверка тут потому, что цена ошибки — МОЛЧАНИЕ. Без сборочной поддержки
|
|
23
38
|
// styled-components считает идентификатор компонента счётчиком: порядок вычисления в
|
|
24
39
|
// серверном и клиентском выходах разный, имена классов расходятся, и это видно только
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-P4DSWCF6.cjs');
|
|
2
|
+
|
|
3
|
+
// src/use-sync-external-store.ts
|
|
4
|
+
var _compat = require('preact/compat');
|
|
5
|
+
function useSyncExternalStoreWithSelector(subscribe, getSnapshot, _getServerSnapshot, selector, isEqual) {
|
|
6
|
+
const cache = _compat.useRef.call(void 0, { hasValue: false });
|
|
7
|
+
const getSelection = _compat.useMemo.call(void 0, () => {
|
|
8
|
+
let memo = null;
|
|
9
|
+
function select(snapshot) {
|
|
10
|
+
if (memo !== null && Object.is(memo.snapshot, snapshot)) {
|
|
11
|
+
return memo.selection;
|
|
12
|
+
}
|
|
13
|
+
const next = selector(snapshot);
|
|
14
|
+
const previous = memo === null ? cache.current : { hasValue: true, value: memo.selection };
|
|
15
|
+
const selection2 = isEqual !== void 0 && previous.hasValue && isEqual(previous.value, next) ? previous.value : next;
|
|
16
|
+
memo = { selection: selection2, snapshot };
|
|
17
|
+
return selection2;
|
|
18
|
+
}
|
|
19
|
+
return () => select(getSnapshot());
|
|
20
|
+
}, [getSnapshot, isEqual, selector]);
|
|
21
|
+
const selection = _compat.useSyncExternalStore.call(void 0, subscribe, getSelection);
|
|
22
|
+
_compat.useEffect.call(void 0, () => {
|
|
23
|
+
cache.current = { hasValue: true, value: selection };
|
|
24
|
+
}, [selection]);
|
|
25
|
+
_compat.useDebugValue.call(void 0, selection);
|
|
26
|
+
return selection;
|
|
27
|
+
}
|
|
28
|
+
var use_sync_external_store_default = { useSyncExternalStore: _compat.useSyncExternalStore, useSyncExternalStoreWithSelector };
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
exports.default = use_sync_external_store_default; exports.useSyncExternalStore = _compat.useSyncExternalStore; exports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useSyncExternalStore } from 'preact/compat';
|
|
2
|
+
export { useSyncExternalStore } from 'preact/compat';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `useSyncExternalStore` с выборкой части снимка.
|
|
6
|
+
*
|
|
7
|
+
* @param subscribe - подписка на изменения хранилища
|
|
8
|
+
* @param getSnapshot - снимок хранилища
|
|
9
|
+
* @param _getServerSnapshot - серверный снимок; у preact его роль играет `getSnapshot`
|
|
10
|
+
* @param selector - выборка из снимка
|
|
11
|
+
* @param isEqual - сравнение двух выборок; без него сравниваются ссылки
|
|
12
|
+
*/
|
|
13
|
+
declare function useSyncExternalStoreWithSelector<Snapshot, Selection>(subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => Snapshot, _getServerSnapshot: (() => Snapshot) | undefined, selector: (snapshot: Snapshot) => Selection, isEqual?: (previous: Selection, next: Selection) => boolean): Selection;
|
|
14
|
+
|
|
15
|
+
declare const _default: {
|
|
16
|
+
useSyncExternalStore: typeof useSyncExternalStore;
|
|
17
|
+
useSyncExternalStoreWithSelector: typeof useSyncExternalStoreWithSelector;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { _default as default, useSyncExternalStoreWithSelector };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useSyncExternalStore } from 'preact/compat';
|
|
2
|
+
export { useSyncExternalStore } from 'preact/compat';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `useSyncExternalStore` с выборкой части снимка.
|
|
6
|
+
*
|
|
7
|
+
* @param subscribe - подписка на изменения хранилища
|
|
8
|
+
* @param getSnapshot - снимок хранилища
|
|
9
|
+
* @param _getServerSnapshot - серверный снимок; у preact его роль играет `getSnapshot`
|
|
10
|
+
* @param selector - выборка из снимка
|
|
11
|
+
* @param isEqual - сравнение двух выборок; без него сравниваются ссылки
|
|
12
|
+
*/
|
|
13
|
+
declare function useSyncExternalStoreWithSelector<Snapshot, Selection>(subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => Snapshot, _getServerSnapshot: (() => Snapshot) | undefined, selector: (snapshot: Snapshot) => Selection, isEqual?: (previous: Selection, next: Selection) => boolean): Selection;
|
|
14
|
+
|
|
15
|
+
declare const _default: {
|
|
16
|
+
useSyncExternalStore: typeof useSyncExternalStore;
|
|
17
|
+
useSyncExternalStoreWithSelector: typeof useSyncExternalStoreWithSelector;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { _default as default, useSyncExternalStoreWithSelector };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import "./chunk-5JBD5THX.js";
|
|
2
|
+
|
|
3
|
+
// src/use-sync-external-store.ts
|
|
4
|
+
import { useDebugValue, useEffect, useMemo, useRef, useSyncExternalStore } from "preact/compat";
|
|
5
|
+
function useSyncExternalStoreWithSelector(subscribe, getSnapshot, _getServerSnapshot, selector, isEqual) {
|
|
6
|
+
const cache = useRef({ hasValue: false });
|
|
7
|
+
const getSelection = useMemo(() => {
|
|
8
|
+
let memo = null;
|
|
9
|
+
function select(snapshot) {
|
|
10
|
+
if (memo !== null && Object.is(memo.snapshot, snapshot)) {
|
|
11
|
+
return memo.selection;
|
|
12
|
+
}
|
|
13
|
+
const next = selector(snapshot);
|
|
14
|
+
const previous = memo === null ? cache.current : { hasValue: true, value: memo.selection };
|
|
15
|
+
const selection2 = isEqual !== void 0 && previous.hasValue && isEqual(previous.value, next) ? previous.value : next;
|
|
16
|
+
memo = { selection: selection2, snapshot };
|
|
17
|
+
return selection2;
|
|
18
|
+
}
|
|
19
|
+
return () => select(getSnapshot());
|
|
20
|
+
}, [getSnapshot, isEqual, selector]);
|
|
21
|
+
const selection = useSyncExternalStore(subscribe, getSelection);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
cache.current = { hasValue: true, value: selection };
|
|
24
|
+
}, [selection]);
|
|
25
|
+
useDebugValue(selection);
|
|
26
|
+
return selection;
|
|
27
|
+
}
|
|
28
|
+
var use_sync_external_store_default = { useSyncExternalStore, useSyncExternalStoreWithSelector };
|
|
29
|
+
export {
|
|
30
|
+
use_sync_external_store_default as default,
|
|
31
|
+
useSyncExternalStore,
|
|
32
|
+
useSyncExternalStoreWithSelector
|
|
33
|
+
};
|