@webkrafters/react-eagleeye 1.0.6-alpha → 1.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -10,4 +10,6 @@ export type ExtractInjectedProps<STATE extends State = State, SELECTOR_MAP exten
10
10
  export interface IProps {
11
11
  }
12
12
  export type OwnProps = IProps & Record<any, any>;
13
- export { createContext as createEagleEye, type ObservableContext as EagleEyeContext } from './main';
13
+ export { createContext as createEagleEye, type AbstractObservable, type ObservableContext as EagleEyeContext } from './main';
14
+ export { createContext as createEagleEyeUniversal } from './main/universal';
15
+ export type { Address as AddressUniversal, BaseProviderPropsRaw as BaseProviderPropsRawUniversal, EagleEyeUniversal, IProviderProps as IProviderPropsUniversal, Observable as ObservableUniversal, ProviderProps as ProviderPropsUniversal, ProviderPropsPrimitive as ProviderPropsPrimitiveUniversal, ProviderPropsRaw as ProviderPropsRawUniversal, RefProps as RefPropsUniversal, WithChildren as WithChildrenUniversal } from './main/universal';
package/dist/index.js CHANGED
@@ -3,72 +3,78 @@
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
+ Object.defineProperty(exports, "createEagleEyeUniversal", {
73
+ enumerable: true,
74
+ get: function get() {
75
+ return _universal.createContext;
76
+ }
77
+ });
78
+ var _eagleeye = require("@webkrafters/eagleeye");
79
+ var _main = require("./main");
80
+ var _universal = require("./main/universal");
@@ -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,153 +22,123 @@ 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 strictMode = (0, react_1.useRef)(true);
140
- var _ref = (0, react_1.useState)(function () {
126
+ var strictMode = (0, _react.useRef)(true);
127
+ var _useState = (0, _react.useState)(function () {
141
128
  return stream(selectorMap);
142
129
  }),
143
- _ref2 = _slicedToArray(_ref, 1),
144
- channel = _ref2[0];
145
- var _ref3 = (0, react_1.useState)(function () {
146
- return {
147
- data: channel.data,
148
- resetState: channel.resetState.bind(channel),
149
- setState: channel.setState.bind(channel)
150
- };
130
+ _useState2 = _slicedToArray(_useState, 1),
131
+ channel = _useState2[0];
132
+ var _useState3 = (0, _react.useState)(function () {
133
+ return makeStore(channel);
151
134
  }),
152
- _ref4 = _slicedToArray(_ref3, 2),
153
- store = _ref4[0],
154
- setStore = _ref4[1];
155
- (0, react_1.useEffect)(function () {
135
+ _useState4 = _slicedToArray(_useState3, 2),
136
+ store = _useState4[0],
137
+ setStore = _useState4[1];
138
+ (0, _react.useEffect)(function () {
156
139
  channel.selectorMap = selectorMap;
157
140
  }, [selectorMap]);
158
- (0, react_1.useEffect)(function () {
141
+ (0, _react.useEffect)(function () {
159
142
  if (!strictMode.current) {
160
143
  return;
161
144
  }
@@ -173,47 +156,50 @@ var ObservableContext = /*#__PURE__*/function () {
173
156
  return store;
174
157
  };
175
158
  }
176
- }, {
177
- key: "dispose",
178
- value: function dispose() {
179
- this.consumer.dispose();
180
- }
181
159
  }]);
182
- }();
183
- exports.ObservableContext = ObservableContext;
160
+ }(AbstractObservable);
184
161
  var ChildMemo = function () {
185
162
  var useNodeMemo = function useNodeMemo(node) {
186
- var nodeRef = (0, react_1.useRef)(node);
187
- 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'))) {
188
165
  nodeRef.current = node;
189
166
  }
190
167
  return nodeRef.current;
191
168
  };
192
- var ChildMemo = (0, react_1.memo)(function (_ref5) {
193
- var child = _ref5.child;
194
- 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
+ });
195
174
  });
196
175
  ChildMemo.displayName = 'ObservableContext.Provider.Internal.Guardian.ChildMemo';
197
- var Guardian = function Guardian(_ref6) {
198
- var child = _ref6.child;
199
- return react_1["default"].createElement(ChildMemo, {
176
+ var Guardian = function Guardian(_ref2) {
177
+ var child = _ref2.child;
178
+ return (0, _jsxRuntime.jsx)(ChildMemo, {
200
179
  child: useNodeMemo(child)
201
180
  });
202
181
  };
203
182
  Guardian.displayName = 'ObservableContext.Provider.Internal.Guardian';
204
183
  return Guardian;
205
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
+ }
206
192
  function memoizeImmediateChildTree(children) {
207
- return react_1.Children.map(children, function (_child) {
193
+ return _react.Children.map(children, function (_child) {
208
194
  var _child2, _child$type$$$typeof, _child$props;
209
195
  var child = _child;
210
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)') {
211
197
  return child;
212
198
  }
213
199
  if ((_child$props = child.props) !== null && _child$props !== void 0 && _child$props.children) {
214
- 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));
215
201
  }
216
- return react_1["default"].createElement(ChildMemo, {
202
+ return (0, _jsxRuntime.jsx)(ChildMemo, {
217
203
  child: child
218
204
  });
219
205
  });
@@ -0,0 +1,153 @@
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
+ getIdOf(observable: AbstractObservable<T>): string;
148
+ getObservableAt<const ID extends string>(id: ID): AbstractObservable<T>;
149
+ private defineProvider;
150
+ private _useStream;
151
+ }
152
+ export declare function createContext<T extends State>(): EagleEyeUniversal<T>;
153
+ export {};
@@ -0,0 +1,384 @@
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
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ var _react = require("react");
10
+ var _jsSha = require("js-sha512");
11
+ var _safeStableStringify = _interopRequireDefault(require("safe-stable-stringify"));
12
+ var _ = require("..");
13
+ var _2 = require("../../");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
15
+ 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); }
16
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
17
+ 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); }
18
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
19
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
20
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
21
+ 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); }
22
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
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; }
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; }
25
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
26
+ 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."); }
27
+ 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; } }
28
+ 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; }
29
+ 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; } }
30
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
31
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
32
+ 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); } }
33
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
34
+ 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; }
35
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
36
+ 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); }
37
+ var ChsResource = /*#__PURE__*/function () {
38
+ function ChsResource() {
39
+ var _this = this;
40
+ _classCallCheck(this, ChsResource);
41
+ _defineProperty(this, "_finalizer", new FinalizationRegistry(function (s) {
42
+ return _this.finalize(s);
43
+ }));
44
+ _defineProperty(this, "_registry", void 0);
45
+ }
46
+ return _createClass(ChsResource, [{
47
+ key: "acquire",
48
+ value: function acquire(sMapHash, resource) {
49
+ var useStore = function useStore() {
50
+ var _useState = (0, _react.useState)(function () {
51
+ return (0, _.makeStore)(resource);
52
+ }),
53
+ _useState2 = _slicedToArray(_useState, 2),
54
+ store = _useState2[0],
55
+ setStore = _useState2[1];
56
+ (0, _react.useEffect)(function () {
57
+ var fn = function fn() {
58
+ return setStore(_objectSpread(_objectSpread({}, store), {}, {
59
+ data: resource.data
60
+ }));
61
+ };
62
+ resource.addListener('data-changed', fn);
63
+ return function () {
64
+ return resource.removeListener('data-changed', fn);
65
+ };
66
+ }, [resource]);
67
+ return store;
68
+ };
69
+ this._registry[sMapHash] = {
70
+ channel: new WeakRef(resource),
71
+ numConnections: 0,
72
+ useStore: useStore
73
+ };
74
+ this._finalizer.register(resource, sMapHash, resource);
75
+ return this.createHandleFor(sMapHash);
76
+ }
77
+ }, {
78
+ key: "createHandleFor",
79
+ value: function createHandleFor(sMapHash) {
80
+ var _this2 = this;
81
+ var entry = this._registry[sMapHash];
82
+ var handle = {
83
+ get descriptor() {
84
+ return sMapHash;
85
+ },
86
+ get isValid() {
87
+ return !!entry;
88
+ },
89
+ get resource() {
90
+ var _entry$channel$deref, _entry$channel;
91
+ 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);
92
+ },
93
+ get size() {
94
+ return handle.isValid ? entry.numConnections : -1;
95
+ },
96
+ get useStore() {
97
+ return entry.useStore;
98
+ },
99
+ dec: function dec() {
100
+ if (!handle.isValid) {
101
+ return;
102
+ }
103
+ entry.numConnections--;
104
+ if (handle.size) {
105
+ return;
106
+ }
107
+ handle.resource.endStream();
108
+ _this2._finalizer.unregister(handle.resource);
109
+ entry.channel = null;
110
+ _this2.finalize(sMapHash);
111
+ },
112
+ inc: function inc() {
113
+ handle.isValid && entry.numConnections++;
114
+ }
115
+ };
116
+ return handle;
117
+ }
118
+ }, {
119
+ key: "getResourceAt",
120
+ value: function getResourceAt(sMapHash) {
121
+ return this.createHandleFor(sMapHash).resource;
122
+ }
123
+ }, {
124
+ key: "finalize",
125
+ value: function finalize(sMapHash) {
126
+ delete this._registry[sMapHash];
127
+ }
128
+ }]);
129
+ }();
130
+ var ObsResource = /*#__PURE__*/function () {
131
+ function ObsResource() {
132
+ var _this3 = this;
133
+ _classCallCheck(this, ObsResource);
134
+ _defineProperty(this, "_finalizer", new FinalizationRegistry(function (regKey) {
135
+ delete _this3._registry[regKey];
136
+ }));
137
+ _defineProperty(this, "_registry", void 0);
138
+ }
139
+ return _createClass(ObsResource, [{
140
+ key: "acquire",
141
+ value: function acquire(regNum, resource) {
142
+ this._registry[regNum] = {
143
+ channels: new ChsResource(),
144
+ observable: new WeakRef(resource)
145
+ };
146
+ this._finalizer.register(resource, regNum, resource);
147
+ return this.createHandleFor(regNum);
148
+ }
149
+ }, {
150
+ key: "createHandleFor",
151
+ value: function createHandleFor(regNum) {
152
+ var _this$_registry$regNu;
153
+ var entry = (_this$_registry$regNu = this._registry[regNum]) !== null && _this$_registry$regNu !== void 0 ? _this$_registry$regNu : {};
154
+ return {
155
+ get descriptor() {
156
+ return regNum;
157
+ },
158
+ get resource() {
159
+ var _entry$observable$der, _entry$observable;
160
+ 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);
161
+ },
162
+ addChannelAt: function addChannelAt(sMapHash, channel) {
163
+ return entry === null || entry === void 0 ? void 0 : entry.channels.acquire(sMapHash, channel);
164
+ },
165
+ getChannelHandleAt: function getChannelHandleAt(sMapHash) {
166
+ return entry === null || entry === void 0 ? void 0 : entry.channels.createHandleFor(sMapHash);
167
+ }
168
+ };
169
+ }
170
+ }, {
171
+ key: "getRegNumOf",
172
+ value: function getRegNumOf(resource) {
173
+ for (var regNum in this._registry) {
174
+ if (this.getResourceAt(regNum) === resource) {
175
+ return regNum;
176
+ }
177
+ }
178
+ }
179
+ }, {
180
+ key: "getResourceAt",
181
+ value: function getResourceAt(regNum) {
182
+ var _this$createHandleFor;
183
+ return (_this$createHandleFor = this.createHandleFor(regNum)) === null || _this$createHandleFor === void 0 ? void 0 : _this$createHandleFor.resource;
184
+ }
185
+ }]);
186
+ }();
187
+ var genRegNum = function () {
188
+ var count = 0;
189
+ var ts = 0;
190
+ return function () {
191
+ var newTs = Date.now();
192
+ if (newTs === ts) {
193
+ count++;
194
+ } else {
195
+ ts = newTs;
196
+ count = 0;
197
+ }
198
+ return "".concat(count, ":").concat(ts);
199
+ };
200
+ }();
201
+ var Observable = exports.Observable = /*#__PURE__*/function (_AbstractObservable) {
202
+ function Observable() {
203
+ _classCallCheck(this, Observable);
204
+ return _callSuper(this, Observable, arguments);
205
+ }
206
+ _inherits(Observable, _AbstractObservable);
207
+ return _createClass(Observable);
208
+ }(_.AbstractObservable);
209
+ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
210
+ function EagleEyeUniversal() {
211
+ _classCallCheck(this, EagleEyeUniversal);
212
+ _defineProperty(this, "_context", void 0);
213
+ _defineProperty(this, "_pCache", null);
214
+ _defineProperty(this, "_obs", null);
215
+ _defineProperty(this, "_util", null);
216
+ this._context = /*#__PURE__*/(0, _react.createContext)('0:0');
217
+ this._pCache = this.defineProvider();
218
+ this._obs = new ObsResource();
219
+ this._util = new Utility(this);
220
+ }
221
+ return _createClass(EagleEyeUniversal, [{
222
+ key: "resourceMap",
223
+ get: function get() {
224
+ return this._obs;
225
+ }
226
+ }, {
227
+ key: "Provider",
228
+ get: function get() {
229
+ return this._pCache;
230
+ }
231
+ }, {
232
+ key: "useStream",
233
+ get: function get() {
234
+ return this._useStream.bind(this);
235
+ }
236
+ }, {
237
+ key: "provide",
238
+ value: function provide() {
239
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
240
+ var observable = props.observable;
241
+ if (!observable) {
242
+ var t = props.observableConfig;
243
+ 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);
244
+ }
245
+ return this._util.pointAt(observable);
246
+ }
247
+ }, {
248
+ key: "stream",
249
+ value: function stream(selectorMap) {
250
+ var useStream = this.useStream;
251
+ return {
252
+ into: function into(WrappedComponent) {
253
+ var Container = function Container(props) {
254
+ var store = useStream(selectorMap);
255
+ return (0, _jsxRuntime.jsx)(WrappedComponent, _objectSpread({}, _objectSpread(_objectSpread({}, store), props)));
256
+ };
257
+ return Container;
258
+ }
259
+ };
260
+ }
261
+ }, {
262
+ key: "getIdOf",
263
+ value: function getIdOf(observable) {
264
+ return this._util.getIdOf(observable);
265
+ }
266
+ }, {
267
+ key: "getObservableAt",
268
+ value: function getObservableAt(id) {
269
+ return this._util.getObservableAt(id);
270
+ }
271
+ }, {
272
+ key: "defineProvider",
273
+ value: function defineProvider() {
274
+ var me = this;
275
+ function provide() {
276
+ var _props$ref;
277
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
278
+ var targetId;
279
+ if (!('targetId' in props)) {
280
+ targetId = me.provide(props).targetId;
281
+ } else {
282
+ targetId = props.targetId;
283
+ if (!this._util.getObservableAt(targetId)) {
284
+ throw new Error("No valid observable instance found at target ID, ".concat(targetId));
285
+ }
286
+ }
287
+ (_props$ref = props.ref) !== null && _props$ref !== void 0 ? _props$ref : props.ref = {
288
+ current: {}
289
+ };
290
+ props.ref.current.targetId = targetId;
291
+ var Context = me._context;
292
+ return (0, _jsxRuntime.jsx)(Context, {
293
+ value: targetId,
294
+ children: props.children
295
+ });
296
+ }
297
+ return provide;
298
+ }
299
+ }, {
300
+ key: "_useStream",
301
+ value: function _useStream() {
302
+ var _this4 = this;
303
+ return function (selectorMap) {
304
+ var _useState3 = (0, _react.useState)(function () {
305
+ return _this4._util.hashSelectorMap(selectorMap);
306
+ }),
307
+ _useState4 = _slicedToArray(_useState3, 2),
308
+ sMapHash = _useState4[0],
309
+ updateSMapHash = _useState4[1];
310
+ var targetId = (0, _react.use)(_this4._context);
311
+ var getStoreHook = (0, _react.useCallback)(function () {
312
+ var ctxHandle = _this4._obs.createHandleFor(targetId);
313
+ var streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
314
+ if (!streamHandle.isValid) {
315
+ ctxHandle.addChannelAt(sMapHash, ctxHandle.resource.stream(selectorMap));
316
+ streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
317
+ }
318
+ streamHandle.inc();
319
+ return streamHandle.useStore;
320
+ }, [sMapHash, selectorMap, targetId]);
321
+ var _useState5 = (0, _react.useState)(getStoreHook),
322
+ _useState6 = _slicedToArray(_useState5, 2),
323
+ useStore = _useState6[0],
324
+ updateStoreHook = _useState6[1];
325
+ (0, _react.useEffect)(function () {
326
+ return updateSMapHash(_this4._util.hashSelectorMap(selectorMap));
327
+ }, [selectorMap]);
328
+ (0, _react.useEffect)(function () {
329
+ return updateStoreHook(getStoreHook());
330
+ }, [sMapHash]);
331
+ return useStore();
332
+ };
333
+ }
334
+ }]);
335
+ }();
336
+ var Utility = /*#__PURE__*/function () {
337
+ function Utility(context) {
338
+ _classCallCheck(this, Utility);
339
+ _defineProperty(this, "context", null);
340
+ this.context = context;
341
+ }
342
+ return _createClass(Utility, [{
343
+ key: "getIdOf",
344
+ value: function getIdOf(target) {
345
+ return this.context.resourceMap.getRegNumOf(target);
346
+ }
347
+ }, {
348
+ key: "getObservableAt",
349
+ value: function getObservableAt(targetId) {
350
+ return this.context.resourceMap.getResourceAt(targetId);
351
+ }
352
+ }, {
353
+ key: "hashSelectorMap",
354
+ value: function hashSelectorMap(selectorMap) {
355
+ return (0, _jsSha.sha512)((0, _safeStableStringify["default"])(selectorMap, function (k, v) {
356
+ typeof v === 'undefined' ? 'undefined' : v === null ? 'null' : v;
357
+ }));
358
+ }
359
+ }, {
360
+ key: "pointAt",
361
+ value: function pointAt(target) {
362
+ if (!target) {
363
+ target = (0, _2.createEagleEye)();
364
+ } else {
365
+ var _targetId = this.getIdOf(target);
366
+ if (_targetId) {
367
+ return {
368
+ target: target,
369
+ targetId: _targetId
370
+ };
371
+ }
372
+ }
373
+ var targetId = genRegNum();
374
+ this.context.resourceMap.acquire(targetId, target);
375
+ return {
376
+ target: target,
377
+ targetId: targetId
378
+ };
379
+ }
380
+ }]);
381
+ }();
382
+ function createContext() {
383
+ return new EagleEyeUniversal();
384
+ }
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.6-alpha",
129
+ "version": "1.1.0-alpha.0",
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
  }