UNPKG

3.82 kBJavaScriptView Raw
1"use strict";
2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3 if (k2 === undefined) k2 = k;
4 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5}) : (function(o, m, k, k2) {
6 if (k2 === undefined) k2 = k;
7 o[k2] = m[k];
8}));
9var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10 Object.defineProperty(o, "default", { enumerable: true, value: v });
11}) : function(o, v) {
12 o["default"] = v;
13});
14var __importStar = (this && this.__importStar) || function (mod) {
15 if (mod && mod.__esModule) return mod;
16 var result = {};
17 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18 __setModuleDefault(result, mod);
19 return result;
20};
21var __importDefault = (this && this.__importDefault) || function (mod) {
22 return (mod && mod.__esModule) ? mod : { "default": mod };
23};
24Object.defineProperty(exports, "__esModule", { value: true });
25exports.createObserveContext = exports.useObserveContext = exports.calculateChangedBits = void 0;
26const react_1 = __importStar(require("react"));
27//@ts-ignore
28const invariant_1 = __importDefault(require("invariant"));
29const utils_1 = require("./utils");
30function useObserveContext(context, nextObserveState) {
31 const stateKeys = getKeys(context._currentValue);
32 // default observe to whole state
33 let observeKeys = stateKeys;
34 if (nextObserveState) {
35 if (utils_1.__DEV__) {
36 invariant_1.default(Array.isArray(nextObserveState), `useState: nextObserveState expected to be an Array of string but ${typeof nextObserveState} was received`);
37 nextObserveState.forEach((observeKey) => {
38 invariant_1.default(stateKeys.includes(observeKey), `useState: nextObserveState expected to be an Array of state keys but ${observeKey} is not one of the state`);
39 });
40 }
41 observeKeys = nextObserveState.sort();
42 }
43 const observeBit = getBits(stateKeys, observeKeys);
44 return readContext(context, observeBit);
45}
46exports.useObserveContext = useObserveContext;
47function getKeys(obj) {
48 return Object.keys(obj).sort();
49}
50function calculateChangedBits(prev, next) {
51 let changed = {};
52 const keys = getKeys(next);
53 if (utils_1.__DEV__) {
54 invariant_1.default(keys.length < 32, `expected return state have property least than 32 but has ${keys.length} property`);
55 }
56 keys.forEach((key) => {
57 if (prev[key] !== next[key]) {
58 changed[key] = next[key];
59 }
60 });
61 const changedKeys = getKeys(changed);
62 const result = getBits(keys, changedKeys);
63 return result;
64}
65exports.calculateChangedBits = calculateChangedBits;
66function getBits(keys, usage) {
67 let result = 0;
68 keys.forEach((key, index) => {
69 if (usage.includes(key)) {
70 // eslint-disable-next-line no-bitwise
71 result |= 1 << index % 31;
72 }
73 });
74 return result;
75}
76const ReactCurrentDispatcher =
77// @ts-ignore
78react_1.default.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
79 .ReactCurrentDispatcher;
80function readContext(Context, observedBits) {
81 const dispatcher = ReactCurrentDispatcher.current;
82 if (dispatcher === null) {
83 throw new Error("react-principal: useState and useDispatch may only be called from within a " +
84 "component's render. They are not supported in event handlers or " +
85 "lifecycle methods.");
86 }
87 return dispatcher.readContext(Context, observedBits);
88}
89function createObserveContext(defaultValue) {
90 return react_1.createContext(defaultValue, calculateChangedBits);
91}
92exports.createObserveContext = createObserveContext;
93//# sourceMappingURL=observe.js.map
\No newline at end of file