@webkrafters/react-eagleeye 0.0.9

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Stephen Isienyi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,59 @@
1
+ <p align="center">
2
+ <img alt="Eagle Eye" height="150px" src="logo.png" width="250px" />
3
+ </p>
4
+ <p align="center">
5
+ <a href="https://typescriptlang.org">
6
+ <img alt="TypeScript" src="https://badgen.net/badge/icon/typescript?icon=typescript&label">
7
+ </a>
8
+ <a href="https://github.com/webKrafters/react-eagleeye.js/actions">
9
+ <img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/webKrafters/react-eagleeye.js/test.yml">
10
+ </a>
11
+ <a href="https://coveralls.io/github/webKrafters/react-eagleeye.js">
12
+ <img alt="coverage" src="https://img.shields.io/coveralls/github/webKrafters/react-eagleeye.js">
13
+ </a>
14
+ <img alt="NPM" src="https://img.shields.io/npm/l/@webkrafters/react-eagleeye">
15
+ <img alt="Maintenance" src="https://img.shields.io/maintenance/yes/2032">
16
+ <img alt="build size" src="https://img.shields.io/bundlephobia/minzip/@webkrafters/react-eagleeye?label=bundle%20size">
17
+ <a href="https://www.npmjs.com/package/@webKrafters/react-eagleeye">
18
+ <img alt="Downloads" src="https://img.shields.io/npm/dt/@webkrafters/react-eagleeye.svg">
19
+ </a>
20
+ <img alt="GitHub package.json version" src="https://img.shields.io/github/package-json/v/webKrafters/react-eagleeye.js">
21
+ </p>
22
+
23
+ # React Eagle Eye
24
+
25
+ <table BORDER-COLOR="0a0" BORDER-WIDTH="2">
26
+ <td VALIGN="middle" ALIGN="center" FONT-WEIGHT="BOLD" COLOR="#333" HEIGHT="250px" width="1250px">
27
+ COMPATIBLE WITH REACT VERSIONS 19.2.0 AND BEYOND.<br />
28
+ FOR EARLIER VERSIONS OF REACT [v16.8.x TO v18.x.x], PLEASE USE THE<br />
29
+ <a href="https://www.npmjs.com/package/@webkrafters/react-eagleeye">React Observable Context</a>
30
+ </td>
31
+ </table>
32
+ <ul>
33
+ <li> Ready for use anywhere in the app. No Provider components needed.</li>
34
+ <li> Automatically prevents unnecessary cascading re-renders when used with the <a href="https://react-eagleeye.js.org/getting-started/#connect-usage"><code>connect</code></a> Stream API.</li>
35
+ <li> Auto-immutable update-friendly context. See <a href="https://react-eagleeye.js.org/concepts/store/setstate"><code>store.setState</code></a>.</li>
36
+ <li> A context bearing an observable consumer <a href="https://react-eagleeye.js.org/concepts/store">store</a>.</li>
37
+ <li> Recognizes <b>negative array indexing</b>. Please see <a href="https://react-eagleeye.js.org/concepts/property-path">Property Path</a> and <code>store.setState</code> <a href="https://react-eagleeye.js.org/concepts/store/setstate#indexing">Indexing</a>.</li>
38
+ <li> Only re-renders subscribing components (<a href="https://react-eagleeye.js.org/concepts/client">clients</a>) on context state changes.</li>
39
+ <li> Subscribing component decides which context state properties' changes to trigger its update.</li>
40
+ <li>OOB Support for framework-agnostic state sharing among applications. Simply create an <a href="https://auto-immutable.js.org/intro/">Auto Immutable</a> instance to pass around as the <code>value</code> argument for this or any <a href="https://eagleeye.js.org">Eagle Eye</a> based state manager instances.</li>
41
+ </ul>
42
+
43
+ **Name:** React Eagle Eye.
44
+
45
+ **Usage:** Please see <b><a href="https://react-eagleeye.js.org/getting-started">Getting Started</a></b>.
46
+
47
+ **Demo:** [Play with the app on codesandbox](https://codesandbox.io/s/github/webKrafters/react-eagleeye-app)\
48
+ If sandbox fails to load app, please refresh dependencies on its lower left.
49
+
50
+ **Install:**\
51
+ npm install --save @webkrafters/react-eagleeye
52
+
53
+ May also see <b><a href="https://react-eagleeye.js.org/history/features">What's Changed?</a></b>
54
+
55
+ Full Documentation: **[react-eagleeye.js.org](https://react-eagleeye.js.org)**
56
+
57
+ # License
58
+
59
+ GPLv3
@@ -0,0 +1,13 @@
1
+ export type { BaseType, ClearCommand, KeyType, MoveCommand, PushCommand, ReplaceCommand, SetCommand, SpliceCommand, TagCommand, TagType, UpdateStats, UpdatePayload, UpdatePayloadArray } from '@webkrafters/auto-immutable';
2
+ export type { ArraySelector, Changes, Channel, Data, FullStateSelector, IStorage, IStore, Listener, ObjectSelector, Prehooks, ProviderProps, SelectorMap, State, Store, StoreInternal, StoreRef, Stream, Text, Unsubscribe } from '@webkrafters/eagleeye';
3
+ import { SelectorMap, State, Store } from '@webkrafters/eagleeye';
4
+ export { CLEAR_TAG, DELETE_TAG, FULL_STATE_SELECTOR, MOVE_TAG, NULL_SELECTOR, PUSH_TAG, REPLACE_TAG, SET_TAG, SPLICE_TAG, Tag, } from '@webkrafters/eagleeye';
5
+ type InjectedProps<STATE extends State = State, SELECTOR_MAP extends SelectorMap = SelectorMap> = {
6
+ [K in keyof Store<STATE, SELECTOR_MAP>]: Store<STATE, SELECTOR_MAP>[K];
7
+ };
8
+ export type ConnectProps<OWNPROPS extends OwnProps = IProps, STATE extends State = State, SELECTOR_MAP extends SelectorMap = SelectorMap> = InjectedProps<STATE, SELECTOR_MAP> & Omit<OWNPROPS, keyof InjectedProps<STATE, SELECTOR_MAP>>;
9
+ export type ExtractInjectedProps<STATE extends State = State, SELECTOR_MAP extends SelectorMap = SelectorMap, ALL_PROPS extends OwnProps = OwnProps> = Omit<ALL_PROPS, keyof InjectedProps<STATE, SELECTOR_MAP>>;
10
+ export interface IProps {
11
+ }
12
+ export type OwnProps = IProps & Record<any, any>;
13
+ export { createContext as createEagleEye } from './main';
package/dist/index.js ADDED
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
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
+ Object.defineProperty(exports, "CLEAR_TAG", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return eagleeye_1.CLEAR_TAG;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "DELETE_TAG", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return eagleeye_1.DELETE_TAG;
18
+ }
19
+ });
20
+ Object.defineProperty(exports, "FULL_STATE_SELECTOR", {
21
+ enumerable: true,
22
+ get: function get() {
23
+ return eagleeye_1.FULL_STATE_SELECTOR;
24
+ }
25
+ });
26
+ Object.defineProperty(exports, "MOVE_TAG", {
27
+ enumerable: true,
28
+ get: function get() {
29
+ return eagleeye_1.MOVE_TAG;
30
+ }
31
+ });
32
+ Object.defineProperty(exports, "NULL_SELECTOR", {
33
+ enumerable: true,
34
+ get: function get() {
35
+ return eagleeye_1.NULL_SELECTOR;
36
+ }
37
+ });
38
+ Object.defineProperty(exports, "PUSH_TAG", {
39
+ enumerable: true,
40
+ get: function get() {
41
+ return eagleeye_1.PUSH_TAG;
42
+ }
43
+ });
44
+ Object.defineProperty(exports, "REPLACE_TAG", {
45
+ enumerable: true,
46
+ get: function get() {
47
+ return eagleeye_1.REPLACE_TAG;
48
+ }
49
+ });
50
+ Object.defineProperty(exports, "SET_TAG", {
51
+ enumerable: true,
52
+ get: function get() {
53
+ return eagleeye_1.SET_TAG;
54
+ }
55
+ });
56
+ Object.defineProperty(exports, "SPLICE_TAG", {
57
+ enumerable: true,
58
+ get: function get() {
59
+ return eagleeye_1.SPLICE_TAG;
60
+ }
61
+ });
62
+ Object.defineProperty(exports, "Tag", {
63
+ enumerable: true,
64
+ get: function get() {
65
+ return eagleeye_1.Tag;
66
+ }
67
+ });
68
+ var main_1 = require("./main");
69
+ Object.defineProperty(exports, "createEagleEye", {
70
+ enumerable: true,
71
+ get: function get() {
72
+ return main_1.createContext;
73
+ }
74
+ });
@@ -0,0 +1,22 @@
1
+ import type { ElementType } from 'react';
2
+ import type { ConnectProps, ExtractInjectedProps, SelectorMap, Store } from '..';
3
+ import React from 'react';
4
+ import { AutoImmutable, IStorage, Prehooks, State } from "@webkrafters/eagleeye";
5
+ export declare class ObservableContext<T extends State> {
6
+ private consumer;
7
+ constructor(value?: T, prehooks?: Prehooks<T>, storage?: IStorage<T>);
8
+ constructor(value?: AutoImmutable<T>, prehooks?: Prehooks<T>, storage?: IStorage<T>);
9
+ get cache(): AutoImmutable<T>;
10
+ get closed(): boolean;
11
+ get connect(): <S extends SelectorMap>(selectorMap?: S) => <P extends ExtractInjectedProps<T, S>>(WrappedComponent: ElementType<ConnectProps<P, T, S>>) => React.NamedExoticComponent<P>;
12
+ get prehooks(): Prehooks<T>;
13
+ get storage(): IStorage<T>;
14
+ get store(): import("@webkrafters/eagleeye").StoreRef<T>;
15
+ get useStream(): <S extends SelectorMap>(selectorMap?: S) => Store<T, S>;
16
+ set prehooks(prehooks: Prehooks<T>);
17
+ set storage(storage: IStorage<T>);
18
+ private _connect;
19
+ dispose(): void;
20
+ }
21
+ export declare function createContext<T extends State>(value?: T, prehooks?: Prehooks<T>, storage?: IStorage<T>): ObservableContext<T>;
22
+ export declare function createContext<T extends State>(value?: AutoImmutable<T>, prehooks?: Prehooks<T>, storage?: IStorage<T>): ObservableContext<T>;
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+
3
+ 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
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
5
+ 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."); }
6
+ 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; } }
7
+ 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; }
8
+ 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; } }
9
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
10
+ 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
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
14
+ 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
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
17
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = {
23
+ enumerable: true,
24
+ get: function get() {
25
+ return m[k];
26
+ }
27
+ };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ } : function (o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ });
34
+ var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
35
+ Object.defineProperty(o, "default", {
36
+ enumerable: true,
37
+ value: v
38
+ });
39
+ } : function (o, v) {
40
+ o["default"] = v;
41
+ });
42
+ var __importStar = void 0 && (void 0).__importStar || function () {
43
+ var _ownKeys = function ownKeys(o) {
44
+ _ownKeys = Object.getOwnPropertyNames || function (o) {
45
+ var ar = [];
46
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
47
+ return ar;
48
+ };
49
+ return _ownKeys(o);
50
+ };
51
+ return function (mod) {
52
+ if (mod && mod.__esModule) return mod;
53
+ var result = {};
54
+ if (mod != null) for (var k = _ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
55
+ __setModuleDefault(result, mod);
56
+ return result;
57
+ };
58
+ }();
59
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
60
+ return mod && mod.__esModule ? mod : {
61
+ "default": mod
62
+ };
63
+ };
64
+ Object.defineProperty(exports, "__esModule", {
65
+ value: true
66
+ });
67
+ exports.ObservableContext = void 0;
68
+ exports.createContext = createContext;
69
+ var lodash_isequal_1 = __importDefault(require("lodash.isequal"));
70
+ var lodash_isplainobject_1 = __importDefault(require("lodash.isplainobject"));
71
+ var lodash_omit_1 = __importDefault(require("lodash.omit"));
72
+ var react_1 = __importStar(require("react"));
73
+ var eagleeye_1 = require("@webkrafters/eagleeye");
74
+ var ObservableContext = /*#__PURE__*/function () {
75
+ function ObservableContext(value, prehooks, storage) {
76
+ var _this = this;
77
+ _classCallCheck(this, ObservableContext);
78
+ this._connect = function (selectorMap) {
79
+ var ctx = _this;
80
+ function connector(WrappedComponent) {
81
+ var useStream = ctx.useStream;
82
+ var Wrapped = !((0, lodash_isplainobject_1["default"])(WrappedComponent) && 'compare' in WrappedComponent) ? (0, react_1.memo)(WrappedComponent) : WrappedComponent;
83
+ var ConnectedComponent = (0, react_1.memo)(function (ownProps) {
84
+ var store = useStream(selectorMap);
85
+ return memoizeImmediateChildTree(react_1["default"].createElement(Wrapped, _objectSpread(_objectSpread({}, store), ownProps)));
86
+ });
87
+ ConnectedComponent.displayName = 'ObservableContext.Connected';
88
+ return ConnectedComponent;
89
+ }
90
+ return connector;
91
+ };
92
+ this.consumer = (0, eagleeye_1.createEagleEye)({
93
+ prehooks: prehooks,
94
+ storage: storage,
95
+ value: value
96
+ });
97
+ }
98
+ return _createClass(ObservableContext, [{
99
+ key: "cache",
100
+ get: function get() {
101
+ return this.consumer.cache;
102
+ }
103
+ }, {
104
+ key: "closed",
105
+ get: function get() {
106
+ return this.consumer.closed;
107
+ }
108
+ }, {
109
+ key: "connect",
110
+ get: function get() {
111
+ return this._connect;
112
+ }
113
+ }, {
114
+ key: "prehooks",
115
+ get: function get() {
116
+ return this.consumer.prehooks;
117
+ },
118
+ set: function set(prehooks) {
119
+ this.consumer.prehooks = prehooks;
120
+ }
121
+ }, {
122
+ key: "storage",
123
+ get: function get() {
124
+ return this.consumer.storage;
125
+ },
126
+ set: function set(storage) {
127
+ this.consumer.storage = storage;
128
+ }
129
+ }, {
130
+ key: "store",
131
+ get: function get() {
132
+ return this.consumer.store;
133
+ }
134
+ }, {
135
+ key: "useStream",
136
+ get: function get() {
137
+ var stream = this.consumer.stream;
138
+ return function (selectorMap) {
139
+ var _ref = (0, react_1.useState)(function () {
140
+ return stream(selectorMap);
141
+ }),
142
+ _ref2 = _slicedToArray(_ref, 1),
143
+ channel = _ref2[0];
144
+ var _ref3 = (0, react_1.useState)(function () {
145
+ return {
146
+ data: channel.data,
147
+ resetState: channel.resetState.bind(channel),
148
+ setState: channel.setState.bind(channel)
149
+ };
150
+ }),
151
+ _ref4 = _slicedToArray(_ref3, 2),
152
+ store = _ref4[0],
153
+ setStore = _ref4[1];
154
+ (0, react_1.useEffect)(function () {
155
+ channel.selectorMap = selectorMap;
156
+ }, [selectorMap]);
157
+ (0, react_1.useEffect)(function () {
158
+ channel.addListener('data-changed', function () {
159
+ return setStore(_objectSpread(_objectSpread({}, store), {}, {
160
+ data: channel.data
161
+ }));
162
+ });
163
+ return function () {
164
+ return channel.endStream();
165
+ };
166
+ }, []);
167
+ return store;
168
+ };
169
+ }
170
+ }, {
171
+ key: "dispose",
172
+ value: function dispose() {
173
+ this.consumer.dispose();
174
+ }
175
+ }]);
176
+ }();
177
+ exports.ObservableContext = ObservableContext;
178
+ var ChildMemo = function () {
179
+ var useNodeMemo = function useNodeMemo(node) {
180
+ var nodeRef = (0, react_1.useRef)(node);
181
+ if (!(0, lodash_isequal_1["default"])((0, lodash_omit_1["default"])(nodeRef.current, '_owner'), (0, lodash_omit_1["default"])(node, '_owner'))) {
182
+ nodeRef.current = node;
183
+ }
184
+ return nodeRef.current;
185
+ };
186
+ var ChildMemo = (0, react_1.memo)(function (_ref5) {
187
+ var child = _ref5.child;
188
+ return react_1["default"].createElement(react_1["default"].Fragment, null, child);
189
+ });
190
+ ChildMemo.displayName = 'ObservableContext.Provider.Internal.Guardian.ChildMemo';
191
+ var Guardian = function Guardian(_ref6) {
192
+ var child = _ref6.child;
193
+ return react_1["default"].createElement(ChildMemo, {
194
+ child: useNodeMemo(child)
195
+ });
196
+ };
197
+ Guardian.displayName = 'ObservableContext.Provider.Internal.Guardian';
198
+ return Guardian;
199
+ }();
200
+ function memoizeImmediateChildTree(children) {
201
+ return react_1.Children.map(children, function (_child) {
202
+ var _child2, _child$type$$$typeof, _child$props;
203
+ var child = _child;
204
+ 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
+ return child;
206
+ }
207
+ if ((_child$props = child.props) !== null && _child$props !== void 0 && _child$props.children) {
208
+ child = (0, react_1.cloneElement)(child, (0, lodash_omit_1["default"])(child.props, 'children'), memoizeImmediateChildTree(child.props.children));
209
+ }
210
+ return react_1["default"].createElement(ChildMemo, {
211
+ child: child
212
+ });
213
+ });
214
+ }
215
+ function createContext(value, prehooks, storage) {
216
+ return new ObservableContext(value, prehooks, storage);
217
+ }
package/logo.png ADDED
Binary file
package/package.json ADDED
@@ -0,0 +1,132 @@
1
+ {
2
+ "alias": "React Eagle Eye",
3
+ "author": "Stephen Isienyi <stephen.isienyi@webkrafting.com>",
4
+ "bugs": {
5
+ "url": "https://github.com/webKrafters/react-eagleeye.js/issues"
6
+ },
7
+ "contributors": [
8
+ "steveswork <stephen.isienyi@gmail.com> (https://github.com/steveswork)"
9
+ ],
10
+ "description": "React Eagle Eye - Reactive Streamable Observable Auto-Immutable Update-friendly State Management System for React 19+. Maintaining application wide state made easy.",
11
+ "devDependencies": {
12
+ "@babel/cli": "^7.17.0",
13
+ "@babel/core": "^7.20.5",
14
+ "@babel/node": "^7.12.10",
15
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
16
+ "@babel/plugin-transform-runtime": "^7.17.0",
17
+ "@babel/preset-env": "^7.20.2",
18
+ "@babel/preset-react": "^7.18.6",
19
+ "@testing-library/dom": "^10.4.1",
20
+ "@testing-library/jest-dom": "^6.9.1",
21
+ "@testing-library/react": "^16.3.2",
22
+ "@testing-library/user-event": "^14.6.1",
23
+ "@types/jest": "^29.5.12",
24
+ "@types/jest-cli": "^24.3.0",
25
+ "@types/lodash.isempty": "^4.4.9",
26
+ "@types/lodash.isplainobject": "^4.0.9",
27
+ "@types/node": "^20.11.28",
28
+ "@types/react": "^19.2.9",
29
+ "@types/react-dom": "^19.2.3",
30
+ "@webkrafters/clone-total": "^1.0.1",
31
+ "@webkrafters/get-property": "^2.0.0",
32
+ "@webkrafters/path-dotize": "0.0.2",
33
+ "@webkrafters/timed-map": "^2.0.0",
34
+ "babel-loader": "^9.1.3",
35
+ "eslint": "^8.57.0",
36
+ "eslint-config-standard": "^17.1.0",
37
+ "eslint-plugin-import": "^2.22.1",
38
+ "eslint-plugin-jest": "^28.5.0",
39
+ "eslint-plugin-node": "^11.1.0",
40
+ "eslint-plugin-promise": "^6.1.1",
41
+ "eslint-plugin-react": "^7.31.11",
42
+ "eslint-plugin-standard": "^5.0.0",
43
+ "jest": "^29.7.0",
44
+ "jest-cli": "^29.7.0",
45
+ "jest-environment-jsdom": "^30.3.0",
46
+ "lodash.clonedeep": "^4.5.0",
47
+ "lodash.clonedeepwith": "^4.5.0",
48
+ "lodash.isboolean": "^3.0.3",
49
+ "lodash.isempty": "^4.4.0",
50
+ "lodash.isequal": "^4.5.0",
51
+ "lodash.isinteger": "^4.0.4",
52
+ "lodash.isobject": "^3.0.2",
53
+ "lodash.isplainobject": "^4.0.6",
54
+ "lodash.omit": "^4.5.0",
55
+ "npm": "^4.0.6",
56
+ "react": "^19.2.3",
57
+ "react-dom": "^19.2.3",
58
+ "react-performance-testing": "^2.0.0",
59
+ "setimmediate": "^1.0.5",
60
+ "ts-jest": "^29.1.2",
61
+ "ts-node": "^10.9.2",
62
+ "typescript": "^5.4.5"
63
+ },
64
+ "files": [
65
+ "logo.png",
66
+ "dist"
67
+ ],
68
+ "homepage": "https://react-eagleeye.js.org",
69
+ "keywords": [
70
+ "connect",
71
+ "context",
72
+ "eagle eye",
73
+ "react eagle eye",
74
+ "eagleeye",
75
+ "react-eagleeye",
76
+ "hoc",
77
+ "hooks",
78
+ "observable",
79
+ "observable context",
80
+ "react",
81
+ "react context",
82
+ "react hooks",
83
+ "react observable conttext",
84
+ "react state",
85
+ "state",
86
+ "state management",
87
+ "state manager",
88
+ "useContext",
89
+ "useStream",
90
+ "stream",
91
+ "change stream"
92
+ ],
93
+ "license": "GPL-3.0-only",
94
+ "main": "dist/index.js",
95
+ "name": "@webkrafters/react-eagleeye",
96
+ "peerDependencies": {
97
+ "@types/react": ">= 19.2.9",
98
+ "@webkrafters/clone-total": ">= 1.0.1",
99
+ "@webkrafters/get-property": ">= 1.0.1",
100
+ "@webkrafters/path-dotize": ">= 0.0.2",
101
+ "@webkrafters/timed-map": "^2.0.0",
102
+ "lodash.clonedeep": ">= 0.1.0",
103
+ "lodash.clonedeepwith": ">= 0.1.0",
104
+ "lodash.isboolean": ">= 0.1.0",
105
+ "lodash.isempty": ">= 0.1.0",
106
+ "lodash.isequal": ">= 0.1.0",
107
+ "lodash.isinteger": ">= 0.1.0",
108
+ "lodash.isobject": ">= 0.1.0",
109
+ "lodash.isplainobject": ">= 0.8.0",
110
+ "lodash.omit": ">= 0.1.0",
111
+ "react": ">= 19.2.0"
112
+ },
113
+ "publishConfig": {
114
+ "access": "public"
115
+ },
116
+ "repository": {
117
+ "type": "git",
118
+ "url": "git+https://github.com/webKrafters/react-eagleeye.js.git"
119
+ },
120
+ "scripts": {
121
+ "build": "eslint --fix && rm -rf dist && tsc && babel dist -d dist",
122
+ "test": "eslint --fix && jest --coverage --updateSnapshot",
123
+ "test:clean": "jest --clearCache",
124
+ "test:core": "jest --updateSnapshot",
125
+ "test:watch": "eslint --fix && jest --updateSnapshot --watchAll"
126
+ },
127
+ "types": "dist/index.d.ts",
128
+ "version": "0.0.9",
129
+ "dependencies": {
130
+ "@webkrafters/eagleeye": "^1.0.5"
131
+ }
132
+ }