@webkrafters/react-eagleeye 1.0.5 → 1.1.0-alpha

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/dist/index.js CHANGED
@@ -3,72 +3,71 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createEagleEye = exports.Tag = exports.SPLICE_TAG = exports.SET_TAG = exports.REPLACE_TAG = exports.PUSH_TAG = exports.NULL_SELECTOR = exports.MOVE_TAG = exports.FULL_STATE_SELECTOR = exports.DELETE_TAG = exports.CLEAR_TAG = void 0;
7
- var eagleeye_1 = require("@webkrafters/eagleeye");
8
6
  Object.defineProperty(exports, "CLEAR_TAG", {
9
7
  enumerable: true,
10
8
  get: function get() {
11
- return eagleeye_1.CLEAR_TAG;
9
+ return _eagleeye.CLEAR_TAG;
12
10
  }
13
11
  });
14
12
  Object.defineProperty(exports, "DELETE_TAG", {
15
13
  enumerable: true,
16
14
  get: function get() {
17
- return eagleeye_1.DELETE_TAG;
15
+ return _eagleeye.DELETE_TAG;
18
16
  }
19
17
  });
20
18
  Object.defineProperty(exports, "FULL_STATE_SELECTOR", {
21
19
  enumerable: true,
22
20
  get: function get() {
23
- return eagleeye_1.FULL_STATE_SELECTOR;
21
+ return _eagleeye.FULL_STATE_SELECTOR;
24
22
  }
25
23
  });
26
24
  Object.defineProperty(exports, "MOVE_TAG", {
27
25
  enumerable: true,
28
26
  get: function get() {
29
- return eagleeye_1.MOVE_TAG;
27
+ return _eagleeye.MOVE_TAG;
30
28
  }
31
29
  });
32
30
  Object.defineProperty(exports, "NULL_SELECTOR", {
33
31
  enumerable: true,
34
32
  get: function get() {
35
- return eagleeye_1.NULL_SELECTOR;
33
+ return _eagleeye.NULL_SELECTOR;
36
34
  }
37
35
  });
38
36
  Object.defineProperty(exports, "PUSH_TAG", {
39
37
  enumerable: true,
40
38
  get: function get() {
41
- return eagleeye_1.PUSH_TAG;
39
+ return _eagleeye.PUSH_TAG;
42
40
  }
43
41
  });
44
42
  Object.defineProperty(exports, "REPLACE_TAG", {
45
43
  enumerable: true,
46
44
  get: function get() {
47
- return eagleeye_1.REPLACE_TAG;
45
+ return _eagleeye.REPLACE_TAG;
48
46
  }
49
47
  });
50
48
  Object.defineProperty(exports, "SET_TAG", {
51
49
  enumerable: true,
52
50
  get: function get() {
53
- return eagleeye_1.SET_TAG;
51
+ return _eagleeye.SET_TAG;
54
52
  }
55
53
  });
56
54
  Object.defineProperty(exports, "SPLICE_TAG", {
57
55
  enumerable: true,
58
56
  get: function get() {
59
- return eagleeye_1.SPLICE_TAG;
57
+ return _eagleeye.SPLICE_TAG;
60
58
  }
61
59
  });
62
60
  Object.defineProperty(exports, "Tag", {
63
61
  enumerable: true,
64
62
  get: function get() {
65
- return eagleeye_1.Tag;
63
+ return _eagleeye.Tag;
66
64
  }
67
65
  });
68
- var main_1 = require("./main");
69
66
  Object.defineProperty(exports, "createEagleEye", {
70
67
  enumerable: true,
71
68
  get: function get() {
72
- return main_1.createContext;
69
+ return _main.createContext;
73
70
  }
74
- });
71
+ });
72
+ var _eagleeye = require("@webkrafters/eagleeye");
73
+ var _main = require("./main");
@@ -1,22 +1,26 @@
1
1
  import type { ElementType } from 'react';
2
- import type { ConnectProps, ExtractInjectedProps, SelectorMap, Store } from '..';
2
+ import type { Channel, ConnectProps, ExtractInjectedProps, SelectorMap, Store } from '..';
3
3
  import React from 'react';
4
4
  import { AutoImmutable, IStorage, Prehooks, State } from "@webkrafters/eagleeye";
5
- export declare class ObservableContext<T extends State> {
6
- private consumer;
5
+ export declare abstract class AbstractObservable<T extends State> {
6
+ private _consumer;
7
7
  constructor(value?: T, prehooks?: Prehooks<T>, storage?: IStorage<T>);
8
8
  constructor(value?: AutoImmutable<T>, prehooks?: Prehooks<T>, storage?: IStorage<T>);
9
+ get stream(): import("@webkrafters/eagleeye").BaseStream<T>;
9
10
  get cache(): AutoImmutable<T>;
10
11
  get closed(): boolean;
11
- get connect(): <const S extends SelectorMap>(selectorMap?: S) => <P extends ExtractInjectedProps<T, S>>(WrappedComponent: ElementType<ConnectProps<P, T, S>>) => React.NamedExoticComponent<P>;
12
12
  get prehooks(): Prehooks<T>;
13
13
  get storage(): IStorage<T>;
14
14
  get store(): import("@webkrafters/eagleeye").StoreRef<T>;
15
- get useStream(): <const S extends SelectorMap>(selectorMap?: S) => Store<T, S>;
16
15
  set prehooks(prehooks: Prehooks<T>);
17
16
  set storage(storage: IStorage<T>);
18
- private _connect;
19
17
  dispose(): void;
20
18
  }
19
+ export declare class ObservableContext<T extends State> extends AbstractObservable<T> {
20
+ get connect(): <const S extends SelectorMap>(selectorMap?: S) => <P extends ExtractInjectedProps<T, S>>(WrappedComponent: ElementType<ConnectProps<P, T, S>>) => React.NamedExoticComponent<P>;
21
+ get useStream(): <const S extends SelectorMap>(selectorMap?: S) => Store<T, S>;
22
+ private _connect;
23
+ }
24
+ export declare function makeStore<T extends State, S extends SelectorMap>(channel: Channel<T, S>): Store<T, S>;
21
25
  export declare function createContext<T extends State>(value?: T, prehooks?: Prehooks<T>, storage?: IStorage<T>): ObservableContext<T>;
22
26
  export declare function createContext<T extends State>(value?: AutoImmutable<T>, prehooks?: Prehooks<T>, storage?: IStorage<T>): ObservableContext<T>;
@@ -1,5 +1,18 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ObservableContext = exports.AbstractObservable = void 0;
7
+ exports.createContext = createContext;
8
+ exports.makeStore = makeStore;
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ var _lodash = _interopRequireDefault(require("lodash.isequal"));
11
+ var _lodash2 = _interopRequireDefault(require("lodash.isplainobject"));
12
+ var _lodash3 = _interopRequireDefault(require("lodash.omit"));
13
+ var _react = require("react");
14
+ var _eagleeye = require("@webkrafters/eagleeye");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
3
16
  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
17
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
5
18
  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."); }
@@ -9,205 +22,184 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
9
22
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
10
23
  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; }
11
24
  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; }
12
- 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; }
25
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
26
+ 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); }
27
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
28
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
29
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
30
+ 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); }
31
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
13
32
  function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
14
33
  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); } }
15
34
  function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
35
+ 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
36
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
17
37
  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
- var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- var desc = Object.getOwnPropertyDescriptor(m, k);
21
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
- desc = {
23
- enumerable: true,
24
- get: function get() {
25
- return m[k];
26
- }
27
- };
28
- }
29
- Object.defineProperty(o, k2, desc);
30
- } : function (o, m, k, k2) {
31
- if (k2 === undefined) k2 = k;
32
- o[k2] = m[k];
33
- });
34
- var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
35
- Object.defineProperty(o, "default", {
36
- enumerable: true,
37
- value: v
38
- });
39
- } : function (o, v) {
40
- o["default"] = v;
41
- });
42
- var __importStar = void 0 && (void 0).__importStar || function () {
43
- var _ownKeys = function ownKeys(o) {
44
- _ownKeys = Object.getOwnPropertyNames || function (o) {
45
- var ar = [];
46
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
47
- return ar;
48
- };
49
- return _ownKeys(o);
50
- };
51
- return function (mod) {
52
- if (mod && mod.__esModule) return mod;
53
- var result = {};
54
- if (mod != null) for (var k = _ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
55
- __setModuleDefault(result, mod);
56
- return result;
57
- };
58
- }();
59
- var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
60
- return mod && mod.__esModule ? mod : {
61
- "default": mod
62
- };
63
- };
64
- Object.defineProperty(exports, "__esModule", {
65
- value: true
66
- });
67
- exports.ObservableContext = void 0;
68
- exports.createContext = createContext;
69
- var lodash_isequal_1 = __importDefault(require("lodash.isequal"));
70
- var lodash_isplainobject_1 = __importDefault(require("lodash.isplainobject"));
71
- var lodash_omit_1 = __importDefault(require("lodash.omit"));
72
- var react_1 = __importStar(require("react"));
73
- var eagleeye_1 = require("@webkrafters/eagleeye");
74
- var ObservableContext = /*#__PURE__*/function () {
75
- function ObservableContext(value, prehooks, storage) {
76
- var _this = this;
77
- _classCallCheck(this, ObservableContext);
78
- this._connect = function (selectorMap) {
79
- var ctx = _this;
80
- function connector(WrappedComponent) {
81
- var useStream = ctx.useStream;
82
- var Wrapped = !((0, lodash_isplainobject_1["default"])(WrappedComponent) && 'compare' in WrappedComponent) ? (0, react_1.memo)(WrappedComponent) : WrappedComponent;
83
- var ConnectedComponent = (0, react_1.memo)(function (ownProps) {
84
- var store = useStream(selectorMap);
85
- return memoizeImmediateChildTree(react_1["default"].createElement(Wrapped, _objectSpread(_objectSpread({}, store), ownProps)));
86
- });
87
- ConnectedComponent.displayName = 'ObservableContext.Connected';
88
- return ConnectedComponent;
89
- }
90
- return connector;
91
- };
92
- this.consumer = (0, eagleeye_1.createEagleEye)({
38
+ var AbstractObservable = exports.AbstractObservable = /*#__PURE__*/function () {
39
+ function AbstractObservable(value, prehooks, storage) {
40
+ _classCallCheck(this, AbstractObservable);
41
+ _defineProperty(this, "_consumer", void 0);
42
+ this._consumer = (0, _eagleeye.createEagleEye)({
93
43
  prehooks: prehooks,
94
44
  storage: storage,
95
45
  value: value
96
46
  });
97
47
  }
98
- return _createClass(ObservableContext, [{
99
- key: "cache",
48
+ return _createClass(AbstractObservable, [{
49
+ key: "stream",
100
50
  get: function get() {
101
- return this.consumer.cache;
51
+ return this._consumer.stream;
102
52
  }
103
53
  }, {
104
- key: "closed",
54
+ key: "cache",
105
55
  get: function get() {
106
- return this.consumer.closed;
56
+ return this._consumer.cache;
107
57
  }
108
58
  }, {
109
- key: "connect",
59
+ key: "closed",
110
60
  get: function get() {
111
- return this._connect;
61
+ return this._consumer.closed;
112
62
  }
113
63
  }, {
114
64
  key: "prehooks",
115
65
  get: function get() {
116
- return this.consumer.prehooks;
66
+ return this._consumer.prehooks;
117
67
  },
118
68
  set: function set(prehooks) {
119
- this.consumer.prehooks = prehooks;
69
+ this._consumer.prehooks = prehooks;
120
70
  }
121
71
  }, {
122
72
  key: "storage",
123
73
  get: function get() {
124
- return this.consumer.storage;
74
+ return this._consumer.storage;
125
75
  },
126
76
  set: function set(storage) {
127
- this.consumer.storage = storage;
77
+ this._consumer.storage = storage;
128
78
  }
129
79
  }, {
130
80
  key: "store",
131
81
  get: function get() {
132
- return this.consumer.store;
82
+ return this._consumer.store;
83
+ }
84
+ }, {
85
+ key: "dispose",
86
+ value: function dispose() {
87
+ this._consumer.dispose();
88
+ }
89
+ }]);
90
+ }();
91
+ var ObservableContext = exports.ObservableContext = /*#__PURE__*/function (_AbstractObservable2) {
92
+ function ObservableContext() {
93
+ var _this;
94
+ _classCallCheck(this, ObservableContext);
95
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
96
+ args[_key] = arguments[_key];
97
+ }
98
+ _this = _callSuper(this, ObservableContext, [].concat(args));
99
+ _defineProperty(_this, "_connect", function (selectorMap) {
100
+ var ctx = _this;
101
+ function connector(WrappedComponent) {
102
+ var useStream = ctx.useStream;
103
+ var Wrapped = !((0, _lodash2["default"])(WrappedComponent) && 'compare' in WrappedComponent) ? /*#__PURE__*/(0, _react.memo)(WrappedComponent) : WrappedComponent;
104
+ var ConnectedComponent = /*#__PURE__*/(0, _react.memo)(function (ownProps) {
105
+ var store = useStream(selectorMap);
106
+ return memoizeImmediateChildTree((0, _jsxRuntime.jsx)(Wrapped, _objectSpread(_objectSpread({}, store), ownProps)));
107
+ });
108
+ ConnectedComponent.displayName = 'ObservableContext.Connected';
109
+ return ConnectedComponent;
110
+ }
111
+ return connector;
112
+ });
113
+ return _this;
114
+ }
115
+ _inherits(ObservableContext, _AbstractObservable2);
116
+ return _createClass(ObservableContext, [{
117
+ key: "connect",
118
+ get: function get() {
119
+ return this._connect;
133
120
  }
134
121
  }, {
135
122
  key: "useStream",
136
123
  get: function get() {
137
- var stream = this.consumer.stream;
124
+ var stream = this.stream;
138
125
  return function (selectorMap) {
139
- var _ref = (0, react_1.useState)(function () {
126
+ var strictMode = (0, _react.useRef)(true);
127
+ var _useState = (0, _react.useState)(function () {
140
128
  return stream(selectorMap);
141
129
  }),
142
- _ref2 = _slicedToArray(_ref, 1),
143
- channel = _ref2[0];
144
- var _ref3 = (0, react_1.useState)(function () {
145
- return {
146
- data: channel.data,
147
- resetState: channel.resetState.bind(channel),
148
- setState: channel.setState.bind(channel)
149
- };
130
+ _useState2 = _slicedToArray(_useState, 1),
131
+ channel = _useState2[0];
132
+ var _useState3 = (0, _react.useState)(function () {
133
+ return makeStore(channel);
150
134
  }),
151
- _ref4 = _slicedToArray(_ref3, 2),
152
- store = _ref4[0],
153
- setStore = _ref4[1];
154
- (0, react_1.useEffect)(function () {
135
+ _useState4 = _slicedToArray(_useState3, 2),
136
+ store = _useState4[0],
137
+ setStore = _useState4[1];
138
+ (0, _react.useEffect)(function () {
155
139
  channel.selectorMap = selectorMap;
156
140
  }, [selectorMap]);
157
- (0, react_1.useEffect)(function () {
141
+ (0, _react.useEffect)(function () {
142
+ if (!strictMode.current) {
143
+ return;
144
+ }
158
145
  channel.addListener('data-changed', function () {
159
146
  return setStore(_objectSpread(_objectSpread({}, store), {}, {
160
147
  data: channel.data
161
148
  }));
162
149
  });
150
+ strictMode.current = false;
163
151
  return function () {
164
- return channel.endStream();
152
+ channel.endStream();
153
+ strictMode.current = true;
165
154
  };
166
155
  }, []);
167
156
  return store;
168
157
  };
169
158
  }
170
- }, {
171
- key: "dispose",
172
- value: function dispose() {
173
- this.consumer.dispose();
174
- }
175
159
  }]);
176
- }();
177
- exports.ObservableContext = ObservableContext;
160
+ }(AbstractObservable);
178
161
  var ChildMemo = function () {
179
162
  var useNodeMemo = function useNodeMemo(node) {
180
- var nodeRef = (0, react_1.useRef)(node);
181
- if (!(0, lodash_isequal_1["default"])((0, lodash_omit_1["default"])(nodeRef.current, '_owner'), (0, lodash_omit_1["default"])(node, '_owner'))) {
163
+ var nodeRef = (0, _react.useRef)(node);
164
+ if (!(0, _lodash["default"])((0, _lodash3["default"])(nodeRef.current, '_owner'), (0, _lodash3["default"])(node, '_owner'))) {
182
165
  nodeRef.current = node;
183
166
  }
184
167
  return nodeRef.current;
185
168
  };
186
- var ChildMemo = (0, react_1.memo)(function (_ref5) {
187
- var child = _ref5.child;
188
- return react_1["default"].createElement(react_1["default"].Fragment, null, child);
169
+ var ChildMemo = /*#__PURE__*/(0, _react.memo)(function (_ref) {
170
+ var child = _ref.child;
171
+ return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
172
+ children: child
173
+ });
189
174
  });
190
175
  ChildMemo.displayName = 'ObservableContext.Provider.Internal.Guardian.ChildMemo';
191
- var Guardian = function Guardian(_ref6) {
192
- var child = _ref6.child;
193
- return react_1["default"].createElement(ChildMemo, {
176
+ var Guardian = function Guardian(_ref2) {
177
+ var child = _ref2.child;
178
+ return (0, _jsxRuntime.jsx)(ChildMemo, {
194
179
  child: useNodeMemo(child)
195
180
  });
196
181
  };
197
182
  Guardian.displayName = 'ObservableContext.Provider.Internal.Guardian';
198
183
  return Guardian;
199
184
  }();
185
+ function makeStore(channel) {
186
+ return {
187
+ data: channel.data,
188
+ resetState: channel.resetState.bind(channel),
189
+ setState: channel.setState.bind(channel)
190
+ };
191
+ }
200
192
  function memoizeImmediateChildTree(children) {
201
- return react_1.Children.map(children, function (_child) {
193
+ return _react.Children.map(children, function (_child) {
202
194
  var _child2, _child$type$$$typeof, _child$props;
203
195
  var child = _child;
204
196
  if (!((_child2 = child) !== null && _child2 !== void 0 && _child2.type) || _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)') {
205
197
  return child;
206
198
  }
207
199
  if ((_child$props = child.props) !== null && _child$props !== void 0 && _child$props.children) {
208
- child = (0, react_1.cloneElement)(child, (0, lodash_omit_1["default"])(child.props, 'children'), memoizeImmediateChildTree(child.props.children));
200
+ child = /*#__PURE__*/(0, _react.cloneElement)(child, (0, _lodash3["default"])(child.props, 'children'), memoizeImmediateChildTree(child.props.children));
209
201
  }
210
- return react_1["default"].createElement(ChildMemo, {
202
+ return (0, _jsxRuntime.jsx)(ChildMemo, {
211
203
  child: child
212
204
  });
213
205
  });
@@ -0,0 +1,161 @@
1
+ import { FC, RefObject, ComponentType, JSX } from 'react';
2
+ import { AbstractObservable } from '..';
3
+ import { Channel, type ProviderProps as BaseProviderProps, SelectorMap, State, Store } from '../../';
4
+ export interface Address<ID extends string = string> {
5
+ targetId: ID;
6
+ }
7
+ export interface Point<T extends State = any, ID extends string = string> extends Address<ID> {
8
+ target: AbstractObservable<T>;
9
+ }
10
+ export type BaseProviderPropsRaw<T extends State> = {
11
+ value?: T;
12
+ } & Pick<BaseProviderProps<T>, "prehooks" | "storage">;
13
+ export interface IProviderProps<ID extends string = string> {
14
+ ref?: RefObject<Address<ID>>;
15
+ }
16
+ export interface RefProps<ID extends string = string> extends IProviderProps<ID> {
17
+ targetId: ID;
18
+ }
19
+ export interface ProviderProps<T extends State = any, ID extends string = string> extends IProviderProps<ID> {
20
+ observable?: AbstractObservable<T>;
21
+ }
22
+ export interface ProviderPropsRaw<T extends State = any, ID extends string = string> extends IProviderProps<ID> {
23
+ observableConfig?: BaseProviderProps<T>;
24
+ }
25
+ export interface ProviderPropsPrimitive<T extends State = any, ID extends string = string> extends IProviderProps<ID> {
26
+ observableConfig?: BaseProviderPropsRaw<T>;
27
+ }
28
+ type TemplateType<P> = P extends IProviderProps<infer U> ? U : never;
29
+ type TemplateType2<T> = T extends AbstractObservable<infer U> ? U : never;
30
+ export type WithChildren<P extends IProviderProps<TemplateType<P>>> = P & {
31
+ children?: React.ReactNode;
32
+ };
33
+ export interface ChannelEntry {
34
+ channel: WeakRef<Channel>;
35
+ numConnections: number;
36
+ useStore: () => Store;
37
+ }
38
+ export interface Entry {
39
+ channels: ChsResource<Channel>;
40
+ observable: WeakRef<AbstractObservable<any>>;
41
+ }
42
+ export interface Handle<W extends WeakKey> {
43
+ readonly descriptor: string;
44
+ readonly resource: W;
45
+ }
46
+ interface IResource<W extends WeakKey> {
47
+ acquire(desc: string, resource: W): Handle<W>;
48
+ createHandleFor(desc: string): Handle<W>;
49
+ getResourceAt(desc: string): W;
50
+ }
51
+ declare class ChsResource<W extends Channel> implements IResource<W> {
52
+ private _finalizer;
53
+ private _registry;
54
+ acquire(sMapHash: string, resource: W): {
55
+ readonly descriptor: string;
56
+ readonly isValid: boolean;
57
+ readonly resource: W;
58
+ readonly size: number;
59
+ readonly useStore: () => Store;
60
+ dec: () => void;
61
+ inc(): void;
62
+ };
63
+ createHandleFor(sMapHash: string): {
64
+ readonly descriptor: string;
65
+ readonly isValid: boolean;
66
+ readonly resource: W;
67
+ readonly size: number;
68
+ readonly useStore: () => Store;
69
+ dec: () => void;
70
+ inc(): void;
71
+ };
72
+ getResourceAt(sMapHash: string): W;
73
+ private finalize;
74
+ }
75
+ declare class ObsResource<W extends AbstractObservable<TemplateType2<W>>> implements IResource<W> {
76
+ private _finalizer;
77
+ private _registry;
78
+ acquire(regNum: string, resource: W): {
79
+ readonly descriptor: string;
80
+ readonly resource: W;
81
+ addChannelAt(sMapHash: string, channel: Channel): {
82
+ readonly descriptor: string;
83
+ readonly isValid: boolean;
84
+ readonly resource: W_1;
85
+ readonly size: number;
86
+ readonly useStore: () => Store;
87
+ dec: () => void;
88
+ inc(): void;
89
+ };
90
+ getChannelHandleAt(sMapHash: string): {
91
+ readonly descriptor: string;
92
+ readonly isValid: boolean;
93
+ readonly resource: W_1;
94
+ readonly size: number;
95
+ readonly useStore: () => Store;
96
+ dec: () => void;
97
+ inc(): void;
98
+ };
99
+ };
100
+ createHandleFor(regNum: string): {
101
+ readonly descriptor: string;
102
+ readonly resource: W;
103
+ addChannelAt(sMapHash: string, channel: Channel): {
104
+ readonly descriptor: string;
105
+ readonly isValid: boolean;
106
+ readonly resource: W_1;
107
+ readonly size: number;
108
+ readonly useStore: () => Store;
109
+ dec: () => void;
110
+ inc(): void;
111
+ };
112
+ getChannelHandleAt(sMapHash: string): {
113
+ readonly descriptor: string;
114
+ readonly isValid: boolean;
115
+ readonly resource: W_1;
116
+ readonly size: number;
117
+ readonly useStore: () => Store;
118
+ dec: () => void;
119
+ inc(): void;
120
+ };
121
+ };
122
+ getRegNumOf(resource: W): string;
123
+ getResourceAt(regNum: string): W;
124
+ }
125
+ export declare class Observable<T extends State> extends AbstractObservable<T> {
126
+ }
127
+ export declare class EagleEyeUniversal<T extends State> {
128
+ private _context;
129
+ private _pCache;
130
+ private _obs;
131
+ private _util;
132
+ constructor();
133
+ get resourceMap(): ObsResource<AbstractObservable<any>>;
134
+ get Provider(): {
135
+ <const ID extends string>(props?: WithChildren<ProviderProps<T, ID>>): JSX.Element;
136
+ <const ID extends string>(props?: WithChildren<ProviderPropsRaw<T, ID>>): JSX.Element;
137
+ <const ID extends string>(props?: WithChildren<ProviderPropsPrimitive<T, ID>>): JSX.Element;
138
+ <const ID extends string>(props?: WithChildren<RefProps<ID>>): JSX.Element;
139
+ };
140
+ get useStream(): any;
141
+ provide<const ID extends string>(props?: ProviderProps<T, ID>): Point<T, ID>;
142
+ provide<const ID extends string>(props?: ProviderPropsRaw<T, ID>): Point<T, ID>;
143
+ provide<const ID extends string>(props?: ProviderPropsPrimitive<T, ID>): Point<T, ID>;
144
+ stream<const S extends SelectorMap>(selectorMap?: S): {
145
+ into<P>(WrappedComponent: ComponentType<Store<T, S> & P>): FC<P>;
146
+ };
147
+ private defineProvider;
148
+ private _useStream;
149
+ }
150
+ declare class Utility<T extends State> {
151
+ private context;
152
+ constructor(context: EagleEyeUniversal<T>);
153
+ getIdOf(target: AbstractObservable<T>): string;
154
+ getObservableAt<const ID extends string>(targetId: ID): AbstractObservable<T>;
155
+ hashSelectorMap<S extends SelectorMap>(selectorMap?: S): string;
156
+ pointAt<const ID extends string>(target?: AbstractObservable<T>): Point<T, ID>;
157
+ tryObservableAt<const ID extends string>(targetId: ID): AbstractObservable<T>;
158
+ }
159
+ export declare function createUtilityFor<T extends State>(context: EagleEyeUniversal<T>): Utility<T>;
160
+ export declare function createContext<T extends State>(): EagleEyeUniversal<T>;
161
+ export {};
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Observable = exports.EagleEyeUniversal = void 0;
7
+ exports.createContext = createContext;
8
+ exports.createUtilityFor = createUtilityFor;
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ var _react = require("react");
11
+ var _jsSha = require("js-sha512");
12
+ var _safeStableStringify = _interopRequireDefault(require("safe-stable-stringify"));
13
+ var _ = require("..");
14
+ var _2 = require("../../");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
16
+ 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); }
17
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
18
+ 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); }
19
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
20
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
21
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
22
+ 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); }
23
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
24
+ 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; }
25
+ 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; }
26
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
27
+ 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."); }
28
+ 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; } }
29
+ 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; }
30
+ 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; } }
31
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
32
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
33
+ 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); } }
34
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
35
+ 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; }
36
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
37
+ 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); }
38
+ var ChsResource = /*#__PURE__*/function () {
39
+ function ChsResource() {
40
+ var _this = this;
41
+ _classCallCheck(this, ChsResource);
42
+ _defineProperty(this, "_finalizer", new FinalizationRegistry(function (s) {
43
+ return _this.finalize(s);
44
+ }));
45
+ _defineProperty(this, "_registry", void 0);
46
+ }
47
+ return _createClass(ChsResource, [{
48
+ key: "acquire",
49
+ value: function acquire(sMapHash, resource) {
50
+ var useStore = function useStore() {
51
+ var _useState = (0, _react.useState)(function () {
52
+ return (0, _.makeStore)(resource);
53
+ }),
54
+ _useState2 = _slicedToArray(_useState, 2),
55
+ store = _useState2[0],
56
+ setStore = _useState2[1];
57
+ (0, _react.useEffect)(function () {
58
+ var fn = function fn() {
59
+ return setStore(_objectSpread(_objectSpread({}, store), {}, {
60
+ data: resource.data
61
+ }));
62
+ };
63
+ resource.addListener('data-changed', fn);
64
+ return function () {
65
+ return resource.removeListener('data-changed', fn);
66
+ };
67
+ }, [resource]);
68
+ return store;
69
+ };
70
+ this._registry[sMapHash] = {
71
+ channel: new WeakRef(resource),
72
+ numConnections: 0,
73
+ useStore: useStore
74
+ };
75
+ this._finalizer.register(resource, sMapHash, resource);
76
+ return this.createHandleFor(sMapHash);
77
+ }
78
+ }, {
79
+ key: "createHandleFor",
80
+ value: function createHandleFor(sMapHash) {
81
+ var _this2 = this;
82
+ var entry = this._registry[sMapHash];
83
+ var handle = {
84
+ get descriptor() {
85
+ return sMapHash;
86
+ },
87
+ get isValid() {
88
+ return !!entry;
89
+ },
90
+ get resource() {
91
+ var _entry$channel$deref, _entry$channel;
92
+ return entry === null || entry === void 0 || (_entry$channel$deref = (_entry$channel = entry.channel).deref) === null || _entry$channel$deref === void 0 ? void 0 : _entry$channel$deref.call(_entry$channel);
93
+ },
94
+ get size() {
95
+ return handle.isValid ? entry.numConnections : -1;
96
+ },
97
+ get useStore() {
98
+ return entry.useStore;
99
+ },
100
+ dec: function dec() {
101
+ if (!handle.isValid) {
102
+ return;
103
+ }
104
+ entry.numConnections--;
105
+ if (handle.size) {
106
+ return;
107
+ }
108
+ handle.resource.endStream();
109
+ _this2._finalizer.unregister(handle.resource);
110
+ entry.channel = null;
111
+ _this2.finalize(sMapHash);
112
+ },
113
+ inc: function inc() {
114
+ handle.isValid && entry.numConnections++;
115
+ }
116
+ };
117
+ return handle;
118
+ }
119
+ }, {
120
+ key: "getResourceAt",
121
+ value: function getResourceAt(sMapHash) {
122
+ return this.createHandleFor(sMapHash).resource;
123
+ }
124
+ }, {
125
+ key: "finalize",
126
+ value: function finalize(sMapHash) {
127
+ delete this._registry[sMapHash];
128
+ }
129
+ }]);
130
+ }();
131
+ var ObsResource = /*#__PURE__*/function () {
132
+ function ObsResource() {
133
+ var _this3 = this;
134
+ _classCallCheck(this, ObsResource);
135
+ _defineProperty(this, "_finalizer", new FinalizationRegistry(function (regKey) {
136
+ delete _this3._registry[regKey];
137
+ }));
138
+ _defineProperty(this, "_registry", void 0);
139
+ }
140
+ return _createClass(ObsResource, [{
141
+ key: "acquire",
142
+ value: function acquire(regNum, resource) {
143
+ this._registry[regNum] = {
144
+ channels: new ChsResource(),
145
+ observable: new WeakRef(resource)
146
+ };
147
+ this._finalizer.register(resource, regNum, resource);
148
+ return this.createHandleFor(regNum);
149
+ }
150
+ }, {
151
+ key: "createHandleFor",
152
+ value: function createHandleFor(regNum) {
153
+ var _this$_registry$regNu;
154
+ var entry = (_this$_registry$regNu = this._registry[regNum]) !== null && _this$_registry$regNu !== void 0 ? _this$_registry$regNu : {};
155
+ return {
156
+ get descriptor() {
157
+ return regNum;
158
+ },
159
+ get resource() {
160
+ var _entry$observable$der, _entry$observable;
161
+ return entry === null || entry === void 0 || (_entry$observable$der = (_entry$observable = entry.observable).deref) === null || _entry$observable$der === void 0 ? void 0 : _entry$observable$der.call(_entry$observable);
162
+ },
163
+ addChannelAt: function addChannelAt(sMapHash, channel) {
164
+ return entry === null || entry === void 0 ? void 0 : entry.channels.acquire(sMapHash, channel);
165
+ },
166
+ getChannelHandleAt: function getChannelHandleAt(sMapHash) {
167
+ return entry === null || entry === void 0 ? void 0 : entry.channels.createHandleFor(sMapHash);
168
+ }
169
+ };
170
+ }
171
+ }, {
172
+ key: "getRegNumOf",
173
+ value: function getRegNumOf(resource) {
174
+ for (var regNum in this._registry) {
175
+ if (this.getResourceAt(regNum) === resource) {
176
+ return regNum;
177
+ }
178
+ }
179
+ }
180
+ }, {
181
+ key: "getResourceAt",
182
+ value: function getResourceAt(regNum) {
183
+ var _this$createHandleFor;
184
+ return (_this$createHandleFor = this.createHandleFor(regNum)) === null || _this$createHandleFor === void 0 ? void 0 : _this$createHandleFor.resource;
185
+ }
186
+ }]);
187
+ }();
188
+ var genRegNum = function () {
189
+ var count = 0;
190
+ var ts = 0;
191
+ return function () {
192
+ var newTs = Date.now();
193
+ if (newTs === ts) {
194
+ count++;
195
+ } else {
196
+ ts = newTs;
197
+ count = 0;
198
+ }
199
+ return "".concat(count, ":").concat(ts);
200
+ };
201
+ }();
202
+ var Observable = exports.Observable = /*#__PURE__*/function (_AbstractObservable) {
203
+ function Observable() {
204
+ _classCallCheck(this, Observable);
205
+ return _callSuper(this, Observable, arguments);
206
+ }
207
+ _inherits(Observable, _AbstractObservable);
208
+ return _createClass(Observable);
209
+ }(_.AbstractObservable);
210
+ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
211
+ function EagleEyeUniversal() {
212
+ _classCallCheck(this, EagleEyeUniversal);
213
+ _defineProperty(this, "_context", void 0);
214
+ _defineProperty(this, "_pCache", null);
215
+ _defineProperty(this, "_obs", null);
216
+ _defineProperty(this, "_util", null);
217
+ this._context = /*#__PURE__*/(0, _react.createContext)('0:0');
218
+ this._pCache = this.defineProvider();
219
+ this._obs = new ObsResource();
220
+ this._util = createUtilityFor(this);
221
+ }
222
+ return _createClass(EagleEyeUniversal, [{
223
+ key: "resourceMap",
224
+ get: function get() {
225
+ return this._obs;
226
+ }
227
+ }, {
228
+ key: "Provider",
229
+ get: function get() {
230
+ return this._pCache;
231
+ }
232
+ }, {
233
+ key: "useStream",
234
+ get: function get() {
235
+ return this._useStream.bind(this);
236
+ }
237
+ }, {
238
+ key: "provide",
239
+ value: function provide() {
240
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
241
+ var observable = props.observable;
242
+ if (!observable) {
243
+ var t = props.observableConfig;
244
+ observable = (0, _2.createEagleEye)(t === null || t === void 0 ? void 0 : t.value, t === null || t === void 0 ? void 0 : t.prehooks, t === null || t === void 0 ? void 0 : t.storage);
245
+ }
246
+ return this._util.pointAt(observable);
247
+ }
248
+ }, {
249
+ key: "stream",
250
+ value: function stream(selectorMap) {
251
+ var useStream = this.useStream;
252
+ return {
253
+ into: function into(WrappedComponent) {
254
+ var Container = function Container(props) {
255
+ var store = useStream(selectorMap);
256
+ return (0, _jsxRuntime.jsx)(WrappedComponent, _objectSpread({}, _objectSpread(_objectSpread({}, store), props)));
257
+ };
258
+ return Container;
259
+ }
260
+ };
261
+ }
262
+ }, {
263
+ key: "defineProvider",
264
+ value: function defineProvider() {
265
+ var me = this;
266
+ function provide() {
267
+ var _props$ref;
268
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
269
+ var targetId;
270
+ if (!('targetId' in props)) {
271
+ targetId = me.provide(props).targetId;
272
+ } else {
273
+ targetId = props.targetId;
274
+ if (!this._util.getObservableAt(targetId)) {
275
+ throw new Error("No valid observable instance found at target ID, ".concat(targetId));
276
+ }
277
+ }
278
+ (_props$ref = props.ref) !== null && _props$ref !== void 0 ? _props$ref : props.ref = {
279
+ current: {}
280
+ };
281
+ props.ref.current.targetId = targetId;
282
+ var Context = me._context;
283
+ return (0, _jsxRuntime.jsx)(Context, {
284
+ value: targetId,
285
+ children: props.children
286
+ });
287
+ }
288
+ return provide;
289
+ }
290
+ }, {
291
+ key: "_useStream",
292
+ value: function _useStream() {
293
+ var _this4 = this;
294
+ return function (selectorMap) {
295
+ var _useState3 = (0, _react.useState)(function () {
296
+ return _this4._util.hashSelectorMap(selectorMap);
297
+ }),
298
+ _useState4 = _slicedToArray(_useState3, 2),
299
+ sMapHash = _useState4[0],
300
+ updateSMapHash = _useState4[1];
301
+ var targetId = (0, _react.use)(_this4._context);
302
+ var getStoreHook = (0, _react.useCallback)(function () {
303
+ var ctxHandle = _this4._obs.createHandleFor(targetId);
304
+ var streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
305
+ if (!streamHandle.isValid) {
306
+ ctxHandle.addChannelAt(sMapHash, ctxHandle.resource.stream(selectorMap));
307
+ streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
308
+ }
309
+ streamHandle.inc();
310
+ return streamHandle.useStore;
311
+ }, [sMapHash, selectorMap, targetId]);
312
+ var _useState5 = (0, _react.useState)(getStoreHook),
313
+ _useState6 = _slicedToArray(_useState5, 2),
314
+ useStore = _useState6[0],
315
+ updateStoreHook = _useState6[1];
316
+ (0, _react.useEffect)(function () {
317
+ return updateSMapHash(_this4._util.hashSelectorMap(selectorMap));
318
+ }, [selectorMap]);
319
+ (0, _react.useEffect)(function () {
320
+ return updateStoreHook(getStoreHook());
321
+ }, [sMapHash]);
322
+ return useStore();
323
+ };
324
+ }
325
+ }]);
326
+ }();
327
+ var Utility = /*#__PURE__*/function () {
328
+ function Utility(context) {
329
+ _classCallCheck(this, Utility);
330
+ _defineProperty(this, "context", null);
331
+ this.context = context;
332
+ }
333
+ return _createClass(Utility, [{
334
+ key: "getIdOf",
335
+ value: function getIdOf(target) {
336
+ return this.context.resourceMap.getRegNumOf(target);
337
+ }
338
+ }, {
339
+ key: "getObservableAt",
340
+ value: function getObservableAt(targetId) {
341
+ return this.context.resourceMap.getResourceAt(targetId);
342
+ }
343
+ }, {
344
+ key: "hashSelectorMap",
345
+ value: function hashSelectorMap(selectorMap) {
346
+ return (0, _jsSha.sha512)((0, _safeStableStringify["default"])(selectorMap, function (k, v) {
347
+ typeof v === 'undefined' ? 'undefined' : v === null ? 'null' : v;
348
+ }));
349
+ }
350
+ }, {
351
+ key: "pointAt",
352
+ value: function pointAt(target) {
353
+ if (!target) {
354
+ target = (0, _2.createEagleEye)();
355
+ } else {
356
+ var _targetId = this.getIdOf(target);
357
+ if (_targetId) {
358
+ return {
359
+ target: target,
360
+ targetId: _targetId
361
+ };
362
+ }
363
+ }
364
+ var targetId = genRegNum();
365
+ this.context.resourceMap.acquire(targetId, target);
366
+ return {
367
+ target: target,
368
+ targetId: targetId
369
+ };
370
+ }
371
+ }, {
372
+ key: "tryObservableAt",
373
+ value: function tryObservableAt(targetId) {
374
+ var observable = this.getObservableAt(targetId);
375
+ if (!observable) {
376
+ throw new Error("No observable entry found for the key bearing the target ID( ".concat(targetId, " )."));
377
+ }
378
+ return observable;
379
+ }
380
+ }]);
381
+ }();
382
+ function createUtilityFor(context) {
383
+ return new Utility(context);
384
+ }
385
+ function createContext() {
386
+ return new EagleEyeUniversal();
387
+ }
package/package.json CHANGED
@@ -22,6 +22,7 @@
22
22
  "@testing-library/user-event": "^14.6.1",
23
23
  "@types/jest": "^29.5.12",
24
24
  "@types/jest-cli": "^24.3.0",
25
+ "@types/js-sha512": "^0.7.0",
25
26
  "@types/lodash.isempty": "^4.4.9",
26
27
  "@types/lodash.isplainobject": "^4.0.9",
27
28
  "@types/node": "^20.11.28",
@@ -125,8 +126,10 @@
125
126
  "test:watch": "eslint --fix && jest --updateSnapshot --watchAll"
126
127
  },
127
128
  "types": "dist/index.d.ts",
128
- "version": "1.0.5",
129
+ "version": "1.1.0-alpha",
129
130
  "dependencies": {
130
- "@webkrafters/eagleeye": "^1.0.8"
131
+ "@webkrafters/eagleeye": "^1.0.8",
132
+ "js-sha512": "^0.9.0",
133
+ "safe-stable-stringify": "^2.5.0"
131
134
  }
132
135
  }