@webkrafters/react-eagleeye 1.1.0-alpha.1 → 1.1.0-alpha.11

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/README.md CHANGED
@@ -44,8 +44,22 @@
44
44
 
45
45
  **Usage:** Please see <b><a href="https://react-eagleeye.js.org/getting-started">Getting Started</a></b>.
46
46
 
47
- **Demo:** [Play with the app on codesandbox](https://codesandbox.io/s/github/webKrafters/react-eagleeye-app)\
48
- If sandbox fails to load app, please refresh dependencies on its lower left.
47
+ **Demo:**\
48
+ [1] [Play with the app on codesandbox](https://codesandbox.io/s/github/webKrafters/react-eagleeye-app)\
49
+ [2] [Play with the app on codesandbox (Universal Rendering)](https://codesandbox.io/s/github/webKrafters/react-eagleeye-universal-app)\
50
+ If sandbox fails to load app, please refresh dependencies on its lower left.\
51
+ **OR**\
52
+ Bring in and run the demo software locally through the following steps:\
53
+ **Step 1:** Run either\
54
+ &nbsp;&nbsp;&nbsp;&nbsp;`git clone https://github.com/webKrafters/react-eagleeye-app.git`\
55
+ &nbsp;&nbsp;&nbsp;&nbsp;or\
56
+ &nbsp;&nbsp;&nbsp;&nbsp;`git clone https://github.com/webKrafters/react-eagleeye-universal-app.git` (Universal Rendering)\
57
+ **Step 2:** CD into the cloned directory\
58
+ **Step 3:** Run `npm i`\
59
+ **Step 4:** Run `npm run dev`\
60
+ **Step 5:** Copy and paste the displayed URL into the web browser.\
61
+ **Step 6:** Use CTRL+F5 (Mac: CMD+F5) at the browser to ensure a fresh page load if needed.\
62
+ **Step 7:** Pay with the app.
49
63
 
50
64
  **Install:**\
51
65
  npm install --save @webkrafters/react-eagleeye
package/dist/index.d.ts CHANGED
@@ -11,5 +11,5 @@ export interface IProps {
11
11
  }
12
12
  export type OwnProps = IProps & Record<any, any>;
13
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';
14
+ export { createContext as createEagleEyeUniverse } from './main/universe';
15
+ export type { Address as AddressUniverse, BaseProviderPropsRaw as BaseProviderPropsRawUniverse, ObservableUniverse as EagleEyeUniverse, IProviderProps as IProviderPropsUniverse, Observable as ObservableUniverse, ProviderProps as ProviderPropsUniverse, ProviderPropsPrimitive as ProviderPropsPrimitiveUniverse, ProviderPropsRaw as ProviderPropsRawUniverse, RefProps as RefPropsUniverse, WithChildren as WithChildrenUniverse } from './main/universe';
package/dist/index.js CHANGED
@@ -69,12 +69,12 @@ Object.defineProperty(exports, "createEagleEye", {
69
69
  return _main.createContext;
70
70
  }
71
71
  });
72
- Object.defineProperty(exports, "createEagleEyeUniversal", {
72
+ Object.defineProperty(exports, "createEagleEyeUniverse", {
73
73
  enumerable: true,
74
74
  get: function get() {
75
- return _universal.createContext;
75
+ return _universe.createContext;
76
76
  }
77
77
  });
78
78
  var _eagleeye = require("@webkrafters/eagleeye");
79
79
  var _main = require("./main");
80
- var _universal = require("./main/universal");
80
+ var _universe = require("./main/universe");
@@ -123,7 +123,6 @@ var ObservableContext = exports.ObservableContext = /*#__PURE__*/function (_Abst
123
123
  get: function get() {
124
124
  var stream = this.stream;
125
125
  return function (selectorMap) {
126
- var strictMode = (0, _react.useRef)(true);
127
126
  var _useState = (0, _react.useState)(function () {
128
127
  return stream(selectorMap);
129
128
  }),
@@ -139,20 +138,13 @@ var ObservableContext = exports.ObservableContext = /*#__PURE__*/function (_Abst
139
138
  channel.selectorMap = selectorMap;
140
139
  }, [selectorMap]);
141
140
  (0, _react.useEffect)(function () {
142
- if (!strictMode.current) {
143
- return;
144
- }
145
141
  channel.addListener('data-changed', function () {
146
- return setStore(_objectSpread(_objectSpread({}, store), {}, {
147
- data: channel.data
148
- }));
142
+ return setStore(makeStore(channel));
149
143
  });
150
- strictMode.current = false;
151
144
  return function () {
152
- channel.endStream();
153
- strictMode.current = true;
145
+ return channel.endStream();
154
146
  };
155
- }, []);
147
+ }, [channel]);
156
148
  return store;
157
149
  };
158
150
  }
@@ -0,0 +1,135 @@
1
+ import { FC, ComponentType, JSX, RefObject } 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 OwnPropsTemplate<P> = P extends IProviderProps<infer U> ? U : never;
29
+ type ObservableTemplate<T> = T extends AbstractObservable<infer U> ? U : never;
30
+ export type WithChildren<P extends IProviderProps<OwnPropsTemplate<P>>> = P & {
31
+ children?: React.ReactNode;
32
+ };
33
+ interface ChannelEntry {
34
+ channel: WeakRef<Channel>;
35
+ numConnections: number;
36
+ }
37
+ interface Entry {
38
+ channels: ChsResource<Channel>;
39
+ observable: WeakRef<AbstractObservable<any>>;
40
+ }
41
+ interface Handle<W extends WeakKey> {
42
+ readonly resource: W;
43
+ }
44
+ declare class ObserverHandle<W extends AbstractObservable<ObservableTemplate<W>>> implements Handle<W> {
45
+ private _wObs;
46
+ private _regNum;
47
+ constructor(obs: ObsResource<W>, regNum: string);
48
+ private get _obs();
49
+ private get _entry();
50
+ get resource(): W;
51
+ addChannelAt(sMapHash: string, channel: Channel): StreamerHandle<Channel<import("@webkrafters/auto-immutable").Value, SelectorMap>>;
52
+ getChannelHandleAt(sMapHash: string): StreamerHandle<Channel<import("@webkrafters/auto-immutable").Value, SelectorMap>>;
53
+ release(force?: boolean): void;
54
+ }
55
+ declare class StreamerHandle<W extends Channel> implements Handle<W> {
56
+ private _wChs;
57
+ private _sMapHash;
58
+ constructor(chs: ChsResource<W>, sMapHash: string);
59
+ private get _chs();
60
+ private get _entry();
61
+ get isValid(): boolean;
62
+ get resource(): W;
63
+ get size(): number;
64
+ dec(): void;
65
+ inc(): void;
66
+ }
67
+ interface IResource<W extends WeakKey> {
68
+ acquire(desc: string, resource: W): Handle<W>;
69
+ createHandleFor(desc: string): Handle<W>;
70
+ }
71
+ declare abstract class AbstractResource<W extends WeakKey> implements IResource<W> {
72
+ abstract registry: Record<string, any>;
73
+ get size(): number;
74
+ abstract acquire(desc: string, resource: W): Handle<W>;
75
+ abstract createHandleFor(desc: string): Handle<W>;
76
+ finalizer: FinalizationRegistry<string>;
77
+ finalize(key: string): void;
78
+ }
79
+ declare class ChsResource<W extends Channel> extends AbstractResource<W> {
80
+ registry: Record<string, ChannelEntry>;
81
+ acquire(sMapHash: string, resource: W): StreamerHandle<W>;
82
+ createHandleFor(sMapHash: string): StreamerHandle<W>;
83
+ }
84
+ declare class ObsResource<W extends AbstractObservable<ObservableTemplate<W>>> extends AbstractResource<W> {
85
+ registry: Record<string, Entry>;
86
+ acquire(regNum: string, resource: W): ObserverHandle<W>;
87
+ createHandleFor(regNum: string): ObserverHandle<W>;
88
+ getRegNumOf(resource: W): string;
89
+ removeResourceAt(regNum: string, force?: boolean): void;
90
+ getResourceAt(regNum: string): W;
91
+ }
92
+ export declare class Observable<T extends State> extends AbstractObservable<T> {
93
+ }
94
+ export declare class ObservableUniverse<T extends State> {
95
+ private _context;
96
+ private _pCache;
97
+ private _obs;
98
+ private _sCache;
99
+ private _util;
100
+ constructor();
101
+ get Provider(): {
102
+ <const ID extends string>(props?: WithChildren<ProviderProps<T, ID>>): JSX.Element;
103
+ <const ID extends string>(props?: WithChildren<ProviderPropsRaw<T, ID>>): JSX.Element;
104
+ <const ID extends string>(props?: WithChildren<ProviderPropsPrimitive<T, ID>>): JSX.Element;
105
+ <const ID extends string>(props?: WithChildren<RefProps<ID>>): JSX.Element;
106
+ };
107
+ get useStream(): <const S extends SelectorMap>(selectorMap?: S) => Store<T, S>;
108
+ free(observable: AbstractObservable<T>, force?: boolean): void;
109
+ free(observable: string, force?: boolean): void;
110
+ provide<const ID extends string>(props?: ProviderProps<T, ID>): Point<T, ID>;
111
+ provide<const ID extends string>(props?: ProviderPropsRaw<T, ID>): Point<T, ID>;
112
+ provide<const ID extends string>(props?: ProviderPropsPrimitive<T, ID>): Point<T, ID>;
113
+ secureResourceMapFor(requestor: Utility<T>): ObsResource<AbstractObservable<any>>;
114
+ stream<const S extends SelectorMap>(selectorMap?: S): {
115
+ into<P>(WrappedComponent: ComponentType<Store<T, S> & P>): FC<P>;
116
+ };
117
+ getIdOf(observable: AbstractObservable<T>): string;
118
+ getObservableAt<const ID extends string>(id: ID): AbstractObservable<T>;
119
+ private defineProvider;
120
+ private defineStreamHook;
121
+ }
122
+ export declare class Utility<T extends State> {
123
+ private _wContext;
124
+ constructor(context: ObservableUniverse<T>);
125
+ getIdOf(target: AbstractObservable<T>): string;
126
+ getObservableAt<const ID extends string>(targetId: ID): AbstractObservable<T>;
127
+ hashSelectorMap<S extends SelectorMap>(selectorMap?: S): string;
128
+ pointAt<const ID extends string>(target: AbstractObservable<T>): Point<T, ID>;
129
+ untrack(target: AbstractObservable<T>, force?: boolean): void;
130
+ untrackId<const ID extends string>(targetId: ID, force?: boolean): void;
131
+ private get _context();
132
+ private get _registry();
133
+ }
134
+ export declare function createContext<T extends State>(): ObservableUniverse<T>;
135
+ export {};
@@ -3,16 +3,25 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Observable = exports.EagleEyeUniversal = void 0;
6
+ exports.Utility = exports.ObservableUniverse = exports.Observable = void 0;
7
7
  exports.createContext = createContext;
8
8
  var _jsxRuntime = require("react/jsx-runtime");
9
9
  var _react = require("react");
10
- var _jsSha = require("js-sha512");
10
+ var _lodash = _interopRequireDefault(require("lodash.isplainobject"));
11
11
  var _safeStableStringify = _interopRequireDefault(require("safe-stable-stringify"));
12
+ var _jsSha = require("js-sha512");
12
13
  var _ = require("..");
13
- var _2 = require("../../");
14
+ var _2 = require("../..");
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
15
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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
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."); }
19
+ 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; } }
20
+ 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; }
21
+ 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; } }
22
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
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; }
16
25
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
17
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); }
18
27
  function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
@@ -20,170 +29,218 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
20
29
  function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
21
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); }
22
31
  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
32
  function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
32
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); } }
33
34
  function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
34
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; }
35
36
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
36
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); }
37
- var ChsResource = /*#__PURE__*/function () {
38
- function ChsResource() {
38
+ var ObserverHandle = /*#__PURE__*/function () {
39
+ function ObserverHandle(obs, regNum) {
40
+ _classCallCheck(this, ObserverHandle);
41
+ _defineProperty(this, "_wObs", void 0);
42
+ _defineProperty(this, "_regNum", void 0);
43
+ this._wObs = new WeakRef(obs);
44
+ this._regNum = regNum;
45
+ }
46
+ return _createClass(ObserverHandle, [{
47
+ key: "_obs",
48
+ get: function get() {
49
+ return this._wObs.deref();
50
+ }
51
+ }, {
52
+ key: "_entry",
53
+ get: function get() {
54
+ var _this$_obs$registry$t;
55
+ return (_this$_obs$registry$t = this._obs.registry[this._regNum]) !== null && _this$_obs$registry$t !== void 0 ? _this$_obs$registry$t : {};
56
+ }
57
+ }, {
58
+ key: "resource",
59
+ get: function get() {
60
+ var _this$_entry, _this$_entry$deref;
61
+ return (_this$_entry = this._entry) === null || _this$_entry === void 0 || (_this$_entry = _this$_entry.observable) === null || _this$_entry === void 0 || (_this$_entry$deref = _this$_entry.deref) === null || _this$_entry$deref === void 0 ? void 0 : _this$_entry$deref.call(_this$_entry);
62
+ }
63
+ }, {
64
+ key: "addChannelAt",
65
+ value: function addChannelAt(sMapHash, channel) {
66
+ var _this$_entry2;
67
+ return (_this$_entry2 = this._entry) === null || _this$_entry2 === void 0 ? void 0 : _this$_entry2.channels.acquire(sMapHash, channel);
68
+ }
69
+ }, {
70
+ key: "getChannelHandleAt",
71
+ value: function getChannelHandleAt(sMapHash) {
72
+ var _this$_entry3;
73
+ return (_this$_entry3 = this._entry) === null || _this$_entry3 === void 0 ? void 0 : _this$_entry3.channels.createHandleFor(sMapHash);
74
+ }
75
+ }, {
76
+ key: "release",
77
+ value: function release() {
78
+ var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
79
+ if (!force && this._entry.channels.size) {
80
+ return;
81
+ }
82
+ this._obs.finalizer.unregister(this.resource);
83
+ this._entry.observable = null;
84
+ this._obs.finalize(this._regNum);
85
+ }
86
+ }]);
87
+ }();
88
+ var StreamerHandle = /*#__PURE__*/function () {
89
+ function StreamerHandle(chs, sMapHash) {
90
+ _classCallCheck(this, StreamerHandle);
91
+ _defineProperty(this, "_wChs", void 0);
92
+ _defineProperty(this, "_sMapHash", void 0);
93
+ this._wChs = new WeakRef(chs);
94
+ this._sMapHash = sMapHash;
95
+ }
96
+ return _createClass(StreamerHandle, [{
97
+ key: "_chs",
98
+ get: function get() {
99
+ return this._wChs.deref();
100
+ }
101
+ }, {
102
+ key: "_entry",
103
+ get: function get() {
104
+ var _this$_chs;
105
+ return (_this$_chs = this._chs) === null || _this$_chs === void 0 ? void 0 : _this$_chs.registry[this._sMapHash];
106
+ }
107
+ }, {
108
+ key: "isValid",
109
+ get: function get() {
110
+ return !!this._entry;
111
+ }
112
+ }, {
113
+ key: "resource",
114
+ get: function get() {
115
+ var _this$_entry4, _this$_entry4$deref;
116
+ return (_this$_entry4 = this._entry) === null || _this$_entry4 === void 0 || (_this$_entry4 = _this$_entry4.channel) === null || _this$_entry4 === void 0 || (_this$_entry4$deref = _this$_entry4.deref) === null || _this$_entry4$deref === void 0 ? void 0 : _this$_entry4$deref.call(_this$_entry4);
117
+ }
118
+ }, {
119
+ key: "size",
120
+ get: function get() {
121
+ return this.isValid ? this._entry.numConnections : -1;
122
+ }
123
+ }, {
124
+ key: "dec",
125
+ value: function dec() {
126
+ if (!this.isValid) {
127
+ return;
128
+ }
129
+ this._entry.numConnections--;
130
+ if (this.size) {
131
+ return;
132
+ }
133
+ this.resource.endStream();
134
+ this._chs.finalizer.unregister(this.resource);
135
+ this._entry.channel = null;
136
+ this._chs.finalize(this._sMapHash);
137
+ }
138
+ }, {
139
+ key: "inc",
140
+ value: function inc() {
141
+ this.isValid && this._entry.numConnections++;
142
+ }
143
+ }]);
144
+ }();
145
+ var AbstractResource = /*#__PURE__*/function () {
146
+ function AbstractResource() {
39
147
  var _this = this;
40
- _classCallCheck(this, ChsResource);
41
- _defineProperty(this, "_finalizer", new FinalizationRegistry(function (s) {
148
+ _classCallCheck(this, AbstractResource);
149
+ _defineProperty(this, "finalizer", new FinalizationRegistry(function (s) {
42
150
  return _this.finalize(s);
43
151
  }));
44
- _defineProperty(this, "_registry", void 0);
45
152
  }
153
+ return _createClass(AbstractResource, [{
154
+ key: "size",
155
+ get: function get() {
156
+ return Object.keys(this.registry).length;
157
+ }
158
+ }, {
159
+ key: "finalize",
160
+ value: function finalize(key) {
161
+ delete this.registry[key];
162
+ }
163
+ }]);
164
+ }();
165
+ var ChsResource = /*#__PURE__*/function (_AbstractResource2) {
166
+ function ChsResource() {
167
+ var _this2;
168
+ _classCallCheck(this, ChsResource);
169
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
170
+ args[_key] = arguments[_key];
171
+ }
172
+ _this2 = _callSuper(this, ChsResource, [].concat(args));
173
+ _defineProperty(_this2, "registry", {});
174
+ return _this2;
175
+ }
176
+ _inherits(ChsResource, _AbstractResource2);
46
177
  return _createClass(ChsResource, [{
47
178
  key: "acquire",
48
179
  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] = {
180
+ this.registry[sMapHash] = {
70
181
  channel: new WeakRef(resource),
71
- numConnections: 0,
72
- useStore: useStore
182
+ numConnections: 0
73
183
  };
74
- this._finalizer.register(resource, sMapHash, resource);
184
+ this.finalizer.register(resource, sMapHash, resource);
75
185
  return this.createHandleFor(sMapHash);
76
186
  }
77
187
  }, {
78
188
  key: "createHandleFor",
79
189
  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];
190
+ return new StreamerHandle(this, sMapHash);
127
191
  }
128
192
  }]);
129
- }();
130
- var ObsResource = /*#__PURE__*/function () {
193
+ }(AbstractResource);
194
+ var ObsResource = /*#__PURE__*/function (_AbstractResource3) {
131
195
  function ObsResource() {
132
- var _this3 = this;
196
+ var _this3;
133
197
  _classCallCheck(this, ObsResource);
134
- _defineProperty(this, "_finalizer", new FinalizationRegistry(function (regKey) {
135
- delete _this3._registry[regKey];
136
- }));
137
- _defineProperty(this, "_registry", void 0);
198
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
199
+ args[_key2] = arguments[_key2];
200
+ }
201
+ _this3 = _callSuper(this, ObsResource, [].concat(args));
202
+ _defineProperty(_this3, "registry", {});
203
+ return _this3;
138
204
  }
205
+ _inherits(ObsResource, _AbstractResource3);
139
206
  return _createClass(ObsResource, [{
140
207
  key: "acquire",
141
208
  value: function acquire(regNum, resource) {
142
- this._registry[regNum] = {
209
+ this.registry[regNum] = {
143
210
  channels: new ChsResource(),
144
211
  observable: new WeakRef(resource)
145
212
  };
146
- this._finalizer.register(resource, regNum, resource);
213
+ this.finalizer.register(resource, regNum, resource);
147
214
  return this.createHandleFor(regNum);
148
215
  }
149
216
  }, {
150
217
  key: "createHandleFor",
151
218
  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
- };
219
+ return new ObserverHandle(this, regNum);
169
220
  }
170
221
  }, {
171
222
  key: "getRegNumOf",
172
223
  value: function getRegNumOf(resource) {
173
- for (var regNum in this._registry) {
224
+ for (var regNum in this.registry) {
174
225
  if (this.getResourceAt(regNum) === resource) {
175
226
  return regNum;
176
227
  }
177
228
  }
178
229
  }
230
+ }, {
231
+ key: "removeResourceAt",
232
+ value: function removeResourceAt(regNum, force) {
233
+ var _this$createHandleFor;
234
+ (_this$createHandleFor = this.createHandleFor(regNum)) === null || _this$createHandleFor === void 0 || _this$createHandleFor.release(force);
235
+ }
179
236
  }, {
180
237
  key: "getResourceAt",
181
238
  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;
239
+ var _this$createHandleFor2;
240
+ return (_this$createHandleFor2 = this.createHandleFor(regNum)) === null || _this$createHandleFor2 === void 0 ? void 0 : _this$createHandleFor2.resource;
184
241
  }
185
242
  }]);
186
- }();
243
+ }(AbstractResource);
187
244
  var genRegNum = function () {
188
245
  var count = 0;
189
246
  var ts = 0;
@@ -206,9 +263,9 @@ var Observable = exports.Observable = /*#__PURE__*/function (_AbstractObservable
206
263
  _inherits(Observable, _AbstractObservable);
207
264
  return _createClass(Observable);
208
265
  }(_.AbstractObservable);
209
- var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
210
- function EagleEyeUniversal() {
211
- _classCallCheck(this, EagleEyeUniversal);
266
+ var ObservableUniverse = exports.ObservableUniverse = /*#__PURE__*/function () {
267
+ function ObservableUniverse() {
268
+ _classCallCheck(this, ObservableUniverse);
212
269
  _defineProperty(this, "_context", void 0);
213
270
  _defineProperty(this, "_pCache", null);
214
271
  _defineProperty(this, "_obs", null);
@@ -220,12 +277,7 @@ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
220
277
  this._sCache = this.defineStreamHook();
221
278
  this._util = new Utility(this);
222
279
  }
223
- return _createClass(EagleEyeUniversal, [{
224
- key: "resourceMap",
225
- get: function get() {
226
- return this._obs;
227
- }
228
- }, {
280
+ return _createClass(ObservableUniverse, [{
229
281
  key: "Provider",
230
282
  get: function get() {
231
283
  return this._pCache;
@@ -235,6 +287,11 @@ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
235
287
  get: function get() {
236
288
  return this._sCache;
237
289
  }
290
+ }, {
291
+ key: "free",
292
+ value: function free(observable, force) {
293
+ !(observable instanceof _.AbstractObservable) ? this._util.untrackId(observable, force) : this._util.untrack(observable, force);
294
+ }
238
295
  }, {
239
296
  key: "provide",
240
297
  value: function provide() {
@@ -246,6 +303,14 @@ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
246
303
  }
247
304
  return this._util.pointAt(observable);
248
305
  }
306
+ }, {
307
+ key: "secureResourceMapFor",
308
+ value: function secureResourceMapFor(requestor) {
309
+ if (requestor === this._util) {
310
+ return this._obs;
311
+ }
312
+ throw new Error('Illegal operation.');
313
+ }
249
314
  }, {
250
315
  key: "stream",
251
316
  value: function stream(selectorMap) {
@@ -275,24 +340,53 @@ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
275
340
  value: function defineProvider() {
276
341
  var me = this;
277
342
  function provide() {
278
- var _props$ref;
343
+ var _props$observableConf, _props$observableConf2, _props$observableConf3, _props$ref$current;
279
344
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
280
- var targetId;
281
- if (!('targetId' in props)) {
282
- targetId = me.provide(props).targetId;
283
- } else {
284
- targetId = props.targetId;
285
- if (!this._util.getObservableAt(targetId)) {
286
- throw new Error("No valid observable instance found at target ID, ".concat(targetId));
345
+ var id = (0, _react.useRef)(null);
346
+ (0, _react.useMemo)(function () {
347
+ if ('targetId' in props) {
348
+ if (!me.getObservableAt(props.targetId)) {
349
+ throw new Error("No valid observable instance found at target ID, ".concat(props.targetId));
350
+ }
351
+ id.current = props.targetId;
352
+ return;
353
+ }
354
+ if (!id.current || 'observable' in props) {
355
+ id.current = me.provide(props).targetId;
356
+ return;
357
+ }
358
+ var ctx = me.getObservableAt(id.current);
359
+ if (!('observableConfig' in props)) {
360
+ return;
361
+ }
362
+ var config = props.observableConfig;
363
+ if ('storage' in config && config.storage !== ctx.storage) {
364
+ ctx.storage = config.storage;
365
+ }
366
+ if ('prehooks' in config && config.prehooks !== ctx.prehooks) {
367
+ ctx.prehooks = config.prehooks;
368
+ }
369
+ if (!('value' in config)) {
370
+ return;
287
371
  }
372
+ if ((0, _lodash["default"])(config.value)) {
373
+ return ctx.store.setState(config.value);
374
+ }
375
+ var connection = config.value.connect();
376
+ var value = connection.get('@@GLOBAL')['@@GLOBAL'];
377
+ connection.disconnect();
378
+ ctx.store.setState(value);
379
+ }, [(_props$observableConf = props.observableConfig) === null || _props$observableConf === void 0 ? void 0 : _props$observableConf.value, props.targetId, props.observable, (_props$observableConf2 = props.observableConfig) === null || _props$observableConf2 === void 0 ? void 0 : _props$observableConf2.prehooks, (_props$observableConf3 = props.observableConfig) === null || _props$observableConf3 === void 0 ? void 0 : _props$observableConf3.storage]);
380
+ if ('ref' in props && ((_props$ref$current = props.ref.current) === null || _props$ref$current === void 0 ? void 0 : _props$ref$current.targetId) !== id.current) {
381
+ if (!props.ref.current) {
382
+ props.ref.current = {};
383
+ }
384
+ ;
385
+ props.ref.current.targetId = id.current;
288
386
  }
289
- (_props$ref = props.ref) !== null && _props$ref !== void 0 ? _props$ref : props.ref = {
290
- current: {}
291
- };
292
- props.ref.current.targetId = targetId;
293
387
  var Context = me._context;
294
388
  return (0, _jsxRuntime.jsx)(Context, {
295
- value: targetId,
389
+ value: id.current,
296
390
  children: props.children
297
391
  });
298
392
  }
@@ -303,14 +397,17 @@ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
303
397
  value: function defineStreamHook() {
304
398
  var _this4 = this;
305
399
  return function (selectorMap) {
306
- var _useState3 = (0, _react.useState)(function () {
400
+ var _useState = (0, _react.useState)(function () {
307
401
  return _this4._util.hashSelectorMap(selectorMap);
308
402
  }),
309
- _useState4 = _slicedToArray(_useState3, 2),
310
- sMapHash = _useState4[0],
311
- updateSMapHash = _useState4[1];
403
+ _useState2 = _slicedToArray(_useState, 2),
404
+ sMapHash = _useState2[0],
405
+ updateSMapHash = _useState2[1];
406
+ (0, _react.useEffect)(function () {
407
+ return updateSMapHash(_this4._util.hashSelectorMap(selectorMap));
408
+ }, [selectorMap]);
312
409
  var targetId = (0, _react.use)(_this4._context);
313
- var getStoreHook = (0, _react.useCallback)(function () {
410
+ var handle = (0, _react.useMemo)(function () {
314
411
  var ctxHandle = _this4._obs.createHandleFor(targetId);
315
412
  var streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
316
413
  if (!streamHandle.isValid) {
@@ -318,69 +415,93 @@ var EagleEyeUniversal = exports.EagleEyeUniversal = /*#__PURE__*/function () {
318
415
  streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
319
416
  }
320
417
  streamHandle.inc();
321
- return streamHandle.useStore;
322
- }, [sMapHash, selectorMap, targetId]);
323
- var _useState5 = (0, _react.useState)(getStoreHook),
324
- _useState6 = _slicedToArray(_useState5, 2),
325
- useStore = _useState6[0],
326
- updateStoreHook = _useState6[1];
327
- (0, _react.useEffect)(function () {
328
- return updateSMapHash(_this4._util.hashSelectorMap(selectorMap));
329
- }, [selectorMap]);
418
+ return streamHandle;
419
+ }, [sMapHash, targetId]);
420
+ var _useState3 = (0, _react.useState)(function () {
421
+ return (0, _.makeStore)(handle.resource);
422
+ }),
423
+ _useState4 = _slicedToArray(_useState3, 2),
424
+ store = _useState4[0],
425
+ setStore = _useState4[1];
330
426
  (0, _react.useEffect)(function () {
331
- return updateStoreHook(getStoreHook());
332
- }, [sMapHash]);
333
- return useStore();
427
+ var fn = function fn() {
428
+ return setStore((0, _.makeStore)(handle.resource));
429
+ };
430
+ console.info("INCOMING CHANNEL AT >>>>> target id : ".concat(targetId, " >>>><<<< sMap hash: ").concat(sMapHash));
431
+ handle.resource.addListener('data-changed', fn);
432
+ return function () {
433
+ console.info("OUTGOING CHANNEL AT >>>>> target id : ".concat(targetId, " >>>><<<< sMap hash: ").concat(sMapHash));
434
+ handle.resource.removeListener('data-changed', fn);
435
+ handle.dec();
436
+ };
437
+ }, [handle.resource]);
438
+ console.info("RENDERING CHANNEL AT >>>>> target id : ".concat(targetId, " >>>><<<< sMap hash: ").concat(sMapHash));
439
+ return store;
334
440
  };
335
441
  }
336
442
  }]);
337
443
  }();
338
- var Utility = /*#__PURE__*/function () {
444
+ var Utility = exports.Utility = /*#__PURE__*/function () {
339
445
  function Utility(context) {
340
446
  _classCallCheck(this, Utility);
341
- _defineProperty(this, "context", null);
342
- this.context = context;
447
+ _defineProperty(this, "_wContext", void 0);
448
+ this._wContext = new WeakRef(context);
343
449
  }
344
450
  return _createClass(Utility, [{
345
451
  key: "getIdOf",
346
452
  value: function getIdOf(target) {
347
- return this.context.resourceMap.getRegNumOf(target);
453
+ return this._registry.getRegNumOf(target);
348
454
  }
349
455
  }, {
350
456
  key: "getObservableAt",
351
457
  value: function getObservableAt(targetId) {
352
- return this.context.resourceMap.getResourceAt(targetId);
458
+ return this._registry.getResourceAt(targetId);
353
459
  }
354
460
  }, {
355
461
  key: "hashSelectorMap",
356
462
  value: function hashSelectorMap(selectorMap) {
357
- return (0, _jsSha.sha512)((0, _safeStableStringify["default"])(selectorMap, function (k, v) {
358
- typeof v === 'undefined' ? 'undefined' : v === null ? 'null' : v;
359
- }));
463
+ return (0, _jsSha.sha512)(typeof selectorMap === 'undefined' ? 'undefined' : selectorMap === null ? 'null' : (0, _safeStableStringify["default"])(selectorMap));
360
464
  }
361
465
  }, {
362
466
  key: "pointAt",
363
467
  value: function pointAt(target) {
364
- if (!target) {
365
- target = (0, _2.createEagleEye)();
366
- } else {
367
- var _targetId = this.getIdOf(target);
368
- if (_targetId) {
369
- return {
370
- target: target,
371
- targetId: _targetId
372
- };
373
- }
468
+ var targetId = this.getIdOf(target);
469
+ if (targetId) {
470
+ return {
471
+ target: target,
472
+ targetId: targetId
473
+ };
374
474
  }
375
- var targetId = genRegNum();
376
- this.context.resourceMap.acquire(targetId, target);
475
+ targetId = genRegNum();
476
+ this._registry.acquire(targetId, target);
377
477
  return {
378
478
  target: target,
379
479
  targetId: targetId
380
480
  };
381
481
  }
482
+ }, {
483
+ key: "untrack",
484
+ value: function untrack(target, force) {
485
+ this.untrackId(this.getIdOf(target), force);
486
+ }
487
+ }, {
488
+ key: "untrackId",
489
+ value: function untrackId(targetId, force) {
490
+ var _this$_registry;
491
+ (_this$_registry = this._registry) === null || _this$_registry === void 0 || _this$_registry.removeResourceAt(targetId, force);
492
+ }
493
+ }, {
494
+ key: "_context",
495
+ get: function get() {
496
+ return this._wContext.deref();
497
+ }
498
+ }, {
499
+ key: "_registry",
500
+ get: function get() {
501
+ return this._context.secureResourceMapFor(this);
502
+ }
382
503
  }]);
383
504
  }();
384
505
  function createContext() {
385
- return new EagleEyeUniversal();
506
+ return new ObservableUniverse();
386
507
  }
package/package.json CHANGED
@@ -28,6 +28,7 @@
28
28
  "@types/node": "^20.11.28",
29
29
  "@types/react": "^19.2.9",
30
30
  "@types/react-dom": "^19.2.3",
31
+ "@webkrafters/auto-immutable": "^2.0.5",
31
32
  "@webkrafters/clone-total": "^1.0.1",
32
33
  "@webkrafters/get-property": "^2.0.0",
33
34
  "@webkrafters/path-dotize": "0.0.2",
@@ -125,7 +126,7 @@
125
126
  "test:watch": "eslint --fix && jest --updateSnapshot --watchAll"
126
127
  },
127
128
  "types": "dist/index.d.ts",
128
- "version": "1.1.0-alpha.1",
129
+ "version": "1.1.0-alpha.11",
129
130
  "dependencies": {
130
131
  "@webkrafters/eagleeye": "^1.0.8",
131
132
  "js-sha512": "^0.9.0",
@@ -1,154 +0,0 @@
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 _sCache;
132
- private _util;
133
- constructor();
134
- get resourceMap(): ObsResource<AbstractObservable<any>>;
135
- get Provider(): {
136
- <const ID extends string>(props?: WithChildren<ProviderProps<T, ID>>): JSX.Element;
137
- <const ID extends string>(props?: WithChildren<ProviderPropsRaw<T, ID>>): JSX.Element;
138
- <const ID extends string>(props?: WithChildren<ProviderPropsPrimitive<T, ID>>): JSX.Element;
139
- <const ID extends string>(props?: WithChildren<RefProps<ID>>): JSX.Element;
140
- };
141
- get useStream(): <const S extends SelectorMap>(selectorMap: S) => Store<T, S>;
142
- provide<const ID extends string>(props?: ProviderProps<T, ID>): Point<T, ID>;
143
- provide<const ID extends string>(props?: ProviderPropsRaw<T, ID>): Point<T, ID>;
144
- provide<const ID extends string>(props?: ProviderPropsPrimitive<T, ID>): Point<T, ID>;
145
- stream<const S extends SelectorMap>(selectorMap?: S): {
146
- into<P>(WrappedComponent: ComponentType<Store<T, S> & P>): FC<P>;
147
- };
148
- getIdOf(observable: AbstractObservable<T>): string;
149
- getObservableAt<const ID extends string>(id: ID): AbstractObservable<T>;
150
- private defineProvider;
151
- private defineStreamHook;
152
- }
153
- export declare function createContext<T extends State>(): EagleEyeUniversal<T>;
154
- export {};