@webkrafters/react-observable-context 6.0.0-rc.2 → 6.0.0-rc.3

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.
@@ -0,0 +1,2 @@
1
+ export { CLEAR_TAG, DELETE_TAG, GLOBAL_SELECTOR, MOVE_TAG, NULL_SELECTOR, PUSH_TAG, REPLACE_TAG, SET_TAG, SPLICE_TAG, Tag } from '@webkrafters/auto-immutable';
2
+ export declare const FULL_STATE_SELECTOR = "@@STATE";
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FULL_STATE_SELECTOR = exports.Tag = exports.SPLICE_TAG = exports.SET_TAG = exports.REPLACE_TAG = exports.PUSH_TAG = exports.NULL_SELECTOR = exports.MOVE_TAG = exports.GLOBAL_SELECTOR = exports.DELETE_TAG = exports.CLEAR_TAG = void 0;
7
+ var auto_immutable_1 = require("@webkrafters/auto-immutable");
8
+ Object.defineProperty(exports, "CLEAR_TAG", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return auto_immutable_1.CLEAR_TAG;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "DELETE_TAG", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return auto_immutable_1.DELETE_TAG;
18
+ }
19
+ });
20
+ Object.defineProperty(exports, "GLOBAL_SELECTOR", {
21
+ enumerable: true,
22
+ get: function get() {
23
+ return auto_immutable_1.GLOBAL_SELECTOR;
24
+ }
25
+ });
26
+ Object.defineProperty(exports, "MOVE_TAG", {
27
+ enumerable: true,
28
+ get: function get() {
29
+ return auto_immutable_1.MOVE_TAG;
30
+ }
31
+ });
32
+ Object.defineProperty(exports, "NULL_SELECTOR", {
33
+ enumerable: true,
34
+ get: function get() {
35
+ return auto_immutable_1.NULL_SELECTOR;
36
+ }
37
+ });
38
+ Object.defineProperty(exports, "PUSH_TAG", {
39
+ enumerable: true,
40
+ get: function get() {
41
+ return auto_immutable_1.PUSH_TAG;
42
+ }
43
+ });
44
+ Object.defineProperty(exports, "REPLACE_TAG", {
45
+ enumerable: true,
46
+ get: function get() {
47
+ return auto_immutable_1.REPLACE_TAG;
48
+ }
49
+ });
50
+ Object.defineProperty(exports, "SET_TAG", {
51
+ enumerable: true,
52
+ get: function get() {
53
+ return auto_immutable_1.SET_TAG;
54
+ }
55
+ });
56
+ Object.defineProperty(exports, "SPLICE_TAG", {
57
+ enumerable: true,
58
+ get: function get() {
59
+ return auto_immutable_1.SPLICE_TAG;
60
+ }
61
+ });
62
+ Object.defineProperty(exports, "Tag", {
63
+ enumerable: true,
64
+ get: function get() {
65
+ return auto_immutable_1.Tag;
66
+ }
67
+ });
68
+ exports.FULL_STATE_SELECTOR = '@@STATE';
@@ -0,0 +1,88 @@
1
+ import type { ComponentType, ForwardRefExoticComponent, MemoExoticComponent, NamedExoticComponent, ReactNode, PropsWithoutRef, RefAttributes } from 'react';
2
+ import type { Changes as BaseChanges, Connection, Immutable, Value } from '@webkrafters/auto-immutable';
3
+ import { FULL_STATE_SELECTOR } from './constants';
4
+ export type { BaseType, ClearCommand, KeyType, MoveCommand, PushCommand, ReplaceCommand, SetCommand, SpliceCommand, TagCommand, TagType, UpdateStats, UpdatePayload, UpdatePayloadArray } from '@webkrafters/auto-immutable';
5
+ export type State = Value;
6
+ export type Listener<T extends State = {}> = (changes: Changes<T>, changedPathsTokens: Readonly<Array<Array<string>>>, netChanges: Readonly<T>, mayHaveChangesAt: (pathTokens: Array<string>) => boolean) => void;
7
+ export type ObservableProvider<T extends State> = ForwardRefExoticComponent<ProviderProps<T> & RefAttributes<StoreRef<T>>>;
8
+ export interface ProviderProps<T extends State> {
9
+ children?: ReactNode;
10
+ prehooks?: Prehooks<T>;
11
+ storage?: IStorage<T>;
12
+ value: PartialState<T>;
13
+ }
14
+ export type ConnectProps<OWNPROPS extends OwnProps = IProps, STATE extends State = State, SELECTOR_MAP extends SelectorMap = SelectorMap> = {
15
+ [K in keyof Store<STATE, SELECTOR_MAP>]: Store<STATE, SELECTOR_MAP>[K];
16
+ } & Omit<OWNPROPS, "ref"> & RefAttributes<OWNPROPS["ref"]>;
17
+ export type ConnectedComponent<P extends OwnProps = IProps> = MemoExoticComponent<ForwardRefExoticComponent<PropsWithoutRef<Omit<P, "ref">> & RefAttributes<P["ref"]>>>;
18
+ export type PropsExtract<C, STATE extends State, SELECTOR_MAP extends SelectorMap> = C extends ComponentType<ConnectProps<infer U, STATE, SELECTOR_MAP>> ? U extends OwnProps ? U : IProps : C extends NamedExoticComponent<ConnectProps<infer U, STATE, SELECTOR_MAP>> ? U extends OwnProps ? U : IProps : IProps;
19
+ export type ExtractInjectedProps<STATE extends State = State, SELECTOR_MAP extends SelectorMap = SelectorMap, ALL_PROPS extends OwnProps = OwnProps> = Omit<ALL_PROPS, keyof Store<STATE> | keyof SELECTOR_MAP>;
20
+ export interface IProps {
21
+ ref?: unknown;
22
+ }
23
+ export type OwnProps = IProps & Record<any, any>;
24
+ export type Text = string | number;
25
+ export type FullStateSelector = typeof FULL_STATE_SELECTOR;
26
+ export type ObjectSelector = Record<Text, Text | FullStateSelector>;
27
+ export type ArraySelector = Array<Text | FullStateSelector>;
28
+ export type SelectorMap = ObjectSelector | ArraySelector | void;
29
+ type ReplacePathSeps<P extends Text, T extends string> = P extends `${infer U}${T}${infer V}` ? ReplacePathSeps<`${U}.${V}`, T> : P;
30
+ type TrimPathSep<P extends Text> = P extends `${infer U}]${never}` ? U : P;
31
+ type NormalizePath<P extends Text> = TrimPathSep<ReplacePathSeps<ReplacePathSeps<ReplacePathSeps<P, ']['>, '].'>, '['>>;
32
+ type Datum<P extends Text, S extends Record<Text, any> = State> = P extends `${infer K}.${infer P_1}` ? Datum<P_1, S[K]> : P extends '' ? S : any;
33
+ type DataPoint<P extends Text, S extends State> = P extends FullStateSelector ? S : Datum<NormalizePath<P>, S>;
34
+ export type Data<SELECTOR_MAP extends SelectorMap, STATE extends State = State> = (SELECTOR_MAP extends ObjectSelector ? {
35
+ [S_KEY in keyof SELECTOR_MAP]: DataPoint<SELECTOR_MAP[S_KEY], STATE>;
36
+ } : SELECTOR_MAP extends ArraySelector ? {
37
+ [S_NUM: number]: DataPoint<SELECTOR_MAP[number], STATE>;
38
+ } : Array<any>);
39
+ export type Changes<T extends State = State> = BaseChanges<T>;
40
+ export interface IStorage<T extends State = State> {
41
+ clone: (data: T) => T;
42
+ getItem: (key: string) => T;
43
+ removeItem: (key: string) => void;
44
+ setItem: (key: string, data: T) => void;
45
+ }
46
+ export type NonReactUsageReport = (...args: Array<unknown>) => void;
47
+ export type PartialState<T extends State> = T extends Partial<infer U> ? T : Partial<T>;
48
+ export interface Prehooks<T extends State = State> {
49
+ resetState?: (resetData: PartialState<T>, state: {
50
+ current: T;
51
+ original: T;
52
+ }) => boolean;
53
+ setState?: (newChanges: Changes<T>) => boolean;
54
+ }
55
+ export type Subscribe = <T extends State>(listener: Listener<T>) => Unsubscribe;
56
+ export type Unsubscribe = (...args: Array<unknown>) => void;
57
+ export interface IStore {
58
+ resetState: Function;
59
+ setState: Function;
60
+ }
61
+ export interface IStoreInternal extends IStore {
62
+ subscribe: Function;
63
+ }
64
+ export interface Store<T extends State, SELECTOR_MAP extends SelectorMap = SelectorMap> extends IStore {
65
+ data: Data<SELECTOR_MAP>;
66
+ resetState: (propertyPaths?: Array<string>) => void;
67
+ setState: (changes: Changes<T>) => void;
68
+ }
69
+ export interface StoreInternal<T extends State> extends IStoreInternal {
70
+ cache: Immutable<Partial<T>>;
71
+ resetState: (connection: Connection<T>, propertyPaths?: Array<string>) => void;
72
+ setState: (connection: Connection<T>, changes: Changes<T>) => void;
73
+ subscribe: Subscribe;
74
+ }
75
+ export interface StorePlaceholder extends IStoreInternal {
76
+ getState: NonReactUsageReport;
77
+ resetState: NonReactUsageReport;
78
+ setState: NonReactUsageReport;
79
+ subscribe: NonReactUsageReport;
80
+ }
81
+ export interface StoreRef<T extends State = State> extends StorePlaceholder {
82
+ getState: (propertyPaths?: Array<string>) => T;
83
+ resetState: (propertyPaths?: Array<string>) => void;
84
+ setState: (changes: Changes<T>) => void;
85
+ subscribe: Subscribe;
86
+ }
87
+ export { CLEAR_TAG, DELETE_TAG, FULL_STATE_SELECTOR, MOVE_TAG, NULL_SELECTOR, PUSH_TAG, REPLACE_TAG, SET_TAG, SPLICE_TAG, Tag, } from './constants';
88
+ export { connect, createContext, ObservableContext, UsageError, useContext } from './main';
@@ -0,0 +1,3 @@
1
+ import type { Prehooks, State } from '../../..';
2
+ declare function usePrehooksRef<T extends State>(prehooks: Prehooks<T>): import("react").MutableRefObject<Prehooks<T>>;
3
+ export default usePrehooksRef;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var react_1 = require("react");
7
+ function usePrehooksRef(prehooks) {
8
+ var prehooksRef = (0, react_1.useRef)(prehooks);
9
+ (0, react_1.useEffect)(function () {
10
+ prehooksRef.current = prehooks;
11
+ }, [prehooks]);
12
+ return prehooksRef;
13
+ }
14
+ ;
15
+ exports["default"] = usePrehooksRef;
@@ -0,0 +1,5 @@
1
+ import type { ArraySelector, ObjectSelector, SelectorMap, Text } from '../../..';
2
+ declare function useRenderKeyProvider(selectorMap: ArraySelector): Array<Text>;
3
+ declare function useRenderKeyProvider(selectorMap: ObjectSelector): Array<Text>;
4
+ declare function useRenderKeyProvider(selectorMap: SelectorMap): Array<Text>;
5
+ export default useRenderKeyProvider;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
4
+ return mod && mod.__esModule ? mod : {
5
+ "default": mod
6
+ };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", {
9
+ value: true
10
+ });
11
+ var react_1 = require("react");
12
+ var lodash_isplainobject_1 = __importDefault(require("lodash.isplainobject"));
13
+ function getCurrKeys(selectorMap) {
14
+ if ((0, lodash_isplainobject_1["default"])(selectorMap) || Array.isArray(selectorMap)) {
15
+ return Array.from(new Set(Object.values(selectorMap)));
16
+ }
17
+ if (typeof selectorMap === 'undefined' || selectorMap === null) {
18
+ return [];
19
+ }
20
+ throw new TypeError('Incompatible Selector Map type provided.');
21
+ }
22
+ ;
23
+ function useRenderKeyProvider(selectorMap) {
24
+ var renderKeys = (0, react_1.useRef)([]);
25
+ return (0, react_1.useMemo)(function () {
26
+ var currKeys = getCurrKeys(selectorMap);
27
+ if (renderKeys.current.length !== currKeys.length || renderKeys.current.some(function (k, i) {
28
+ return k !== currKeys[i];
29
+ })) {
30
+ renderKeys.current = currKeys;
31
+ }
32
+ return renderKeys.current;
33
+ }, [selectorMap]);
34
+ }
35
+ ;
36
+ exports["default"] = useRenderKeyProvider;
@@ -0,0 +1,10 @@
1
+ import type { IStorage, StoreInternal, PartialState, Prehooks, State } from '../../..';
2
+ export declare const deps: {
3
+ createStorageKey: () => string;
4
+ };
5
+ interface CurrentStorage<T extends State> extends IStorage<T> {
6
+ isKeyRequired?: boolean;
7
+ }
8
+ /** @param storage - is Closed to modification post-initialization */
9
+ declare const useStore: <T extends State>(prehooks: Prehooks<T>, value: PartialState<T>, storage?: CurrentStorage<T>) => StoreInternal<T>;
10
+ export default useStore;
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ var _excluded = ["length"],
5
+ _excluded2 = ["length"];
6
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
7
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
8
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
9
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
10
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
17
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
19
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
20
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
21
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
22
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
23
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
25
+ return mod && mod.__esModule ? mod : {
26
+ "default": mod
27
+ };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", {
30
+ value: true
31
+ });
32
+ exports.deps = void 0;
33
+ var react_1 = require("react");
34
+ var lodash_isboolean_1 = __importDefault(require("lodash.isboolean"));
35
+ var lodash_isempty_1 = __importDefault(require("lodash.isempty"));
36
+ var data_distillery_1 = __importDefault(require("@webkrafters/data-distillery"));
37
+ var path_dotize_1 = __importDefault(require("@webkrafters/path-dotize"));
38
+ var auto_immutable_1 = __importDefault(require("@webkrafters/auto-immutable"));
39
+ var constants_1 = require("../../../constants");
40
+ var storage_1 = __importDefault(require("../../../model/storage"));
41
+ var use_prehooks_ref_1 = __importDefault(require("../use-prehooks-ref"));
42
+ var iCount = -1;
43
+ var createStorageKey = function createStorageKey() {
44
+ return "".concat(++iCount, ":").concat(Date.now(), ":").concat(Math.random());
45
+ };
46
+ // to facilitate testing
47
+ exports.deps = {
48
+ createStorageKey: createStorageKey
49
+ };
50
+ function runPrehook(prehooks, name, args) {
51
+ if (!(name in prehooks)) {
52
+ return true;
53
+ }
54
+ var res = prehooks[name].apply(prehooks, _toConsumableArray(args));
55
+ if (!(0, lodash_isboolean_1["default"])(res)) {
56
+ throw new TypeError("`".concat(name, "` prehook must return a boolean value."));
57
+ }
58
+ return res;
59
+ }
60
+ var consumer = {};
61
+ function transformPayload(payload) {
62
+ if ((0, lodash_isempty_1["default"])(payload) || !(constants_1.FULL_STATE_SELECTOR in payload)) {
63
+ return payload;
64
+ }
65
+ payload = _objectSpread(_objectSpread({}, payload), {}, _defineProperty({}, constants_1.GLOBAL_SELECTOR, payload[constants_1.FULL_STATE_SELECTOR]));
66
+ delete payload[constants_1.FULL_STATE_SELECTOR];
67
+ return payload;
68
+ }
69
+ /** @param storage - is Closed to modification post-initialization */
70
+ var useStore = function useStore(prehooks, value, storage) {
71
+ var connKey = (0, react_1.useRef)();
72
+ var mounted = (0, react_1.useRef)(false);
73
+ var prehooksRef = (0, use_prehooks_ref_1["default"])(prehooks);
74
+ var storageKey = (0, react_1.useRef)();
75
+ var _ref = (0, react_1.useState)(function () {
76
+ if (connKey.current === undefined) {
77
+ var _cache = new auto_immutable_1["default"](value);
78
+ var self = _cache.connect();
79
+ connKey.current = self.instanceId;
80
+ consumer[connKey.current] = {
81
+ cache: _cache,
82
+ self: self
83
+ };
84
+ }
85
+ return [consumer[connKey.current].cache, consumer[connKey.current].self];
86
+ }),
87
+ _ref2 = _slicedToArray(_ref, 1),
88
+ _ref2$ = _slicedToArray(_ref2[0], 2),
89
+ cache = _ref2$[0],
90
+ ownConnection = _ref2$[1];
91
+ var _ref3 = (0, react_1.useState)(function () {
92
+ return new Set();
93
+ }),
94
+ _ref4 = _slicedToArray(_ref3, 1),
95
+ listeners = _ref4[0];
96
+ var _ref5 = (0, react_1.useState)(function () {
97
+ var isKeyRequired = true;
98
+ var _storage = storage;
99
+ if (!storage) {
100
+ _storage = new storage_1["default"]();
101
+ isKeyRequired = _storage.isKeyRequired;
102
+ }
103
+ storageKey.current = isKeyRequired ? exports.deps.createStorageKey() : null;
104
+ return _storage;
105
+ }),
106
+ _ref6 = _slicedToArray(_ref5, 1),
107
+ _storage = _ref6[0];
108
+ var getChangHandler = (0, react_1.useCallback)(function (changes) {
109
+ return function (netChanges, changedPathsTokens) {
110
+ var mayHaveChangesAt = createChangePathSearch(changedPathsTokens);
111
+ listeners.forEach(function (listener) {
112
+ return listener(changes, changedPathsTokens, netChanges, mayHaveChangesAt);
113
+ });
114
+ };
115
+ }, []);
116
+ var resetState = (0, react_1.useCallback)(function (connection) {
117
+ var propertyPaths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
118
+ var original = _storage.clone(_storage.getItem(storageKey.current));
119
+ var resetData;
120
+ if (!propertyPaths.length) {
121
+ resetData = {};
122
+ } else if (propertyPaths.includes(constants_1.FULL_STATE_SELECTOR)) {
123
+ resetData = (0, lodash_isempty_1["default"])(original) ? constants_1.CLEAR_TAG : _defineProperty({}, constants_1.REPLACE_TAG, original);
124
+ } else {
125
+ var visitedPathMap = {};
126
+ var transformer = function transformer(_ref8) {
127
+ var trail = _ref8.trail,
128
+ value = _ref8.value;
129
+ visitedPathMap[trail.join('.')] = null;
130
+ return _defineProperty({}, constants_1.REPLACE_TAG, value);
131
+ };
132
+ resetData = (0, data_distillery_1["default"])(original, propertyPaths, transformer);
133
+ if (Object.keys(visitedPathMap).length < propertyPaths.length) {
134
+ var _iterator = _createForOfIteratorHelper(propertyPaths),
135
+ _step;
136
+ try {
137
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
138
+ var path = _step.value;
139
+ path = (0, path_dotize_1["default"])(path);
140
+ if (path in visitedPathMap) {
141
+ continue;
142
+ }
143
+ var trail = path.split('.');
144
+ var keyTuple = trail.slice(-1);
145
+ trail = trail.slice(0, -1);
146
+ var node = resetData;
147
+ var _iterator2 = _createForOfIteratorHelper(trail),
148
+ _step2;
149
+ try {
150
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
151
+ var t = _step2.value;
152
+ if ((0, lodash_isempty_1["default"])(node[t])) {
153
+ node[t] = {};
154
+ }
155
+ node = node[t];
156
+ }
157
+ } catch (err) {
158
+ _iterator2.e(err);
159
+ } finally {
160
+ _iterator2.f();
161
+ }
162
+ if (constants_1.DELETE_TAG in node) {
163
+ var _node$constants_1$DEL;
164
+ (_node$constants_1$DEL = node[constants_1.DELETE_TAG]).push.apply(_node$constants_1$DEL, _toConsumableArray(keyTuple));
165
+ } else {
166
+ node[constants_1.DELETE_TAG] = keyTuple;
167
+ }
168
+ }
169
+ } catch (err) {
170
+ _iterator.e(err);
171
+ } finally {
172
+ _iterator.f();
173
+ }
174
+ }
175
+ }
176
+ runPrehook(prehooksRef.current, 'resetState', [resetData, {
177
+ current: connection.get(constants_1.GLOBAL_SELECTOR)[constants_1.GLOBAL_SELECTOR],
178
+ original: original
179
+ }]) && connection.set(resetData, getChangHandler(resetData));
180
+ }, []);
181
+ var setState = (0, react_1.useCallback)(function (connection, changes) {
182
+ if (!runPrehook(prehooksRef.current, 'setState', [changes])) {
183
+ return;
184
+ }
185
+ if (!Array.isArray(changes)) {
186
+ changes = transformPayload(changes);
187
+ } else {
188
+ changes = changes.slice();
189
+ for (var c = changes.length; c--;) {
190
+ changes[c] = transformPayload(changes[c]);
191
+ }
192
+ }
193
+ connection.set(changes, getChangHandler(changes));
194
+ }, []);
195
+ var subscribe = (0, react_1.useCallback)(function (listener) {
196
+ listeners.add(listener);
197
+ return function () {
198
+ return listeners["delete"](listener);
199
+ };
200
+ }, []);
201
+ (0, react_1.useEffect)(function () {
202
+ var sKey = storageKey.current;
203
+ _storage.setItem(sKey, _storage.clone(value));
204
+ return function () {
205
+ _storage.removeItem(sKey);
206
+ ownConnection.disconnect();
207
+ delete consumer[connKey.current];
208
+ connKey.current = undefined;
209
+ cache.close();
210
+ listeners.clear();
211
+ };
212
+ }, []);
213
+ (0, react_1.useEffect)(function () {
214
+ if (!mounted.current) {
215
+ mounted.current = true;
216
+ return;
217
+ }
218
+ setState(ownConnection, value);
219
+ }, [value]);
220
+ return (0, react_1.useState)(function () {
221
+ return {
222
+ cache: cache,
223
+ resetState: resetState,
224
+ setState: setState,
225
+ subscribe: subscribe
226
+ };
227
+ })[0];
228
+ };
229
+ exports["default"] = useStore;
230
+ /**
231
+ * @param {string[][]} changedPathsTokens - list containing tokenized changed object paths.
232
+ * @returns {Function} - function verifying that a random tokenized object path falls within the changed paths domain.
233
+ */
234
+ function createChangePathSearch(_ref0) {
235
+ var length = _ref0.length,
236
+ pathTokenGroups = _objectWithoutProperties(_ref0, _excluded);
237
+ var root = {};
238
+ for (var g = 0; g < length; g++) {
239
+ for (var obj = root, tokens = pathTokenGroups[g], tLen = tokens.length, t = 0; t < tLen; t++) {
240
+ var key = tokens[t];
241
+ if (!(key in obj)) {
242
+ obj[key] = {};
243
+ }
244
+ obj = obj[key];
245
+ }
246
+ }
247
+ return function (_ref1) {
248
+ var length = _ref1.length,
249
+ pathTokens = _objectWithoutProperties(_ref1, _excluded2);
250
+ var obj = root;
251
+ for (var p = 0; p < length; p++) {
252
+ var _key = pathTokens[p];
253
+ if (_key in obj) {
254
+ obj = obj[_key];
255
+ continue;
256
+ }
257
+ return !Object.keys(obj).length;
258
+ }
259
+ return true;
260
+ };
261
+ }
@@ -0,0 +1,58 @@
1
+ import type { ElementType, NamedExoticComponent } from 'react';
2
+ import type { ConnectedComponent, ConnectProps, ExtractInjectedProps, IStoreInternal, ObservableProvider, SelectorMap, State, Store } from '..';
3
+ import React from 'react';
4
+ declare const __CTX_SYM__: unique symbol;
5
+ export declare class ObservableContext<T extends State> {
6
+ private cxt;
7
+ private provider;
8
+ constructor();
9
+ get [__CTX_SYM__](): React.Context<IStoreInternal>;
10
+ get Consumer(): React.Consumer<IStoreInternal>;
11
+ get Provider(): ObservableProvider<T>;
12
+ }
13
+ export declare function createContext<T extends State = State>(): ObservableContext<T>;
14
+ /**
15
+ * Actively monitors the store and triggers component re-render if any of the watched keys in the state objects changes
16
+ *
17
+ * @param context - Refers to the PublicObservableContext<T> type of the ObservableContext<T>
18
+ * @param [selectorMap = {}] - Key:value pairs where `key` => arbitrary key given to a Store.data property holding a state slice and `value` => property path to a state slice used by this component: see examples below. May add a mapping for a certain arbitrary key='state' and value='@@STATE' to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using '@@STATE', note that any change within the state object will result in this component render.
19
+ * @see {ObservableContext<STATE>}
20
+ *
21
+ * @example
22
+ * a valid property path follows the `lodash` object property path convention.
23
+ * for a state = { a: 1, b: 2, c: 3, d: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] } }
24
+ * Any of the following is an applicable selector map.
25
+ * ['d', 'a'] => {
26
+ * 0: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] },
27
+ * 1: 1
28
+ * }
29
+ * {myData: 'd', count: 'a'} => {
30
+ * myData: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] },
31
+ * count: 1
32
+ * }
33
+ * {count: 'a'} => {count: 1} // same applies to {count: 'b'} = {count: 2}; {count: 'c'} = {count: 3}
34
+ * {myData: 'd'} => {mydata: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] }}
35
+ * {xyz: 'd.e'} => {xyz: 5}
36
+ * {def: 'd.e.f'} => {def: [6, { x: 7, y: 8, z: 9 } ]}
37
+ * {f1: 'd.e.f[0]'} or {f1: 'd.e.f.0'} => {f1: 6}
38
+ * {secondFElement: 'd.e.f[1]'} or {secondFElement: 'd.e.f.1'} => {secondFElement: { x: 7, y: 8, z: 9 }}
39
+ * {myX: 'd.e.f[1].x'} or {myX: 'd.e.f.1.x'} => {myX: 7} // same applies to {myY: 'd.e.f[1].y'} = {myY: 8}; {myZ: 'd.e.f[1].z'} = {myZ: 9}
40
+ * {myData: '@@STATE'} => {myData: state}
41
+ */
42
+ export declare function useContext<STATE extends State, SELECTOR_MAP extends SelectorMap>(context: ObservableContext<STATE>, selectorMap?: SELECTOR_MAP): Store<STATE, SELECTOR_MAP>;
43
+ /**
44
+ * Provides an HOC function for connecting its WrappedComponent argument to the context store.
45
+ *
46
+ * The HOC function automatically memoizes any un-memoized WrappedComponent argument.
47
+ *
48
+ * @param context - Refers to the PublicObservableContext<T> type of the ObservableContext<T>
49
+ * @param [selectorMap] - Key:value pairs where `key` => arbitrary key given to a Store.data property holding a state slice and `value` => property path to a state slice used by this component: see examples below. May add a mapping for a certain arbitrary key='state' and value='@@STATE' to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using '@@STATE', note that any change within the state object will result in this component render.
50
+ * @see {useContext} for selectorMap sample
51
+ */
52
+ export declare function connect<STATE extends State = State, SELECTOR_MAP extends SelectorMap = SelectorMap>(context: ObservableContext<STATE>, selectorMap?: SELECTOR_MAP): {
53
+ <P extends ExtractInjectedProps<STATE, SELECTOR_MAP>>(WrappedComponent: ElementType<ConnectProps<P, STATE, SELECTOR_MAP>>): ConnectedComponent<P>;
54
+ <P extends ExtractInjectedProps<STATE, SELECTOR_MAP>>(WrappedComponent: NamedExoticComponent<ConnectProps<P, STATE, SELECTOR_MAP>>): ConnectedComponent<P>;
55
+ };
56
+ export declare class UsageError extends Error {
57
+ }
58
+ export {};
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+
3
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
4
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
5
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
6
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
7
+ function _wrapNativeSuper(t) { var r = "function" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }
8
+ function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
9
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
10
+ function _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf("[native code]"); } catch (n) { return "function" == typeof t; } }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
17
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
18
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
20
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
21
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
22
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
24
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
25
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
26
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
27
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
28
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
29
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
30
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
31
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
32
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
33
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
34
+ if (k2 === undefined) k2 = k;
35
+ var desc = Object.getOwnPropertyDescriptor(m, k);
36
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
37
+ desc = {
38
+ enumerable: true,
39
+ get: function get() {
40
+ return m[k];
41
+ }
42
+ };
43
+ }
44
+ Object.defineProperty(o, k2, desc);
45
+ } : function (o, m, k, k2) {
46
+ if (k2 === undefined) k2 = k;
47
+ o[k2] = m[k];
48
+ });
49
+ var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
50
+ Object.defineProperty(o, "default", {
51
+ enumerable: true,
52
+ value: v
53
+ });
54
+ } : function (o, v) {
55
+ o["default"] = v;
56
+ });
57
+ var __importStar = void 0 && (void 0).__importStar || function () {
58
+ var _ownKeys = function ownKeys(o) {
59
+ _ownKeys = Object.getOwnPropertyNames || function (o) {
60
+ var ar = [];
61
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
62
+ return ar;
63
+ };
64
+ return _ownKeys(o);
65
+ };
66
+ return function (mod) {
67
+ if (mod && mod.__esModule) return mod;
68
+ var result = {};
69
+ if (mod != null) for (var k = _ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
70
+ __setModuleDefault(result, mod);
71
+ return result;
72
+ };
73
+ }();
74
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
75
+ return mod && mod.__esModule ? mod : {
76
+ "default": mod
77
+ };
78
+ };
79
+ Object.defineProperty(exports, "__esModule", {
80
+ value: true
81
+ });
82
+ exports.UsageError = exports.ObservableContext = void 0;
83
+ exports.createContext = createContext;
84
+ exports.useContext = useContext;
85
+ exports.connect = connect;
86
+ var react_1 = __importStar(require("react"));
87
+ var lodash_isequal_1 = __importDefault(require("lodash.isequal"));
88
+ var lodash_isplainobject_1 = __importDefault(require("lodash.isplainobject"));
89
+ var lodash_omit_1 = __importDefault(require("lodash.omit"));
90
+ var lodash_set_1 = __importDefault(require("lodash.set"));
91
+ var path_dotize_1 = __importDefault(require("@webkrafters/path-dotize"));
92
+ var constants = __importStar(require("../constants"));
93
+ var use_render_key_provider_1 = __importDefault(require("./hooks/use-render-key-provider"));
94
+ var use_store_1 = __importDefault(require("./hooks/use-store"));
95
+ var __CTX_SYM__ = Symbol('Context Symbol');
96
+ var reportNonReactUsage = function reportNonReactUsage() {
97
+ throw new UsageError('Detected usage outside of this context\'s Provider component tree. Please apply the exported Provider component');
98
+ };
99
+ var ObservableContext = /*#__PURE__*/function () {
100
+ function ObservableContext() {
101
+ _classCallCheck(this, ObservableContext);
102
+ this.cxt = (0, react_1.createContext)({
103
+ getState: reportNonReactUsage,
104
+ resetState: reportNonReactUsage,
105
+ setState: reportNonReactUsage,
106
+ subscribe: reportNonReactUsage
107
+ });
108
+ this.provider = makeObservable(this.cxt.Provider);
109
+ }
110
+ return _createClass(ObservableContext, [{
111
+ key: __CTX_SYM__,
112
+ get: function get() {
113
+ return this.cxt;
114
+ }
115
+ }, {
116
+ key: "Consumer",
117
+ get: function get() {
118
+ return this.cxt.Consumer;
119
+ }
120
+ }, {
121
+ key: "Provider",
122
+ get: function get() {
123
+ return this.provider;
124
+ }
125
+ }]);
126
+ }();
127
+ exports.ObservableContext = ObservableContext;
128
+ function createContext() {
129
+ return new ObservableContext();
130
+ }
131
+ ;
132
+ var connRegister = {};
133
+ function getConnectionFrom(connKey, cache) {
134
+ if (connKey.current === undefined) {
135
+ try {
136
+ var connection = cache.connect();
137
+ connKey.current = connection.instanceId;
138
+ connRegister[connKey.current] = connection;
139
+ } catch (e) {
140
+ reportNonReactUsage();
141
+ }
142
+ }
143
+ return connRegister[connKey.current];
144
+ }
145
+ /**
146
+ * Actively monitors the store and triggers component re-render if any of the watched keys in the state objects changes
147
+ *
148
+ * @param context - Refers to the PublicObservableContext<T> type of the ObservableContext<T>
149
+ * @param [selectorMap = {}] - Key:value pairs where `key` => arbitrary key given to a Store.data property holding a state slice and `value` => property path to a state slice used by this component: see examples below. May add a mapping for a certain arbitrary key='state' and value='@@STATE' to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using '@@STATE', note that any change within the state object will result in this component render.
150
+ * @see {ObservableContext<STATE>}
151
+ *
152
+ * @example
153
+ * a valid property path follows the `lodash` object property path convention.
154
+ * for a state = { a: 1, b: 2, c: 3, d: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] } }
155
+ * Any of the following is an applicable selector map.
156
+ * ['d', 'a'] => {
157
+ * 0: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] },
158
+ * 1: 1
159
+ * }
160
+ * {myData: 'd', count: 'a'} => {
161
+ * myData: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] },
162
+ * count: 1
163
+ * }
164
+ * {count: 'a'} => {count: 1} // same applies to {count: 'b'} = {count: 2}; {count: 'c'} = {count: 3}
165
+ * {myData: 'd'} => {mydata: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] }}
166
+ * {xyz: 'd.e'} => {xyz: 5}
167
+ * {def: 'd.e.f'} => {def: [6, { x: 7, y: 8, z: 9 } ]}
168
+ * {f1: 'd.e.f[0]'} or {f1: 'd.e.f.0'} => {f1: 6}
169
+ * {secondFElement: 'd.e.f[1]'} or {secondFElement: 'd.e.f.1'} => {secondFElement: { x: 7, y: 8, z: 9 }}
170
+ * {myX: 'd.e.f[1].x'} or {myX: 'd.e.f.1.x'} => {myX: 7} // same applies to {myY: 'd.e.f[1].y'} = {myY: 8}; {myZ: 'd.e.f[1].z'} = {myZ: 9}
171
+ * {myData: '@@STATE'} => {myData: state}
172
+ */
173
+ function useContext(context, selectorMap) {
174
+ var _react_1$default$useC = react_1["default"].useContext(context[__CTX_SYM__]),
175
+ cache = _react_1$default$useC.cache,
176
+ _resetState = _react_1$default$useC.resetState,
177
+ _setState = _react_1$default$useC.setState,
178
+ subscribe = _react_1$default$useC.subscribe;
179
+ var connKey = (0, react_1.useRef)();
180
+ var _react_1$default$useS = react_1["default"].useState(function () {
181
+ return getConnectionFrom(connKey, cache);
182
+ }),
183
+ _react_1$default$useS2 = _slicedToArray(_react_1$default$useS, 1),
184
+ connection = _react_1$default$useS2[0];
185
+ var _renderKeys = (0, use_render_key_provider_1["default"])(selectorMap);
186
+ var refineKeys = function refineKeys() {
187
+ var rKeys = _renderKeys.slice();
188
+ if (fullStateSelectorIndex !== -1) {
189
+ rKeys[fullStateSelectorIndex] = constants.GLOBAL_SELECTOR;
190
+ }
191
+ return rKeys;
192
+ };
193
+ /* Reverses selectorMap i.e. {selectorKey: propertyPath} => {propertyPath: selectorKey} */
194
+ var _ref = (0, react_1.useMemo)(function () {
195
+ var map = {};
196
+ if (!_renderKeys.length) {
197
+ return [map, _renderKeys.indexOf(constants.FULL_STATE_SELECTOR)];
198
+ }
199
+ for (var selectorKey in selectorMap) {
200
+ map[selectorMap[selectorKey]] = selectorKey;
201
+ }
202
+ return [map, _renderKeys.indexOf(constants.FULL_STATE_SELECTOR)];
203
+ }, [_renderKeys]),
204
+ _ref2 = _slicedToArray(_ref, 2),
205
+ selectorMapInverse = _ref2[0],
206
+ fullStateSelectorIndex = _ref2[1];
207
+ var _react_1$default$useS3 = react_1["default"].useState(function () {
208
+ var _connection;
209
+ var data = {};
210
+ if (!_renderKeys.length) {
211
+ return data;
212
+ }
213
+ var state = (_connection = connection).get.apply(_connection, _toConsumableArray(refineKeys()));
214
+ var _iterator = _createForOfIteratorHelper(_renderKeys),
215
+ _step;
216
+ try {
217
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
218
+ var propertyPath = _step.value;
219
+ data[selectorMapInverse[propertyPath]] = state[propertyPath === constants.FULL_STATE_SELECTOR ? constants.GLOBAL_SELECTOR : propertyPath];
220
+ }
221
+ } catch (err) {
222
+ _iterator.e(err);
223
+ } finally {
224
+ _iterator.f();
225
+ }
226
+ return data;
227
+ }),
228
+ _react_1$default$useS4 = _slicedToArray(_react_1$default$useS3, 2),
229
+ data = _react_1$default$useS4[0],
230
+ setData = _react_1$default$useS4[1];
231
+ var dataSourceListener = function dataSourceListener(changes, changePathsTokens, netChanges, mayHaveChangesAt) {
232
+ for (var _Len = _renderKeys.length, _ = 0; _ < _Len; _++) {
233
+ if (_renderKeys[_] !== constants.FULL_STATE_SELECTOR && !mayHaveChangesAt((0, path_dotize_1["default"])(_renderKeys[_]).split('.'))) {
234
+ continue;
235
+ }
236
+ return updateData();
237
+ }
238
+ };
239
+ var updateData = function updateData() {
240
+ var _connection2;
241
+ var hasChanges = false;
242
+ var state = (_connection2 = connection).get.apply(_connection2, _toConsumableArray(refineKeys()));
243
+ var _iterator2 = _createForOfIteratorHelper(_renderKeys),
244
+ _step2;
245
+ try {
246
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
247
+ var propertyPath = _step2.value;
248
+ var selectorKey = selectorMapInverse[propertyPath];
249
+ if (propertyPath === constants.FULL_STATE_SELECTOR) {
250
+ if (data[selectorKey] === state[constants.GLOBAL_SELECTOR]) {
251
+ continue;
252
+ }
253
+ data[selectorKey] = state[constants.GLOBAL_SELECTOR];
254
+ hasChanges = true;
255
+ continue;
256
+ }
257
+ if (data[selectorKey] === state[propertyPath]) {
258
+ continue;
259
+ }
260
+ data[selectorKey] = state[propertyPath];
261
+ hasChanges = true;
262
+ }
263
+ } catch (err) {
264
+ _iterator2.e(err);
265
+ } finally {
266
+ _iterator2.f();
267
+ }
268
+ hasChanges && setData(_objectSpread({}, data));
269
+ };
270
+ var resetState = (0, react_1.useCallback)(function () {
271
+ var propertyPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _renderKeys;
272
+ return _resetState(connection, propertyPath);
273
+ }, [_resetState, connection]);
274
+ var setState = (0, react_1.useCallback)(function (changes) {
275
+ return _setState(connection, changes);
276
+ }, [_setState, connection]);
277
+ react_1["default"].useEffect(function () {
278
+ // istanbul ignore if
279
+ if (cache.closed) {
280
+ return;
281
+ }
282
+ connection = getConnectionFrom(connKey, cache);
283
+ if (!_renderKeys.length) {
284
+ var _default = {};
285
+ !(0, lodash_isequal_1["default"])(_default, data) && setData(_default);
286
+ return;
287
+ }
288
+ for (var selectorKey in data) {
289
+ if (!(selectorMap[selectorKey] in selectorMapInverse)) {
290
+ delete data[selectorKey];
291
+ }
292
+ }
293
+ var unsubscribe = subscribe(dataSourceListener);
294
+ updateData();
295
+ return function () {
296
+ if (cache.closed) {
297
+ return;
298
+ }
299
+ unsubscribe();
300
+ connection.disconnect();
301
+ delete connRegister[connKey.current];
302
+ connKey.current = undefined;
303
+ };
304
+ }, [_renderKeys, cache]);
305
+ return (0, react_1.useMemo)(function () {
306
+ return {
307
+ data: data,
308
+ resetState: resetState,
309
+ setState: setState
310
+ };
311
+ }, [data]);
312
+ }
313
+ ;
314
+ /**
315
+ * Provides an HOC function for connecting its WrappedComponent argument to the context store.
316
+ *
317
+ * The HOC function automatically memoizes any un-memoized WrappedComponent argument.
318
+ *
319
+ * @param context - Refers to the PublicObservableContext<T> type of the ObservableContext<T>
320
+ * @param [selectorMap] - Key:value pairs where `key` => arbitrary key given to a Store.data property holding a state slice and `value` => property path to a state slice used by this component: see examples below. May add a mapping for a certain arbitrary key='state' and value='@@STATE' to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using '@@STATE', note that any change within the state object will result in this component render.
321
+ * @see {useContext} for selectorMap sample
322
+ */
323
+ function connect(context, selectorMap) {
324
+ function connector(WrappedComponent) {
325
+ var Wrapped = !((0, lodash_isplainobject_1["default"])(WrappedComponent) && 'compare' in WrappedComponent) ? (0, react_1.memo)(WrappedComponent) : WrappedComponent;
326
+ var ConnectedComponent = (0, react_1.memo)((0, react_1.forwardRef)(function (ownProps, ref) {
327
+ var store = useContext(context, selectorMap);
328
+ return react_1["default"].createElement(Wrapped, _objectSpread(_objectSpread(_objectSpread({}, store), ownProps), {}, {
329
+ ref: ref
330
+ }));
331
+ }));
332
+ ConnectedComponent.displayName = 'ObservableContext.Connected';
333
+ return ConnectedComponent;
334
+ }
335
+ return connector;
336
+ }
337
+ var UsageError = /*#__PURE__*/function (_Error) {
338
+ function UsageError() {
339
+ _classCallCheck(this, UsageError);
340
+ return _callSuper(this, UsageError, arguments);
341
+ }
342
+ _inherits(UsageError, _Error);
343
+ return _createClass(UsageError);
344
+ }(/*#__PURE__*/_wrapNativeSuper(Error));
345
+ exports.UsageError = UsageError;
346
+ ;
347
+ var ChildMemo = function () {
348
+ var useNodeMemo = function useNodeMemo(node) {
349
+ var nodeRef = (0, react_1.useRef)(node);
350
+ if (!(0, lodash_isequal_1["default"])((0, lodash_omit_1["default"])(nodeRef.current, '_owner'), (0, lodash_omit_1["default"])(node, '_owner'))) {
351
+ nodeRef.current = node;
352
+ }
353
+ return nodeRef.current;
354
+ };
355
+ var ChildMemo = (0, react_1.memo)(function (_ref3) {
356
+ var child = _ref3.child;
357
+ return react_1["default"].createElement(react_1["default"].Fragment, null, child);
358
+ });
359
+ ChildMemo.displayName = 'ObservableContext.Provider.Internal.Guardian.ChildMemo';
360
+ var Guardian = function Guardian(_ref4) {
361
+ var child = _ref4.child;
362
+ return react_1["default"].createElement(ChildMemo, {
363
+ child: useNodeMemo(child)
364
+ });
365
+ };
366
+ Guardian.displayName = 'ObservableContext.Provider.Internal.Guardian';
367
+ return Guardian;
368
+ }();
369
+ var defaultPrehooks = Object.freeze({});
370
+ function makeObservable(Provider) {
371
+ var Observable = (0, react_1.forwardRef)(function (_ref5, storeRef) {
372
+ var _ref5$children = _ref5.children,
373
+ children = _ref5$children === void 0 ? null : _ref5$children,
374
+ _ref5$prehooks = _ref5.prehooks,
375
+ prehooks = _ref5$prehooks === void 0 ? defaultPrehooks : _ref5$prehooks,
376
+ _ref5$storage = _ref5.storage,
377
+ storage = _ref5$storage === void 0 ? null : _ref5$storage,
378
+ value = _ref5.value;
379
+ var connKey = (0, react_1.useRef)();
380
+ var store = (0, use_store_1["default"])(prehooks, value, storage);
381
+ var _ref6 = (0, react_1.useState)(function () {
382
+ return getConnectionFrom(connKey, store.cache);
383
+ }),
384
+ _ref7 = _slicedToArray(_ref6, 1),
385
+ connection = _ref7[0];
386
+ var getState = (0, react_1.useCallback)(function () {
387
+ var propertyPaths = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
388
+ if (!propertyPaths.length || propertyPaths.indexOf(constants.FULL_STATE_SELECTOR) !== -1) {
389
+ return connection.get(constants.GLOBAL_SELECTOR)[constants.GLOBAL_SELECTOR];
390
+ }
391
+ var data = connection.get.apply(connection, _toConsumableArray(propertyPaths));
392
+ var state = {};
393
+ for (var d in data) {
394
+ (0, lodash_set_1["default"])(state, d, data[d]);
395
+ }
396
+ return state;
397
+ }, []);
398
+ (0, react_1.useImperativeHandle)(storeRef, function () {
399
+ var _storeRef$current;
400
+ return _objectSpread(_objectSpread({}, (_storeRef$current = storeRef === null || storeRef === void 0 ? void 0 : storeRef.current) !== null && _storeRef$current !== void 0 ? _storeRef$current : {}), {}, {
401
+ getState: getState,
402
+ resetState: function resetState(propertyPaths) {
403
+ return store.resetState(connection, propertyPaths);
404
+ },
405
+ setState: function setState(changes) {
406
+ return store.setState(connection, changes);
407
+ },
408
+ subscribe: store.subscribe
409
+ });
410
+ }, [storeRef === null || storeRef === void 0 ? void 0 : storeRef.current]);
411
+ (0, react_1.useEffect)(function () {
412
+ return function () {
413
+ connection.disconnect();
414
+ delete connRegister[connKey.current];
415
+ connKey.current = undefined;
416
+ };
417
+ }, []);
418
+ return react_1["default"].createElement(Provider, {
419
+ value: store
420
+ }, memoizeImmediateChildTree(children));
421
+ });
422
+ Observable.displayName = 'ObservableContext.Provider';
423
+ return Observable;
424
+ }
425
+ function memoizeImmediateChildTree(children) {
426
+ return react_1.Children.map(children, function (_child) {
427
+ var _child2, _child$type$$$typeof, _child$props;
428
+ var child = _child;
429
+ if (!((_child2 = child) !== null && _child2 !== void 0 && _child2.type) ||
430
+ // skip memoized or non element(s)
431
+ _typeof(child.type) === 'object' && ((_child$type$$$typeof = child.type.$$typeof) === null || _child$type$$$typeof === void 0 ? void 0 : _child$type$$$typeof.toString()) === 'Symbol(react.memo)') {
432
+ return child;
433
+ }
434
+ if ((_child$props = child.props) !== null && _child$props !== void 0 && _child$props.children) {
435
+ child = (0, react_1.cloneElement)(child, (0, lodash_omit_1["default"])(child.props, 'children'), memoizeImmediateChildTree(child.props.children));
436
+ }
437
+ return react_1["default"].createElement(ChildMemo, {
438
+ child: child
439
+ });
440
+ });
441
+ }
@@ -0,0 +1,12 @@
1
+ import type { IStorage, State } from '../..';
2
+ declare class Storage<T extends State> implements IStorage<T> {
3
+ #private;
4
+ static supportsSession: boolean;
5
+ constructor();
6
+ get isKeyRequired(): boolean;
7
+ clone(data: any): T;
8
+ getItem(key: string): T;
9
+ removeItem(key: string): void;
10
+ setItem(key: string, data: T): void;
11
+ }
12
+ export default Storage;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ var _globalThis$sessionSt;
4
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
5
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
6
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
7
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
8
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
9
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
10
+ var __classPrivateFieldSet = void 0 && (void 0).__classPrivateFieldSet || function (receiver, state, value, kind, f) {
11
+ if (kind === "m") throw new TypeError("Private method is not writable");
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
14
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
15
+ };
16
+ var __classPrivateFieldGet = void 0 && (void 0).__classPrivateFieldGet || function (receiver, state, kind, f) {
17
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
18
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
19
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
20
+ };
21
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
22
+ return mod && mod.__esModule ? mod : {
23
+ "default": mod
24
+ };
25
+ };
26
+ var _MemoryStorage_data, _SessionStorage_storage, _Storage_storage;
27
+ Object.defineProperty(exports, "__esModule", {
28
+ value: true
29
+ });
30
+ var clone_total_1 = __importDefault(require("@webkrafters/clone-total"));
31
+ var MemoryStorage = /*#__PURE__*/function () {
32
+ function MemoryStorage() {
33
+ _classCallCheck(this, MemoryStorage);
34
+ _MemoryStorage_data.set(this, void 0);
35
+ __classPrivateFieldSet(this, _MemoryStorage_data, null, "f");
36
+ }
37
+ return _createClass(MemoryStorage, [{
38
+ key: "clone",
39
+ value: function clone(data) {
40
+ return (0, clone_total_1["default"])(data);
41
+ }
42
+ }, {
43
+ key: "getItem",
44
+ value: function getItem(key) {
45
+ return __classPrivateFieldGet(this, _MemoryStorage_data, "f");
46
+ }
47
+ }, {
48
+ key: "removeItem",
49
+ value: function removeItem(key) {
50
+ __classPrivateFieldSet(this, _MemoryStorage_data, null, "f");
51
+ }
52
+ }, {
53
+ key: "setItem",
54
+ value: function setItem(key, data) {
55
+ __classPrivateFieldSet(this, _MemoryStorage_data, data, "f");
56
+ }
57
+ }]);
58
+ }();
59
+ _MemoryStorage_data = new WeakMap();
60
+ var SessionStorage = /*#__PURE__*/function () {
61
+ function SessionStorage() {
62
+ _classCallCheck(this, SessionStorage);
63
+ _SessionStorage_storage.set(this, void 0);
64
+ __classPrivateFieldSet(this, _SessionStorage_storage, globalThis.sessionStorage, "f");
65
+ }
66
+ return _createClass(SessionStorage, [{
67
+ key: "clone",
68
+ value: function clone(data) {
69
+ return data;
70
+ }
71
+ }, {
72
+ key: "getItem",
73
+ value: function getItem(key) {
74
+ return JSON.parse(__classPrivateFieldGet(this, _SessionStorage_storage, "f").getItem(key));
75
+ }
76
+ }, {
77
+ key: "removeItem",
78
+ value: function removeItem(key) {
79
+ return __classPrivateFieldGet(this, _SessionStorage_storage, "f").removeItem(key);
80
+ }
81
+ }, {
82
+ key: "setItem",
83
+ value: function setItem(key, data) {
84
+ return __classPrivateFieldGet(this, _SessionStorage_storage, "f").setItem(key, JSON.stringify(data));
85
+ }
86
+ }]);
87
+ }();
88
+ _SessionStorage_storage = new WeakMap();
89
+ var Storage = /*#__PURE__*/function () {
90
+ function Storage() {
91
+ _classCallCheck(this, Storage);
92
+ _Storage_storage.set(this, void 0);
93
+ __classPrivateFieldSet(this, _Storage_storage, Storage.supportsSession ? new SessionStorage() : new MemoryStorage(), "f");
94
+ }
95
+ return _createClass(Storage, [{
96
+ key: "isKeyRequired",
97
+ get: function get() {
98
+ return __classPrivateFieldGet(this, _Storage_storage, "f") instanceof SessionStorage;
99
+ }
100
+ }, {
101
+ key: "clone",
102
+ value: function clone(data) {
103
+ return __classPrivateFieldGet(this, _Storage_storage, "f").clone(data);
104
+ }
105
+ }, {
106
+ key: "getItem",
107
+ value: function getItem(key) {
108
+ return __classPrivateFieldGet(this, _Storage_storage, "f").getItem(key);
109
+ }
110
+ }, {
111
+ key: "removeItem",
112
+ value: function removeItem(key) {
113
+ __classPrivateFieldGet(this, _Storage_storage, "f").removeItem(key);
114
+ }
115
+ }, {
116
+ key: "setItem",
117
+ value: function setItem(key, data) {
118
+ __classPrivateFieldGet(this, _Storage_storage, "f").setItem(key, data);
119
+ }
120
+ }]);
121
+ }();
122
+ _Storage_storage = new WeakMap();
123
+ Storage.supportsSession = typeof ((_globalThis$sessionSt = globalThis.sessionStorage) === null || _globalThis$sessionSt === void 0 ? void 0 : _globalThis$sessionSt.setItem) === 'undefined';
124
+ exports["default"] = Storage;
package/package.json CHANGED
@@ -45,6 +45,7 @@
45
45
  "lodash.isequal": "^4.5.0",
46
46
  "lodash.isplainobject": "^4.0.6",
47
47
  "lodash.omit": "^4.5.0",
48
+ "lodash.set": "^4.3.2",
48
49
  "react": "^18.3.1",
49
50
  "react-dom": "^18.3.1",
50
51
  "react-performance-testing": "^2.0.0",
@@ -55,20 +56,7 @@
55
56
  },
56
57
  "files": [
57
58
  "logo.png",
58
- "dist\\main\\hooks\\use-store\\index.js",
59
- "dist\\main\\hooks\\use-store\\index.d.ts",
60
- "dist\\main\\hooks\\use-render-key-provider\\index.js",
61
- "dist\\main\\hooks\\use-render-key-provider\\index.d.ts",
62
- "dist\\main\\hooks\\use-prehooks-ref\\index.js",
63
- "dist\\main\\hooks\\use-prehooks-ref\\index.d.ts",
64
- "dist\\model\\storage\\index.js",
65
- "dist\\model\\storage\\index.d.ts",
66
- "dist\\main\\index.js",
67
- "dist\\main\\index.d.ts",
68
- "dist\\index.js",
69
- "dist\\index.d.ts",
70
- "dist\\constants.js",
71
- "dist\\constants.d.ts"
59
+ "dist"
72
60
  ],
73
61
  "homepage": "https://eagleeye.js.org",
74
62
  "keywords": [
@@ -102,6 +90,7 @@
102
90
  "lodash.isequal": ">= 0.1.0",
103
91
  "lodash.isplainobject": ">= 0.8.0",
104
92
  "lodash.omit": ">= 0.1.0",
93
+ "lodash.set": ">= 0.1.0",
105
94
  "react": ">= 16.8.0 <19"
106
95
  },
107
96
  "publishConfig": {
@@ -113,15 +102,14 @@
113
102
  },
114
103
  "scripts": {
115
104
  "build": "eslint --fix && rm -rf dist && tsc && babel dist -d dist",
116
- "postbuild": "node ./post-build",
117
105
  "test": "eslint --fix && jest --coverage --updateSnapshot",
118
106
  "test:clean": "jest --clearCache",
119
107
  "test:core": "jest --updateSnapshot",
120
108
  "test:watch": "eslint --fix && jest --updateSnapshot --watchAll"
121
109
  },
122
110
  "types": "dist/index.d.ts",
123
- "version": "6.0.0-rc.2",
111
+ "version": "6.0.0-rc.3",
124
112
  "dependencies": {
125
113
  "@webkrafters/auto-immutable": "^2.0.0-rc.10"
126
114
  }
127
- }
115
+ }