@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.
Files changed (42) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/index.js +0 -8
  3. package/index.js.map +1 -1
  4. package/index.mjs +1 -8
  5. package/index.mjs.map +1 -1
  6. package/internal.d.ts +1 -1
  7. package/internal.js +0 -4
  8. package/internal.js.map +1 -1
  9. package/internal.mjs +1 -1
  10. package/package.json +1 -1
  11. package/persist-plugins/indexeddb-preloader.js +29 -6
  12. package/persist-plugins/indexeddb-preloader.js.map +1 -1
  13. package/persist-plugins/indexeddb-preloader.mjs +29 -6
  14. package/persist-plugins/indexeddb-preloader.mjs.map +1 -1
  15. package/persist-plugins/indexeddb.d.ts +6 -2
  16. package/persist-plugins/indexeddb.js +110 -40
  17. package/persist-plugins/indexeddb.js.map +1 -1
  18. package/persist-plugins/indexeddb.mjs +111 -41
  19. package/persist-plugins/indexeddb.mjs.map +1 -1
  20. package/persist-plugins/local-storage.d.ts +3 -1
  21. package/persist-plugins/local-storage.js +6 -0
  22. package/persist-plugins/local-storage.js.map +1 -1
  23. package/persist-plugins/local-storage.mjs +6 -0
  24. package/persist-plugins/local-storage.mjs.map +1 -1
  25. package/persist-plugins/mmkv.d.ts +3 -1
  26. package/persist-plugins/mmkv.js +6 -0
  27. package/persist-plugins/mmkv.js.map +1 -1
  28. package/persist-plugins/mmkv.mjs +6 -0
  29. package/persist-plugins/mmkv.mjs.map +1 -1
  30. package/persist.d.ts +2 -2
  31. package/persist.js +24 -62
  32. package/persist.js.map +1 -1
  33. package/persist.mjs +25 -64
  34. package/persist.mjs.map +1 -1
  35. package/src/ObservablePrimitive.d.ts +7 -2
  36. package/src/globals.d.ts +0 -1
  37. package/src/observableInterfaces.d.ts +6 -3
  38. package/src/persist/persistObservable.d.ts +3 -0
  39. package/src/persist-plugins/indexeddb.d.ts +6 -2
  40. package/src/persist-plugins/local-storage.d.ts +3 -1
  41. package/src/persist-plugins/mmkv.d.ts +3 -1
  42. 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":"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"}
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
- set(table: string, tableValue: any, changes: Change[]): Promise<void>;
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
- this.tableData = preload.data || (await preload.dataPromise);
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
- const metadata = this.tableMetadata[table] || {};
75
- const pending = tableValue[state.PendingKey];
76
- const modified = tableValue[state.symbolDateModified] || tableValue[state.dateModifiedKey];
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
- const key = path[0];
81
- let value = tableValue[key];
82
- if (key === state.symbolDateModified) {
83
- metadata.modified = valueAtPath;
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
- if (value.id === undefined) {
87
- value = Object.assign({ id: key, __legend_id: true }, value);
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
- store.put(value);
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
- const obj = {};
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
- obj[val.id] = val;
127
- if (val.__legend_id) {
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":["symbolDateModified","PendingKey","dateModifiedKey"],"mappings":"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"}
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 { symbolDateModified, PendingKey, dateModifiedKey } from '@legendapp/state';
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
- this.tableData = preload.data || (await preload.dataPromise);
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
- const metadata = this.tableMetadata[table] || {};
73
- const pending = tableValue[PendingKey];
74
- const modified = tableValue[symbolDateModified] || tableValue[dateModifiedKey];
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
- const key = path[0];
79
- let value = tableValue[key];
80
- if (key === symbolDateModified) {
81
- metadata.modified = valueAtPath;
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
- if (value.id === undefined) {
85
- value = Object.assign({ id: key, __legend_id: true }, value);
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
- store.put(value);
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
- const obj = {};
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
- obj[val.id] = val;
125
- if (val.__legend_id) {
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":"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"}
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;KAqC/C;AAnCU,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;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,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
+ {"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;KAqC/C;AAnCU,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;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,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
+ {"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
  }