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