@legendapp/state 0.9.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.
Files changed (70) hide show
  1. package/configureObservable.d.ts +14 -0
  2. package/configureObservable.js +14 -0
  3. package/configureObservable.js.map +1 -0
  4. package/globals.d.ts +10 -0
  5. package/globals.js +73 -0
  6. package/globals.js.map +1 -0
  7. package/index.d.ts +7 -0
  8. package/index.js +27 -0
  9. package/index.js.map +1 -0
  10. package/observable.d.ts +8 -0
  11. package/observable.js +311 -0
  12. package/observable.js.map +1 -0
  13. package/observableBatcher.d.ts +7 -0
  14. package/observableBatcher.js +53 -0
  15. package/observableBatcher.js.map +1 -0
  16. package/observableComputed.d.ts +2 -0
  17. package/observableComputed.js +25 -0
  18. package/observableComputed.js.map +1 -0
  19. package/observableEvent.d.ts +2 -0
  20. package/observableEvent.js +22 -0
  21. package/observableEvent.js.map +1 -0
  22. package/observableFns.d.ts +34 -0
  23. package/observableFns.js +206 -0
  24. package/observableFns.js.map +1 -0
  25. package/observableListener.d.ts +2 -0
  26. package/observableListener.js +14 -0
  27. package/observableListener.js.map +1 -0
  28. package/observableState.d.ts +28 -0
  29. package/observableState.js +32 -0
  30. package/observableState.js.map +1 -0
  31. package/package.json +53 -0
  32. package/persist/index.d.ts +1 -0
  33. package/persist/index.js +6 -0
  34. package/persist/index.js.map +1 -0
  35. package/persist/persistObservable.d.ts +3 -0
  36. package/persist/persistObservable.js +100 -0
  37. package/persist/persistObservable.js.map +1 -0
  38. package/persist/react-native-mmkv/index.d.ts +9 -0
  39. package/persist/react-native-mmkv/index.js +52 -0
  40. package/persist/react-native-mmkv/index.js.map +1 -0
  41. package/persist/web/ObservablePersistLocalStorage.d.ts +8 -0
  42. package/persist/web/ObservablePersistLocalStorage.js +38 -0
  43. package/persist/web/ObservablePersistLocalStorage.js.map +1 -0
  44. package/persist/web/index.d.ts +1 -0
  45. package/persist/web/index.js +18 -0
  46. package/persist/web/index.js.map +1 -0
  47. package/primitivePrototypes.d.ts +1 -0
  48. package/primitivePrototypes.js +22 -0
  49. package/primitivePrototypes.js.map +1 -0
  50. package/promiseCallback.d.ts +8 -0
  51. package/promiseCallback.js +17 -0
  52. package/promiseCallback.js.map +1 -0
  53. package/react/index.d.ts +2 -0
  54. package/react/index.js +19 -0
  55. package/react/index.js.map +1 -0
  56. package/react/useNewObservable.d.ts +3 -0
  57. package/react/useNewObservable.js +23 -0
  58. package/react/useNewObservable.js.map +1 -0
  59. package/react/useObservables.d.ts +2 -0
  60. package/react/useObservables.js +98 -0
  61. package/react/useObservables.js.map +1 -0
  62. package/react/usePrimitiveFunctions.d.ts +4 -0
  63. package/react/usePrimitiveFunctions.js +21 -0
  64. package/react/usePrimitiveFunctions.js.map +1 -0
  65. package/types/index.d.ts +1 -0
  66. package/types/index.js +18 -0
  67. package/types/index.js.map +1 -0
  68. package/types/observableInterfaces.d.ts +150 -0
  69. package/types/observableInterfaces.js +3 -0
  70. package/types/observableInterfaces.js.map +1 -0
@@ -0,0 +1,18 @@
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]; } };
7
+ }
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("./ObservablePersistLocalStorage"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/persist/web/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAAgD"}
@@ -0,0 +1 @@
1
+ export declare function extendPrototypes(): void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extendPrototypes = void 0;
4
+ const observableState_1 = require("./observableState");
5
+ const observableFns_1 = require("./observableFns");
6
+ function extendPrototypes() {
7
+ if (!observableState_1.state.didOverride) {
8
+ observableState_1.state.didOverride = true;
9
+ const fn = (name) => function (...args) {
10
+ const obs = (0, observableFns_1.getObservableFromPrimitive)(this);
11
+ if (obs) {
12
+ return obs[name](...args);
13
+ }
14
+ };
15
+ const toOverride = [Number, Boolean, String];
16
+ ['assign', 'get', 'on', 'set', 'delete'].forEach((key) => {
17
+ toOverride.forEach((override) => (override.prototype[key] = fn(key)));
18
+ });
19
+ }
20
+ }
21
+ exports.extendPrototypes = extendPrototypes;
22
+ //# sourceMappingURL=primitivePrototypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitivePrototypes.js","sourceRoot":"","sources":["../../src/primitivePrototypes.ts"],"names":[],"mappings":";;;AAAA,uDAA0C;AAC1C,mDAA6D;AAE7D,SAAgB,gBAAgB;IAC5B,IAAI,CAAC,uBAAK,CAAC,WAAW,EAAE;QACpB,uBAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CACxB,UAAU,GAAG,IAAS;YAClB,MAAM,GAAG,GAAG,IAAA,0CAA0B,EAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,GAAG,EAAE;gBACL,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;aAC7B;QACL,CAAC,CAAC;QACN,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;KACN;AACL,CAAC;AAfD,4CAeC"}
@@ -0,0 +1,8 @@
1
+ export declare class PromiseCallback<T = void> {
2
+ promise: Promise<T>;
3
+ private _resolve;
4
+ private _isResolved;
5
+ get isResolved(): boolean;
6
+ constructor();
7
+ resolve(value: T): void;
8
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PromiseCallback = void 0;
4
+ class PromiseCallback {
5
+ constructor() {
6
+ this.promise = new Promise((resolve) => (this._resolve = resolve));
7
+ }
8
+ get isResolved() {
9
+ return this._isResolved;
10
+ }
11
+ resolve(value) {
12
+ this._isResolved = true;
13
+ this._resolve(value);
14
+ }
15
+ }
16
+ exports.PromiseCallback = PromiseCallback;
17
+ //# sourceMappingURL=promiseCallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promiseCallback.js","sourceRoot":"","sources":["../../src/promiseCallback.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAe;IAQxB;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAND,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAKD,OAAO,CAAC,KAAQ;QACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACJ;AAfD,0CAeC"}
@@ -0,0 +1,2 @@
1
+ export * from './useNewObservable';
2
+ export * from './useObservables';
package/react/index.js ADDED
@@ -0,0 +1,19 @@
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]; } };
7
+ }
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("./useNewObservable"), exports);
18
+ __exportStar(require("./useObservables"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,mDAAiC"}
@@ -0,0 +1,3 @@
1
+ import { Observable, ValidObservableParam, PersistOptions } from '../types/observableInterfaces';
2
+ declare function useNewObservable<T>(value: ValidObservableParam<T> | (() => ValidObservableParam<T>), observe?: boolean, persist?: PersistOptions<T>): [Observable<T>, T];
3
+ export { useNewObservable };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNewObservable = void 0;
4
+ const tools_1 = require("@legendapp/tools");
5
+ const react_1 = require("react");
6
+ const persist_1 = require("../persist");
7
+ const observable_1 = require("../observable");
8
+ const useObservables_1 = require("./useObservables");
9
+ function useNewObservable(value, observe, persist) {
10
+ const obs = (0, react_1.useMemo)(() => {
11
+ const ret = (0, observable_1.observable)((0, tools_1.isFunction)(value) ? value() : value);
12
+ if (persist) {
13
+ (0, persist_1.persistObservable)(ret, persist);
14
+ }
15
+ return ret;
16
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
17
+ if (observe !== false) {
18
+ (0, useObservables_1.useObservables)(() => [obs]);
19
+ }
20
+ return [obs, obs.get()];
21
+ }
22
+ exports.useNewObservable = useNewObservable;
23
+ //# sourceMappingURL=useNewObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNewObservable.js","sourceRoot":"","sources":["../../../src/react/useNewObservable.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,iCAAgC;AAChC,wCAA+C;AAC/C,8CAA2C;AAE3C,qDAAkD;AAElD,SAAS,gBAAgB,CACrB,KAAgE,EAChE,OAAiB,EACjB,OAA2B;IAE3B,MAAM,GAAG,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACrB,MAAM,GAAG,GAAG,IAAA,uBAAU,EAAC,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE;YACT,IAAA,2BAAiB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACnC;QACD,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kDAAkD;IAE1D,IAAI,OAAO,KAAK,KAAK,EAAE;QACnB,IAAA,+BAAc,EAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5B,CAAC;AAEQ,4CAAgB"}
@@ -0,0 +1,2 @@
1
+ import { MappedObservableValue, ObservableChecker, ObservableEvent } from '../types/observableInterfaces';
2
+ export declare function useObservables<T extends (ObservableChecker | ObservableEvent) | (ObservableChecker | ObservableEvent)[] | Record<string, ObservableChecker>>(fn: () => T): MappedObservableValue<T>;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useObservables = void 0;
4
+ const tools_1 = require("@legendapp/tools");
5
+ const react_1 = require("@legendapp/tools/react");
6
+ const react_2 = require("react");
7
+ const observableFns_1 = require("../observableFns");
8
+ const observableListener_1 = require("../observableListener");
9
+ const observableState_1 = require("../observableState");
10
+ function getRawValue(obs) {
11
+ return obs && ((0, observableFns_1.isObservableEvent)(obs) ? undefined : (0, observableFns_1.isObservable)(obs) ? obs.get() : obs);
12
+ }
13
+ function useObservables(fn) {
14
+ const forceRender = (0, react_1.useForceRender)();
15
+ const ref = (0, react_2.useRef)();
16
+ if (!ref.current) {
17
+ ref.current = {
18
+ proxies: [],
19
+ };
20
+ }
21
+ observableState_1.state.isTracking = true;
22
+ const args = fn();
23
+ const isArr = (0, tools_1.isArray)(args);
24
+ const isObj = !isArr && (0, tools_1.isObject)(args);
25
+ const arr = (isArr ? args : isObj ? Object.values(args) : [args]);
26
+ // Compare to previous args and update listeners if any changed or first mount
27
+ updateListeners(arr, ref.current, forceRender);
28
+ // Reset state
29
+ observableState_1.state.isTracking = false;
30
+ observableState_1.state.trackedProxies = [];
31
+ observableState_1.state.trackedRootProxies = [];
32
+ // Dispose listeners on unmount
33
+ (0, react_2.useEffect)(() => () => {
34
+ if (ref.current.proxies) {
35
+ ref.current.proxies.forEach((p) => (0, observableListener_1.disposeListener)(p[2]));
36
+ ref.current.proxies = [];
37
+ }
38
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
39
+ if (isArr) {
40
+ return arr.map(getRawValue);
41
+ }
42
+ else if (isObj) {
43
+ const ret = args;
44
+ Object.keys(args).forEach((key) => (ret[key] = getRawValue(args[key])));
45
+ return ret;
46
+ }
47
+ else {
48
+ return getRawValue(args);
49
+ }
50
+ }
51
+ exports.useObservables = useObservables;
52
+ const updateListeners = (ret, saved, onChange) => {
53
+ const tracked = observableState_1.state.trackedProxies;
54
+ const trackedRoots = observableState_1.state.trackedRootProxies;
55
+ for (let i = 0; i < ret.length; i++) {
56
+ const r = ret[i];
57
+ if (r && !trackedRoots.includes(r)) {
58
+ const info = observableState_1.state.infos.get(r);
59
+ if (info) {
60
+ tracked.push([r, undefined, false]);
61
+ }
62
+ }
63
+ }
64
+ // Unlisten proxies no longer tracked
65
+ for (let i = 0; i < saved.proxies.length; i++) {
66
+ const p = saved.proxies[i];
67
+ let found = false;
68
+ for (let u = 0; u < tracked.length; u++) {
69
+ if (tracked[u][0] === p[0] && tracked[u][1] === p[1]) {
70
+ found = true;
71
+ break;
72
+ }
73
+ }
74
+ if (!found) {
75
+ saved.proxies.splice(i--, 1);
76
+ (0, observableListener_1.disposeListener)(p[2]);
77
+ }
78
+ }
79
+ // Listen to all tracked proxies
80
+ for (let i = 0; i < tracked.length; i++) {
81
+ const p = tracked[i];
82
+ if (p) {
83
+ const [obs, prop, shallow] = p;
84
+ let found = false;
85
+ for (let u = 0; u < saved.proxies.length; u++) {
86
+ if (saved.proxies[u][0] === obs && saved.proxies[u][1] === prop) {
87
+ found = true;
88
+ break;
89
+ }
90
+ }
91
+ if (!found && (0, observableFns_1.isObservable)(obs)) {
92
+ const listener = (prop ? obs.prop(prop) : obs).on(shallow ? 'changeShallow' : 'change', onChange);
93
+ saved.proxies.push([obs, prop, listener]);
94
+ }
95
+ }
96
+ }
97
+ };
98
+ //# sourceMappingURL=useObservables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useObservables.js","sourceRoot":"","sources":["../../../src/react/useObservables.ts"],"names":[],"mappings":";;;AAAA,4CAAqD;AACrD,kDAAwD;AACxD,iCAA0C;AAC1C,oDAAmE;AASnE,8DAAwD;AACxD,wDAA2C;AAM3C,SAAS,WAAW,CAAgD,GAAM;IACtE,OAAO,GAAG,IAAI,CAAC,IAAA,iCAAiB,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,4BAAY,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7F,CAAC;AAED,SAAgB,cAAc,CAK5B,EAAW;IACT,MAAM,WAAW,GAAG,IAAA,sBAAc,GAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAA,cAAM,GAAiB,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QACd,GAAG,CAAC,OAAO,GAAG;YACV,OAAO,EAAE,EAAE;SACd,CAAC;KACL;IAED,uBAAK,CAAC,UAAU,GAAG,IAAI,CAAC;IAExB,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC;IAElB,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAiB,CAAC;IAElF,8EAA8E;IAC9E,eAAe,CAAC,GAAmB,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE/D,cAAc;IACd,uBAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IACzB,uBAAK,CAAC,cAAc,GAAG,EAAE,CAAC;IAC1B,uBAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAE9B,+BAA+B;IAC/B,IAAA,iBAAS,EACL,GAAG,EAAE,CAAC,GAAG,EAAE;QACP,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE;YACrB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oCAAe,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;SAC5B;IACL,CAAC,EACD,EAAE,CACL,CAAC,CAAC,kDAAkD;IAErD,IAAI,KAAK,EAAE;QACP,OAAO,GAAG,CAAC,GAAG,CAAC,WAAW,CAAQ,CAAC;KACtC;SAAM,IAAI,KAAK,EAAE;QACd,MAAM,GAAG,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,GAAU,CAAC;KACrB;SAAM;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;KAC5B;AACL,CAAC;AAnDD,wCAmDC;AAED,MAAM,eAAe,GAAG,CAAC,GAAiB,EAAE,KAAoB,EAAE,QAAoB,EAAE,EAAE;IACtF,MAAM,OAAO,GAAG,uBAAK,CAAC,cAAc,CAAC;IACrC,MAAM,YAAY,GAAG,uBAAK,CAAC,kBAAkB,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAChC,MAAM,IAAI,GAAG,uBAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,IAAI,EAAE;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;aACvC;SACJ;KACJ;IACD,qCAAqC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAClD,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;aACT;SACJ;QACD,IAAI,CAAC,KAAK,EAAE;YACR,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAA,oCAAe,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzB;KACJ;IACD,gCAAgC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,EAAE;YACH,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBAC7D,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;iBACT;aACJ;YACD,IAAI,CAAC,KAAK,IAAI,IAAA,4BAAY,EAAC,GAAG,CAAC,EAAE;gBAC7B,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAC7C,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,EACpC,QAAQ,CACI,CAAC;gBACjB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC7C;SACJ;KACJ;AACL,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ObservableChecker } from '../types';
2
+ export declare function useSetter<T>(obs: ObservableChecker): any;
3
+ export declare function useGetter<T>(obs: ObservableChecker): any;
4
+ export declare function useAssigner<T>(obs: ObservableChecker): any;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAssigner = exports.useGetter = exports.useSetter = void 0;
4
+ const react_1 = require("react");
5
+ const observable_1 = require("../observable");
6
+ function usePrimitiveFunction(obs, fn) {
7
+ return (0, react_1.useCallback)(fn(obs), [obs]);
8
+ }
9
+ function useSetter(obs) {
10
+ return usePrimitiveFunction(obs, observable_1.setter);
11
+ }
12
+ exports.useSetter = useSetter;
13
+ function useGetter(obs) {
14
+ return usePrimitiveFunction(obs, observable_1.getter);
15
+ }
16
+ exports.useGetter = useGetter;
17
+ function useAssigner(obs) {
18
+ return usePrimitiveFunction(obs, observable_1.assigner);
19
+ }
20
+ exports.useAssigner = useAssigner;
21
+ //# sourceMappingURL=usePrimitiveFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrimitiveFunctions.js","sourceRoot":"","sources":["../../../src/react/usePrimitiveFunctions.ts"],"names":[],"mappings":";;;AACA,iCAAoC;AACpC,8CAAyD;AAEzD,SAAS,oBAAoB,CAAI,GAAsB,EAAE,EAAY;IACjE,OAAO,IAAA,mBAAW,EAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,SAAS,CAAI,GAAsB;IAC/C,OAAO,oBAAoB,CAAC,GAAG,EAAE,mBAAM,CAAC,CAAC;AAC7C,CAAC;AAFD,8BAEC;AACD,SAAgB,SAAS,CAAI,GAAsB;IAC/C,OAAO,oBAAoB,CAAC,GAAG,EAAE,mBAAM,CAAC,CAAC;AAC7C,CAAC;AAFD,8BAEC;AACD,SAAgB,WAAW,CAAI,GAAsB;IACjD,OAAO,oBAAoB,CAAC,GAAG,EAAE,qBAAQ,CAAC,CAAC;AAC/C,CAAC;AAFD,kCAEC"}
@@ -0,0 +1 @@
1
+ export * from './observableInterfaces';
package/types/index.js ADDED
@@ -0,0 +1,18 @@
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]; } };
7
+ }
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("./observableInterfaces"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC"}
@@ -0,0 +1,150 @@
1
+ export declare type ObservableEventType = 'change' | 'changeShallow' | 'equals' | 'hasValue' | 'true';
2
+ export declare type ObservableFnName = 'get' | 'set' | 'assign' | 'on' | 'prop' | 'delete';
3
+ export interface ObsProps<T> {
4
+ get(): T;
5
+ set(value: ValidObservableParam<T>): Observable<T>;
6
+ set<K extends keyof T>(key: K | string | number, value: ValidObservableParam<T[K]>): Observable<T[K]>;
7
+ assign(value: ValidObservableParam<T> | Partial<ValidObservableParam<T>>): Observable<T>;
8
+ prop<K extends keyof T>(prop: K): Observable<T[K]>;
9
+ delete(): Observable<T>;
10
+ delete<K extends keyof T>(key: K | string | number): Observable<T>;
11
+ on(eventType: 'change', cb: ListenerFn<T>): ObsListener<T>;
12
+ on(eventType: 'changeShallow', cb: ListenerFn<T>): ObsListener<T>;
13
+ on(eventType: 'equals', value: T, cb?: (value?: T) => void): {
14
+ listener: ObsListener<T>;
15
+ promise: Promise<T>;
16
+ };
17
+ on(eventType: 'hasValue', cb?: (value?: T) => void): {
18
+ listener: ObsListener<T>;
19
+ promise: Promise<T>;
20
+ };
21
+ on(eventType: 'true', cb?: (value?: T) => void): {
22
+ listener: ObsListener<T>;
23
+ promise: Promise<T>;
24
+ };
25
+ on(eventType: ObservableEventType, cb?: (value?: T) => void): ObsListener<T> | {
26
+ listener: ObsListener<T>;
27
+ promise: Promise<T>;
28
+ };
29
+ }
30
+ export declare type ObsPropsUnsafe<T> = Partial<ObsProps<T>>;
31
+ export interface ObsListener<T = any> {
32
+ target: Observable<T>;
33
+ callback: ListenerFn<T>;
34
+ shallow: boolean;
35
+ }
36
+ export interface ObsListenerInfo {
37
+ changedValue: any;
38
+ prevValue: any;
39
+ path: string[];
40
+ }
41
+ export declare type ListenerFn<T> = (value: T, info: ObsListenerInfo) => void;
42
+ declare type Recurse<T, K extends keyof T, TRecurse> = T[K] extends Function | Map<any, any> | WeakMap<any, any> | Set<any> | WeakSet<any> | Promise<any> ? T[K] : T[K] extends Array<any> ? T[K] & {
43
+ [n: number]: TRecurse extends Observable ? Observable<T[K][number]> : ObservableUnsafe<T[K][number]>;
44
+ } : T extends object ? TRecurse : T[K];
45
+ declare type ObsPropsRecursiveUnsafe<T> = {
46
+ [K in keyof T]: Recurse<T, K, ObservableUnsafe<T[K]>>;
47
+ };
48
+ declare type ObsPropsRecursive<T> = {
49
+ readonly [K in keyof T]: Recurse<T, K, Observable<T[K]>>;
50
+ };
51
+ export declare type ObservableUnsafe<T = any> = ObsPropsRecursiveUnsafe<T> & ObsPropsUnsafe<T>;
52
+ export declare type Observable<T = any> = ObsPropsRecursive<T> & ObsProps<T>;
53
+ export declare type ObservableComputed<T = any> = Omit<Observable<T>, 'set' | 'assign' | 'delete'>;
54
+ export interface ObservableEvent {
55
+ fire(): void;
56
+ on(cb?: () => void): ObsListener<void>;
57
+ on(eventType: 'change', cb?: () => void): ObsListener<void>;
58
+ }
59
+ export declare type ObservableValue<T extends Observable | ObservableUnsafe | ObservableEvent> = T extends Observable<infer t> ? t : T extends ObservableEvent ? void : T extends ObservableUnsafe<infer t> ? t : T;
60
+ export declare type MappedObservableValue<T extends (ObservableChecker | ObservableEvent) | (ObservableChecker | ObservableEvent)[] | Record<string, ObservableChecker | ObservableEvent>> = T extends ObservableChecker | ObservableEvent ? ObservableValue<T> : {
61
+ [K in keyof T]: ObservableValue<T[K]>;
62
+ };
63
+ export declare type QueryByModified<T> = boolean | '*' | {
64
+ '*': '*' | true;
65
+ } | {
66
+ [K in keyof T]?: QueryByModified<T[K]>;
67
+ };
68
+ export interface PersistOptionsRemote<T = any> {
69
+ readonly?: boolean;
70
+ once?: boolean;
71
+ requireAuth?: boolean;
72
+ saveTimeout?: number;
73
+ adjustData?: {
74
+ load: (value: any, basePath: string) => Promise<any>;
75
+ save: (value: any, basePath: string, path: string[]) => Promise<any>;
76
+ };
77
+ firebase?: {
78
+ syncPath: (uid: string) => `/${string}/`;
79
+ fieldTransforms?: SameShapeWithStrings<T>;
80
+ queryByModified?: QueryByModified<T>;
81
+ ignoreKeys?: Record<string, true>;
82
+ };
83
+ }
84
+ export interface PersistOptions<T = any> {
85
+ local?: string;
86
+ remote?: PersistOptionsRemote<T>;
87
+ localPersistence?: ClassConstructor<ObservablePersistLocal>;
88
+ remotePersistence?: ClassConstructor<ObservablePersistRemote>;
89
+ dateModifiedKey?: string;
90
+ }
91
+ export interface ObservablePersistLocal {
92
+ get<T = any>(path: string): T;
93
+ set(path: string, value: any): void;
94
+ delete(path: string): void;
95
+ }
96
+ export interface ObservablePersistLocalAsync extends ObservablePersistLocal {
97
+ preload(path: string): Promise<void>;
98
+ }
99
+ export interface ObservablePersistRemote {
100
+ save<T>(options: PersistOptions<T>, value: T, info: ObsListenerInfo): Promise<T>;
101
+ listen<T>(obs: ObservableChecker<T>, options: PersistOptions<T>, onLoad: () => void, onChange: (obs: Observable<T>, value: any) => void): any;
102
+ }
103
+ export interface ObservablePersistState {
104
+ isLoadedLocal: boolean;
105
+ isLoadedRemote: boolean;
106
+ clearLocal: () => Promise<void>;
107
+ }
108
+ export declare type ObservableChecker<T = any> = Observable<T> | ObservableUnsafe<T>;
109
+ export declare type RecordValue<T> = T extends Record<string, infer t> ? t : never;
110
+ export declare type ArrayValue<T> = T extends Array<infer t> ? t : never;
111
+ declare type SameShapeWithStringsRecord<T> = {
112
+ [K in keyof Omit<T, '_id' | 'id'>]-?: T[K] extends Record<string, Record<string, any>> ? {
113
+ _: string;
114
+ __obj: SameShapeWithStrings<RecordValue<T[K]>> | SameShapeWithStrings<T[K]>;
115
+ } | {
116
+ _: string;
117
+ __dict: SameShapeWithStrings<RecordValue<T[K]>>;
118
+ } | SameShapeWithStrings<T[K]> : T[K] extends Array<infer t> ? {
119
+ _: string;
120
+ __arr: SameShapeWithStrings<t> | Record<string, string>;
121
+ } | string : T[K] extends Record<string, object> ? ({
122
+ _: string;
123
+ __obj: SameShapeWithStrings<RecordValue<T[K]>> | SameShapeWithStrings<T[K]>;
124
+ } | {
125
+ _: string;
126
+ __dict: SameShapeWithStrings<RecordValue<T[K]>>;
127
+ }) | string : T[K] extends Record<string, any> ? ({
128
+ _: string;
129
+ __obj: SameShapeWithStrings<T[K]>;
130
+ } | {
131
+ _: string;
132
+ __dict: SameShapeWithStrings<T[K]>;
133
+ }) | string : string | {
134
+ _: string;
135
+ __val: Record<string, string>;
136
+ };
137
+ };
138
+ declare type SameShapeWithStrings<T> = T extends Record<string, Record<string, any>> ? {
139
+ __dict: SameShapeWithStrings<RecordValue<T>>;
140
+ } | SameShapeWithStringsRecord<T> : SameShapeWithStringsRecord<T>;
141
+ declare type DisallowedAttributes<T extends string> = Partial<Record<T, void>>;
142
+ export declare type ValidObservableParam<T> = T extends Record<string, any> ? T extends Map<any, any> | WeakMap<any, any> | Set<any> | WeakSet<any> ? T : T extends Observable ? never : {
143
+ [K in keyof T]: ValidObservableParam<T[K]>;
144
+ } & DisallowedAttributes<ObservableFnName> : T;
145
+ export interface OnReturnValue<T> {
146
+ promise: Promise<T>;
147
+ listener: ObsListener<T>;
148
+ }
149
+ export declare type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
150
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=observableInterfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observableInterfaces.js","sourceRoot":"","sources":["../../../src/types/observableInterfaces.ts"],"names":[],"mappings":""}