@webkrafters/react-eagleeye 1.1.0-alpha.2 → 1.1.0-alpha.20
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 +16 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/main/index.js +1 -7
- package/dist/main/universe/index.d.ts +137 -0
- package/dist/main/universe/index.js +523 -0
- package/package.json +2 -1
- package/dist/main/universal/index.d.ts +0 -154
- package/dist/main/universal/index.js +0 -386
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
|
|
48
|
-
|
|
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
|
+
`git clone https://github.com/webKrafters/react-eagleeye-app.git`\
|
|
55
|
+
or\
|
|
56
|
+
`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
|
|
15
|
-
export type { Address as
|
|
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, "
|
|
72
|
+
Object.defineProperty(exports, "createEagleEyeUniverse", {
|
|
73
73
|
enumerable: true,
|
|
74
74
|
get: function get() {
|
|
75
|
-
return
|
|
75
|
+
return _universe.createContext;
|
|
76
76
|
}
|
|
77
77
|
});
|
|
78
78
|
var _eagleeye = require("@webkrafters/eagleeye");
|
|
79
79
|
var _main = require("./main");
|
|
80
|
-
var
|
|
80
|
+
var _universe = require("./main/universe");
|
package/dist/main/index.js
CHANGED
|
@@ -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,18 +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
142
|
return setStore(_objectSpread(_objectSpread({}, store), {}, {
|
|
147
143
|
data: channel.data
|
|
148
144
|
}));
|
|
149
145
|
});
|
|
150
|
-
strictMode.current = false;
|
|
151
146
|
return function () {
|
|
152
|
-
channel.endStream();
|
|
153
|
-
strictMode.current = true;
|
|
147
|
+
return channel.endStream();
|
|
154
148
|
};
|
|
155
149
|
}, []);
|
|
156
150
|
return store;
|
|
@@ -0,0 +1,137 @@
|
|
|
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
|
+
release(force: boolean): void;
|
|
44
|
+
}
|
|
45
|
+
declare class ObserverHandle<W extends AbstractObservable<ObservableTemplate<W>>> implements Handle<W> {
|
|
46
|
+
private _wObs;
|
|
47
|
+
private _regNum;
|
|
48
|
+
constructor(obs: ObsResource<W>, regNum: string);
|
|
49
|
+
private get _obs();
|
|
50
|
+
private get _entry();
|
|
51
|
+
get resource(): W;
|
|
52
|
+
addChannelAt(sMapHash: string, channel: Channel): StreamerHandle<Channel<import("@webkrafters/auto-immutable").Value, SelectorMap>>;
|
|
53
|
+
getChannelHandleAt(sMapHash: string): StreamerHandle<Channel<import("@webkrafters/auto-immutable").Value, SelectorMap>>;
|
|
54
|
+
release(force?: boolean): void;
|
|
55
|
+
}
|
|
56
|
+
declare class StreamerHandle<W extends Channel> implements Handle<W> {
|
|
57
|
+
private _wChs;
|
|
58
|
+
private _sMapHash;
|
|
59
|
+
constructor(chs: ChsResource<W>, sMapHash: string);
|
|
60
|
+
private get _chs();
|
|
61
|
+
private get _entry();
|
|
62
|
+
get isValid(): boolean;
|
|
63
|
+
get resource(): W;
|
|
64
|
+
get size(): number;
|
|
65
|
+
dec(): void;
|
|
66
|
+
inc(): void;
|
|
67
|
+
release(force?: boolean): void;
|
|
68
|
+
}
|
|
69
|
+
interface IResource<W extends WeakKey> {
|
|
70
|
+
acquire(desc: string, resource: W): Handle<W>;
|
|
71
|
+
createHandleFor(desc: string): Handle<W>;
|
|
72
|
+
}
|
|
73
|
+
declare abstract class AbstractResource<W extends WeakKey> implements IResource<W> {
|
|
74
|
+
abstract registry: Record<string, any>;
|
|
75
|
+
get size(): number;
|
|
76
|
+
abstract acquire(desc: string, resource: W): Handle<W>;
|
|
77
|
+
abstract createHandleFor(desc: string): Handle<W>;
|
|
78
|
+
finalizer: FinalizationRegistry<string>;
|
|
79
|
+
finalize(key: string): void;
|
|
80
|
+
}
|
|
81
|
+
declare class ChsResource<W extends Channel> extends AbstractResource<W> {
|
|
82
|
+
registry: Record<string, ChannelEntry>;
|
|
83
|
+
acquire(sMapHash: string, resource: W): StreamerHandle<W>;
|
|
84
|
+
createHandleFor(sMapHash: string): StreamerHandle<W>;
|
|
85
|
+
}
|
|
86
|
+
declare class ObsResource<W extends AbstractObservable<ObservableTemplate<W>>> extends AbstractResource<W> {
|
|
87
|
+
registry: Record<string, Entry>;
|
|
88
|
+
acquire(regNum: string, resource: W): ObserverHandle<W>;
|
|
89
|
+
createHandleFor(regNum: string): ObserverHandle<W>;
|
|
90
|
+
getRegNumOf(resource: W): string;
|
|
91
|
+
removeResourceAt(regNum: string, force?: boolean): void;
|
|
92
|
+
getResourceAt(regNum: string): W;
|
|
93
|
+
}
|
|
94
|
+
export declare class Observable<T extends State> extends AbstractObservable<T> {
|
|
95
|
+
}
|
|
96
|
+
export declare class ObservableUniverse<T extends State> {
|
|
97
|
+
private _context;
|
|
98
|
+
private _pCache;
|
|
99
|
+
private _obs;
|
|
100
|
+
private _sCache;
|
|
101
|
+
private _util;
|
|
102
|
+
constructor();
|
|
103
|
+
get Provider(): {
|
|
104
|
+
<const ID extends string>(props?: WithChildren<ProviderProps<T, ID>>): JSX.Element;
|
|
105
|
+
<const ID extends string>(props?: WithChildren<ProviderPropsRaw<T, ID>>): JSX.Element;
|
|
106
|
+
<const ID extends string>(props?: WithChildren<ProviderPropsPrimitive<T, ID>>): JSX.Element;
|
|
107
|
+
<const ID extends string>(props?: WithChildren<RefProps<ID>>): JSX.Element;
|
|
108
|
+
};
|
|
109
|
+
get useStream(): <const S extends SelectorMap>(selectorMap?: S) => Store<T, S>;
|
|
110
|
+
free(observable: AbstractObservable<T>, force?: boolean): void;
|
|
111
|
+
free(observable: string, force?: boolean): void;
|
|
112
|
+
provide<const ID extends string>(props?: ProviderProps<T, ID>): Point<T, ID>;
|
|
113
|
+
provide<const ID extends string>(props?: ProviderPropsRaw<T, ID>): Point<T, ID>;
|
|
114
|
+
provide<const ID extends string>(props?: ProviderPropsPrimitive<T, ID>): Point<T, ID>;
|
|
115
|
+
secureResourceMapFor(requestor: Utility<T>): ObsResource<AbstractObservable<T>>;
|
|
116
|
+
stream<const S extends SelectorMap>(selectorMap?: S): {
|
|
117
|
+
into<P>(WrappedComponent: ComponentType<Store<T, S> & P>): FC<P>;
|
|
118
|
+
};
|
|
119
|
+
getIdOf(observable: AbstractObservable<T>): string;
|
|
120
|
+
getObservableAt<const ID extends string>(id: ID): AbstractObservable<T>;
|
|
121
|
+
private defineProvider;
|
|
122
|
+
private defineStreamHook;
|
|
123
|
+
}
|
|
124
|
+
export declare class Utility<T extends State> {
|
|
125
|
+
private _wContext;
|
|
126
|
+
constructor(context: ObservableUniverse<T>);
|
|
127
|
+
getIdOf(target: AbstractObservable<T>): string;
|
|
128
|
+
getObservableAt<const ID extends string>(targetId: ID): AbstractObservable<T>;
|
|
129
|
+
hashSelectorMap<S extends SelectorMap>(selectorMap?: S): string;
|
|
130
|
+
pointAt<const ID extends string>(target: AbstractObservable<T>): Point<T, ID>;
|
|
131
|
+
untrack(target: AbstractObservable<T>, force?: boolean): void;
|
|
132
|
+
untrackId<const ID extends string>(targetId: ID, force?: boolean): void;
|
|
133
|
+
private get _context();
|
|
134
|
+
private get _registry();
|
|
135
|
+
}
|
|
136
|
+
export declare function createContext<T extends State>(): ObservableUniverse<T>;
|
|
137
|
+
export {};
|
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Utility = exports.ObservableUniverse = exports.Observable = void 0;
|
|
7
|
+
exports.createContext = createContext;
|
|
8
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash.isplainobject"));
|
|
11
|
+
var _safeStableStringify = _interopRequireDefault(require("safe-stable-stringify"));
|
|
12
|
+
var _jsSha = require("js-sha512");
|
|
13
|
+
var _ = require("..");
|
|
14
|
+
var _2 = require("../..");
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
16
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
17
|
+
function _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; }
|
|
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); }
|
|
32
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
33
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
34
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
35
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
36
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
37
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
38
|
+
var 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
|
+
this.size > 0 && this._entry.numConnections--;
|
|
127
|
+
}
|
|
128
|
+
}, {
|
|
129
|
+
key: "inc",
|
|
130
|
+
value: function inc() {
|
|
131
|
+
this.isValid && this._entry.numConnections++;
|
|
132
|
+
}
|
|
133
|
+
}, {
|
|
134
|
+
key: "release",
|
|
135
|
+
value: function release() {
|
|
136
|
+
var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
137
|
+
if (!force && this.size > 0) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
this.resource.endStream();
|
|
141
|
+
this._chs.finalizer.unregister(this.resource);
|
|
142
|
+
this._entry.channel = null;
|
|
143
|
+
this._chs.finalize(this._sMapHash);
|
|
144
|
+
}
|
|
145
|
+
}]);
|
|
146
|
+
}();
|
|
147
|
+
var AbstractResource = /*#__PURE__*/function () {
|
|
148
|
+
function AbstractResource() {
|
|
149
|
+
var _this = this;
|
|
150
|
+
_classCallCheck(this, AbstractResource);
|
|
151
|
+
_defineProperty(this, "finalizer", new FinalizationRegistry(function (s) {
|
|
152
|
+
return _this.finalize(s);
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
return _createClass(AbstractResource, [{
|
|
156
|
+
key: "size",
|
|
157
|
+
get: function get() {
|
|
158
|
+
return Object.keys(this.registry).length;
|
|
159
|
+
}
|
|
160
|
+
}, {
|
|
161
|
+
key: "finalize",
|
|
162
|
+
value: function finalize(key) {
|
|
163
|
+
delete this.registry[key];
|
|
164
|
+
}
|
|
165
|
+
}]);
|
|
166
|
+
}();
|
|
167
|
+
var ChsResource = /*#__PURE__*/function (_AbstractResource2) {
|
|
168
|
+
function ChsResource() {
|
|
169
|
+
var _this2;
|
|
170
|
+
_classCallCheck(this, ChsResource);
|
|
171
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
172
|
+
args[_key] = arguments[_key];
|
|
173
|
+
}
|
|
174
|
+
_this2 = _callSuper(this, ChsResource, [].concat(args));
|
|
175
|
+
_defineProperty(_this2, "registry", {});
|
|
176
|
+
return _this2;
|
|
177
|
+
}
|
|
178
|
+
_inherits(ChsResource, _AbstractResource2);
|
|
179
|
+
return _createClass(ChsResource, [{
|
|
180
|
+
key: "acquire",
|
|
181
|
+
value: function acquire(sMapHash, resource) {
|
|
182
|
+
this.registry[sMapHash] = {
|
|
183
|
+
channel: new WeakRef(resource),
|
|
184
|
+
numConnections: 0
|
|
185
|
+
};
|
|
186
|
+
this.finalizer.register(resource, sMapHash, resource);
|
|
187
|
+
return this.createHandleFor(sMapHash);
|
|
188
|
+
}
|
|
189
|
+
}, {
|
|
190
|
+
key: "createHandleFor",
|
|
191
|
+
value: function createHandleFor(sMapHash) {
|
|
192
|
+
return new StreamerHandle(this, sMapHash);
|
|
193
|
+
}
|
|
194
|
+
}]);
|
|
195
|
+
}(AbstractResource);
|
|
196
|
+
var ObsResource = /*#__PURE__*/function (_AbstractResource3) {
|
|
197
|
+
function ObsResource() {
|
|
198
|
+
var _this3;
|
|
199
|
+
_classCallCheck(this, ObsResource);
|
|
200
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
201
|
+
args[_key2] = arguments[_key2];
|
|
202
|
+
}
|
|
203
|
+
_this3 = _callSuper(this, ObsResource, [].concat(args));
|
|
204
|
+
_defineProperty(_this3, "registry", {});
|
|
205
|
+
return _this3;
|
|
206
|
+
}
|
|
207
|
+
_inherits(ObsResource, _AbstractResource3);
|
|
208
|
+
return _createClass(ObsResource, [{
|
|
209
|
+
key: "acquire",
|
|
210
|
+
value: function acquire(regNum, resource) {
|
|
211
|
+
this.registry[regNum] = {
|
|
212
|
+
channels: new ChsResource(),
|
|
213
|
+
observable: new WeakRef(resource)
|
|
214
|
+
};
|
|
215
|
+
this.finalizer.register(resource, regNum, resource);
|
|
216
|
+
return this.createHandleFor(regNum);
|
|
217
|
+
}
|
|
218
|
+
}, {
|
|
219
|
+
key: "createHandleFor",
|
|
220
|
+
value: function createHandleFor(regNum) {
|
|
221
|
+
return new ObserverHandle(this, regNum);
|
|
222
|
+
}
|
|
223
|
+
}, {
|
|
224
|
+
key: "getRegNumOf",
|
|
225
|
+
value: function getRegNumOf(resource) {
|
|
226
|
+
for (var regNum in this.registry) {
|
|
227
|
+
if (this.getResourceAt(regNum) === resource) {
|
|
228
|
+
return regNum;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}, {
|
|
233
|
+
key: "removeResourceAt",
|
|
234
|
+
value: function removeResourceAt(regNum, force) {
|
|
235
|
+
var _this$createHandleFor;
|
|
236
|
+
(_this$createHandleFor = this.createHandleFor(regNum)) === null || _this$createHandleFor === void 0 || _this$createHandleFor.release(force);
|
|
237
|
+
}
|
|
238
|
+
}, {
|
|
239
|
+
key: "getResourceAt",
|
|
240
|
+
value: function getResourceAt(regNum) {
|
|
241
|
+
var _this$createHandleFor2;
|
|
242
|
+
return (_this$createHandleFor2 = this.createHandleFor(regNum)) === null || _this$createHandleFor2 === void 0 ? void 0 : _this$createHandleFor2.resource;
|
|
243
|
+
}
|
|
244
|
+
}]);
|
|
245
|
+
}(AbstractResource);
|
|
246
|
+
var genRegNum = function () {
|
|
247
|
+
var count = 0;
|
|
248
|
+
var ts = 0;
|
|
249
|
+
return function () {
|
|
250
|
+
var newTs = Date.now();
|
|
251
|
+
if (newTs === ts) {
|
|
252
|
+
count++;
|
|
253
|
+
} else {
|
|
254
|
+
ts = newTs;
|
|
255
|
+
count = 0;
|
|
256
|
+
}
|
|
257
|
+
return "".concat(count, ":").concat(ts);
|
|
258
|
+
};
|
|
259
|
+
}();
|
|
260
|
+
var Observable = exports.Observable = /*#__PURE__*/function (_AbstractObservable) {
|
|
261
|
+
function Observable() {
|
|
262
|
+
_classCallCheck(this, Observable);
|
|
263
|
+
return _callSuper(this, Observable, arguments);
|
|
264
|
+
}
|
|
265
|
+
_inherits(Observable, _AbstractObservable);
|
|
266
|
+
return _createClass(Observable);
|
|
267
|
+
}(_.AbstractObservable);
|
|
268
|
+
var ObservableUniverse = exports.ObservableUniverse = /*#__PURE__*/function () {
|
|
269
|
+
function ObservableUniverse() {
|
|
270
|
+
_classCallCheck(this, ObservableUniverse);
|
|
271
|
+
_defineProperty(this, "_context", void 0);
|
|
272
|
+
_defineProperty(this, "_pCache", null);
|
|
273
|
+
_defineProperty(this, "_obs", null);
|
|
274
|
+
_defineProperty(this, "_sCache", null);
|
|
275
|
+
_defineProperty(this, "_util", null);
|
|
276
|
+
this._context = /*#__PURE__*/(0, _react.createContext)('0:0');
|
|
277
|
+
this._pCache = this.defineProvider();
|
|
278
|
+
this._obs = new ObsResource();
|
|
279
|
+
this._sCache = this.defineStreamHook();
|
|
280
|
+
this._util = new Utility(this);
|
|
281
|
+
}
|
|
282
|
+
return _createClass(ObservableUniverse, [{
|
|
283
|
+
key: "Provider",
|
|
284
|
+
get: function get() {
|
|
285
|
+
return this._pCache;
|
|
286
|
+
}
|
|
287
|
+
}, {
|
|
288
|
+
key: "useStream",
|
|
289
|
+
get: function get() {
|
|
290
|
+
return this._sCache;
|
|
291
|
+
}
|
|
292
|
+
}, {
|
|
293
|
+
key: "free",
|
|
294
|
+
value: function free(observable, force) {
|
|
295
|
+
!(observable instanceof _.AbstractObservable) ? this._util.untrackId(observable, force) : this._util.untrack(observable, force);
|
|
296
|
+
}
|
|
297
|
+
}, {
|
|
298
|
+
key: "provide",
|
|
299
|
+
value: function provide() {
|
|
300
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
301
|
+
var observable = props.observable;
|
|
302
|
+
if (!observable) {
|
|
303
|
+
var t = props.observableConfig;
|
|
304
|
+
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);
|
|
305
|
+
}
|
|
306
|
+
return this._util.pointAt(observable);
|
|
307
|
+
}
|
|
308
|
+
}, {
|
|
309
|
+
key: "secureResourceMapFor",
|
|
310
|
+
value: function secureResourceMapFor(requestor) {
|
|
311
|
+
if (requestor === this._util) {
|
|
312
|
+
return this._obs;
|
|
313
|
+
}
|
|
314
|
+
throw new Error('Illegal operation.');
|
|
315
|
+
}
|
|
316
|
+
}, {
|
|
317
|
+
key: "stream",
|
|
318
|
+
value: function stream(selectorMap) {
|
|
319
|
+
var useStream = this.useStream;
|
|
320
|
+
return {
|
|
321
|
+
into: function into(WrappedComponent) {
|
|
322
|
+
var Container = function Container(props) {
|
|
323
|
+
var store = useStream(selectorMap);
|
|
324
|
+
return (0, _jsxRuntime.jsx)(WrappedComponent, _objectSpread({}, _objectSpread(_objectSpread({}, store), props)));
|
|
325
|
+
};
|
|
326
|
+
return Container;
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
}, {
|
|
331
|
+
key: "getIdOf",
|
|
332
|
+
value: function getIdOf(observable) {
|
|
333
|
+
return this._util.getIdOf(observable);
|
|
334
|
+
}
|
|
335
|
+
}, {
|
|
336
|
+
key: "getObservableAt",
|
|
337
|
+
value: function getObservableAt(id) {
|
|
338
|
+
return this._util.getObservableAt(id);
|
|
339
|
+
}
|
|
340
|
+
}, {
|
|
341
|
+
key: "defineProvider",
|
|
342
|
+
value: function defineProvider() {
|
|
343
|
+
var me = this;
|
|
344
|
+
function provide() {
|
|
345
|
+
var _props$observableConf, _props$observableConf2, _props$observableConf3, _props$ref$current;
|
|
346
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
347
|
+
var id = (0, _react.useRef)(null);
|
|
348
|
+
(0, _react.useMemo)(function () {
|
|
349
|
+
if ('targetId' in props) {
|
|
350
|
+
if (!me.getObservableAt(props.targetId)) {
|
|
351
|
+
throw new Error("No valid observable instance found at target ID, ".concat(props.targetId));
|
|
352
|
+
}
|
|
353
|
+
id.current = props.targetId;
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
if (!id.current || 'observable' in props) {
|
|
357
|
+
id.current = me.provide(props).targetId;
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
var ctx = me.getObservableAt(id.current);
|
|
361
|
+
if (!('observableConfig' in props)) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
var config = props.observableConfig;
|
|
365
|
+
if ('storage' in config && config.storage !== ctx.storage) {
|
|
366
|
+
ctx.storage = config.storage;
|
|
367
|
+
}
|
|
368
|
+
if ('prehooks' in config && config.prehooks !== ctx.prehooks) {
|
|
369
|
+
ctx.prehooks = config.prehooks;
|
|
370
|
+
}
|
|
371
|
+
if (!('value' in config)) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
if ((0, _lodash["default"])(config.value)) {
|
|
375
|
+
return ctx.store.setState(config.value);
|
|
376
|
+
}
|
|
377
|
+
var connection = config.value.connect();
|
|
378
|
+
var value = connection.get('@@GLOBAL')['@@GLOBAL'];
|
|
379
|
+
connection.disconnect();
|
|
380
|
+
ctx.store.setState(value);
|
|
381
|
+
}, [(_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]);
|
|
382
|
+
if ('ref' in props && ((_props$ref$current = props.ref.current) === null || _props$ref$current === void 0 ? void 0 : _props$ref$current.targetId) !== id.current) {
|
|
383
|
+
if (!props.ref.current) {
|
|
384
|
+
props.ref.current = {};
|
|
385
|
+
}
|
|
386
|
+
;
|
|
387
|
+
props.ref.current.targetId = id.current;
|
|
388
|
+
}
|
|
389
|
+
var Context = me._context;
|
|
390
|
+
return (0, _jsxRuntime.jsx)(Context, {
|
|
391
|
+
value: id.current,
|
|
392
|
+
children: props.children
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
return provide;
|
|
396
|
+
}
|
|
397
|
+
}, {
|
|
398
|
+
key: "defineStreamHook",
|
|
399
|
+
value: function defineStreamHook() {
|
|
400
|
+
var _this4 = this;
|
|
401
|
+
return function (selectorMap) {
|
|
402
|
+
var mounted = (0, _react.useRef)(false);
|
|
403
|
+
var targetId = (0, _react.use)(_this4._context);
|
|
404
|
+
var _useState = (0, _react.useState)(function () {
|
|
405
|
+
return getStreamHandle(_this4._obs.createHandleFor(targetId), selectorMap, _this4._util.hashSelectorMap(selectorMap));
|
|
406
|
+
}),
|
|
407
|
+
_useState2 = _slicedToArray(_useState, 1),
|
|
408
|
+
handle = _useState2[0];
|
|
409
|
+
var _useState3 = (0, _react.useState)(getCurrentUri),
|
|
410
|
+
_useState4 = _slicedToArray(_useState3, 1),
|
|
411
|
+
currentUri = _useState4[0];
|
|
412
|
+
var _useState5 = (0, _react.useState)(function () {
|
|
413
|
+
return (0, _.makeStore)(handle.resource);
|
|
414
|
+
}),
|
|
415
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
416
|
+
store = _useState6[0],
|
|
417
|
+
setStore = _useState6[1];
|
|
418
|
+
(0, _react.useEffect)(function () {
|
|
419
|
+
if (!mounted.current) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
throw new Error('Selector map change not supported in SSR Mode.');
|
|
423
|
+
}, [selectorMap]);
|
|
424
|
+
(0, _react.useEffect)(function () {
|
|
425
|
+
if (mounted.current) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
mounted.current = true;
|
|
429
|
+
var channel = handle.resource;
|
|
430
|
+
var fn = function fn() {
|
|
431
|
+
return setStore(_objectSpread(_objectSpread({}, store), {}, {
|
|
432
|
+
data: channel.data
|
|
433
|
+
}));
|
|
434
|
+
};
|
|
435
|
+
channel.addListener('data-changed', fn);
|
|
436
|
+
handle.inc();
|
|
437
|
+
return function () {
|
|
438
|
+
channel.removeListener('data-changed', fn);
|
|
439
|
+
handle.dec();
|
|
440
|
+
currentUri === getCurrentUri() && handle.release();
|
|
441
|
+
};
|
|
442
|
+
}, []);
|
|
443
|
+
return store;
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
}]);
|
|
447
|
+
}();
|
|
448
|
+
var Utility = exports.Utility = /*#__PURE__*/function () {
|
|
449
|
+
function Utility(context) {
|
|
450
|
+
_classCallCheck(this, Utility);
|
|
451
|
+
_defineProperty(this, "_wContext", void 0);
|
|
452
|
+
this._wContext = new WeakRef(context);
|
|
453
|
+
}
|
|
454
|
+
return _createClass(Utility, [{
|
|
455
|
+
key: "getIdOf",
|
|
456
|
+
value: function getIdOf(target) {
|
|
457
|
+
return this._registry.getRegNumOf(target);
|
|
458
|
+
}
|
|
459
|
+
}, {
|
|
460
|
+
key: "getObservableAt",
|
|
461
|
+
value: function getObservableAt(targetId) {
|
|
462
|
+
return this._registry.getResourceAt(targetId);
|
|
463
|
+
}
|
|
464
|
+
}, {
|
|
465
|
+
key: "hashSelectorMap",
|
|
466
|
+
value: function hashSelectorMap(selectorMap) {
|
|
467
|
+
return (0, _jsSha.sha512)(typeof selectorMap === 'undefined' ? 'undefined' : selectorMap === null ? 'null' : (0, _safeStableStringify["default"])(selectorMap));
|
|
468
|
+
}
|
|
469
|
+
}, {
|
|
470
|
+
key: "pointAt",
|
|
471
|
+
value: function pointAt(target) {
|
|
472
|
+
var targetId = this.getIdOf(target);
|
|
473
|
+
if (targetId) {
|
|
474
|
+
return {
|
|
475
|
+
target: target,
|
|
476
|
+
targetId: targetId
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
targetId = genRegNum();
|
|
480
|
+
this._registry.acquire(targetId, target);
|
|
481
|
+
return {
|
|
482
|
+
target: target,
|
|
483
|
+
targetId: targetId
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
}, {
|
|
487
|
+
key: "untrack",
|
|
488
|
+
value: function untrack(target, force) {
|
|
489
|
+
this.untrackId(this.getIdOf(target), force);
|
|
490
|
+
}
|
|
491
|
+
}, {
|
|
492
|
+
key: "untrackId",
|
|
493
|
+
value: function untrackId(targetId, force) {
|
|
494
|
+
var _this$_registry;
|
|
495
|
+
(_this$_registry = this._registry) === null || _this$_registry === void 0 || _this$_registry.removeResourceAt(targetId, force);
|
|
496
|
+
}
|
|
497
|
+
}, {
|
|
498
|
+
key: "_context",
|
|
499
|
+
get: function get() {
|
|
500
|
+
return this._wContext.deref();
|
|
501
|
+
}
|
|
502
|
+
}, {
|
|
503
|
+
key: "_registry",
|
|
504
|
+
get: function get() {
|
|
505
|
+
return this._context.secureResourceMapFor(this);
|
|
506
|
+
}
|
|
507
|
+
}]);
|
|
508
|
+
}();
|
|
509
|
+
function createContext() {
|
|
510
|
+
return new ObservableUniverse();
|
|
511
|
+
}
|
|
512
|
+
function getCurrentUri() {
|
|
513
|
+
var _globalThis$location;
|
|
514
|
+
return (_globalThis$location = globalThis.location) === null || _globalThis$location === void 0 ? void 0 : _globalThis$location.pathname;
|
|
515
|
+
}
|
|
516
|
+
function getStreamHandle(contextHandle, selectorMap, sMapHash) {
|
|
517
|
+
var streamHandle = contextHandle.getChannelHandleAt(sMapHash);
|
|
518
|
+
if (!streamHandle.isValid) {
|
|
519
|
+
contextHandle.addChannelAt(sMapHash, contextHandle.resource.stream(selectorMap));
|
|
520
|
+
streamHandle = contextHandle.getChannelHandleAt(sMapHash);
|
|
521
|
+
}
|
|
522
|
+
return streamHandle;
|
|
523
|
+
}
|
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.
|
|
129
|
+
"version": "1.1.0-alpha.20",
|
|
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 {};
|
|
@@ -1,386 +0,0 @@
|
|
|
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, "_sCache", null);
|
|
216
|
-
_defineProperty(this, "_util", null);
|
|
217
|
-
this._context = /*#__PURE__*/(0, _react.createContext)('0:0');
|
|
218
|
-
this._pCache = this.defineProvider();
|
|
219
|
-
this._obs = new ObsResource();
|
|
220
|
-
this._sCache = this.defineStreamHook();
|
|
221
|
-
this._util = new Utility(this);
|
|
222
|
-
}
|
|
223
|
-
return _createClass(EagleEyeUniversal, [{
|
|
224
|
-
key: "resourceMap",
|
|
225
|
-
get: function get() {
|
|
226
|
-
return this._obs;
|
|
227
|
-
}
|
|
228
|
-
}, {
|
|
229
|
-
key: "Provider",
|
|
230
|
-
get: function get() {
|
|
231
|
-
return this._pCache;
|
|
232
|
-
}
|
|
233
|
-
}, {
|
|
234
|
-
key: "useStream",
|
|
235
|
-
get: function get() {
|
|
236
|
-
return this._sCache;
|
|
237
|
-
}
|
|
238
|
-
}, {
|
|
239
|
-
key: "provide",
|
|
240
|
-
value: function provide() {
|
|
241
|
-
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
242
|
-
var observable = props.observable;
|
|
243
|
-
if (!observable) {
|
|
244
|
-
var t = props.observableConfig;
|
|
245
|
-
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);
|
|
246
|
-
}
|
|
247
|
-
return this._util.pointAt(observable);
|
|
248
|
-
}
|
|
249
|
-
}, {
|
|
250
|
-
key: "stream",
|
|
251
|
-
value: function stream(selectorMap) {
|
|
252
|
-
var useStream = this.useStream;
|
|
253
|
-
return {
|
|
254
|
-
into: function into(WrappedComponent) {
|
|
255
|
-
var Container = function Container(props) {
|
|
256
|
-
var store = useStream(selectorMap);
|
|
257
|
-
return (0, _jsxRuntime.jsx)(WrappedComponent, _objectSpread({}, _objectSpread(_objectSpread({}, store), props)));
|
|
258
|
-
};
|
|
259
|
-
return Container;
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
}, {
|
|
264
|
-
key: "getIdOf",
|
|
265
|
-
value: function getIdOf(observable) {
|
|
266
|
-
return this._util.getIdOf(observable);
|
|
267
|
-
}
|
|
268
|
-
}, {
|
|
269
|
-
key: "getObservableAt",
|
|
270
|
-
value: function getObservableAt(id) {
|
|
271
|
-
return this._util.getObservableAt(id);
|
|
272
|
-
}
|
|
273
|
-
}, {
|
|
274
|
-
key: "defineProvider",
|
|
275
|
-
value: function defineProvider() {
|
|
276
|
-
var me = this;
|
|
277
|
-
function provide() {
|
|
278
|
-
var _props$ref;
|
|
279
|
-
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));
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
(_props$ref = props.ref) !== null && _props$ref !== void 0 ? _props$ref : props.ref = {
|
|
290
|
-
current: {}
|
|
291
|
-
};
|
|
292
|
-
props.ref.current.targetId = targetId;
|
|
293
|
-
var Context = me._context;
|
|
294
|
-
return (0, _jsxRuntime.jsx)(Context, {
|
|
295
|
-
value: targetId,
|
|
296
|
-
children: props.children
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
return provide;
|
|
300
|
-
}
|
|
301
|
-
}, {
|
|
302
|
-
key: "defineStreamHook",
|
|
303
|
-
value: function defineStreamHook() {
|
|
304
|
-
var _this4 = this;
|
|
305
|
-
return function (selectorMap) {
|
|
306
|
-
var _useState3 = (0, _react.useState)(function () {
|
|
307
|
-
return _this4._util.hashSelectorMap(selectorMap);
|
|
308
|
-
}),
|
|
309
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
310
|
-
sMapHash = _useState4[0],
|
|
311
|
-
updateSMapHash = _useState4[1];
|
|
312
|
-
var targetId = (0, _react.use)(_this4._context);
|
|
313
|
-
var getStoreHook = (0, _react.useCallback)(function () {
|
|
314
|
-
var ctxHandle = _this4._obs.createHandleFor(targetId);
|
|
315
|
-
var streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
|
|
316
|
-
if (!streamHandle.isValid) {
|
|
317
|
-
ctxHandle.addChannelAt(sMapHash, ctxHandle.resource.stream(selectorMap));
|
|
318
|
-
streamHandle = ctxHandle.getChannelHandleAt(sMapHash);
|
|
319
|
-
}
|
|
320
|
-
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]);
|
|
330
|
-
(0, _react.useEffect)(function () {
|
|
331
|
-
return updateStoreHook(getStoreHook());
|
|
332
|
-
}, [sMapHash]);
|
|
333
|
-
return useStore();
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
}]);
|
|
337
|
-
}();
|
|
338
|
-
var Utility = /*#__PURE__*/function () {
|
|
339
|
-
function Utility(context) {
|
|
340
|
-
_classCallCheck(this, Utility);
|
|
341
|
-
_defineProperty(this, "context", null);
|
|
342
|
-
this.context = context;
|
|
343
|
-
}
|
|
344
|
-
return _createClass(Utility, [{
|
|
345
|
-
key: "getIdOf",
|
|
346
|
-
value: function getIdOf(target) {
|
|
347
|
-
return this.context.resourceMap.getRegNumOf(target);
|
|
348
|
-
}
|
|
349
|
-
}, {
|
|
350
|
-
key: "getObservableAt",
|
|
351
|
-
value: function getObservableAt(targetId) {
|
|
352
|
-
return this.context.resourceMap.getResourceAt(targetId);
|
|
353
|
-
}
|
|
354
|
-
}, {
|
|
355
|
-
key: "hashSelectorMap",
|
|
356
|
-
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
|
-
}));
|
|
360
|
-
}
|
|
361
|
-
}, {
|
|
362
|
-
key: "pointAt",
|
|
363
|
-
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
|
-
}
|
|
374
|
-
}
|
|
375
|
-
var targetId = genRegNum();
|
|
376
|
-
this.context.resourceMap.acquire(targetId, target);
|
|
377
|
-
return {
|
|
378
|
-
target: target,
|
|
379
|
-
targetId: targetId
|
|
380
|
-
};
|
|
381
|
-
}
|
|
382
|
-
}]);
|
|
383
|
-
}();
|
|
384
|
-
function createContext() {
|
|
385
|
-
return new EagleEyeUniversal();
|
|
386
|
-
}
|