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