@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.
Files changed (93) hide show
  1. package/index.cjs +634 -0
  2. package/index.cjs.map +1 -0
  3. package/index.d.ts +10 -6
  4. package/index.esm.mjs +613 -0
  5. package/index.esm.mjs.map +1 -0
  6. package/index.js +633 -42
  7. package/index.js.map +1 -1
  8. package/internal.cjs +26 -0
  9. package/internal.cjs.map +1 -0
  10. package/internal.d.ts +2 -3
  11. package/internal.esm.mjs +3 -0
  12. package/internal.esm.mjs.map +1 -0
  13. package/internal.js +26 -12
  14. package/internal.js.map +1 -1
  15. package/{src/persist/local-storage.js → local-storage.cjs} +6 -4
  16. package/local-storage.cjs.map +1 -0
  17. package/local-storage.esm.mjs +36 -0
  18. package/local-storage.esm.mjs.map +1 -0
  19. package/local-storage.js +39 -17
  20. package/local-storage.js.map +1 -1
  21. package/{src/persist/mmkv.js → mmkv.cjs} +9 -6
  22. package/mmkv.cjs.map +1 -0
  23. package/mmkv.esm.mjs +50 -0
  24. package/mmkv.esm.mjs.map +1 -0
  25. package/mmkv.js +53 -17
  26. package/mmkv.js.map +1 -1
  27. package/package.json +34 -10
  28. package/persist.cjs +195 -0
  29. package/persist.cjs.map +1 -0
  30. package/persist.d.ts +6 -0
  31. package/persist.esm.mjs +188 -0
  32. package/persist.esm.mjs.map +1 -0
  33. package/persist.js +195 -0
  34. package/persist.js.map +1 -0
  35. package/react.cjs +124 -0
  36. package/react.cjs.map +1 -0
  37. package/react.d.ts +1 -3
  38. package/react.esm.mjs +119 -0
  39. package/react.esm.mjs.map +1 -0
  40. package/react.js +123 -20
  41. package/react.js.map +1 -1
  42. package/src/globals.d.ts +12 -7
  43. package/src/helpers.d.ts +5 -0
  44. package/src/is.d.ts +7 -0
  45. package/src/observable.d.ts +6 -8
  46. package/src/observableBatcher.d.ts +11 -2
  47. package/src/observableComputed.d.ts +2 -2
  48. package/src/observableInterfaces.d.ts +156 -49
  49. package/src/on.d.ts +7 -0
  50. package/src/{configureObservable.d.ts → persist/configureObservablePersistence.d.ts} +2 -3
  51. package/src/persist/persistHelpers.d.ts +3 -0
  52. package/src/persist/persistObservable.d.ts +3 -0
  53. package/src/react/useNewObservable.d.ts +2 -3
  54. package/src/react/useObservables.d.ts +2 -2
  55. package/src/state.d.ts +13 -0
  56. package/src/configureObservable.js +0 -13
  57. package/src/configureObservable.js.map +0 -1
  58. package/src/globals.js +0 -71
  59. package/src/globals.js.map +0 -1
  60. package/src/observable.js +0 -347
  61. package/src/observable.js.map +0 -1
  62. package/src/observableBatcher.js +0 -61
  63. package/src/observableBatcher.js.map +0 -1
  64. package/src/observableComputed.js +0 -28
  65. package/src/observableComputed.js.map +0 -1
  66. package/src/observableEvent.js +0 -28
  67. package/src/observableEvent.js.map +0 -1
  68. package/src/observableFns.d.ts +0 -36
  69. package/src/observableFns.js +0 -231
  70. package/src/observableFns.js.map +0 -1
  71. package/src/observableInterfaces.js +0 -3
  72. package/src/observableInterfaces.js.map +0 -1
  73. package/src/observableState.d.ts +0 -29
  74. package/src/observableState.js +0 -32
  75. package/src/observableState.js.map +0 -1
  76. package/src/persist/local-storage.js.map +0 -1
  77. package/src/persist/mmkv.js.map +0 -1
  78. package/src/persistObservable.d.ts +0 -3
  79. package/src/persistObservable.js +0 -120
  80. package/src/persistObservable.js.map +0 -1
  81. package/src/primitivePrototypes.d.ts +0 -1
  82. package/src/primitivePrototypes.js +0 -22
  83. package/src/primitivePrototypes.js.map +0 -1
  84. package/src/react/useComputed.d.ts +0 -2
  85. package/src/react/useComputed.js +0 -16
  86. package/src/react/useComputed.js.map +0 -1
  87. package/src/react/useNewObservable.js +0 -33
  88. package/src/react/useNewObservable.js.map +0 -1
  89. package/src/react/useObservables.js +0 -114
  90. package/src/react/useObservables.js.map +0 -1
  91. package/src/react/usePrimitiveFunctions.d.ts +0 -4
  92. package/src/react/usePrimitiveFunctions.js +0 -21
  93. 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
@@ -1,4 +1,2 @@
1
- export * from './src/react/useNewObservable';
2
1
  export * from './src/react/useObservables';
3
- export * from './src/react/usePrimitiveFunctions';
4
- export * from './src/react/useComputed';
2
+ export * from './src/react/useNewObservable';
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
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
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
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./src/react/useNewObservable"), exports);
18
- __exportStar(require("./src/react/useObservables"), exports);
19
- __exportStar(require("./src/react/usePrimitiveFunctions"), exports);
20
- __exportStar(require("./src/react/useComputed"), exports);
21
- //# sourceMappingURL=react.js.map
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","sourceRoot":"","sources":["../react.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,6DAA2C;AAC3C,oEAAkD;AAClD,0DAAwC"}
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 symbolValue: unique symbol;
4
- export declare function removeNullUndefined<T extends Record<string, any>>(a: T): any;
5
- export declare function replaceKeyInObject(obj: object, keySource: any, keyTarget: any, clone: boolean): Record<any, any>;
6
- export declare function isPrimitive(val: any): boolean;
7
- export declare function isCollection(obj: any): boolean;
8
- export declare function getDateModifiedKey(dateModifiedKey: string): string;
9
- export declare function clone(obj: any): any;
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;
@@ -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;
@@ -1,8 +1,6 @@
1
- import { Observable, ObservableChecker, ObservableCheckerWriteable, ObservableUnsafe, ValidObservableParam } from './observableInterfaces';
2
- export declare function setter<T>(obs: ObservableCheckerWriteable<T>): any;
3
- export declare function getter<T>(obs: ObservableChecker<T>): any;
4
- export declare function assigner<T>(obs: ObservableCheckerWriteable<T>): any;
5
- export declare function deleteFn(obs: ObservableCheckerWriteable, target: any, prop?: string | number | symbol): ObservableCheckerWriteable<any>;
6
- declare function observable<T>(value?: ValidObservableParam<T>): 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, ObservableListenerInfo } from './observableInterfaces';
2
- export declare function observableBatcherNotify(cb: ListenerFn<any>, value: any, info: ObservableListenerInfo): void;
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 type { ObservableComputed, ValidObservableParam } from './observableInterfaces';
2
- export declare function observableComputed<T>(compute: () => ValidObservableParam<T>): ObservableComputed<T>;
1
+ import { ObservableComputed } from './observableInterfaces';
2
+ export declare function observableComputed<T>(compute: () => T): ObservableComputed<T>;