@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,34 @@
1
+ import { ObservableEventType, ListenerFn, ObservableChecker, ObsListener, OnReturnValue, Observable, ObservableEvent } from './types/observableInterfaces';
2
+ export declare function notifyObservable<T>(target: ObservableChecker<T>, changedValue: T, prevValue: T, path: string[]): void;
3
+ export declare function listenToObservableShallow<T>(obs: ObservableChecker<T>, callback: ListenerFn<T>): ObsListener<T>;
4
+ export declare function listenToObservable<T>(obs: ObservableChecker<T>, callback: ListenerFn<T>, shallow?: boolean): ObsListener<T>;
5
+ export declare function onEquals<T>(obs: ObservableChecker<T>, value: T, cb?: (value: T) => void): OnReturnValue<T>;
6
+ export declare function onHasValue<T>(obs: ObservableChecker<T>, cb?: (value: T) => void): OnReturnValue<T>;
7
+ export declare function onTrue<T extends boolean>(obs: ObservableChecker<T>, cb?: () => void): OnReturnValue<T>;
8
+ export declare function unlisten<T extends ObservableChecker>(obs: T, cb: ListenerFn<any>): void;
9
+ export declare function _on(obs: ObservableChecker, _: any, eventType: ObservableEventType, ...args: any[]): any;
10
+ export declare function listen<T>(obs: ObservableChecker<T>, eventType: 'change', cb: ListenerFn<T>): ObsListener<T>;
11
+ export declare function listen<T>(obs: ObservableChecker<T>, eventType: 'changeShallow', cb: ListenerFn<T>): ObsListener<T>;
12
+ export declare function listen<T>(obs: ObservableChecker<T>, eventType: 'equals', value: T, cb?: (value?: T) => void): {
13
+ listener: ObsListener<T>;
14
+ promise: Promise<T>;
15
+ };
16
+ export declare function listen<T>(obs: ObservableChecker<T>, eventType: 'hasValue', cb?: (value?: T) => void): {
17
+ listener: ObsListener<T>;
18
+ promise: Promise<T>;
19
+ };
20
+ export declare function listen<T>(obs: ObservableChecker<T>, eventType: 'true', cb?: (value?: T) => void): {
21
+ listener: ObsListener<T>;
22
+ promise: Promise<T>;
23
+ };
24
+ export declare function listen<T>(obs: ObservableChecker<T>, eventType: ObservableEventType, cb?: (value?: T) => void): ObsListener<T> | {
25
+ listener: ObsListener<T>;
26
+ promise: Promise<T>;
27
+ };
28
+ export declare function observableProp(obs: ObservableChecker, _: any, prop: string | number): any;
29
+ export declare function getObservableFromPrimitive(primitive: any): Observable<any>;
30
+ export declare function prop(obs: ObservableChecker): ObservableChecker<any>;
31
+ export declare function shallow(obs: ObservableChecker): any;
32
+ export declare function isObservable(obj: any): obj is Observable;
33
+ export declare function isObservableEvent(obj: any): obj is ObservableEvent;
34
+ export declare function merge(target: any, ...sources: any[]): any;
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.merge = exports.isObservableEvent = exports.isObservable = exports.shallow = exports.prop = exports.getObservableFromPrimitive = exports.observableProp = exports.listen = exports._on = exports.unlisten = exports.onTrue = exports.onHasValue = exports.onEquals = exports.listenToObservable = exports.listenToObservableShallow = exports.notifyObservable = void 0;
4
+ const tools_1 = require("@legendapp/tools");
5
+ const globals_1 = require("./globals");
6
+ const observableBatcher_1 = require("./observableBatcher");
7
+ const observableListener_1 = require("./observableListener");
8
+ const observableState_1 = require("./observableState");
9
+ const { infos, skipNotifyFor, lastAccessedProxy } = observableState_1.state;
10
+ const symbolHasValue = Symbol('__hasValue');
11
+ function _notify(target, listenerInfo, fromChild) {
12
+ const info = infos.get(target);
13
+ // Notify this listener if this target is not being skipped (if getting called during an assign)
14
+ if (info && !skipNotifyFor.includes(target)) {
15
+ // Notify all listeners
16
+ if (info.listeners) {
17
+ const value = target.get();
18
+ info.listeners.forEach((listener) => {
19
+ if (!fromChild ||
20
+ !listener.shallow ||
21
+ (value === undefined) !== (listenerInfo.prevValue === undefined)) {
22
+ observableBatcher_1.observableBatcher.notify(listener.callback, value, listenerInfo);
23
+ }
24
+ });
25
+ }
26
+ // Notify parents
27
+ const parent = info.parent;
28
+ if (parent) {
29
+ const parentListenerInfo = Object.assign({}, listenerInfo);
30
+ parentListenerInfo.path = [info.prop].concat(listenerInfo.path);
31
+ _notify(parent, parentListenerInfo, /*fromChild*/ true);
32
+ }
33
+ }
34
+ }
35
+ function notifyObservable(target, changedValue, prevValue, path) {
36
+ _notify(target, { changedValue, prevValue, path });
37
+ }
38
+ exports.notifyObservable = notifyObservable;
39
+ function listenToObservableShallow(obs, callback) {
40
+ return listenToObservable(obs, callback, /*shallow*/ true);
41
+ }
42
+ exports.listenToObservableShallow = listenToObservableShallow;
43
+ function listenToObservable(obs, callback, shallow) {
44
+ // Get the stable observable if it's a primitive
45
+ obs = prop(obs);
46
+ const info = infos.get(obs);
47
+ if (!info && process.env.NODE_ENV === 'development') {
48
+ throw new Error('Can only listen to instances of Observable');
49
+ }
50
+ if (!info.listeners) {
51
+ info.listeners = new Set();
52
+ }
53
+ const listener = { target: obs, callback, shallow };
54
+ info.listeners.add(listener);
55
+ return listener;
56
+ }
57
+ exports.listenToObservable = listenToObservable;
58
+ function onEquals(obs, value, cb) {
59
+ let listener;
60
+ const promise = new Promise((resolve) => {
61
+ // Get the stable observable if it's a primitive
62
+ obs = prop(obs);
63
+ let isDone = false;
64
+ function check(newValue) {
65
+ if (!isDone &&
66
+ (value === symbolHasValue
67
+ ? // If value param is symbolHasValue, then this is from onHasValue so resolve if newValue is anything but undefined or empty object
68
+ newValue !== undefined && newValue !== null && newValue !== !(0, globals_1.isObjectEmpty)(newValue)
69
+ : newValue === value)) {
70
+ isDone = true;
71
+ cb === null || cb === void 0 ? void 0 : cb(newValue);
72
+ resolve(value);
73
+ (0, observableListener_1.disposeListener)(listener);
74
+ }
75
+ return isDone;
76
+ }
77
+ if (!check(obs.get())) {
78
+ listener = listenToObservable(obs, check);
79
+ }
80
+ });
81
+ return {
82
+ promise,
83
+ listener,
84
+ };
85
+ }
86
+ exports.onEquals = onEquals;
87
+ function onHasValue(obs, cb) {
88
+ return onEquals(obs, symbolHasValue, cb);
89
+ }
90
+ exports.onHasValue = onHasValue;
91
+ function onTrue(obs, cb) {
92
+ return onEquals(obs, true, cb);
93
+ }
94
+ exports.onTrue = onTrue;
95
+ function unlisten(obs, cb) {
96
+ const info = infos.get(obs);
97
+ if (info) {
98
+ for (const listener of info.listeners) {
99
+ if (listener.callback === cb) {
100
+ info.listeners.delete(listener);
101
+ break;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ exports.unlisten = unlisten;
107
+ const ObservableOnFunctions = {
108
+ change: listenToObservable,
109
+ changeShallow: listenToObservableShallow,
110
+ equals: onEquals,
111
+ hasValue: onHasValue,
112
+ true: onTrue,
113
+ };
114
+ function _on(obs, _, eventType, ...args) {
115
+ return ObservableOnFunctions[eventType](obs, ...args);
116
+ }
117
+ exports._on = _on;
118
+ function listen(obs, eventType, ...args) {
119
+ return ObservableOnFunctions[eventType](obs, ...args);
120
+ }
121
+ exports.listen = listen;
122
+ function observableProp(obs, _, prop) {
123
+ observableState_1.state.inProp = true;
124
+ return obs[prop];
125
+ }
126
+ exports.observableProp = observableProp;
127
+ function getObservableFromPrimitive(primitive) {
128
+ if (lastAccessedProxy) {
129
+ const { proxy, prop } = lastAccessedProxy;
130
+ const info = infos.get(proxy);
131
+ // Make sure the primitive being accessed is the one from lastAccessedProxy
132
+ // == instead of === because some platforms like React native fail here on ===
133
+ if (info && info.target[prop] == primitive) {
134
+ return proxy.prop(prop);
135
+ }
136
+ }
137
+ }
138
+ exports.getObservableFromPrimitive = getObservableFromPrimitive;
139
+ function prop(obs) {
140
+ if ((0, globals_1.isPrimitive)(obs)) {
141
+ obs = getObservableFromPrimitive(obs);
142
+ }
143
+ return obs;
144
+ }
145
+ exports.prop = prop;
146
+ function shallow(obs) {
147
+ return obs[globals_1.symbolShallow];
148
+ }
149
+ exports.shallow = shallow;
150
+ function isObservable(obj) {
151
+ return infos.has(obj);
152
+ }
153
+ exports.isObservable = isObservable;
154
+ function isObservableEvent(obj) {
155
+ return (0, tools_1.isObject)(obj) && obj.hasOwnProperty('fire') && obj.hasOwnProperty('on');
156
+ }
157
+ exports.isObservableEvent = isObservableEvent;
158
+ function merge(target, ...sources) {
159
+ if (!sources.length)
160
+ return target;
161
+ const source = sources.shift();
162
+ const needsSet = isObservable(target);
163
+ const targetValue = needsSet ? target.get() : target;
164
+ if ((0, tools_1.isObject)(targetValue) && (0, tools_1.isObject)(source)) {
165
+ if (source[globals_1.symbolDateModified]) {
166
+ if (needsSet) {
167
+ target.set(globals_1.symbolDateModified, source[globals_1.symbolDateModified]);
168
+ }
169
+ else {
170
+ target[globals_1.symbolDateModified] = source[globals_1.symbolDateModified];
171
+ }
172
+ }
173
+ for (const key in source) {
174
+ if ((0, tools_1.isObject)(source[key])) {
175
+ if (!(0, tools_1.isObject)(targetValue[key])) {
176
+ if (needsSet) {
177
+ target.set(key, {});
178
+ }
179
+ else {
180
+ target[key] = {};
181
+ }
182
+ }
183
+ if (!targetValue[key]) {
184
+ if (needsSet) {
185
+ target.assign({ [key]: {} });
186
+ }
187
+ else {
188
+ Object.assign(target, { [key]: {} });
189
+ }
190
+ }
191
+ merge(target[key], source[key]);
192
+ }
193
+ else {
194
+ if (isObservable(target)) {
195
+ target.assign({ [key]: source[key] });
196
+ }
197
+ else {
198
+ Object.assign(target, { [key]: source[key] });
199
+ }
200
+ }
201
+ }
202
+ }
203
+ return merge(target, ...sources);
204
+ }
205
+ exports.merge = merge;
206
+ //# sourceMappingURL=observableFns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observableFns.js","sourceRoot":"","sources":["../../src/observableFns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { ObsListener } from './types/observableInterfaces';
2
+ export declare function disposeListener(listener: ObsListener): void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.disposeListener = void 0;
4
+ const observableState_1 = require("./observableState");
5
+ function disposeListener(listener) {
6
+ if (listener) {
7
+ const info = observableState_1.state.infos.get(listener.target);
8
+ if (info.listeners) {
9
+ info.listeners.delete(listener);
10
+ }
11
+ }
12
+ }
13
+ exports.disposeListener = disposeListener;
14
+ //# sourceMappingURL=observableListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observableListener.js","sourceRoot":"","sources":["../../src/observableListener.ts"],"names":[],"mappings":";;;AACA,uDAA0C;AAE1C,SAAgB,eAAe,CAAC,QAAqB;IACjD,IAAI,QAAQ,EAAE;QACV,MAAM,IAAI,GAAG,uBAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACnC;KACJ;AACL,CAAC;AAPD,0CAOC"}
@@ -0,0 +1,28 @@
1
+ import { Observable, ObservableChecker, ObsListener } from './types/observableInterfaces';
2
+ export interface StateInfo {
3
+ prop: string | number | symbol;
4
+ target: object;
5
+ targetOriginal: object;
6
+ safe: boolean;
7
+ primitive: boolean;
8
+ readonly?: boolean;
9
+ listeners?: Set<ObsListener>;
10
+ proxies?: Map<string | number | symbol, Observable>;
11
+ parent?: Observable;
12
+ }
13
+ export declare const state: {
14
+ inSetFn: number;
15
+ inAssign: number;
16
+ isTracking: boolean;
17
+ inProp: boolean;
18
+ didOverride: boolean;
19
+ trackedRootProxies: Observable<any>[];
20
+ trackedProxies: [Observable<any>, string, boolean][];
21
+ lastAccessedProxy: {
22
+ proxy: Observable<any>;
23
+ prop: string | number | symbol;
24
+ };
25
+ infos: WeakMap<ObservableChecker<any>, StateInfo>;
26
+ skipNotifyFor: ObservableChecker<any>[];
27
+ updateTracking: (proxy: Observable, prop: any, info: StateInfo, shallow: boolean) => void;
28
+ };
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.state = void 0;
4
+ exports.state = {
5
+ inSetFn: 0,
6
+ inAssign: 0,
7
+ isTracking: false,
8
+ inProp: false,
9
+ didOverride: false,
10
+ trackedRootProxies: [],
11
+ trackedProxies: [],
12
+ lastAccessedProxy: { proxy: undefined, prop: undefined },
13
+ infos: new WeakMap(),
14
+ skipNotifyFor: [],
15
+ updateTracking: (proxy, prop, info, shallow) => {
16
+ // Update which proxies and props have been accessed while tracking,
17
+ // for usage in observableComputed and useObservables
18
+ if (exports.state.isTracking) {
19
+ const prev = exports.state.trackedProxies[exports.state.trackedProxies.length - 1];
20
+ if (prev && info.parent && prev[0] === info.parent && prev[1] == info.prop) {
21
+ exports.state.trackedProxies[exports.state.trackedProxies.length - 1] = [proxy, prop, shallow];
22
+ }
23
+ else {
24
+ exports.state.trackedProxies.push([proxy, prop, shallow]);
25
+ }
26
+ if (exports.state.trackedRootProxies[exports.state.trackedProxies.length - 1] === info.parent) {
27
+ exports.state.trackedRootProxies.pop();
28
+ }
29
+ }
30
+ },
31
+ };
32
+ //# sourceMappingURL=observableState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observableState.js","sourceRoot":"","sources":["../../src/observableState.ts"],"names":[],"mappings":";;;AAca,QAAA,KAAK,GAAG;IACjB,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,KAAK;IAClB,kBAAkB,EAAE,EAAkB;IACtC,cAAc,EAAE,EAAqC;IACrD,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAuB,EAAE,IAAI,EAAE,SAAqC,EAAE;IAClG,KAAK,EAAE,IAAI,OAAO,EAAgC;IAClD,aAAa,EAAE,EAAyB;IACxC,cAAc,EAAE,CAAC,KAAiB,EAAE,IAAS,EAAE,IAAe,EAAE,OAAgB,EAAE,EAAE;QAChF,oEAAoE;QACpE,qDAAqD;QACrD,IAAI,aAAK,CAAC,UAAU,EAAE;YAClB,MAAM,IAAI,GAAG,aAAK,CAAC,cAAc,CAAC,aAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACxE,aAAK,CAAC,cAAc,CAAC,aAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;aAClF;iBAAM;gBACH,aAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;aACrD;YAED,IAAI,aAAK,CAAC,kBAAkB,CAAC,aAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;gBAC3E,aAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;aAClC;SACJ;IACL,CAAC;CACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@legendapp/state",
3
+ "version": "0.9.0",
4
+ "description": "legend-state",
5
+ "sideEffects": false,
6
+ "private": false,
7
+ "main": "./index.js",
8
+ "types": "./index.d.ts",
9
+ "files": [
10
+ "**"
11
+ ],
12
+ "exports": {
13
+ ".": "./index.js",
14
+ "./react": "./react/index.js",
15
+ "./persist": "./persist/index.js",
16
+ "./types": "./types/index.d.ts"
17
+ },
18
+ "dependencies": {
19
+ "@legendapp/tools": "^2.0.0-alpha.3"
20
+ },
21
+ "peerDependencies": {
22
+ "react": ">=16.8",
23
+ "react-native-mmkv": "^2"
24
+ },
25
+ "peerDependenciesMeta": {
26
+ "react": {
27
+ "optional": true
28
+ },
29
+ "react-native-mmkv": {
30
+ "optional": true
31
+ }
32
+ },
33
+ "author": "Legend <contact@legendapp.com> (https://github.com/LegendApp)",
34
+ "keywords": [
35
+ "react",
36
+ "react-native",
37
+ "state",
38
+ "hooks",
39
+ "proxy"
40
+ ],
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/LegendApp/legend-state.git"
44
+ },
45
+ "license": "MIT",
46
+ "bugs": {
47
+ "url": "https://github.com/LegendApp/legend-state/issues"
48
+ },
49
+ "homepage": "https://github.com/LegendApp/legend-state#readme",
50
+ "publishConfig": {
51
+ "registry": "https://registry.npmjs.org/"
52
+ }
53
+ }
@@ -0,0 +1 @@
1
+ export { persistObservable } from './persistObservable';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.persistObservable = void 0;
4
+ var persistObservable_1 = require("./persistObservable");
5
+ Object.defineProperty(exports, "persistObservable", { enumerable: true, get: function () { return persistObservable_1.persistObservable; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/persist/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Observable, ObservableChecker, ObservablePersistState, PersistOptions } from '../types/observableInterfaces';
2
+ export declare const mapPersistences: WeakMap<any, any>;
3
+ export declare function persistObservable<T>(obs: ObservableChecker<T>, persistOptions: PersistOptions<T>): Observable<ObservablePersistState>;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.persistObservable = exports.mapPersistences = void 0;
4
+ const configureObservable_1 = require("../configureObservable");
5
+ const globals_1 = require("../globals");
6
+ const observable_1 = require("../observable");
7
+ const observableBatcher_1 = require("../observableBatcher");
8
+ const observableFns_1 = require("../observableFns");
9
+ const web_1 = require("./web");
10
+ exports.mapPersistences = new WeakMap();
11
+ const usedNames = new Map();
12
+ const dateModifiedKey = '@';
13
+ let platformDefaultPersistence = typeof window !== 'undefined' && typeof window.localStorage !== undefined
14
+ ? web_1.ObservablePersistLocalStorage
15
+ : undefined;
16
+ async function onObsChange(obsState, state, persistOptions, value, info) {
17
+ const { persistenceLocal, persistenceRemote, tempDisableSaveRemote } = state;
18
+ const local = persistOptions.local;
19
+ if (local) {
20
+ if (!obsState.isLoadedLocal)
21
+ return;
22
+ persistenceLocal.set(local, (0, globals_1.replaceKeyInObject)(value, globals_1.symbolDateModified, dateModifiedKey, /*clone*/ true));
23
+ }
24
+ if (!tempDisableSaveRemote && persistOptions.remote && !persistOptions.remote.readonly) {
25
+ const saved = await persistenceRemote.save(persistOptions, value, info);
26
+ if (saved) {
27
+ if (local) {
28
+ const cur = persistenceLocal.get(local);
29
+ const replaced = (0, globals_1.replaceKeyInObject)(saved, globals_1.symbolDateModified, dateModifiedKey,
30
+ /*clone*/ false);
31
+ const toSave = cur ? (0, observableFns_1.merge)(cur, replaced) : replaced;
32
+ persistenceLocal.set(local, toSave);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ function onChangeRemote(state, cb) {
38
+ state.tempDisableSaveRemote = true;
39
+ observableBatcher_1.observableBatcher.begin();
40
+ cb();
41
+ observableBatcher_1.observableBatcher.end();
42
+ state.tempDisableSaveRemote = false;
43
+ }
44
+ function persistObservable(obs, persistOptions) {
45
+ var _a, _b;
46
+ const { local, remote } = persistOptions;
47
+ const localPersistence = persistOptions.localPersistence || ((_a = configureObservable_1.config.persist) === null || _a === void 0 ? void 0 : _a.localPersistence) || platformDefaultPersistence;
48
+ const remotePersistence = persistOptions.remotePersistence || ((_b = configureObservable_1.config.persist) === null || _b === void 0 ? void 0 : _b.remotePersistence);
49
+ const state = { tempDisableSaveRemote: false };
50
+ let isLoadedLocal = false;
51
+ let clearLocal;
52
+ if (local) {
53
+ if (!localPersistence) {
54
+ throw new Error('Local persistence is not configured');
55
+ }
56
+ if (!exports.mapPersistences.has(localPersistence)) {
57
+ exports.mapPersistences.set(localPersistence, new localPersistence());
58
+ }
59
+ const persistenceLocal = exports.mapPersistences.get(localPersistence);
60
+ state.persistenceLocal = persistenceLocal;
61
+ let value = persistenceLocal.get(local);
62
+ const dateModifiedKey = '@';
63
+ if (process.env.NODE_ENV === 'development') {
64
+ if (usedNames.has(local)) {
65
+ console.error(`Called persist with the same local name multiple times: ${local}`);
66
+ // return;
67
+ }
68
+ usedNames.set(local, true);
69
+ }
70
+ if (value !== null && value !== undefined) {
71
+ (0, globals_1.replaceKeyInObject)(value, dateModifiedKey, globals_1.symbolDateModified, /*clone*/ false);
72
+ (0, globals_1.removeNullUndefined)(value);
73
+ (0, observableFns_1.merge)(obs, value);
74
+ }
75
+ clearLocal = () => Promise.resolve(persistenceLocal.delete(local));
76
+ isLoadedLocal = true;
77
+ }
78
+ if (remote) {
79
+ if (!remotePersistence) {
80
+ throw new Error('Remote persistence is not configured');
81
+ }
82
+ if (!exports.mapPersistences.has(remotePersistence)) {
83
+ exports.mapPersistences.set(remotePersistence, new remotePersistence());
84
+ }
85
+ const persistenceRemote = exports.mapPersistences.get(remotePersistence);
86
+ state.persistenceRemote = persistenceRemote;
87
+ persistenceRemote.listen(obs, persistOptions, () => {
88
+ obsState.isLoadedRemote.set(true);
89
+ }, onChangeRemote.bind(this, state));
90
+ }
91
+ const obsState = (0, observable_1.observable)({
92
+ isLoadedLocal,
93
+ isLoadedRemote: false,
94
+ clearLocal,
95
+ });
96
+ obs.on('change', onObsChange.bind(this, obsState, state, persistOptions));
97
+ return obsState;
98
+ }
99
+ exports.persistObservable = persistObservable;
100
+ //# sourceMappingURL=persistObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistObservable.js","sourceRoot":"","sources":["../../../src/persist/persistObservable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ObservablePersistLocal } from '../../types/observableInterfaces';
2
+ export declare class ObservablePersistMMKV implements ObservablePersistLocal {
3
+ data: Record<string, any>;
4
+ get(id: string): any;
5
+ set(id: string, value: any): Promise<void>;
6
+ delete(id: string): Promise<void>;
7
+ private save;
8
+ private _save;
9
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObservablePersistMMKV = void 0;
4
+ const react_native_mmkv_1 = require("react-native-mmkv");
5
+ const storage = new react_native_mmkv_1.MMKV({
6
+ id: `obsPersist`,
7
+ });
8
+ class ObservablePersistMMKV {
9
+ constructor() {
10
+ this.data = {};
11
+ }
12
+ get(id) {
13
+ if (this.data[id] === undefined) {
14
+ try {
15
+ const value = storage.getString(id);
16
+ return value ? JSON.parse(value) : undefined;
17
+ }
18
+ catch (_a) {
19
+ console.log('failed to parse', id);
20
+ }
21
+ }
22
+ return this.data[id];
23
+ }
24
+ async set(id, value) {
25
+ this.data[id] = value;
26
+ this.save(id);
27
+ }
28
+ async delete(id) {
29
+ delete this.data[id];
30
+ storage.delete(id);
31
+ }
32
+ save(id) {
33
+ return this._save(id);
34
+ }
35
+ _save(id) {
36
+ const v = this.data[id];
37
+ if (v !== undefined) {
38
+ try {
39
+ storage.set(id, JSON.stringify(v));
40
+ }
41
+ catch (err) {
42
+ console.error(err);
43
+ debugger;
44
+ }
45
+ }
46
+ else {
47
+ storage.delete(id);
48
+ }
49
+ }
50
+ }
51
+ exports.ObservablePersistMMKV = ObservablePersistMMKV;
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/persist/react-native-mmkv/index.ts"],"names":[],"mappings":";;;AACA,yDAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,wBAAI,CAAC;IACrB,EAAE,EAAE,YAAY;CACnB,CAAC,CAAC;AAEH,MAAa,qBAAqB;IAAlC;QACI,SAAI,GAAwB,EAAE,CAAC;IAqCnC,CAAC;IAnCU,GAAG,CAAC,EAAU;QACjB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;YAC7B,IAAI;gBACA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aAChD;YAAC,WAAM;gBACJ,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;aACtC;SACJ;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACM,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,KAAU;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACM,KAAK,CAAC,MAAM,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACO,IAAI,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IACO,KAAK,CAAC,EAAU;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,IAAI;gBACA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,QAAQ,CAAC;aACZ;SACJ;aAAM;YACH,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACtB;IACL,CAAC;CACJ;AAtCD,sDAsCC"}
@@ -0,0 +1,8 @@
1
+ import type { ObservablePersistLocal } from '../../types/observableInterfaces';
2
+ export declare class ObservablePersistLocalStorage implements ObservablePersistLocal {
3
+ data: Record<string, any>;
4
+ get(id: string): any;
5
+ set(id: string, value: any): Promise<void>;
6
+ delete(id: string): Promise<void>;
7
+ private save;
8
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObservablePersistLocalStorage = void 0;
4
+ class ObservablePersistLocalStorage {
5
+ constructor() {
6
+ this.data = {};
7
+ }
8
+ get(id) {
9
+ if (typeof localStorage === 'undefined')
10
+ return undefined;
11
+ if (this.data[id] === undefined) {
12
+ try {
13
+ const value = localStorage.getItem(id);
14
+ return value ? JSON.parse(value) : undefined;
15
+ }
16
+ catch (_a) {
17
+ console.log('failed to parse', id);
18
+ }
19
+ }
20
+ return this.data[id];
21
+ }
22
+ async set(id, value) {
23
+ this.data[id] = value;
24
+ this.save(id);
25
+ }
26
+ async delete(id) {
27
+ delete this.data[id];
28
+ localStorage.removeItem(id);
29
+ }
30
+ save(id) {
31
+ if (typeof localStorage === 'undefined')
32
+ return;
33
+ const v = this.data[id];
34
+ localStorage.setItem(id, JSON.stringify(v));
35
+ }
36
+ }
37
+ exports.ObservablePersistLocalStorage = ObservablePersistLocalStorage;
38
+ //# sourceMappingURL=ObservablePersistLocalStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservablePersistLocalStorage.js","sourceRoot":"","sources":["../../../../src/persist/web/ObservablePersistLocalStorage.ts"],"names":[],"mappings":";;;AAEA,MAAa,6BAA6B;IAA1C;QACI,SAAI,GAAwB,EAAE,CAAC;IA4BnC,CAAC;IA1BU,GAAG,CAAC,EAAU;QACjB,IAAI,OAAO,YAAY,KAAK,WAAW;YAAE,OAAO,SAAS,CAAC;QAC1D,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;YAC7B,IAAI;gBACA,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACvC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aAChD;YAAC,WAAM;gBACJ,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;aACtC;SACJ;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACM,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,KAAU;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACM,KAAK,CAAC,MAAM,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IACO,IAAI,CAAC,EAAU;QACnB,IAAI,OAAO,YAAY,KAAK,WAAW;YAAE,OAAO;QAEhD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;CACJ;AA7BD,sEA6BC"}
@@ -0,0 +1 @@
1
+ export * from './ObservablePersistLocalStorage';