@legendapp/state 0.9.2-alpha.9 → 0.10.0-next.2
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/index.cjs +634 -0
- package/index.cjs.map +1 -0
- package/index.d.ts +10 -6
- package/index.esm.mjs +613 -0
- package/index.esm.mjs.map +1 -0
- package/index.js +633 -42
- package/index.js.map +1 -1
- package/internal.cjs +26 -0
- package/internal.cjs.map +1 -0
- package/internal.d.ts +2 -3
- package/internal.esm.mjs +3 -0
- package/internal.esm.mjs.map +1 -0
- package/internal.js +26 -12
- package/internal.js.map +1 -1
- package/{src/persist/local-storage.js → local-storage.cjs} +6 -4
- package/local-storage.cjs.map +1 -0
- package/local-storage.esm.mjs +36 -0
- package/local-storage.esm.mjs.map +1 -0
- package/local-storage.js +39 -17
- package/local-storage.js.map +1 -1
- package/{src/persist/mmkv.js → mmkv.cjs} +9 -6
- package/mmkv.cjs.map +1 -0
- package/mmkv.esm.mjs +50 -0
- package/mmkv.esm.mjs.map +1 -0
- package/mmkv.js +53 -17
- package/mmkv.js.map +1 -1
- package/package.json +34 -10
- package/persist.cjs +195 -0
- package/persist.cjs.map +1 -0
- package/persist.d.ts +6 -0
- package/persist.esm.mjs +188 -0
- package/persist.esm.mjs.map +1 -0
- package/persist.js +195 -0
- package/persist.js.map +1 -0
- package/react.cjs +124 -0
- package/react.cjs.map +1 -0
- package/react.d.ts +1 -3
- package/react.esm.mjs +119 -0
- package/react.esm.mjs.map +1 -0
- package/react.js +123 -20
- package/react.js.map +1 -1
- package/src/globals.d.ts +12 -7
- package/src/helpers.d.ts +5 -0
- package/src/is.d.ts +7 -0
- package/src/observable.d.ts +6 -8
- package/src/observableBatcher.d.ts +11 -2
- package/src/observableComputed.d.ts +2 -2
- package/src/observableInterfaces.d.ts +156 -49
- package/src/on.d.ts +7 -0
- package/src/{configureObservable.d.ts → persist/configureObservablePersistence.d.ts} +2 -3
- package/src/persist/persistHelpers.d.ts +3 -0
- package/src/persist/persistObservable.d.ts +3 -0
- package/src/react/useNewObservable.d.ts +2 -3
- package/src/react/useObservables.d.ts +2 -2
- package/src/state.d.ts +13 -0
- package/src/configureObservable.js +0 -13
- package/src/configureObservable.js.map +0 -1
- package/src/globals.js +0 -71
- package/src/globals.js.map +0 -1
- package/src/observable.js +0 -347
- package/src/observable.js.map +0 -1
- package/src/observableBatcher.js +0 -61
- package/src/observableBatcher.js.map +0 -1
- package/src/observableComputed.js +0 -28
- package/src/observableComputed.js.map +0 -1
- package/src/observableEvent.js +0 -28
- package/src/observableEvent.js.map +0 -1
- package/src/observableFns.d.ts +0 -36
- package/src/observableFns.js +0 -231
- package/src/observableFns.js.map +0 -1
- package/src/observableInterfaces.js +0 -3
- package/src/observableInterfaces.js.map +0 -1
- package/src/observableState.d.ts +0 -29
- package/src/observableState.js +0 -32
- package/src/observableState.js.map +0 -1
- package/src/persist/local-storage.js.map +0 -1
- package/src/persist/mmkv.js.map +0 -1
- package/src/persistObservable.d.ts +0 -3
- package/src/persistObservable.js +0 -120
- package/src/persistObservable.js.map +0 -1
- package/src/primitivePrototypes.d.ts +0 -1
- package/src/primitivePrototypes.js +0 -22
- package/src/primitivePrototypes.js.map +0 -1
- package/src/react/useComputed.d.ts +0 -2
- package/src/react/useComputed.js +0 -16
- package/src/react/useComputed.js.map +0 -1
- package/src/react/useNewObservable.js +0 -33
- package/src/react/useNewObservable.js.map +0 -1
- package/src/react/useObservables.js +0 -114
- package/src/react/useObservables.js.map +0 -1
- package/src/react/usePrimitiveFunctions.d.ts +0 -4
- package/src/react/usePrimitiveFunctions.js +0 -21
- package/src/react/usePrimitiveFunctions.js.map +0 -1
package/react.cjs
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var state = require('@legendapp/state');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
|
|
8
|
+
function useForceRender() {
|
|
9
|
+
const [, forceRender] = react.useReducer((s) => s + 1, 0);
|
|
10
|
+
return () => forceRender();
|
|
11
|
+
}
|
|
12
|
+
const pathsSeen = new Set();
|
|
13
|
+
/**
|
|
14
|
+
* A React hook that listens to observables and returns their values.
|
|
15
|
+
*
|
|
16
|
+
* @param fn A function that returns a single observable, an array of observables, or a flat object of observables
|
|
17
|
+
*
|
|
18
|
+
* @see https://www.legendapp.com/dev/state/react/#useobservables
|
|
19
|
+
*/
|
|
20
|
+
function useObservables(fn) {
|
|
21
|
+
const forceRender = useForceRender();
|
|
22
|
+
const ref = react.useRef();
|
|
23
|
+
if (!ref.current) {
|
|
24
|
+
ref.current = {
|
|
25
|
+
listeners: new Map(),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Start tracking to fill trackedNodes with all nodes accessed
|
|
29
|
+
let ret;
|
|
30
|
+
state.tracking.is = true;
|
|
31
|
+
state.trackedNodes.length = 0;
|
|
32
|
+
const args = fn();
|
|
33
|
+
if (args !== undefined) {
|
|
34
|
+
if (args[state.symbolIsObservable]) {
|
|
35
|
+
ret = state.getObservableRawValue(args);
|
|
36
|
+
}
|
|
37
|
+
else if (args) {
|
|
38
|
+
if (state.isPrimitive(args)) {
|
|
39
|
+
ret = args;
|
|
40
|
+
}
|
|
41
|
+
else if (state.isArray(args)) {
|
|
42
|
+
ret = [];
|
|
43
|
+
for (let i = 0; i < args.length; i++) {
|
|
44
|
+
ret[i] = state.getObservableRawValue(args[i]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (state.isObject(args)) {
|
|
48
|
+
if (args[state.symbolShallow] || args[state.symbolShouldRender]) {
|
|
49
|
+
ret = state.getObservableRawValue(args);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
ret = {};
|
|
53
|
+
const keys = Object.keys(args);
|
|
54
|
+
const length = keys.length;
|
|
55
|
+
for (let i = 0; i < length; i++) {
|
|
56
|
+
const key = keys[i];
|
|
57
|
+
ret[key] = state.getObservableRawValue(args[key]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
state.tracking.is = false;
|
|
64
|
+
pathsSeen.clear();
|
|
65
|
+
const listeners = ref.current.listeners;
|
|
66
|
+
for (let tracked of state.trackedNodes) {
|
|
67
|
+
const { node, shouldRender, shallow } = tracked;
|
|
68
|
+
const path = node.path;
|
|
69
|
+
// Track the paths seen this frame to dispose of listeners no longer needed
|
|
70
|
+
pathsSeen.add(path);
|
|
71
|
+
// Listen to this path if not already listening
|
|
72
|
+
if (!listeners.has(path)) {
|
|
73
|
+
let cb = forceRender;
|
|
74
|
+
// If using shouldRender, only render when the return value of shouldRender changes
|
|
75
|
+
if (shouldRender) {
|
|
76
|
+
cb = (v, getPrev) => {
|
|
77
|
+
const prev = getPrev();
|
|
78
|
+
if (shouldRender(v, prev)) {
|
|
79
|
+
forceRender();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
listeners.set(path, shallow ? state.onChangeShallow(node, cb) : state.onChange(node, cb));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Dispose any listeners not seen in this frame
|
|
87
|
+
// TODO Faster way to do this than forEach?
|
|
88
|
+
listeners.forEach((listener, listenerPath) => {
|
|
89
|
+
if (!pathsSeen.has(listenerPath)) {
|
|
90
|
+
listener.dispose();
|
|
91
|
+
listeners.delete(listenerPath);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Dispose listeners on unmount
|
|
95
|
+
react.useEffect(() => () => {
|
|
96
|
+
const listeners = ref.current.listeners;
|
|
97
|
+
if (listeners) {
|
|
98
|
+
listeners.forEach((listener) => listener.dispose());
|
|
99
|
+
}
|
|
100
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
101
|
+
return ret;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* A React hook that creates a new observable and can optionally listen or persist its state.
|
|
106
|
+
*
|
|
107
|
+
* @param value The initial value of the observable or a function that returns the initial value
|
|
108
|
+
* @param observe (optional) Listen to the observable for changes
|
|
109
|
+
* @param persist (optional) PersistOptions for peristing the observable to state
|
|
110
|
+
*
|
|
111
|
+
* @see https://www.legendapp.com/dev/state/react/#usenewobservable
|
|
112
|
+
*/
|
|
113
|
+
function useNewObservable(value, observe) {
|
|
114
|
+
// Create the observable from the default value
|
|
115
|
+
const obs = react.useMemo(() => state.observable(state.isFunction(value) ? value() : value), []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
116
|
+
if (observe !== false) {
|
|
117
|
+
useObservables(() => [obs]);
|
|
118
|
+
}
|
|
119
|
+
return [obs, obs[state.symbolGet]];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
exports.useNewObservable = useNewObservable;
|
|
123
|
+
exports.useObservables = useObservables;
|
|
124
|
+
//# sourceMappingURL=react.cjs.map
|
package/react.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.cjs","sources":["../../src/react/useObservables.ts","../../src/react/useNewObservable.ts"],"sourcesContent":[null,null],"names":["useReducer","useRef","tracking","trackedNodes","symbolIsObservable","getObservableRawValue","isPrimitive","isArray","isObject","symbolShallow","symbolShouldRender","onChangeShallow","onChange","useEffect","useMemo","observable","isFunction","symbolGet"],"mappings":"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"}
|
package/react.d.ts
CHANGED
package/react.esm.mjs
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { tracking, trackedNodes, symbolIsObservable, getObservableRawValue, isPrimitive, isArray, isObject, symbolShallow, symbolShouldRender, onChangeShallow, onChange, observable, isFunction, symbolGet } from '@legendapp/state';
|
|
2
|
+
import { useRef, useEffect, useReducer, useMemo } from 'react';
|
|
3
|
+
|
|
4
|
+
function useForceRender() {
|
|
5
|
+
const [, forceRender] = useReducer((s) => s + 1, 0);
|
|
6
|
+
return () => forceRender();
|
|
7
|
+
}
|
|
8
|
+
const pathsSeen = new Set();
|
|
9
|
+
/**
|
|
10
|
+
* A React hook that listens to observables and returns their values.
|
|
11
|
+
*
|
|
12
|
+
* @param fn A function that returns a single observable, an array of observables, or a flat object of observables
|
|
13
|
+
*
|
|
14
|
+
* @see https://www.legendapp.com/dev/state/react/#useobservables
|
|
15
|
+
*/
|
|
16
|
+
function useObservables(fn) {
|
|
17
|
+
const forceRender = useForceRender();
|
|
18
|
+
const ref = useRef();
|
|
19
|
+
if (!ref.current) {
|
|
20
|
+
ref.current = {
|
|
21
|
+
listeners: new Map(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Start tracking to fill trackedNodes with all nodes accessed
|
|
25
|
+
let ret;
|
|
26
|
+
tracking.is = true;
|
|
27
|
+
trackedNodes.length = 0;
|
|
28
|
+
const args = fn();
|
|
29
|
+
if (args !== undefined) {
|
|
30
|
+
if (args[symbolIsObservable]) {
|
|
31
|
+
ret = getObservableRawValue(args);
|
|
32
|
+
}
|
|
33
|
+
else if (args) {
|
|
34
|
+
if (isPrimitive(args)) {
|
|
35
|
+
ret = args;
|
|
36
|
+
}
|
|
37
|
+
else if (isArray(args)) {
|
|
38
|
+
ret = [];
|
|
39
|
+
for (let i = 0; i < args.length; i++) {
|
|
40
|
+
ret[i] = getObservableRawValue(args[i]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (isObject(args)) {
|
|
44
|
+
if (args[symbolShallow] || args[symbolShouldRender]) {
|
|
45
|
+
ret = getObservableRawValue(args);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
ret = {};
|
|
49
|
+
const keys = Object.keys(args);
|
|
50
|
+
const length = keys.length;
|
|
51
|
+
for (let i = 0; i < length; i++) {
|
|
52
|
+
const key = keys[i];
|
|
53
|
+
ret[key] = getObservableRawValue(args[key]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
tracking.is = false;
|
|
60
|
+
pathsSeen.clear();
|
|
61
|
+
const listeners = ref.current.listeners;
|
|
62
|
+
for (let tracked of trackedNodes) {
|
|
63
|
+
const { node, shouldRender, shallow } = tracked;
|
|
64
|
+
const path = node.path;
|
|
65
|
+
// Track the paths seen this frame to dispose of listeners no longer needed
|
|
66
|
+
pathsSeen.add(path);
|
|
67
|
+
// Listen to this path if not already listening
|
|
68
|
+
if (!listeners.has(path)) {
|
|
69
|
+
let cb = forceRender;
|
|
70
|
+
// If using shouldRender, only render when the return value of shouldRender changes
|
|
71
|
+
if (shouldRender) {
|
|
72
|
+
cb = (v, getPrev) => {
|
|
73
|
+
const prev = getPrev();
|
|
74
|
+
if (shouldRender(v, prev)) {
|
|
75
|
+
forceRender();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
listeners.set(path, shallow ? onChangeShallow(node, cb) : onChange(node, cb));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Dispose any listeners not seen in this frame
|
|
83
|
+
// TODO Faster way to do this than forEach?
|
|
84
|
+
listeners.forEach((listener, listenerPath) => {
|
|
85
|
+
if (!pathsSeen.has(listenerPath)) {
|
|
86
|
+
listener.dispose();
|
|
87
|
+
listeners.delete(listenerPath);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
// Dispose listeners on unmount
|
|
91
|
+
useEffect(() => () => {
|
|
92
|
+
const listeners = ref.current.listeners;
|
|
93
|
+
if (listeners) {
|
|
94
|
+
listeners.forEach((listener) => listener.dispose());
|
|
95
|
+
}
|
|
96
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
97
|
+
return ret;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* A React hook that creates a new observable and can optionally listen or persist its state.
|
|
102
|
+
*
|
|
103
|
+
* @param value The initial value of the observable or a function that returns the initial value
|
|
104
|
+
* @param observe (optional) Listen to the observable for changes
|
|
105
|
+
* @param persist (optional) PersistOptions for peristing the observable to state
|
|
106
|
+
*
|
|
107
|
+
* @see https://www.legendapp.com/dev/state/react/#usenewobservable
|
|
108
|
+
*/
|
|
109
|
+
function useNewObservable(value, observe) {
|
|
110
|
+
// Create the observable from the default value
|
|
111
|
+
const obs = useMemo(() => observable(isFunction(value) ? value() : value), []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
112
|
+
if (observe !== false) {
|
|
113
|
+
useObservables(() => [obs]);
|
|
114
|
+
}
|
|
115
|
+
return [obs, obs[symbolGet]];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export { useNewObservable, useObservables };
|
|
119
|
+
//# sourceMappingURL=react.esm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.esm.mjs","sources":["../../src/react/useObservables.ts","../../src/react/useNewObservable.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
|
package/react.js
CHANGED
|
@@ -1,21 +1,124 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var state = require('@legendapp/state');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
|
|
8
|
+
function useForceRender() {
|
|
9
|
+
const [, forceRender] = react.useReducer((s) => s + 1, 0);
|
|
10
|
+
return () => forceRender();
|
|
11
|
+
}
|
|
12
|
+
const pathsSeen = new Set();
|
|
13
|
+
/**
|
|
14
|
+
* A React hook that listens to observables and returns their values.
|
|
15
|
+
*
|
|
16
|
+
* @param fn A function that returns a single observable, an array of observables, or a flat object of observables
|
|
17
|
+
*
|
|
18
|
+
* @see https://www.legendapp.com/dev/state/react/#useobservables
|
|
19
|
+
*/
|
|
20
|
+
function useObservables(fn) {
|
|
21
|
+
const forceRender = useForceRender();
|
|
22
|
+
const ref = react.useRef();
|
|
23
|
+
if (!ref.current) {
|
|
24
|
+
ref.current = {
|
|
25
|
+
listeners: new Map(),
|
|
26
|
+
};
|
|
7
27
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
// Start tracking to fill trackedNodes with all nodes accessed
|
|
29
|
+
let ret;
|
|
30
|
+
state.tracking.is = true;
|
|
31
|
+
state.trackedNodes.length = 0;
|
|
32
|
+
const args = fn();
|
|
33
|
+
if (args !== undefined) {
|
|
34
|
+
if (args[state.symbolIsObservable]) {
|
|
35
|
+
ret = state.getObservableRawValue(args);
|
|
36
|
+
}
|
|
37
|
+
else if (args) {
|
|
38
|
+
if (state.isPrimitive(args)) {
|
|
39
|
+
ret = args;
|
|
40
|
+
}
|
|
41
|
+
else if (state.isArray(args)) {
|
|
42
|
+
ret = [];
|
|
43
|
+
for (let i = 0; i < args.length; i++) {
|
|
44
|
+
ret[i] = state.getObservableRawValue(args[i]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (state.isObject(args)) {
|
|
48
|
+
if (args[state.symbolShallow] || args[state.symbolShouldRender]) {
|
|
49
|
+
ret = state.getObservableRawValue(args);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
ret = {};
|
|
53
|
+
const keys = Object.keys(args);
|
|
54
|
+
const length = keys.length;
|
|
55
|
+
for (let i = 0; i < length; i++) {
|
|
56
|
+
const key = keys[i];
|
|
57
|
+
ret[key] = state.getObservableRawValue(args[key]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
state.tracking.is = false;
|
|
64
|
+
pathsSeen.clear();
|
|
65
|
+
const listeners = ref.current.listeners;
|
|
66
|
+
for (let tracked of state.trackedNodes) {
|
|
67
|
+
const { node, shouldRender, shallow } = tracked;
|
|
68
|
+
const path = node.path;
|
|
69
|
+
// Track the paths seen this frame to dispose of listeners no longer needed
|
|
70
|
+
pathsSeen.add(path);
|
|
71
|
+
// Listen to this path if not already listening
|
|
72
|
+
if (!listeners.has(path)) {
|
|
73
|
+
let cb = forceRender;
|
|
74
|
+
// If using shouldRender, only render when the return value of shouldRender changes
|
|
75
|
+
if (shouldRender) {
|
|
76
|
+
cb = (v, getPrev) => {
|
|
77
|
+
const prev = getPrev();
|
|
78
|
+
if (shouldRender(v, prev)) {
|
|
79
|
+
forceRender();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
listeners.set(path, shallow ? state.onChangeShallow(node, cb) : state.onChange(node, cb));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Dispose any listeners not seen in this frame
|
|
87
|
+
// TODO Faster way to do this than forEach?
|
|
88
|
+
listeners.forEach((listener, listenerPath) => {
|
|
89
|
+
if (!pathsSeen.has(listenerPath)) {
|
|
90
|
+
listener.dispose();
|
|
91
|
+
listeners.delete(listenerPath);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Dispose listeners on unmount
|
|
95
|
+
react.useEffect(() => () => {
|
|
96
|
+
const listeners = ref.current.listeners;
|
|
97
|
+
if (listeners) {
|
|
98
|
+
listeners.forEach((listener) => listener.dispose());
|
|
99
|
+
}
|
|
100
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
101
|
+
return ret;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* A React hook that creates a new observable and can optionally listen or persist its state.
|
|
106
|
+
*
|
|
107
|
+
* @param value The initial value of the observable or a function that returns the initial value
|
|
108
|
+
* @param observe (optional) Listen to the observable for changes
|
|
109
|
+
* @param persist (optional) PersistOptions for peristing the observable to state
|
|
110
|
+
*
|
|
111
|
+
* @see https://www.legendapp.com/dev/state/react/#usenewobservable
|
|
112
|
+
*/
|
|
113
|
+
function useNewObservable(value, observe) {
|
|
114
|
+
// Create the observable from the default value
|
|
115
|
+
const obs = react.useMemo(() => state.observable(state.isFunction(value) ? value() : value), []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
116
|
+
if (observe !== false) {
|
|
117
|
+
useObservables(() => [obs]);
|
|
118
|
+
}
|
|
119
|
+
return [obs, obs[state.symbolGet]];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
exports.useNewObservable = useNewObservable;
|
|
123
|
+
exports.useObservables = useObservables;
|
|
124
|
+
//# sourceMappingURL=react.js.map
|
package/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../../src/react/useObservables.ts","../../src/react/useNewObservable.ts"],"sourcesContent":[null,null],"names":["useReducer","useRef","tracking","trackedNodes","symbolIsObservable","getObservableRawValue","isPrimitive","isArray","isObject","symbolShallow","symbolShouldRender","onChangeShallow","onChange","useEffect","useMemo","observable","isFunction","symbolGet"],"mappings":"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"}
|
package/src/globals.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import { ObservableCheckerRender, ProxyValue } from './observableInterfaces';
|
|
2
|
+
export declare const delim = "\uFEFF";
|
|
1
3
|
export declare const symbolDateModified: unique symbol;
|
|
2
4
|
export declare const symbolShallow: unique symbol;
|
|
3
|
-
export declare const
|
|
4
|
-
export declare
|
|
5
|
-
export declare
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
export declare const symbolShouldRender: unique symbol;
|
|
6
|
+
export declare const symbolGet: unique symbol;
|
|
7
|
+
export declare const symbolIsObservable: unique symbol;
|
|
8
|
+
export declare function getNodeValue(node: ProxyValue): any;
|
|
9
|
+
export declare function getParentNode(node: ProxyValue): {
|
|
10
|
+
parent: ProxyValue;
|
|
11
|
+
key: string | number;
|
|
12
|
+
};
|
|
13
|
+
export declare function getChildNode(node: ProxyValue, key: string | number): ProxyValue;
|
|
14
|
+
export declare function getObservableRawValue<T>(obs: ObservableCheckerRender<T>): T;
|
package/src/helpers.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ShouldRender, Observable, Shallow } from './observableInterfaces';
|
|
2
|
+
export declare function shallow(obs: Observable): Shallow;
|
|
3
|
+
export declare function shouldRender<T>(obs: Observable<T>, fn: (value: T, prev: T) => any): ShouldRender;
|
|
4
|
+
export declare function isObservable(obs: any): boolean;
|
|
5
|
+
export declare function mergeIntoObservable(target: Observable, ...sources: any[]): any;
|
package/src/is.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function isArray(obj: unknown): obj is Array<any>;
|
|
2
|
+
export declare function isString(obj: unknown): obj is string;
|
|
3
|
+
export declare function isObject(obj: unknown): obj is Record<any, any>;
|
|
4
|
+
export declare function isFunction(obj: unknown): obj is Function;
|
|
5
|
+
export declare function isPrimitive(arg: any): boolean;
|
|
6
|
+
export declare function isObjectEmpty(obj: object): boolean;
|
|
7
|
+
export declare function isSymbol(obj: unknown): obj is symbol;
|
package/src/observable.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { Observable,
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
6
|
-
declare function observable<T>(
|
|
7
|
-
declare function observable<T>(value: ValidObservableParam<T>, unsafe: true): ObservableUnsafe<T>;
|
|
8
|
-
export { observable };
|
|
1
|
+
import { Observable, ObservablePrimitive } from './observableInterfaces';
|
|
2
|
+
export declare function observable<T extends object | Array<any>>(obj: T): Observable<T>;
|
|
3
|
+
export declare function observable<T extends boolean>(prim: T): ObservablePrimitive<boolean>;
|
|
4
|
+
export declare function observable<T extends string>(prim: T): ObservablePrimitive<string>;
|
|
5
|
+
export declare function observable<T extends number>(prim: T): ObservablePrimitive<number>;
|
|
6
|
+
export declare function observable<T extends boolean | string | number>(prim: T): ObservablePrimitive<T>;
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import { ListenerFn
|
|
2
|
-
|
|
1
|
+
import { ListenerFn } from './observableInterfaces';
|
|
2
|
+
interface BatchItem {
|
|
3
|
+
cb: ListenerFn<any>;
|
|
4
|
+
value: any;
|
|
5
|
+
getPrevious: () => any;
|
|
6
|
+
path: (string | number)[];
|
|
7
|
+
valueAtPath: any;
|
|
8
|
+
prevAtPath: any;
|
|
9
|
+
}
|
|
10
|
+
export declare function observableBatcherNotify(b: BatchItem): void;
|
|
3
11
|
export declare namespace observableBatcher {
|
|
4
12
|
function batch(fn: () => void): void;
|
|
5
13
|
function begin(): void;
|
|
6
14
|
function end(force?: boolean): void;
|
|
7
15
|
}
|
|
16
|
+
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare function observableComputed<T>(compute: () =>
|
|
1
|
+
import { ObservableComputed } from './observableInterfaces';
|
|
2
|
+
export declare function observableComputed<T>(compute: () => T): ObservableComputed<T>;
|