@legendapp/state 3.0.0-alpha.1 → 3.0.0-alpha.3

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 (327) hide show
  1. package/.DS_Store +0 -0
  2. package/CHANGELOG.md +1 -831
  3. package/LICENSE +1 -21
  4. package/README.md +1 -141
  5. package/as/arrayAsRecord.d.mts +5 -0
  6. package/as/arrayAsRecord.d.ts +5 -0
  7. package/as/arrayAsRecord.js +28 -0
  8. package/as/arrayAsRecord.mjs +26 -0
  9. package/as/arrayAsSet.d.mts +5 -0
  10. package/as/arrayAsSet.d.ts +5 -0
  11. package/as/arrayAsSet.js +13 -0
  12. package/as/arrayAsSet.mjs +11 -0
  13. package/as/arrayAsString.d.mts +5 -0
  14. package/as/arrayAsString.d.ts +5 -0
  15. package/as/arrayAsString.js +13 -0
  16. package/as/arrayAsString.mjs +11 -0
  17. package/as/numberAsString.d.mts +5 -0
  18. package/as/numberAsString.d.ts +5 -0
  19. package/as/numberAsString.js +13 -0
  20. package/as/numberAsString.mjs +11 -0
  21. package/as/recordAsArray.d.mts +5 -0
  22. package/as/recordAsArray.d.ts +5 -0
  23. package/as/recordAsArray.js +25 -0
  24. package/as/recordAsArray.mjs +23 -0
  25. package/as/recordAsString.d.mts +5 -0
  26. package/as/recordAsString.d.ts +5 -0
  27. package/as/recordAsString.js +13 -0
  28. package/as/recordAsString.mjs +11 -0
  29. package/as/setAsArray.d.mts +5 -0
  30. package/as/setAsArray.d.ts +5 -0
  31. package/as/setAsArray.js +13 -0
  32. package/as/setAsArray.mjs +11 -0
  33. package/as/setAsString.d.mts +5 -0
  34. package/as/setAsString.d.ts +5 -0
  35. package/as/setAsString.js +13 -0
  36. package/as/setAsString.mjs +11 -0
  37. package/as/stringAsArray.d.mts +5 -0
  38. package/as/stringAsArray.d.ts +5 -0
  39. package/as/stringAsArray.js +13 -0
  40. package/as/stringAsArray.mjs +11 -0
  41. package/as/stringAsNumber.d.mts +5 -0
  42. package/as/stringAsNumber.d.ts +5 -0
  43. package/as/stringAsNumber.js +16 -0
  44. package/as/stringAsNumber.mjs +14 -0
  45. package/as/stringAsRecord.d.mts +5 -0
  46. package/as/stringAsRecord.d.ts +5 -0
  47. package/as/stringAsRecord.js +15 -0
  48. package/as/stringAsRecord.mjs +13 -0
  49. package/as/stringAsSet.d.mts +5 -0
  50. package/as/stringAsSet.d.ts +5 -0
  51. package/as/stringAsSet.js +13 -0
  52. package/as/stringAsSet.mjs +11 -0
  53. package/babel.d.mts +21 -0
  54. package/babel.d.ts +21 -2
  55. package/babel.js +57 -53
  56. package/babel.mjs +65 -0
  57. package/config/enable$GetSet.js +13 -14
  58. package/config/enable$GetSet.mjs +13 -14
  59. package/config/enableReactComponents.d.mts +9 -0
  60. package/config/enableReactComponents.d.ts +4 -2
  61. package/config/enableReactComponents.js +13 -10
  62. package/config/enableReactComponents.mjs +13 -10
  63. package/config/enableReactNativeComponents.d.mts +22 -0
  64. package/config/enableReactNativeComponents.d.ts +6 -4
  65. package/config/enableReactNativeComponents.js +43 -47
  66. package/config/enableReactNativeComponents.mjs +43 -47
  67. package/config/enableReactTracking.d.mts +7 -0
  68. package/config/enableReactTracking.d.ts +3 -2
  69. package/config/enableReactTracking.js +33 -38
  70. package/config/enableReactTracking.mjs +33 -38
  71. package/config/enableReactUse.d.mts +10 -0
  72. package/config/enableReactUse.d.ts +4 -1
  73. package/config/enableReactUse.js +15 -14
  74. package/config/enableReactUse.mjs +15 -14
  75. package/config/{enable$GetSet.d.ts → enable_GetSet.d.mts} +4 -2
  76. package/config/enable_GetSet.d.ts +10 -0
  77. package/config/enable_PeekAssign.d.mts +10 -0
  78. package/config/enable_PeekAssign.d.ts +4 -2
  79. package/config/enable_PeekAssign.js +13 -14
  80. package/config/enable_PeekAssign.mjs +13 -14
  81. package/helpers/pageHash.d.mts +9 -0
  82. package/helpers/pageHash.d.ts +2 -0
  83. package/helpers/pageHash.js +25 -30
  84. package/helpers/pageHash.mjs +25 -30
  85. package/helpers/pageHashParams.d.mts +9 -0
  86. package/helpers/pageHashParams.d.ts +2 -0
  87. package/helpers/pageHashParams.js +34 -37
  88. package/helpers/pageHashParams.mjs +34 -37
  89. package/helpers/time.d.mts +6 -0
  90. package/helpers/time.d.ts +6 -3
  91. package/helpers/time.js +17 -17
  92. package/helpers/time.mjs +17 -17
  93. package/helpers/trackHistory.d.mts +6 -0
  94. package/helpers/trackHistory.d.ts +4 -2
  95. package/helpers/trackHistory.js +13 -16
  96. package/helpers/trackHistory.mjs +13 -16
  97. package/helpers/undoRedo.d.mts +37 -0
  98. package/helpers/undoRedo.d.ts +5 -3
  99. package/helpers/undoRedo.js +59 -94
  100. package/helpers/undoRedo.mjs +59 -94
  101. package/index.d.mts +404 -0
  102. package/index.d.ts +371 -28
  103. package/index.js +2015 -2166
  104. package/index.mjs +2015 -2166
  105. package/package.json +254 -195
  106. package/persist-plugins/async-storage.d.mts +18 -0
  107. package/persist-plugins/async-storage.d.ts +6 -3
  108. package/persist-plugins/async-storage.js +79 -86
  109. package/persist-plugins/async-storage.mjs +79 -86
  110. package/persist-plugins/indexeddb.d.mts +29 -0
  111. package/persist-plugins/indexeddb.d.ts +6 -3
  112. package/persist-plugins/indexeddb.js +331 -352
  113. package/persist-plugins/indexeddb.mjs +331 -352
  114. package/persist-plugins/local-storage.d.mts +23 -0
  115. package/persist-plugins/local-storage.d.ts +8 -5
  116. package/persist-plugins/local-storage.js +74 -76
  117. package/persist-plugins/local-storage.mjs +74 -76
  118. package/persist-plugins/mmkv.d.mts +18 -0
  119. package/persist-plugins/mmkv.d.ts +6 -3
  120. package/persist-plugins/mmkv.js +82 -86
  121. package/persist-plugins/mmkv.mjs +82 -86
  122. package/react-hooks/createObservableHook.d.mts +5 -0
  123. package/react-hooks/createObservableHook.d.ts +4 -1
  124. package/react-hooks/createObservableHook.js +29 -30
  125. package/react-hooks/createObservableHook.mjs +25 -30
  126. package/react-hooks/useHover.d.mts +5 -0
  127. package/react-hooks/useHover.d.ts +5 -3
  128. package/react-hooks/useHover.js +29 -29
  129. package/react-hooks/useHover.mjs +29 -29
  130. package/react-hooks/useMeasure.d.mts +9 -0
  131. package/react-hooks/useMeasure.d.ts +5 -2
  132. package/react-hooks/useMeasure.js +30 -32
  133. package/react-hooks/useMeasure.mjs +30 -32
  134. package/react-hooks/useObservableNextRouter.d.mts +35 -0
  135. package/react-hooks/useObservableNextRouter.d.ts +9 -7
  136. package/react-hooks/useObservableNextRouter.js +64 -77
  137. package/react-hooks/useObservableNextRouter.mjs +60 -77
  138. package/react.d.mts +157 -0
  139. package/react.d.ts +157 -21
  140. package/react.js +458 -749
  141. package/react.mjs +457 -752
  142. package/sync-plugins/crud.d.mts +54 -0
  143. package/sync-plugins/crud.d.ts +12 -10
  144. package/sync-plugins/crud.js +253 -270
  145. package/sync-plugins/crud.mjs +253 -270
  146. package/sync-plugins/fetch.d.mts +21 -0
  147. package/sync-plugins/fetch.d.ts +7 -4
  148. package/sync-plugins/fetch.js +50 -37
  149. package/sync-plugins/fetch.mjs +50 -37
  150. package/sync-plugins/keel.d.mts +108 -0
  151. package/sync-plugins/keel.d.ts +17 -15
  152. package/sync-plugins/keel.js +229 -462
  153. package/sync-plugins/keel.mjs +227 -464
  154. package/sync-plugins/supabase.d.mts +39 -0
  155. package/sync-plugins/supabase.d.ts +16 -14
  156. package/sync-plugins/supabase.js +128 -128
  157. package/sync-plugins/supabase.mjs +128 -128
  158. package/sync-plugins/tanstack-query.d.mts +14 -0
  159. package/sync-plugins/tanstack-query.d.ts +7 -4
  160. package/sync-plugins/tanstack-query.js +51 -57
  161. package/sync-plugins/tanstack-query.mjs +51 -57
  162. package/sync-plugins/tanstack-react-query.d.mts +8 -0
  163. package/sync-plugins/tanstack-react-query.d.ts +6 -1
  164. package/sync-plugins/tanstack-react-query.js +2 -2
  165. package/sync-plugins/tanstack-react-query.mjs +2 -2
  166. package/sync.d.mts +351 -0
  167. package/sync.d.ts +349 -9
  168. package/sync.js +910 -964
  169. package/sync.mjs +920 -974
  170. package/trace.d.mts +9 -0
  171. package/trace.d.ts +9 -4
  172. package/trace.js +72 -62
  173. package/trace.mjs +72 -62
  174. package/types/babel.d.ts +1 -12
  175. package/babel.js.map +0 -1
  176. package/config/enable$GetSet.js.map +0 -1
  177. package/config/enable$GetSet.mjs.map +0 -1
  178. package/config/enableReactComponents.js.map +0 -1
  179. package/config/enableReactComponents.mjs.map +0 -1
  180. package/config/enableReactNativeComponents.js.map +0 -1
  181. package/config/enableReactNativeComponents.mjs.map +0 -1
  182. package/config/enableReactTracking.js.map +0 -1
  183. package/config/enableReactTracking.mjs.map +0 -1
  184. package/config/enableReactUse.js.map +0 -1
  185. package/config/enableReactUse.mjs.map +0 -1
  186. package/config/enable_PeekAssign.js.map +0 -1
  187. package/config/enable_PeekAssign.mjs.map +0 -1
  188. package/helpers/pageHash.js.map +0 -1
  189. package/helpers/pageHash.mjs.map +0 -1
  190. package/helpers/pageHashParams.js.map +0 -1
  191. package/helpers/pageHashParams.mjs.map +0 -1
  192. package/helpers/time.js.map +0 -1
  193. package/helpers/time.mjs.map +0 -1
  194. package/helpers/trackHistory.js.map +0 -1
  195. package/helpers/trackHistory.mjs.map +0 -1
  196. package/helpers/undoRedo.js.map +0 -1
  197. package/helpers/undoRedo.mjs.map +0 -1
  198. package/history.d.ts +0 -1
  199. package/history.js +0 -24
  200. package/history.js.map +0 -1
  201. package/history.mjs +0 -22
  202. package/history.mjs.map +0 -1
  203. package/index.js.map +0 -1
  204. package/index.mjs.map +0 -1
  205. package/persist-plugins/async-storage.js.map +0 -1
  206. package/persist-plugins/async-storage.mjs.map +0 -1
  207. package/persist-plugins/indexeddb.js.map +0 -1
  208. package/persist-plugins/indexeddb.mjs.map +0 -1
  209. package/persist-plugins/local-storage.js.map +0 -1
  210. package/persist-plugins/local-storage.mjs.map +0 -1
  211. package/persist-plugins/mmkv.js.map +0 -1
  212. package/persist-plugins/mmkv.mjs.map +0 -1
  213. package/react-hooks/createObservableHook.js.map +0 -1
  214. package/react-hooks/createObservableHook.mjs.map +0 -1
  215. package/react-hooks/useHover.js.map +0 -1
  216. package/react-hooks/useHover.mjs.map +0 -1
  217. package/react-hooks/useMeasure.js.map +0 -1
  218. package/react-hooks/useMeasure.mjs.map +0 -1
  219. package/react-hooks/useObservableNextRouter.js.map +0 -1
  220. package/react-hooks/useObservableNextRouter.mjs.map +0 -1
  221. package/react.js.map +0 -1
  222. package/react.mjs.map +0 -1
  223. package/src/ObservableObject.ts +0 -1350
  224. package/src/ObservablePrimitive.ts +0 -62
  225. package/src/babel/index.ts +0 -83
  226. package/src/batching.ts +0 -357
  227. package/src/computed.ts +0 -18
  228. package/src/config/enable$GetSet.ts +0 -30
  229. package/src/config/enableReactComponents.ts +0 -26
  230. package/src/config/enableReactNativeComponents.ts +0 -102
  231. package/src/config/enableReactTracking.ts +0 -62
  232. package/src/config/enableReactUse.ts +0 -32
  233. package/src/config/enable_PeekAssign.ts +0 -31
  234. package/src/config.ts +0 -47
  235. package/src/createObservable.ts +0 -47
  236. package/src/event.ts +0 -26
  237. package/src/globals.ts +0 -235
  238. package/src/helpers/pageHash.ts +0 -41
  239. package/src/helpers/pageHashParams.ts +0 -55
  240. package/src/helpers/time.ts +0 -30
  241. package/src/helpers/trackHistory.ts +0 -29
  242. package/src/helpers/undoRedo.ts +0 -111
  243. package/src/helpers.ts +0 -231
  244. package/src/is.ts +0 -63
  245. package/src/linked.ts +0 -17
  246. package/src/observable.ts +0 -32
  247. package/src/observableInterfaces.ts +0 -151
  248. package/src/observableTypes.ts +0 -232
  249. package/src/observe.ts +0 -89
  250. package/src/old-plugins/firebase.ts +0 -1053
  251. package/src/onChange.ts +0 -146
  252. package/src/persist/configureObservablePersistence.ts +0 -7
  253. package/src/persist/fieldTransformer.ts +0 -149
  254. package/src/persist/observablePersistRemoteFunctionsAdapter.ts +0 -39
  255. package/src/persist/persistObservable.ts +0 -1034
  256. package/src/persist-plugins/async-storage.ts +0 -99
  257. package/src/persist-plugins/indexeddb.ts +0 -439
  258. package/src/persist-plugins/local-storage.ts +0 -86
  259. package/src/persist-plugins/mmkv.ts +0 -91
  260. package/src/proxy.ts +0 -28
  261. package/src/react/Computed.tsx +0 -8
  262. package/src/react/For.tsx +0 -116
  263. package/src/react/Memo.tsx +0 -4
  264. package/src/react/Reactive.tsx +0 -53
  265. package/src/react/Show.tsx +0 -33
  266. package/src/react/Switch.tsx +0 -43
  267. package/src/react/react-globals.ts +0 -3
  268. package/src/react/reactInterfaces.ts +0 -32
  269. package/src/react/reactive-observer.tsx +0 -210
  270. package/src/react/useComputed.ts +0 -36
  271. package/src/react/useEffectOnce.ts +0 -41
  272. package/src/react/useIsMounted.ts +0 -16
  273. package/src/react/useMount.ts +0 -15
  274. package/src/react/useObservable.ts +0 -24
  275. package/src/react/useObservableReducer.ts +0 -52
  276. package/src/react/useObservableState.ts +0 -30
  277. package/src/react/useObserve.ts +0 -54
  278. package/src/react/useObserveEffect.ts +0 -40
  279. package/src/react/usePauseProvider.tsx +0 -16
  280. package/src/react/useSelector.ts +0 -167
  281. package/src/react/useUnmount.ts +0 -8
  282. package/src/react/useWhen.ts +0 -9
  283. package/src/react-hooks/createObservableHook.ts +0 -53
  284. package/src/react-hooks/useHover.ts +0 -40
  285. package/src/react-hooks/useMeasure.ts +0 -48
  286. package/src/react-hooks/useObservableNextRouter.ts +0 -137
  287. package/src/retry.ts +0 -71
  288. package/src/setupTracking.ts +0 -26
  289. package/src/sync/activateSyncedNode.ts +0 -128
  290. package/src/sync/configureObservableSync.ts +0 -7
  291. package/src/sync/persistTypes.ts +0 -216
  292. package/src/sync/syncHelpers.ts +0 -180
  293. package/src/sync/syncObservable.ts +0 -1056
  294. package/src/sync/syncObservableAdapter.ts +0 -31
  295. package/src/sync/syncTypes.ts +0 -189
  296. package/src/sync/synced.ts +0 -21
  297. package/src/sync-plugins/crud.ts +0 -412
  298. package/src/sync-plugins/fetch.ts +0 -80
  299. package/src/sync-plugins/keel.ts +0 -495
  300. package/src/sync-plugins/supabase.ts +0 -249
  301. package/src/sync-plugins/tanstack-query.ts +0 -113
  302. package/src/sync-plugins/tanstack-react-query.ts +0 -12
  303. package/src/trace/traceHelpers.ts +0 -11
  304. package/src/trace/useTraceListeners.ts +0 -34
  305. package/src/trace/useTraceUpdates.ts +0 -24
  306. package/src/trace/useVerifyNotTracking.ts +0 -33
  307. package/src/trace/useVerifyOneRender.ts +0 -10
  308. package/src/trackSelector.ts +0 -52
  309. package/src/tracking.ts +0 -43
  310. package/src/types/babel.d.ts +0 -12
  311. package/src/when.ts +0 -75
  312. package/sync-plugins/crud.js.map +0 -1
  313. package/sync-plugins/crud.mjs.map +0 -1
  314. package/sync-plugins/fetch.js.map +0 -1
  315. package/sync-plugins/fetch.mjs.map +0 -1
  316. package/sync-plugins/keel.js.map +0 -1
  317. package/sync-plugins/keel.mjs.map +0 -1
  318. package/sync-plugins/supabase.js.map +0 -1
  319. package/sync-plugins/supabase.mjs.map +0 -1
  320. package/sync-plugins/tanstack-query.js.map +0 -1
  321. package/sync-plugins/tanstack-query.mjs.map +0 -1
  322. package/sync-plugins/tanstack-react-query.js.map +0 -1
  323. package/sync-plugins/tanstack-react-query.mjs.map +0 -1
  324. package/sync.js.map +0 -1
  325. package/sync.mjs.map +0 -1
  326. package/trace.js.map +0 -1
  327. package/trace.mjs.map +0 -1
@@ -2,387 +2,366 @@
2
2
 
3
3
  var state = require('@legendapp/state');
4
4
 
5
- const MetadataSuffix = '__legend_metadata';
6
- const PrimitiveName = '__legend_primitive';
5
+ // src/persist-plugins/indexeddb.ts
6
+ var MetadataSuffix = "__legend_metadata";
7
+ var PrimitiveName = "__legend_primitive";
7
8
  function requestToPromise(request) {
8
- return new Promise((resolve) => (request.onsuccess = () => resolve()));
9
+ return new Promise((resolve) => request.onsuccess = () => resolve());
9
10
  }
10
- class ObservablePersistIndexedDB {
11
- constructor() {
12
- this.tableData = {};
13
- this.tableMetadata = {};
14
- this.tablesAdjusted = new Map();
15
- this.isSaveTaskQueued = false;
16
- this.pendingSaves = new Map();
17
- this.promisesQueued = [];
18
- this.doSave = this.doSave.bind(this);
11
+ var ObservablePersistIndexedDB = class {
12
+ constructor() {
13
+ this.tableData = {};
14
+ this.tableMetadata = {};
15
+ this.tablesAdjusted = /* @__PURE__ */ new Map();
16
+ this.isSaveTaskQueued = false;
17
+ this.pendingSaves = /* @__PURE__ */ new Map();
18
+ this.promisesQueued = [];
19
+ this.doSave = this.doSave.bind(this);
20
+ }
21
+ async initialize(config) {
22
+ if (typeof indexedDB === "undefined")
23
+ return;
24
+ if (process.env.NODE_ENV === "development" && !(config == null ? void 0 : config.indexedDB)) {
25
+ console.error("[legend-state] Must configure ObservablePersistIndexedDB");
19
26
  }
20
- async initialize(config) {
21
- if (typeof indexedDB === 'undefined')
22
- return;
23
- if (process.env.NODE_ENV === 'development' && !(config === null || config === void 0 ? void 0 : config.indexedDB)) {
24
- console.error('[legend-state] Must configure ObservablePersistIndexedDB');
27
+ const { databaseName, version, tableNames } = config.indexedDB;
28
+ const openRequest = indexedDB.open(databaseName, version);
29
+ openRequest.onerror = () => {
30
+ console.error("Error", openRequest.error);
31
+ };
32
+ openRequest.onupgradeneeded = () => {
33
+ const db = openRequest.result;
34
+ const { tableNames: tableNames2 } = config.indexedDB;
35
+ tableNames2.forEach((table) => {
36
+ if (!db.objectStoreNames.contains(table)) {
37
+ db.createObjectStore(table, {
38
+ keyPath: "id"
39
+ });
25
40
  }
26
- const { databaseName, version, tableNames } = config.indexedDB;
27
- const openRequest = indexedDB.open(databaseName, version);
28
- openRequest.onerror = () => {
29
- console.error('Error', openRequest.error);
30
- };
31
- openRequest.onupgradeneeded = () => {
32
- const db = openRequest.result;
33
- const { tableNames } = config.indexedDB;
34
- // Create a table for each name with "id" as the key
35
- tableNames.forEach((table) => {
36
- if (!db.objectStoreNames.contains(table)) {
37
- db.createObjectStore(table, {
38
- keyPath: 'id',
39
- });
40
- }
41
- });
42
- };
43
- return new Promise((resolve) => {
44
- openRequest.onsuccess = async () => {
45
- this.db = openRequest.result;
46
- // Load each table
47
- const objectStoreNames = this.db.objectStoreNames;
48
- const tables = tableNames.filter((table) => objectStoreNames.contains(table));
49
- try {
50
- const transaction = this.db.transaction(tables, 'readonly');
51
- await Promise.all(tables.map((table) => this.initTable(table, transaction)));
52
- }
53
- catch (err) {
54
- console.error('[legend-state] Error loading IndexedDB', err);
55
- }
56
- resolve();
57
- };
58
- });
41
+ });
42
+ };
43
+ return new Promise((resolve) => {
44
+ openRequest.onsuccess = async () => {
45
+ this.db = openRequest.result;
46
+ const objectStoreNames = this.db.objectStoreNames;
47
+ const tables = tableNames.filter((table) => objectStoreNames.contains(table));
48
+ try {
49
+ const transaction = this.db.transaction(tables, "readonly");
50
+ await Promise.all(tables.map((table) => this.initTable(table, transaction)));
51
+ } catch (err) {
52
+ console.error("[legend-state] Error loading IndexedDB", err);
53
+ }
54
+ resolve();
55
+ };
56
+ });
57
+ }
58
+ loadTable(table, config) {
59
+ var _a;
60
+ if (!this.tableData[table]) {
61
+ const transaction = this.db.transaction(table, "readonly");
62
+ return this.initTable(table, transaction).then(() => this.loadTable(table, config));
59
63
  }
60
- loadTable(table, config) {
61
- var _a;
62
- if (!this.tableData[table]) {
63
- const transaction = this.db.transaction(table, 'readonly');
64
- return this.initTable(table, transaction).then(() => this.loadTable(table, config));
64
+ const prefix = (_a = config.indexedDB) == null ? void 0 : _a.prefixID;
65
+ if (prefix) {
66
+ const tableName = prefix ? table + "/" + prefix : table;
67
+ if (this.tablesAdjusted.has(tableName)) {
68
+ const promise = state.when(this.tablesAdjusted.get(tableName));
69
+ if (state.isPromise(promise)) {
70
+ return promise;
65
71
  }
66
- const prefix = (_a = config.indexedDB) === null || _a === void 0 ? void 0 : _a.prefixID;
67
- if (prefix) {
68
- const tableName = prefix ? table + '/' + prefix : table;
69
- if (this.tablesAdjusted.has(tableName)) {
70
- const promise = state.when(this.tablesAdjusted.get(tableName));
71
- if (state.isPromise(promise)) {
72
- return promise;
73
- }
74
- }
75
- else {
76
- const obsLoaded = state.observable(false);
77
- this.tablesAdjusted.set(tableName, obsLoaded);
78
- const data = this.getTable(table, {}, config);
79
- let hasPromise = false;
80
- let promises;
81
- if (data) {
82
- const keys = Object.keys(data);
83
- promises = keys.map(async (key) => {
84
- const value = data[key];
85
- if (state.isPromise(value)) {
86
- hasPromise = true;
87
- return value.then(() => {
88
- data[key] = value;
89
- });
90
- }
91
- else {
92
- data[key] = value;
93
- }
94
- });
95
- }
96
- if (hasPromise) {
97
- return Promise.all(promises).then(() => {
98
- obsLoaded.set(true);
99
- });
100
- }
101
- else {
102
- obsLoaded.set(true);
103
- }
72
+ } else {
73
+ const obsLoaded = state.observable(false);
74
+ this.tablesAdjusted.set(tableName, obsLoaded);
75
+ const data = this.getTable(table, {}, config);
76
+ let hasPromise = false;
77
+ let promises;
78
+ if (data) {
79
+ const keys = Object.keys(data);
80
+ promises = keys.map(async (key) => {
81
+ const value = data[key];
82
+ if (state.isPromise(value)) {
83
+ hasPromise = true;
84
+ return value.then(() => {
85
+ data[key] = value;
86
+ });
87
+ } else {
88
+ data[key] = value;
104
89
  }
90
+ });
105
91
  }
106
- }
107
- getTable(table, init, config) {
108
- const configIDB = config.indexedDB;
109
- const prefix = configIDB === null || configIDB === void 0 ? void 0 : configIDB.prefixID;
110
- const data = this.tableData[prefix ? table + '/' + prefix : table];
111
- if (data && (configIDB === null || configIDB === void 0 ? void 0 : configIDB.itemID)) {
112
- return data[configIDB.itemID];
113
- }
114
- else {
115
- return data;
92
+ if (hasPromise) {
93
+ return Promise.all(promises).then(() => {
94
+ obsLoaded.set(true);
95
+ });
96
+ } else {
97
+ obsLoaded.set(true);
116
98
  }
99
+ }
117
100
  }
118
- getMetadata(table, config) {
119
- const { tableName } = this.getMetadataTableName(table, config);
120
- return this.tableMetadata[tableName];
101
+ }
102
+ getTable(table, init, config) {
103
+ const configIDB = config.indexedDB;
104
+ const prefix = configIDB == null ? void 0 : configIDB.prefixID;
105
+ const data = this.tableData[prefix ? table + "/" + prefix : table];
106
+ if (data && (configIDB == null ? void 0 : configIDB.itemID)) {
107
+ return data[configIDB.itemID];
108
+ } else {
109
+ return data;
121
110
  }
122
- async setMetadata(table, metadata, config) {
123
- const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
124
- // Assign new metadata into the table, and make sure it has the id
125
- this.tableMetadata[tableName] = Object.assign(metadata, {
126
- id: tableNameBase + MetadataSuffix,
127
- });
128
- this.tableMetadata[tableName] = metadata;
129
- const store = this.transactionStore(table);
130
- return store.put(metadata);
111
+ }
112
+ getMetadata(table, config) {
113
+ const { tableName } = this.getMetadataTableName(table, config);
114
+ return this.tableMetadata[tableName];
115
+ }
116
+ async setMetadata(table, metadata, config) {
117
+ const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
118
+ this.tableMetadata[tableName] = Object.assign(metadata, {
119
+ id: tableNameBase + MetadataSuffix
120
+ });
121
+ this.tableMetadata[tableName] = metadata;
122
+ const store = this.transactionStore(table);
123
+ return store.put(metadata);
124
+ }
125
+ async deleteMetadata(table, config) {
126
+ const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
127
+ delete this.tableMetadata[tableName];
128
+ const store = this.transactionStore(table);
129
+ const key = tableNameBase + MetadataSuffix;
130
+ store.delete(key);
131
+ }
132
+ async set(table, changes, config) {
133
+ var _a, _b;
134
+ if (typeof indexedDB === "undefined")
135
+ return;
136
+ if (!this.pendingSaves.has(config)) {
137
+ this.pendingSaves.set(config, {});
131
138
  }
132
- async deleteMetadata(table, config) {
133
- const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
134
- delete this.tableMetadata[tableName];
135
- const store = this.transactionStore(table);
136
- const key = tableNameBase + MetadataSuffix;
137
- store.delete(key);
139
+ const pendingSaves = this.pendingSaves.get(config);
140
+ const realTable = table;
141
+ const prefixID = (_a = config.indexedDB) == null ? void 0 : _a.prefixID;
142
+ if (prefixID) {
143
+ table += "/" + prefixID;
138
144
  }
139
- async set(table, changes, config) {
140
- var _a, _b;
141
- if (typeof indexedDB === 'undefined')
142
- return;
143
- if (!this.pendingSaves.has(config)) {
144
- this.pendingSaves.set(config, {});
145
- }
146
- const pendingSaves = this.pendingSaves.get(config);
147
- const realTable = table;
148
- const prefixID = (_a = config.indexedDB) === null || _a === void 0 ? void 0 : _a.prefixID;
149
- if (prefixID) {
150
- table += '/' + prefixID;
151
- }
152
- const prev = this.tableData[table];
153
- const itemID = (_b = config.indexedDB) === null || _b === void 0 ? void 0 : _b.itemID;
154
- if (!pendingSaves[table]) {
155
- pendingSaves[table] = { tableName: realTable, items: new Set() };
145
+ const prev = this.tableData[table];
146
+ const itemID = (_b = config.indexedDB) == null ? void 0 : _b.itemID;
147
+ if (!pendingSaves[table]) {
148
+ pendingSaves[table] = { tableName: realTable, items: /* @__PURE__ */ new Set() };
149
+ }
150
+ const pendingTable = pendingSaves[table];
151
+ for (let i = 0; i < changes.length; i++) {
152
+ let { path, valueAtPath, pathTypes } = changes[i];
153
+ if (itemID) {
154
+ path = [itemID].concat(path);
155
+ pathTypes.splice(0, 0, "object");
156
+ }
157
+ if (path.length > 0) {
158
+ const key = path[0];
159
+ if (!this.tableData[table]) {
160
+ this.tableData[table] = {};
156
161
  }
162
+ this.tableData[table] = state.setAtPath(this.tableData[table], path, pathTypes, valueAtPath);
163
+ pendingTable.items.add(key);
164
+ } else {
165
+ this.tableData[table] = valueAtPath;
166
+ pendingTable.tablePrev = prev;
167
+ break;
168
+ }
169
+ }
170
+ return new Promise((resolve) => {
171
+ this.promisesQueued.push(resolve);
172
+ if (!this.isSaveTaskQueued) {
173
+ this.isSaveTaskQueued = true;
174
+ queueMicrotask(this.doSave);
175
+ }
176
+ });
177
+ }
178
+ async doSave() {
179
+ this.isSaveTaskQueued = false;
180
+ const promisesQueued = this.promisesQueued;
181
+ this.promisesQueued = [];
182
+ const promises = [];
183
+ let lastPut;
184
+ this.pendingSaves.forEach((pendingSaves, config) => {
185
+ Object.keys(pendingSaves).forEach((table) => {
157
186
  const pendingTable = pendingSaves[table];
158
- // Combine changes into a minimal set of saves
159
- for (let i = 0; i < changes.length; i++) {
160
- // eslint-disable-next-line prefer-const
161
- let { path, valueAtPath, pathTypes } = changes[i];
162
- if (itemID) {
163
- path = [itemID].concat(path);
164
- pathTypes.splice(0, 0, 'object');
165
- }
166
- if (path.length > 0) {
167
- // If change is deep in an object save it to IDB by the first key
168
- const key = path[0];
169
- if (!this.tableData[table]) {
170
- this.tableData[table] = {};
171
- }
172
- this.tableData[table] = state.setAtPath(this.tableData[table], path, pathTypes, valueAtPath);
173
- pendingTable.items.add(key);
174
- }
175
- else {
176
- // Set the whole table
177
- this.tableData[table] = valueAtPath;
178
- pendingTable.tablePrev = prev;
179
- break;
180
- }
187
+ const { tablePrev, items, tableName } = pendingTable;
188
+ const store = this.transactionStore(tableName);
189
+ const tableValue = this.tableData[table];
190
+ if (tablePrev) {
191
+ promises.push(this._setTable(table, tablePrev, tableValue, store, config));
192
+ } else {
193
+ items.forEach((key) => {
194
+ lastPut = this._setItem(table, key, tableValue[key], store, config);
195
+ });
181
196
  }
182
- return new Promise((resolve) => {
183
- this.promisesQueued.push(resolve);
184
- if (!this.isSaveTaskQueued) {
185
- this.isSaveTaskQueued = true;
186
- queueMicrotask(this.doSave);
187
- }
188
- });
197
+ items.clear();
198
+ delete pendingTable.tablePrev;
199
+ });
200
+ });
201
+ this.pendingSaves.clear();
202
+ if (promises.length) {
203
+ const puts = await Promise.all(promises);
204
+ lastPut = puts[puts.length - 1];
189
205
  }
190
- async doSave() {
191
- this.isSaveTaskQueued = false;
192
- const promisesQueued = this.promisesQueued;
193
- this.promisesQueued = [];
194
- const promises = [];
195
- let lastPut;
196
- this.pendingSaves.forEach((pendingSaves, config) => {
197
- Object.keys(pendingSaves).forEach((table) => {
198
- const pendingTable = pendingSaves[table];
199
- const { tablePrev, items, tableName } = pendingTable;
200
- const store = this.transactionStore(tableName);
201
- const tableValue = this.tableData[table];
202
- if (tablePrev) {
203
- promises.push(this._setTable(table, tablePrev, tableValue, store, config));
204
- }
205
- else {
206
- items.forEach((key) => {
207
- lastPut = this._setItem(table, key, tableValue[key], store, config);
208
- });
209
- }
210
- // Clear pending saves
211
- items.clear();
212
- delete pendingTable.tablePrev;
213
- });
214
- });
215
- this.pendingSaves.clear();
216
- // setTable awaits multiple sets and deletes so we need to await that to get
217
- // the lastPut from it.
218
- if (promises.length) {
219
- const puts = await Promise.all(promises);
220
- lastPut = puts[puts.length - 1];
221
- }
222
- if (lastPut) {
223
- await requestToPromise(lastPut);
224
- }
225
- promisesQueued.forEach((resolve) => resolve());
206
+ if (lastPut) {
207
+ await requestToPromise(lastPut);
226
208
  }
227
- async deleteTable(table, config) {
228
- const configIDB = config.indexedDB;
229
- const prefixID = configIDB === null || configIDB === void 0 ? void 0 : configIDB.prefixID;
230
- const tableName = prefixID ? table + '/' + prefixID : table;
231
- let data = this.tableData[tableName];
232
- const itemID = configIDB === null || configIDB === void 0 ? void 0 : configIDB.itemID;
233
- if (data && (configIDB === null || configIDB === void 0 ? void 0 : configIDB.itemID)) {
234
- const dataTemp = data[itemID];
235
- delete data[itemID];
236
- data = dataTemp;
237
- }
238
- else {
239
- delete this.tableData[tableName];
240
- delete this.tableData[tableName + '_transformed'];
241
- }
242
- if (typeof indexedDB === 'undefined')
243
- return;
244
- this.deleteMetadata(table, config);
245
- if (data) {
246
- const store = this.transactionStore(table);
247
- let result;
248
- if (!prefixID && !itemID) {
249
- result = requestToPromise(store.clear());
250
- }
251
- else {
252
- const keys = Object.keys(data);
253
- result = Promise.all(keys.map((key) => {
254
- if (prefixID) {
255
- key = prefixID + '/' + key;
256
- }
257
- return requestToPromise(store.delete(key));
258
- }));
259
- }
260
- // Clear the table from IDB
261
- return result;
262
- }
209
+ promisesQueued.forEach((resolve) => resolve());
210
+ }
211
+ async deleteTable(table, config) {
212
+ const configIDB = config.indexedDB;
213
+ const prefixID = configIDB == null ? void 0 : configIDB.prefixID;
214
+ const tableName = prefixID ? table + "/" + prefixID : table;
215
+ let data = this.tableData[tableName];
216
+ const itemID = configIDB == null ? void 0 : configIDB.itemID;
217
+ if (data && (configIDB == null ? void 0 : configIDB.itemID)) {
218
+ const dataTemp = data[itemID];
219
+ delete data[itemID];
220
+ data = dataTemp;
221
+ } else {
222
+ delete this.tableData[tableName];
223
+ delete this.tableData[tableName + "_transformed"];
263
224
  }
264
- // Private
265
- getMetadataTableName(table, config) {
266
- const configIDB = config.indexedDB;
267
- let name = '';
268
- if (configIDB) {
269
- const { prefixID, itemID } = configIDB;
270
- if (itemID) {
271
- name = itemID;
272
- }
225
+ if (typeof indexedDB === "undefined")
226
+ return;
227
+ this.deleteMetadata(table, config);
228
+ if (data) {
229
+ const store = this.transactionStore(table);
230
+ let result;
231
+ if (!prefixID && !itemID) {
232
+ result = requestToPromise(store.clear());
233
+ } else {
234
+ const keys = Object.keys(data);
235
+ result = Promise.all(
236
+ keys.map((key) => {
273
237
  if (prefixID) {
274
- name = prefixID + (name ? '/' + name : '');
238
+ key = prefixID + "/" + key;
275
239
  }
276
- }
277
- return { tableNameBase: name, tableName: name ? table + '/' + name : table };
240
+ return requestToPromise(store.delete(key));
241
+ })
242
+ );
243
+ }
244
+ return result;
278
245
  }
279
- initTable(table, transaction) {
280
- const store = transaction.objectStore(table);
281
- const allRequest = store.getAll();
282
- if (!this.tableData[table]) {
283
- this.tableData[table] = {};
284
- }
285
- return new Promise((resolve) => {
286
- allRequest.onsuccess = () => {
287
- const arr = allRequest.result;
288
- let metadata;
289
- if (!this.tableData[table]) {
290
- this.tableData[table] = {};
291
- }
292
- for (let i = 0; i < arr.length; i++) {
293
- const val = arr[i];
294
- // In case id is a number convert it to a string
295
- if (!val.id.includes) {
296
- val.id = val.id + '';
297
- }
298
- if (val.id.endsWith(MetadataSuffix)) {
299
- const id = val.id.replace(MetadataSuffix, '');
300
- // Save this as metadata
301
- delete val.id;
302
- metadata = val;
303
- const tableName = id ? table + '/' + id : table;
304
- this.tableMetadata[tableName] = metadata;
305
- }
306
- else {
307
- let tableName = table;
308
- if (val.id.includes('/')) {
309
- const [prefix, id] = val.id.split('/');
310
- tableName += '/' + prefix;
311
- val.id = id;
312
- }
313
- const id = val.id;
314
- const outValue = val[PrimitiveName] !== undefined ? val[PrimitiveName] : val;
315
- if (!this.tableData[tableName]) {
316
- this.tableData[tableName] = {};
317
- }
318
- this.tableData[tableName][id] = outValue;
319
- }
320
- }
321
- resolve();
322
- };
323
- });
246
+ }
247
+ // Private
248
+ getMetadataTableName(table, config) {
249
+ const configIDB = config.indexedDB;
250
+ let name = "";
251
+ if (configIDB) {
252
+ const { prefixID, itemID } = configIDB;
253
+ if (itemID) {
254
+ name = itemID;
255
+ }
256
+ if (prefixID) {
257
+ name = prefixID + (name ? "/" + name : "");
258
+ }
324
259
  }
325
- transactionStore(table) {
326
- const transaction = this.db.transaction(table, 'readwrite');
327
- return transaction.objectStore(table);
260
+ return { tableNameBase: name, tableName: name ? table + "/" + name : table };
261
+ }
262
+ initTable(table, transaction) {
263
+ const store = transaction.objectStore(table);
264
+ const allRequest = store.getAll();
265
+ if (!this.tableData[table]) {
266
+ this.tableData[table] = {};
328
267
  }
329
- _setItem(table, key, value, store, config) {
330
- var _a;
331
- if (!value) {
332
- if (this.tableData[table]) {
333
- delete this.tableData[table][key];
334
- }
335
- return store.delete(key);
268
+ return new Promise((resolve) => {
269
+ allRequest.onsuccess = () => {
270
+ const arr = allRequest.result;
271
+ let metadata;
272
+ if (!this.tableData[table]) {
273
+ this.tableData[table] = {};
336
274
  }
337
- else {
338
- if (state.isPrimitive(value)) {
339
- value = { [PrimitiveName]: value };
340
- }
341
- if (value.id === undefined) {
342
- // If value does not have its own ID, assign it the key from the Record
343
- value.id = key;
275
+ for (let i = 0; i < arr.length; i++) {
276
+ const val = arr[i];
277
+ if (!val.id.includes) {
278
+ val.id = val.id + "";
279
+ }
280
+ if (val.id.endsWith(MetadataSuffix)) {
281
+ const id = val.id.replace(MetadataSuffix, "");
282
+ delete val.id;
283
+ metadata = val;
284
+ const tableName = id ? table + "/" + id : table;
285
+ this.tableMetadata[tableName] = metadata;
286
+ } else {
287
+ let tableName = table;
288
+ if (val.id.includes("/")) {
289
+ const [prefix, id2] = val.id.split("/");
290
+ tableName += "/" + prefix;
291
+ val.id = id2;
344
292
  }
345
- if (config) {
346
- if (!this.tableData[table]) {
347
- this.tableData[table] = {};
348
- }
349
- this.tableData[table][key] = value;
350
- const prefixID = (_a = config.indexedDB) === null || _a === void 0 ? void 0 : _a.prefixID;
351
- if (prefixID) {
352
- {
353
- value = Object.assign({}, value, {
354
- id: prefixID + '/' + value.id,
355
- });
356
- }
357
- }
293
+ const id = val.id;
294
+ const outValue = val[PrimitiveName] !== void 0 ? val[PrimitiveName] : val;
295
+ if (!this.tableData[tableName]) {
296
+ this.tableData[tableName] = {};
358
297
  }
359
- return store.put(value);
298
+ this.tableData[tableName][id] = outValue;
299
+ }
360
300
  }
361
- }
362
- async _setTable(table, prev, value, store, config) {
363
- const keys = Object.keys(value);
364
- let lastSet;
365
- // Do a set for each key in the object
366
- const sets = await Promise.all(keys.map((key) => {
367
- const val = value[key];
368
- return this._setItem(table, key, val, store, config);
369
- }));
370
- lastSet = sets[sets.length - 1];
371
- // Delete keys that are no longer in the object
372
- if (prev) {
373
- const keysOld = Object.keys(prev);
374
- const deletes = (await Promise.all(keysOld.map((key) => {
375
- if (value[key] === undefined) {
376
- return this._setItem(table, key, null, store, config);
377
- }
378
- }))).filter((a) => !!a);
379
- if (deletes.length > 0) {
380
- lastSet = deletes[deletes.length - 1];
381
- }
301
+ resolve();
302
+ };
303
+ });
304
+ }
305
+ transactionStore(table) {
306
+ const transaction = this.db.transaction(table, "readwrite");
307
+ return transaction.objectStore(table);
308
+ }
309
+ _setItem(table, key, value, store, config) {
310
+ var _a;
311
+ if (!value) {
312
+ if (this.tableData[table]) {
313
+ delete this.tableData[table][key];
314
+ }
315
+ return store.delete(key);
316
+ } else {
317
+ if (state.isPrimitive(value)) {
318
+ value = { [PrimitiveName]: value };
319
+ }
320
+ if (value.id === void 0) {
321
+ value.id = key;
322
+ }
323
+ if (config) {
324
+ if (!this.tableData[table]) {
325
+ this.tableData[table] = {};
382
326
  }
383
- return lastSet;
327
+ this.tableData[table][key] = value;
328
+ const prefixID = (_a = config.indexedDB) == null ? void 0 : _a.prefixID;
329
+ if (prefixID) {
330
+ {
331
+ value = Object.assign({}, value, {
332
+ id: prefixID + "/" + value.id
333
+ });
334
+ }
335
+ }
336
+ }
337
+ return store.put(value);
384
338
  }
385
- }
339
+ }
340
+ async _setTable(table, prev, value, store, config) {
341
+ const keys = Object.keys(value);
342
+ let lastSet;
343
+ const sets = await Promise.all(
344
+ keys.map((key) => {
345
+ const val = value[key];
346
+ return this._setItem(table, key, val, store, config);
347
+ })
348
+ );
349
+ lastSet = sets[sets.length - 1];
350
+ if (prev) {
351
+ const keysOld = Object.keys(prev);
352
+ const deletes = (await Promise.all(
353
+ keysOld.map((key) => {
354
+ if (value[key] === void 0) {
355
+ return this._setItem(table, key, null, store, config);
356
+ }
357
+ })
358
+ )).filter((a) => !!a);
359
+ if (deletes.length > 0) {
360
+ lastSet = deletes[deletes.length - 1];
361
+ }
362
+ }
363
+ return lastSet;
364
+ }
365
+ };
386
366
 
387
367
  exports.ObservablePersistIndexedDB = ObservablePersistIndexedDB;
388
- //# sourceMappingURL=indexeddb.js.map