@legendapp/state 0.22.0-next.5 → 0.22.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.
- package/CHANGELOG.md +15 -0
- package/index.js +0 -8
- package/index.js.map +1 -1
- package/index.mjs +1 -8
- package/index.mjs.map +1 -1
- package/internal.d.ts +1 -1
- package/internal.js +0 -4
- package/internal.js.map +1 -1
- package/internal.mjs +1 -1
- package/package.json +1 -1
- package/persist-plugins/indexeddb-preloader.js +29 -6
- package/persist-plugins/indexeddb-preloader.js.map +1 -1
- package/persist-plugins/indexeddb-preloader.mjs +29 -6
- package/persist-plugins/indexeddb-preloader.mjs.map +1 -1
- package/persist-plugins/indexeddb.d.ts +6 -2
- package/persist-plugins/indexeddb.js +110 -40
- package/persist-plugins/indexeddb.js.map +1 -1
- package/persist-plugins/indexeddb.mjs +111 -41
- package/persist-plugins/indexeddb.mjs.map +1 -1
- package/persist-plugins/local-storage.d.ts +3 -1
- package/persist-plugins/local-storage.js +6 -0
- package/persist-plugins/local-storage.js.map +1 -1
- package/persist-plugins/local-storage.mjs +6 -0
- package/persist-plugins/local-storage.mjs.map +1 -1
- package/persist-plugins/mmkv.d.ts +3 -1
- package/persist-plugins/mmkv.js +6 -0
- package/persist-plugins/mmkv.js.map +1 -1
- package/persist-plugins/mmkv.mjs +6 -0
- package/persist-plugins/mmkv.mjs.map +1 -1
- package/persist.d.ts +2 -2
- package/persist.js +24 -62
- package/persist.js.map +1 -1
- package/persist.mjs +25 -64
- package/persist.mjs.map +1 -1
- package/src/ObservablePrimitive.d.ts +7 -2
- package/src/globals.d.ts +0 -1
- package/src/observableInterfaces.d.ts +6 -3
- package/src/persist/persistObservable.d.ts +3 -0
- package/src/persist-plugins/indexeddb.d.ts +6 -2
- package/src/persist-plugins/local-storage.d.ts +3 -1
- package/src/persist-plugins/mmkv.d.ts +3 -1
- package/src/react/flow.d.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb-preloader.mjs","sources":["../../../../src/persist-plugins/indexeddb-preloader.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"indexeddb-preloader.mjs","sources":["../../../../src/persist-plugins/indexeddb-preloader.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import type { Change, ObservablePersistenceConfig, ObservablePersistLocal } from '../observableInterfaces';
|
|
1
|
+
import type { Change, ObservablePersistenceConfig, ObservablePersistLocal, PersistMetadata } from '../observableInterfaces';
|
|
2
2
|
export declare class ObservablePersistIndexedDB implements ObservablePersistLocal {
|
|
3
3
|
private tableData;
|
|
4
4
|
private tableMetadata;
|
|
5
5
|
private db;
|
|
6
6
|
initialize(config: ObservablePersistenceConfig['persistLocalOptions']): Promise<void>;
|
|
7
7
|
getTable(table: string): any;
|
|
8
|
-
|
|
8
|
+
getMetadata(table: string): any;
|
|
9
|
+
updateMetadata(table: string, metadata: PersistMetadata): Promise<void>;
|
|
10
|
+
set(table: string, tableValue: Record<string, any>, changes: Change[]): Promise<void>;
|
|
9
11
|
deleteTable(table: string): Promise<void>;
|
|
10
12
|
private initTable;
|
|
11
13
|
private transactionStore;
|
|
14
|
+
private _setItem;
|
|
15
|
+
private _setTable;
|
|
12
16
|
}
|
|
@@ -21,6 +21,7 @@ class ObservablePersistIndexedDB {
|
|
|
21
21
|
openRequest.onupgradeneeded = () => {
|
|
22
22
|
const db = openRequest.result;
|
|
23
23
|
const { tableNames } = config.indexedDB;
|
|
24
|
+
// Create a table for each name with "id" as the key
|
|
24
25
|
tableNames.forEach((table) => {
|
|
25
26
|
db.createObjectStore(table, {
|
|
26
27
|
keyPath: 'id',
|
|
@@ -33,9 +34,12 @@ class ObservablePersistIndexedDB {
|
|
|
33
34
|
const preload = typeof window !== 'undefined' &&
|
|
34
35
|
window.__legend_state_preload;
|
|
35
36
|
if (preload) {
|
|
36
|
-
|
|
37
|
+
// Load from preload or wait for it to finish, if it exists
|
|
38
|
+
this.tableData = preload.tableData || (await preload.dataPromise);
|
|
39
|
+
this.tableMetadata = preload.tableMetadata;
|
|
37
40
|
}
|
|
38
41
|
else {
|
|
42
|
+
// Load each table
|
|
39
43
|
const tables = tableNames.filter((table) => this.db.objectStoreNames.contains(table));
|
|
40
44
|
try {
|
|
41
45
|
const transaction = this.db.transaction(tables, 'readonly');
|
|
@@ -45,21 +49,6 @@ class ObservablePersistIndexedDB {
|
|
|
45
49
|
console.error('[legend-state] Error loading IndexedDB', err);
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
|
-
if (this.tableData) {
|
|
49
|
-
Object.keys(this.tableData).forEach((key) => {
|
|
50
|
-
const metadata = this.tableData[key]['__legend_metadata'];
|
|
51
|
-
if (metadata) {
|
|
52
|
-
if (metadata.modified) {
|
|
53
|
-
this.tableData[key][state.symbolDateModified] = metadata.modified;
|
|
54
|
-
}
|
|
55
|
-
if (metadata.pending) {
|
|
56
|
-
this.tableData[key][state.PendingKey] = metadata.pending;
|
|
57
|
-
}
|
|
58
|
-
this.tableMetadata[key] = metadata;
|
|
59
|
-
delete this.tableData[key]['__legend_metadata'];
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
52
|
resolve();
|
|
64
53
|
};
|
|
65
54
|
});
|
|
@@ -67,43 +56,51 @@ class ObservablePersistIndexedDB {
|
|
|
67
56
|
getTable(table) {
|
|
68
57
|
return this.tableData[table];
|
|
69
58
|
}
|
|
59
|
+
getMetadata(table) {
|
|
60
|
+
return this.tableMetadata[table];
|
|
61
|
+
}
|
|
62
|
+
async updateMetadata(table, metadata) {
|
|
63
|
+
// Assign new metadata into the table, and make sure it has the id
|
|
64
|
+
metadata = Object.assign(this.tableMetadata[table] || {}, metadata, { id: '__legend_metadata' });
|
|
65
|
+
this.tableMetadata[table] = metadata;
|
|
66
|
+
const store = this.transactionStore(table);
|
|
67
|
+
const set = this._setItem('__legend_metadata', metadata, store);
|
|
68
|
+
return new Promise((resolve) => (set.onsuccess = () => resolve()));
|
|
69
|
+
}
|
|
70
70
|
async set(table, tableValue, changes) {
|
|
71
|
+
const prev = this.tableData[table];
|
|
71
72
|
this.tableData[table] = tableValue;
|
|
72
73
|
if (typeof indexedDB === 'undefined')
|
|
73
74
|
return;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
if (process.env.NODE_ENV === 'development' && (!state.isObject(tableValue) || !state.isArray(tableValue))) {
|
|
76
|
+
console.warn('[legend-state] IndexedDB persistence can only save objects or arrays');
|
|
77
|
+
}
|
|
77
78
|
const store = this.transactionStore(table);
|
|
79
|
+
let lastPut;
|
|
78
80
|
for (let i = 0; i < changes.length; i++) {
|
|
79
81
|
const { path, valueAtPath } = changes[i];
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
if (path.length > 0) {
|
|
83
|
+
// If change is deep in an object save it to IDB by the first key
|
|
84
|
+
const key = path[0];
|
|
85
|
+
lastPut = this._setItem(key, valueAtPath, store);
|
|
84
86
|
}
|
|
85
87
|
else {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
// If change is the full object
|
|
89
|
+
if (state.isArray(valueAtPath)) {
|
|
90
|
+
// If it's an array set that in the metadata so it loads as an array
|
|
91
|
+
this.updateMetadata(table, { array: true });
|
|
88
92
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
if (pending || modified) {
|
|
93
|
-
metadata.id = '__legend_metadata';
|
|
94
|
-
if (pending) {
|
|
95
|
-
metadata.pending = pending;
|
|
96
|
-
}
|
|
97
|
-
if (modified) {
|
|
98
|
-
metadata.modified = modified;
|
|
93
|
+
// Set the whole table
|
|
94
|
+
lastPut = this._setTable(prev, valueAtPath, store);
|
|
99
95
|
}
|
|
100
|
-
store.put(metadata);
|
|
101
96
|
}
|
|
97
|
+
return new Promise((resolve) => (lastPut.onsuccess = () => resolve()));
|
|
102
98
|
}
|
|
103
99
|
async deleteTable(table) {
|
|
104
100
|
delete this.tableData[table];
|
|
105
101
|
if (typeof indexedDB === 'undefined')
|
|
106
102
|
return;
|
|
103
|
+
// Clear the table from IDB
|
|
107
104
|
const store = this.transactionStore(table);
|
|
108
105
|
const clear = store.clear();
|
|
109
106
|
return new Promise((resolve) => {
|
|
@@ -120,16 +117,41 @@ class ObservablePersistIndexedDB {
|
|
|
120
117
|
return new Promise((resolve) => {
|
|
121
118
|
allRequest.onsuccess = () => {
|
|
122
119
|
const arr = allRequest.result;
|
|
123
|
-
|
|
120
|
+
let obj = {};
|
|
121
|
+
let metadata;
|
|
122
|
+
let isArray = false;
|
|
124
123
|
for (let i = 0; i < arr.length; i++) {
|
|
125
124
|
const val = arr[i];
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
delete val.__legend_id;
|
|
125
|
+
if (val.id === '__legend_metadata') {
|
|
126
|
+
// Save this as metadata
|
|
129
127
|
delete val.id;
|
|
128
|
+
metadata = val;
|
|
129
|
+
if (metadata.array) {
|
|
130
|
+
// Load the data as an array instead of an object
|
|
131
|
+
obj = state.isEmpty(obj) ? [] : Object.keys(obj).map((key) => obj[key]);
|
|
132
|
+
isArray = true;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else if (val.id === '__legend_obj') {
|
|
136
|
+
// Data is a basic object so load the value
|
|
137
|
+
obj = val.value;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
if (isArray) {
|
|
141
|
+
obj.push(val);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
obj[val.id] = val;
|
|
145
|
+
}
|
|
146
|
+
// If it had __legend_id the source object should not have an id key
|
|
147
|
+
if (val.__legend_id) {
|
|
148
|
+
delete val.__legend_id;
|
|
149
|
+
delete val.id;
|
|
150
|
+
}
|
|
130
151
|
}
|
|
131
152
|
}
|
|
132
153
|
this.tableData[table] = obj;
|
|
154
|
+
this.tableMetadata[table] = obj;
|
|
133
155
|
resolve();
|
|
134
156
|
};
|
|
135
157
|
});
|
|
@@ -138,6 +160,54 @@ class ObservablePersistIndexedDB {
|
|
|
138
160
|
const transaction = this.db.transaction(table, 'readwrite');
|
|
139
161
|
return transaction.objectStore(table);
|
|
140
162
|
}
|
|
163
|
+
_setItem(key, value, store) {
|
|
164
|
+
if (!value) {
|
|
165
|
+
return store.delete(key);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
if (value.id === undefined) {
|
|
169
|
+
// If value does not have its own ID, assign it the key from the Record
|
|
170
|
+
// with __legend_id meaning it should get removed on load
|
|
171
|
+
value = Object.assign({ id: key, __legend_id: true }, value);
|
|
172
|
+
}
|
|
173
|
+
return store.put(value);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
_setTable(prev, value, store) {
|
|
177
|
+
const keys = Object.keys(value);
|
|
178
|
+
let isBasic = false;
|
|
179
|
+
// If any direct child is not an object then this has to be saved as a basic object
|
|
180
|
+
for (let i = 0; i < keys.length; i++) {
|
|
181
|
+
if (!state.isObject(value[keys[i]])) {
|
|
182
|
+
isBasic = true;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
let lastSet;
|
|
187
|
+
if (isBasic) {
|
|
188
|
+
// Save basic object
|
|
189
|
+
lastSet = store.put({ id: '__legend_obj', value });
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
// Do a set for each key in the object
|
|
193
|
+
for (let i = 0; i < keys.length; i++) {
|
|
194
|
+
const key = keys[i];
|
|
195
|
+
const val = value[key];
|
|
196
|
+
lastSet = this._setItem(key, val, store);
|
|
197
|
+
}
|
|
198
|
+
// Delete keys that are no longer in the object
|
|
199
|
+
if (prev) {
|
|
200
|
+
const keysOld = Object.keys(prev);
|
|
201
|
+
for (let i = 0; i < keysOld.length; i++) {
|
|
202
|
+
const key = keysOld[i];
|
|
203
|
+
if (value[key] === undefined) {
|
|
204
|
+
lastSet = this._setItem(key, null, store);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return lastSet;
|
|
210
|
+
}
|
|
141
211
|
}
|
|
142
212
|
|
|
143
213
|
exports.ObservablePersistIndexedDB = ObservablePersistIndexedDB;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb.js","sources":["../../../../src/persist-plugins/indexeddb.ts"],"sourcesContent":[null],"names":["
|
|
1
|
+
{"version":3,"file":"indexeddb.js","sources":["../../../../src/persist-plugins/indexeddb.ts"],"sourcesContent":[null],"names":["isObject","isArray","isEmpty"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isObject, isArray, isEmpty } from '@legendapp/state';
|
|
2
2
|
|
|
3
3
|
class ObservablePersistIndexedDB {
|
|
4
4
|
constructor() {
|
|
@@ -19,6 +19,7 @@ class ObservablePersistIndexedDB {
|
|
|
19
19
|
openRequest.onupgradeneeded = () => {
|
|
20
20
|
const db = openRequest.result;
|
|
21
21
|
const { tableNames } = config.indexedDB;
|
|
22
|
+
// Create a table for each name with "id" as the key
|
|
22
23
|
tableNames.forEach((table) => {
|
|
23
24
|
db.createObjectStore(table, {
|
|
24
25
|
keyPath: 'id',
|
|
@@ -31,9 +32,12 @@ class ObservablePersistIndexedDB {
|
|
|
31
32
|
const preload = typeof window !== 'undefined' &&
|
|
32
33
|
window.__legend_state_preload;
|
|
33
34
|
if (preload) {
|
|
34
|
-
|
|
35
|
+
// Load from preload or wait for it to finish, if it exists
|
|
36
|
+
this.tableData = preload.tableData || (await preload.dataPromise);
|
|
37
|
+
this.tableMetadata = preload.tableMetadata;
|
|
35
38
|
}
|
|
36
39
|
else {
|
|
40
|
+
// Load each table
|
|
37
41
|
const tables = tableNames.filter((table) => this.db.objectStoreNames.contains(table));
|
|
38
42
|
try {
|
|
39
43
|
const transaction = this.db.transaction(tables, 'readonly');
|
|
@@ -43,21 +47,6 @@ class ObservablePersistIndexedDB {
|
|
|
43
47
|
console.error('[legend-state] Error loading IndexedDB', err);
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
|
-
if (this.tableData) {
|
|
47
|
-
Object.keys(this.tableData).forEach((key) => {
|
|
48
|
-
const metadata = this.tableData[key]['__legend_metadata'];
|
|
49
|
-
if (metadata) {
|
|
50
|
-
if (metadata.modified) {
|
|
51
|
-
this.tableData[key][symbolDateModified] = metadata.modified;
|
|
52
|
-
}
|
|
53
|
-
if (metadata.pending) {
|
|
54
|
-
this.tableData[key][PendingKey] = metadata.pending;
|
|
55
|
-
}
|
|
56
|
-
this.tableMetadata[key] = metadata;
|
|
57
|
-
delete this.tableData[key]['__legend_metadata'];
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
50
|
resolve();
|
|
62
51
|
};
|
|
63
52
|
});
|
|
@@ -65,43 +54,51 @@ class ObservablePersistIndexedDB {
|
|
|
65
54
|
getTable(table) {
|
|
66
55
|
return this.tableData[table];
|
|
67
56
|
}
|
|
57
|
+
getMetadata(table) {
|
|
58
|
+
return this.tableMetadata[table];
|
|
59
|
+
}
|
|
60
|
+
async updateMetadata(table, metadata) {
|
|
61
|
+
// Assign new metadata into the table, and make sure it has the id
|
|
62
|
+
metadata = Object.assign(this.tableMetadata[table] || {}, metadata, { id: '__legend_metadata' });
|
|
63
|
+
this.tableMetadata[table] = metadata;
|
|
64
|
+
const store = this.transactionStore(table);
|
|
65
|
+
const set = this._setItem('__legend_metadata', metadata, store);
|
|
66
|
+
return new Promise((resolve) => (set.onsuccess = () => resolve()));
|
|
67
|
+
}
|
|
68
68
|
async set(table, tableValue, changes) {
|
|
69
|
+
const prev = this.tableData[table];
|
|
69
70
|
this.tableData[table] = tableValue;
|
|
70
71
|
if (typeof indexedDB === 'undefined')
|
|
71
72
|
return;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
if (process.env.NODE_ENV === 'development' && (!isObject(tableValue) || !isArray(tableValue))) {
|
|
74
|
+
console.warn('[legend-state] IndexedDB persistence can only save objects or arrays');
|
|
75
|
+
}
|
|
75
76
|
const store = this.transactionStore(table);
|
|
77
|
+
let lastPut;
|
|
76
78
|
for (let i = 0; i < changes.length; i++) {
|
|
77
79
|
const { path, valueAtPath } = changes[i];
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
if (path.length > 0) {
|
|
81
|
+
// If change is deep in an object save it to IDB by the first key
|
|
82
|
+
const key = path[0];
|
|
83
|
+
lastPut = this._setItem(key, valueAtPath, store);
|
|
82
84
|
}
|
|
83
85
|
else {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
// If change is the full object
|
|
87
|
+
if (isArray(valueAtPath)) {
|
|
88
|
+
// If it's an array set that in the metadata so it loads as an array
|
|
89
|
+
this.updateMetadata(table, { array: true });
|
|
86
90
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
if (pending || modified) {
|
|
91
|
-
metadata.id = '__legend_metadata';
|
|
92
|
-
if (pending) {
|
|
93
|
-
metadata.pending = pending;
|
|
94
|
-
}
|
|
95
|
-
if (modified) {
|
|
96
|
-
metadata.modified = modified;
|
|
91
|
+
// Set the whole table
|
|
92
|
+
lastPut = this._setTable(prev, valueAtPath, store);
|
|
97
93
|
}
|
|
98
|
-
store.put(metadata);
|
|
99
94
|
}
|
|
95
|
+
return new Promise((resolve) => (lastPut.onsuccess = () => resolve()));
|
|
100
96
|
}
|
|
101
97
|
async deleteTable(table) {
|
|
102
98
|
delete this.tableData[table];
|
|
103
99
|
if (typeof indexedDB === 'undefined')
|
|
104
100
|
return;
|
|
101
|
+
// Clear the table from IDB
|
|
105
102
|
const store = this.transactionStore(table);
|
|
106
103
|
const clear = store.clear();
|
|
107
104
|
return new Promise((resolve) => {
|
|
@@ -118,16 +115,41 @@ class ObservablePersistIndexedDB {
|
|
|
118
115
|
return new Promise((resolve) => {
|
|
119
116
|
allRequest.onsuccess = () => {
|
|
120
117
|
const arr = allRequest.result;
|
|
121
|
-
|
|
118
|
+
let obj = {};
|
|
119
|
+
let metadata;
|
|
120
|
+
let isArray = false;
|
|
122
121
|
for (let i = 0; i < arr.length; i++) {
|
|
123
122
|
const val = arr[i];
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
delete val.__legend_id;
|
|
123
|
+
if (val.id === '__legend_metadata') {
|
|
124
|
+
// Save this as metadata
|
|
127
125
|
delete val.id;
|
|
126
|
+
metadata = val;
|
|
127
|
+
if (metadata.array) {
|
|
128
|
+
// Load the data as an array instead of an object
|
|
129
|
+
obj = isEmpty(obj) ? [] : Object.keys(obj).map((key) => obj[key]);
|
|
130
|
+
isArray = true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else if (val.id === '__legend_obj') {
|
|
134
|
+
// Data is a basic object so load the value
|
|
135
|
+
obj = val.value;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
if (isArray) {
|
|
139
|
+
obj.push(val);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
obj[val.id] = val;
|
|
143
|
+
}
|
|
144
|
+
// If it had __legend_id the source object should not have an id key
|
|
145
|
+
if (val.__legend_id) {
|
|
146
|
+
delete val.__legend_id;
|
|
147
|
+
delete val.id;
|
|
148
|
+
}
|
|
128
149
|
}
|
|
129
150
|
}
|
|
130
151
|
this.tableData[table] = obj;
|
|
152
|
+
this.tableMetadata[table] = obj;
|
|
131
153
|
resolve();
|
|
132
154
|
};
|
|
133
155
|
});
|
|
@@ -136,6 +158,54 @@ class ObservablePersistIndexedDB {
|
|
|
136
158
|
const transaction = this.db.transaction(table, 'readwrite');
|
|
137
159
|
return transaction.objectStore(table);
|
|
138
160
|
}
|
|
161
|
+
_setItem(key, value, store) {
|
|
162
|
+
if (!value) {
|
|
163
|
+
return store.delete(key);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
if (value.id === undefined) {
|
|
167
|
+
// If value does not have its own ID, assign it the key from the Record
|
|
168
|
+
// with __legend_id meaning it should get removed on load
|
|
169
|
+
value = Object.assign({ id: key, __legend_id: true }, value);
|
|
170
|
+
}
|
|
171
|
+
return store.put(value);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
_setTable(prev, value, store) {
|
|
175
|
+
const keys = Object.keys(value);
|
|
176
|
+
let isBasic = false;
|
|
177
|
+
// If any direct child is not an object then this has to be saved as a basic object
|
|
178
|
+
for (let i = 0; i < keys.length; i++) {
|
|
179
|
+
if (!isObject(value[keys[i]])) {
|
|
180
|
+
isBasic = true;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
let lastSet;
|
|
185
|
+
if (isBasic) {
|
|
186
|
+
// Save basic object
|
|
187
|
+
lastSet = store.put({ id: '__legend_obj', value });
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// Do a set for each key in the object
|
|
191
|
+
for (let i = 0; i < keys.length; i++) {
|
|
192
|
+
const key = keys[i];
|
|
193
|
+
const val = value[key];
|
|
194
|
+
lastSet = this._setItem(key, val, store);
|
|
195
|
+
}
|
|
196
|
+
// Delete keys that are no longer in the object
|
|
197
|
+
if (prev) {
|
|
198
|
+
const keysOld = Object.keys(prev);
|
|
199
|
+
for (let i = 0; i < keysOld.length; i++) {
|
|
200
|
+
const key = keysOld[i];
|
|
201
|
+
if (value[key] === undefined) {
|
|
202
|
+
lastSet = this._setItem(key, null, store);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return lastSet;
|
|
208
|
+
}
|
|
139
209
|
}
|
|
140
210
|
|
|
141
211
|
export { ObservablePersistIndexedDB };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb.mjs","sources":["../../../../src/persist-plugins/indexeddb.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAQa,0BAA0B,CAAA;AAAvC,IAAA,WAAA,GAAA;QACY,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;QACpC,IAAa,CAAA,aAAA,GAAwB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"indexeddb.mjs","sources":["../../../../src/persist-plugins/indexeddb.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { ObservablePersistLocal } from '../observableInterfaces';
|
|
1
|
+
import type { ObservablePersistLocal, PersistMetadata } from '../observableInterfaces';
|
|
2
2
|
export declare class ObservablePersistLocalStorage implements ObservablePersistLocal {
|
|
3
3
|
private tableData;
|
|
4
4
|
getTable(table: string): any;
|
|
5
|
+
getMetadata(table: string): PersistMetadata;
|
|
5
6
|
get(table: string, id: string): any;
|
|
6
7
|
set(table: string, value: any): Promise<void>;
|
|
8
|
+
updateMetadata(table: string, metadata: PersistMetadata): Promise<void>;
|
|
7
9
|
deleteTable(table: string): Promise<void>;
|
|
8
10
|
private save;
|
|
9
11
|
}
|
|
@@ -18,6 +18,9 @@ class ObservablePersistLocalStorage {
|
|
|
18
18
|
}
|
|
19
19
|
return this.tableData[table];
|
|
20
20
|
}
|
|
21
|
+
getMetadata(table) {
|
|
22
|
+
return this.getTable(table + '__m');
|
|
23
|
+
}
|
|
21
24
|
get(table, id) {
|
|
22
25
|
const tableData = this.getTable(table);
|
|
23
26
|
return tableData === null || tableData === void 0 ? void 0 : tableData[id];
|
|
@@ -26,6 +29,9 @@ class ObservablePersistLocalStorage {
|
|
|
26
29
|
this.tableData[table] = value;
|
|
27
30
|
this.save(table);
|
|
28
31
|
}
|
|
32
|
+
updateMetadata(table, metadata) {
|
|
33
|
+
return this.set(table + '__m', metadata);
|
|
34
|
+
}
|
|
29
35
|
async deleteTable(table) {
|
|
30
36
|
delete this.tableData[table];
|
|
31
37
|
localStorage.removeItem(table);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage.js","sources":["../../../../src/persist-plugins/local-storage.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAEa,6BAA6B,CAAA;AAA1C,IAAA,WAAA,GAAA;QACY,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"local-storage.js","sources":["../../../../src/persist-plugins/local-storage.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAEa,6BAA6B,CAAA;AAA1C,IAAA,WAAA,GAAA;QACY,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;KA2C/C;AAzCU,IAAA,QAAQ,CAAC,KAAa,EAAA;QACzB,IAAI,OAAO,YAAY,KAAK,WAAW;AAAE,YAAA,OAAO,SAAS,CAAC;QAC1D,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;YACrC,IAAI;gBACA,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,gBAAA,OAAO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;AAChD,aAAA;YAAC,OAAM,EAAA,EAAA;AACJ,gBAAA,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAE,KAAK,CAAC,CAAC;AACxF,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAChC;AACM,IAAA,WAAW,CAAC,KAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;KACvC;IACM,GAAG,CAAC,KAAa,EAAE,EAAU,EAAA;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAG,EAAE,CAAC,CAAC;KAC1B;AACM,IAAA,MAAM,GAAG,CAAC,KAAa,EAAE,KAAU,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpB;IACM,cAAc,CAAC,KAAa,EAAE,QAAyB,EAAA;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;KAC5C;IACM,MAAM,WAAW,CAAC,KAAa,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAClC;AACO,IAAA,IAAI,CAAC,KAAa,EAAA;QACtB,IAAI,OAAO,YAAY,KAAK,WAAW;YAAE,OAAO;QAEhD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;AAC/B,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,SAAA;AAAM,aAAA;AACH,YAAA,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,SAAA;KACJ;AACJ;;;;"}
|
|
@@ -16,6 +16,9 @@ class ObservablePersistLocalStorage {
|
|
|
16
16
|
}
|
|
17
17
|
return this.tableData[table];
|
|
18
18
|
}
|
|
19
|
+
getMetadata(table) {
|
|
20
|
+
return this.getTable(table + '__m');
|
|
21
|
+
}
|
|
19
22
|
get(table, id) {
|
|
20
23
|
const tableData = this.getTable(table);
|
|
21
24
|
return tableData === null || tableData === void 0 ? void 0 : tableData[id];
|
|
@@ -24,6 +27,9 @@ class ObservablePersistLocalStorage {
|
|
|
24
27
|
this.tableData[table] = value;
|
|
25
28
|
this.save(table);
|
|
26
29
|
}
|
|
30
|
+
updateMetadata(table, metadata) {
|
|
31
|
+
return this.set(table + '__m', metadata);
|
|
32
|
+
}
|
|
27
33
|
async deleteTable(table) {
|
|
28
34
|
delete this.tableData[table];
|
|
29
35
|
localStorage.removeItem(table);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage.mjs","sources":["../../../../src/persist-plugins/local-storage.ts"],"sourcesContent":[null],"names":[],"mappings":"MAEa,6BAA6B,CAAA;AAA1C,IAAA,WAAA,GAAA;QACY,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"local-storage.mjs","sources":["../../../../src/persist-plugins/local-storage.ts"],"sourcesContent":[null],"names":[],"mappings":"MAEa,6BAA6B,CAAA;AAA1C,IAAA,WAAA,GAAA;QACY,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;KA2C/C;AAzCU,IAAA,QAAQ,CAAC,KAAa,EAAA;QACzB,IAAI,OAAO,YAAY,KAAK,WAAW;AAAE,YAAA,OAAO,SAAS,CAAC;QAC1D,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;YACrC,IAAI;gBACA,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,gBAAA,OAAO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;AAChD,aAAA;YAAC,OAAM,EAAA,EAAA;AACJ,gBAAA,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAE,KAAK,CAAC,CAAC;AACxF,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAChC;AACM,IAAA,WAAW,CAAC,KAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;KACvC;IACM,GAAG,CAAC,KAAa,EAAE,EAAU,EAAA;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAG,EAAE,CAAC,CAAC;KAC1B;AACM,IAAA,MAAM,GAAG,CAAC,KAAa,EAAE,KAAU,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpB;IACM,cAAc,CAAC,KAAa,EAAE,QAAyB,EAAA;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;KAC5C;IACM,MAAM,WAAW,CAAC,KAAa,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAClC;AACO,IAAA,IAAI,CAAC,KAAa,EAAA;QACtB,IAAI,OAAO,YAAY,KAAK,WAAW;YAAE,OAAO;QAEhD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;AAC/B,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,SAAA;AAAM,aAAA;AACH,YAAA,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,SAAA;KACJ;AACJ;;;;"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { Change, ObservablePersistLocal, PersistOptionsLocal } from '../observableInterfaces';
|
|
1
|
+
import type { Change, ObservablePersistLocal, PersistMetadata, PersistOptionsLocal } from '../observableInterfaces';
|
|
2
2
|
export declare class ObservablePersistMMKV implements ObservablePersistLocal {
|
|
3
3
|
private data;
|
|
4
4
|
private storages;
|
|
5
5
|
private getStorage;
|
|
6
6
|
getTable<T = any>(table: string, config: PersistOptionsLocal): T;
|
|
7
|
+
getMetadata(table: string, config: PersistOptionsLocal): PersistMetadata;
|
|
7
8
|
set(table: string, value: any, changes: Change[], config: PersistOptionsLocal): Promise<void>;
|
|
9
|
+
updateMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<void>;
|
|
8
10
|
deleteTable(table: string, config: PersistOptionsLocal): Promise<void>;
|
|
9
11
|
private save;
|
|
10
12
|
}
|