@verdant-web/store 3.3.2 → 3.4.0-next.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 (336) hide show
  1. package/dist/bundle/index.js +8 -8
  2. package/dist/bundle/index.js.map +4 -4
  3. package/dist/esm/BackoffScheduler.js.map +1 -1
  4. package/dist/esm/IDBService.js.map +1 -1
  5. package/dist/esm/UndoHistory.js.map +1 -1
  6. package/dist/esm/__tests__/documents.test.js.map +1 -1
  7. package/dist/esm/__tests__/queries.test.js.map +1 -1
  8. package/dist/esm/backup.js.map +1 -1
  9. package/dist/esm/client/Client.js +7 -0
  10. package/dist/esm/client/Client.js.map +1 -1
  11. package/dist/esm/client/ClientDescriptor.js.map +1 -1
  12. package/dist/esm/entities/Entity.js.map +1 -1
  13. package/dist/esm/entities/EntityCache.js.map +1 -1
  14. package/dist/esm/entities/EntityMetadata.js.map +1 -1
  15. package/dist/esm/entities/EntityStore.js.map +1 -1
  16. package/dist/esm/entities/OperationBatcher.js.map +1 -1
  17. package/dist/esm/files/EntityFile.js.map +1 -1
  18. package/dist/esm/files/FileManager.js +3 -0
  19. package/dist/esm/files/FileManager.js.map +1 -1
  20. package/dist/esm/files/FileStorage.js.map +1 -1
  21. package/dist/esm/files/utils.js.map +1 -1
  22. package/dist/esm/idb.js.map +1 -1
  23. package/dist/esm/metadata/AckInfoStore.js.map +1 -1
  24. package/dist/esm/metadata/LocalReplicaStore.js.map +1 -1
  25. package/dist/esm/metadata/MessageCreator.js.map +1 -1
  26. package/dist/esm/metadata/Metadata.js.map +1 -1
  27. package/dist/esm/metadata/OperationsStore.js.map +1 -1
  28. package/dist/esm/metadata/SchemaStore.js.map +1 -1
  29. package/dist/esm/metadata/openMetadataDatabase.js.map +1 -1
  30. package/dist/esm/migration/db.js.map +1 -1
  31. package/dist/esm/migration/openDatabase.js.map +1 -1
  32. package/dist/esm/migration/paths.js.map +1 -1
  33. package/dist/esm/queries/BaseQuery.js.map +1 -1
  34. package/dist/esm/queries/QueryCache.js.map +1 -1
  35. package/dist/esm/queries/QueryableStorage.js.map +1 -1
  36. package/dist/esm/queries/dbQueries.js.map +1 -1
  37. package/dist/esm/queries/keys.js.map +1 -1
  38. package/dist/esm/queries/ranges.js.map +1 -1
  39. package/dist/esm/queries/utils.js.map +1 -1
  40. package/dist/esm/sync/FileSync.js.map +1 -1
  41. package/dist/esm/sync/Heartbeat.js.map +1 -1
  42. package/dist/esm/sync/PresenceManager.js.map +1 -1
  43. package/dist/esm/sync/PushPullSync.js.map +1 -1
  44. package/dist/esm/sync/ServerSyncEndpointProvider.js.map +1 -1
  45. package/dist/esm/sync/Sync.js.map +1 -1
  46. package/dist/esm/sync/WebSocketSync.js.map +1 -1
  47. package/package.json +9 -10
  48. package/src/client/Client.ts +8 -1
  49. package/src/files/FileManager.ts +4 -0
  50. package/src/sync/Sync.ts +2 -2
  51. package/dist/cjs/BackoffScheduler.d.ts +0 -19
  52. package/dist/cjs/BackoffScheduler.js +0 -45
  53. package/dist/cjs/BackoffScheduler.js.map +0 -1
  54. package/dist/cjs/DocumentManager.d.ts +0 -28
  55. package/dist/cjs/DocumentManager.js +0 -45
  56. package/dist/cjs/DocumentManager.js.map +0 -1
  57. package/dist/cjs/FakeWeakRef.d.ts +0 -11
  58. package/dist/cjs/FakeWeakRef.js +0 -19
  59. package/dist/cjs/FakeWeakRef.js.map +0 -1
  60. package/dist/cjs/IDBService.d.ts +0 -30
  61. package/dist/cjs/IDBService.js +0 -101
  62. package/dist/cjs/IDBService.js.map +0 -1
  63. package/dist/cjs/UndoHistory.d.ts +0 -16
  64. package/dist/cjs/UndoHistory.js +0 -55
  65. package/dist/cjs/UndoHistory.js.map +0 -1
  66. package/dist/cjs/__tests__/batching.test.d.ts +0 -1
  67. package/dist/cjs/__tests__/batching.test.js +0 -47
  68. package/dist/cjs/__tests__/batching.test.js.map +0 -1
  69. package/dist/cjs/__tests__/documents.test.d.ts +0 -1
  70. package/dist/cjs/__tests__/documents.test.js +0 -468
  71. package/dist/cjs/__tests__/documents.test.js.map +0 -1
  72. package/dist/cjs/__tests__/fixtures/testStorage.d.ts +0 -76
  73. package/dist/cjs/__tests__/fixtures/testStorage.js +0 -96
  74. package/dist/cjs/__tests__/fixtures/testStorage.js.map +0 -1
  75. package/dist/cjs/__tests__/legacyOids.test.d.ts +0 -1
  76. package/dist/cjs/__tests__/legacyOids.test.js +0 -354
  77. package/dist/cjs/__tests__/legacyOids.test.js.map +0 -1
  78. package/dist/cjs/__tests__/mutations.test.d.ts +0 -1
  79. package/dist/cjs/__tests__/mutations.test.js +0 -48
  80. package/dist/cjs/__tests__/mutations.test.js.map +0 -1
  81. package/dist/cjs/__tests__/queries.test.d.ts +0 -1
  82. package/dist/cjs/__tests__/queries.test.js +0 -323
  83. package/dist/cjs/__tests__/queries.test.js.map +0 -1
  84. package/dist/cjs/__tests__/setup/indexedDB.d.ts +0 -1
  85. package/dist/cjs/__tests__/setup/indexedDB.js +0 -16
  86. package/dist/cjs/__tests__/setup/indexedDB.js.map +0 -1
  87. package/dist/cjs/__tests__/undo.test.d.ts +0 -1
  88. package/dist/cjs/__tests__/undo.test.js +0 -94
  89. package/dist/cjs/__tests__/undo.test.js.map +0 -1
  90. package/dist/cjs/backup.d.ts +0 -10
  91. package/dist/cjs/backup.js +0 -58
  92. package/dist/cjs/backup.js.map +0 -1
  93. package/dist/cjs/client/Client.d.ts +0 -120
  94. package/dist/cjs/client/Client.js +0 -300
  95. package/dist/cjs/client/Client.js.map +0 -1
  96. package/dist/cjs/client/ClientDescriptor.d.ts +0 -76
  97. package/dist/cjs/client/ClientDescriptor.js +0 -213
  98. package/dist/cjs/client/ClientDescriptor.js.map +0 -1
  99. package/dist/cjs/client/constants.d.ts +0 -1
  100. package/dist/cjs/client/constants.js +0 -5
  101. package/dist/cjs/client/constants.js.map +0 -1
  102. package/dist/cjs/constants.d.ts +0 -1
  103. package/dist/cjs/constants.js +0 -5
  104. package/dist/cjs/constants.js.map +0 -1
  105. package/dist/cjs/context.d.ts +0 -38
  106. package/dist/cjs/context.js +0 -3
  107. package/dist/cjs/context.js.map +0 -1
  108. package/dist/cjs/entities/Entity.d.ts +0 -148
  109. package/dist/cjs/entities/Entity.js +0 -711
  110. package/dist/cjs/entities/Entity.js.map +0 -1
  111. package/dist/cjs/entities/Entity.test.d.ts +0 -1
  112. package/dist/cjs/entities/Entity.test.js +0 -194
  113. package/dist/cjs/entities/Entity.test.js.map +0 -1
  114. package/dist/cjs/entities/EntityCache.d.ts +0 -15
  115. package/dist/cjs/entities/EntityCache.js +0 -39
  116. package/dist/cjs/entities/EntityCache.js.map +0 -1
  117. package/dist/cjs/entities/EntityMetadata.d.ts +0 -68
  118. package/dist/cjs/entities/EntityMetadata.js +0 -261
  119. package/dist/cjs/entities/EntityMetadata.js.map +0 -1
  120. package/dist/cjs/entities/EntityStore.d.ts +0 -80
  121. package/dist/cjs/entities/EntityStore.js +0 -352
  122. package/dist/cjs/entities/EntityStore.js.map +0 -1
  123. package/dist/cjs/entities/OperationBatcher.d.ts +0 -52
  124. package/dist/cjs/entities/OperationBatcher.js +0 -165
  125. package/dist/cjs/entities/OperationBatcher.js.map +0 -1
  126. package/dist/cjs/entities/types.d.ts +0 -103
  127. package/dist/cjs/entities/types.js +0 -3
  128. package/dist/cjs/entities/types.js.map +0 -1
  129. package/dist/cjs/files/EntityFile.d.ts +0 -35
  130. package/dist/cjs/files/EntityFile.js +0 -81
  131. package/dist/cjs/files/EntityFile.js.map +0 -1
  132. package/dist/cjs/files/FileManager.d.ts +0 -46
  133. package/dist/cjs/files/FileManager.js +0 -174
  134. package/dist/cjs/files/FileManager.js.map +0 -1
  135. package/dist/cjs/files/FileStorage.d.ts +0 -39
  136. package/dist/cjs/files/FileStorage.js +0 -110
  137. package/dist/cjs/files/FileStorage.js.map +0 -1
  138. package/dist/cjs/files/utils.d.ts +0 -10
  139. package/dist/cjs/files/utils.js +0 -62
  140. package/dist/cjs/files/utils.js.map +0 -1
  141. package/dist/cjs/files/utils.test.d.ts +0 -1
  142. package/dist/cjs/files/utils.test.js +0 -81
  143. package/dist/cjs/files/utils.test.js.map +0 -1
  144. package/dist/cjs/idb.d.ts +0 -13
  145. package/dist/cjs/idb.js +0 -158
  146. package/dist/cjs/idb.js.map +0 -1
  147. package/dist/cjs/index.d.ts +0 -23
  148. package/dist/cjs/index.js +0 -25
  149. package/dist/cjs/index.js.map +0 -1
  150. package/dist/cjs/metadata/AckInfoStore.d.ts +0 -10
  151. package/dist/cjs/metadata/AckInfoStore.js +0 -26
  152. package/dist/cjs/metadata/AckInfoStore.js.map +0 -1
  153. package/dist/cjs/metadata/BaselinesStore.d.ts +0 -40
  154. package/dist/cjs/metadata/BaselinesStore.js +0 -106
  155. package/dist/cjs/metadata/BaselinesStore.js.map +0 -1
  156. package/dist/cjs/metadata/LocalReplicaStore.d.ts +0 -18
  157. package/dist/cjs/metadata/LocalReplicaStore.js +0 -62
  158. package/dist/cjs/metadata/LocalReplicaStore.js.map +0 -1
  159. package/dist/cjs/metadata/MessageCreator.d.ts +0 -19
  160. package/dist/cjs/metadata/MessageCreator.js +0 -128
  161. package/dist/cjs/metadata/MessageCreator.js.map +0 -1
  162. package/dist/cjs/metadata/Metadata.d.ts +0 -135
  163. package/dist/cjs/metadata/Metadata.js +0 -408
  164. package/dist/cjs/metadata/Metadata.js.map +0 -1
  165. package/dist/cjs/metadata/OperationsStore.d.ts +0 -62
  166. package/dist/cjs/metadata/OperationsStore.js +0 -179
  167. package/dist/cjs/metadata/OperationsStore.js.map +0 -1
  168. package/dist/cjs/metadata/SchemaStore.d.ts +0 -9
  169. package/dist/cjs/metadata/SchemaStore.js +0 -39
  170. package/dist/cjs/metadata/SchemaStore.js.map +0 -1
  171. package/dist/cjs/metadata/openMetadataDatabase.d.ts +0 -19
  172. package/dist/cjs/metadata/openMetadataDatabase.js +0 -220
  173. package/dist/cjs/metadata/openMetadataDatabase.js.map +0 -1
  174. package/dist/cjs/migration/db.d.ts +0 -8
  175. package/dist/cjs/migration/db.js +0 -112
  176. package/dist/cjs/migration/db.js.map +0 -1
  177. package/dist/cjs/migration/errors.d.ts +0 -5
  178. package/dist/cjs/migration/errors.js +0 -12
  179. package/dist/cjs/migration/errors.js.map +0 -1
  180. package/dist/cjs/migration/openDatabase.d.ts +0 -20
  181. package/dist/cjs/migration/openDatabase.js +0 -468
  182. package/dist/cjs/migration/openDatabase.js.map +0 -1
  183. package/dist/cjs/migration/paths.d.ts +0 -6
  184. package/dist/cjs/migration/paths.js +0 -53
  185. package/dist/cjs/migration/paths.js.map +0 -1
  186. package/dist/cjs/migration/paths.test.d.ts +0 -1
  187. package/dist/cjs/migration/paths.test.js +0 -91
  188. package/dist/cjs/migration/paths.test.js.map +0 -1
  189. package/dist/cjs/queries/BaseQuery.d.ts +0 -53
  190. package/dist/cjs/queries/BaseQuery.js +0 -148
  191. package/dist/cjs/queries/BaseQuery.js.map +0 -1
  192. package/dist/cjs/queries/CollectionQueries.d.ts +0 -55
  193. package/dist/cjs/queries/CollectionQueries.js +0 -92
  194. package/dist/cjs/queries/CollectionQueries.js.map +0 -1
  195. package/dist/cjs/queries/FindAllQuery.d.ts +0 -12
  196. package/dist/cjs/queries/FindAllQuery.js +0 -44
  197. package/dist/cjs/queries/FindAllQuery.js.map +0 -1
  198. package/dist/cjs/queries/FindInfiniteQuery.d.ts +0 -19
  199. package/dist/cjs/queries/FindInfiniteQuery.js +0 -70
  200. package/dist/cjs/queries/FindInfiniteQuery.js.map +0 -1
  201. package/dist/cjs/queries/FindOneQuery.d.ts +0 -12
  202. package/dist/cjs/queries/FindOneQuery.js +0 -43
  203. package/dist/cjs/queries/FindOneQuery.js.map +0 -1
  204. package/dist/cjs/queries/FindPageQuery.d.ts +0 -24
  205. package/dist/cjs/queries/FindPageQuery.js +0 -77
  206. package/dist/cjs/queries/FindPageQuery.js.map +0 -1
  207. package/dist/cjs/queries/GetQuery.d.ts +0 -10
  208. package/dist/cjs/queries/GetQuery.js +0 -30
  209. package/dist/cjs/queries/GetQuery.js.map +0 -1
  210. package/dist/cjs/queries/QueryCache.d.ts +0 -17
  211. package/dist/cjs/queries/QueryCache.js +0 -46
  212. package/dist/cjs/queries/QueryCache.js.map +0 -1
  213. package/dist/cjs/queries/QueryableStorage.d.ts +0 -20
  214. package/dist/cjs/queries/QueryableStorage.js +0 -94
  215. package/dist/cjs/queries/QueryableStorage.js.map +0 -1
  216. package/dist/cjs/queries/dbQueries.d.ts +0 -22
  217. package/dist/cjs/queries/dbQueries.js +0 -136
  218. package/dist/cjs/queries/dbQueries.js.map +0 -1
  219. package/dist/cjs/queries/keys.d.ts +0 -10
  220. package/dist/cjs/queries/keys.js +0 -34
  221. package/dist/cjs/queries/keys.js.map +0 -1
  222. package/dist/cjs/queries/ranges.d.ts +0 -2
  223. package/dist/cjs/queries/ranges.js +0 -70
  224. package/dist/cjs/queries/ranges.js.map +0 -1
  225. package/dist/cjs/queries/types.d.ts +0 -6
  226. package/dist/cjs/queries/types.js +0 -3
  227. package/dist/cjs/queries/types.js.map +0 -1
  228. package/dist/cjs/queries/utils.d.ts +0 -3
  229. package/dist/cjs/queries/utils.js +0 -25
  230. package/dist/cjs/queries/utils.js.map +0 -1
  231. package/dist/cjs/sync/FileSync.d.ts +0 -24
  232. package/dist/cjs/sync/FileSync.js +0 -87
  233. package/dist/cjs/sync/FileSync.js.map +0 -1
  234. package/dist/cjs/sync/Heartbeat.d.ts +0 -25
  235. package/dist/cjs/sync/Heartbeat.js +0 -64
  236. package/dist/cjs/sync/Heartbeat.js.map +0 -1
  237. package/dist/cjs/sync/PresenceManager.d.ts +0 -55
  238. package/dist/cjs/sync/PresenceManager.js +0 -126
  239. package/dist/cjs/sync/PresenceManager.js.map +0 -1
  240. package/dist/cjs/sync/PushPullSync.d.ts +0 -39
  241. package/dist/cjs/sync/PushPullSync.js +0 -159
  242. package/dist/cjs/sync/PushPullSync.js.map +0 -1
  243. package/dist/cjs/sync/ServerSyncEndpointProvider.d.ts +0 -34
  244. package/dist/cjs/sync/ServerSyncEndpointProvider.js +0 -69
  245. package/dist/cjs/sync/ServerSyncEndpointProvider.js.map +0 -1
  246. package/dist/cjs/sync/Sync.d.ts +0 -160
  247. package/dist/cjs/sync/Sync.js +0 -293
  248. package/dist/cjs/sync/Sync.js.map +0 -1
  249. package/dist/cjs/sync/WebSocketSync.d.ts +0 -44
  250. package/dist/cjs/sync/WebSocketSync.js +0 -221
  251. package/dist/cjs/sync/WebSocketSync.js.map +0 -1
  252. package/dist/cjs/types.d.ts +0 -12
  253. package/dist/cjs/types.js +0 -3
  254. package/dist/cjs/types.js.map +0 -1
  255. package/dist/cjs/utils/Disposable.d.ts +0 -6
  256. package/dist/cjs/utils/Disposable.js +0 -19
  257. package/dist/cjs/utils/Disposable.js.map +0 -1
  258. package/dist/cjs/utils/Resolvable.d.ts +0 -8
  259. package/dist/cjs/utils/Resolvable.js +0 -23
  260. package/dist/cjs/utils/Resolvable.js.map +0 -1
  261. package/dist/cjs/vanilla.d.ts +0 -1
  262. package/dist/cjs/vanilla.js +0 -28
  263. package/dist/cjs/vanilla.js.map +0 -1
  264. package/dist/esm/BackoffScheduler.d.ts +0 -19
  265. package/dist/esm/DocumentManager.d.ts +0 -28
  266. package/dist/esm/FakeWeakRef.d.ts +0 -11
  267. package/dist/esm/IDBService.d.ts +0 -30
  268. package/dist/esm/UndoHistory.d.ts +0 -16
  269. package/dist/esm/__tests__/batching.test.d.ts +0 -1
  270. package/dist/esm/__tests__/documents.test.d.ts +0 -1
  271. package/dist/esm/__tests__/fixtures/testStorage.d.ts +0 -76
  272. package/dist/esm/__tests__/legacyOids.test.d.ts +0 -1
  273. package/dist/esm/__tests__/mutations.test.d.ts +0 -1
  274. package/dist/esm/__tests__/queries.test.d.ts +0 -1
  275. package/dist/esm/__tests__/setup/indexedDB.d.ts +0 -1
  276. package/dist/esm/__tests__/undo.test.d.ts +0 -1
  277. package/dist/esm/backup.d.ts +0 -10
  278. package/dist/esm/client/Client.d.ts +0 -120
  279. package/dist/esm/client/ClientDescriptor.d.ts +0 -76
  280. package/dist/esm/client/constants.d.ts +0 -1
  281. package/dist/esm/constants.d.ts +0 -1
  282. package/dist/esm/context.d.ts +0 -38
  283. package/dist/esm/entities/Entity.d.ts +0 -148
  284. package/dist/esm/entities/Entity.test.d.ts +0 -1
  285. package/dist/esm/entities/EntityCache.d.ts +0 -15
  286. package/dist/esm/entities/EntityMetadata.d.ts +0 -68
  287. package/dist/esm/entities/EntityStore.d.ts +0 -80
  288. package/dist/esm/entities/OperationBatcher.d.ts +0 -52
  289. package/dist/esm/entities/types.d.ts +0 -103
  290. package/dist/esm/files/EntityFile.d.ts +0 -35
  291. package/dist/esm/files/FileManager.d.ts +0 -46
  292. package/dist/esm/files/FileStorage.d.ts +0 -39
  293. package/dist/esm/files/utils.d.ts +0 -10
  294. package/dist/esm/files/utils.test.d.ts +0 -1
  295. package/dist/esm/idb.d.ts +0 -13
  296. package/dist/esm/index.d.ts +0 -23
  297. package/dist/esm/metadata/AckInfoStore.d.ts +0 -10
  298. package/dist/esm/metadata/BaselinesStore.d.ts +0 -40
  299. package/dist/esm/metadata/LocalReplicaStore.d.ts +0 -18
  300. package/dist/esm/metadata/MessageCreator.d.ts +0 -19
  301. package/dist/esm/metadata/Metadata.d.ts +0 -135
  302. package/dist/esm/metadata/OperationsStore.d.ts +0 -62
  303. package/dist/esm/metadata/SchemaStore.d.ts +0 -9
  304. package/dist/esm/metadata/openMetadataDatabase.d.ts +0 -19
  305. package/dist/esm/migration/db.d.ts +0 -8
  306. package/dist/esm/migration/errors.d.ts +0 -5
  307. package/dist/esm/migration/openDatabase.d.ts +0 -20
  308. package/dist/esm/migration/paths.d.ts +0 -6
  309. package/dist/esm/migration/paths.test.d.ts +0 -1
  310. package/dist/esm/queries/BaseQuery.d.ts +0 -53
  311. package/dist/esm/queries/CollectionQueries.d.ts +0 -55
  312. package/dist/esm/queries/FindAllQuery.d.ts +0 -12
  313. package/dist/esm/queries/FindInfiniteQuery.d.ts +0 -19
  314. package/dist/esm/queries/FindOneQuery.d.ts +0 -12
  315. package/dist/esm/queries/FindPageQuery.d.ts +0 -24
  316. package/dist/esm/queries/GetQuery.d.ts +0 -10
  317. package/dist/esm/queries/QueryCache.d.ts +0 -17
  318. package/dist/esm/queries/QueryableStorage.d.ts +0 -20
  319. package/dist/esm/queries/dbQueries.d.ts +0 -22
  320. package/dist/esm/queries/keys.d.ts +0 -10
  321. package/dist/esm/queries/ranges.d.ts +0 -2
  322. package/dist/esm/queries/types.d.ts +0 -6
  323. package/dist/esm/queries/utils.d.ts +0 -3
  324. package/dist/esm/sync/FileSync.d.ts +0 -24
  325. package/dist/esm/sync/Heartbeat.d.ts +0 -25
  326. package/dist/esm/sync/PresenceManager.d.ts +0 -55
  327. package/dist/esm/sync/PushPullSync.d.ts +0 -39
  328. package/dist/esm/sync/ServerSyncEndpointProvider.d.ts +0 -34
  329. package/dist/esm/sync/Sync.d.ts +0 -160
  330. package/dist/esm/sync/WebSocketSync.d.ts +0 -44
  331. package/dist/esm/types.d.ts +0 -12
  332. package/dist/esm/utils/Disposable.d.ts +0 -6
  333. package/dist/esm/utils/Resolvable.d.ts +0 -8
  334. package/dist/esm/vanilla.d.ts +0 -1
  335. package/dist/tsconfig-cjs.tsbuildinfo +0 -1
  336. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,711 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Entity = void 0;
4
- const common_1 = require("@verdant-web/common");
5
- const utils_js_1 = require("../files/utils.js");
6
- const index_js_1 = require("../index.js");
7
- const EntityCache_js_1 = require("./EntityCache.js");
8
- class Entity extends common_1.EventSubscriber {
9
- constructor({ oid, schema, entityFamily: childCache, parent, ctx, metadataFamily, readonlyKeys, files, patchCreator, events, }) {
10
- super();
11
- this.fieldPath = [];
12
- // an internal representation of this Entity.
13
- // if present, this is the cached, known value. If null,
14
- // the entity is deleted. If undefined, we need to recompute
15
- // the view.
16
- this._viewData = undefined;
17
- this.validationError = undefined;
18
- this.cachedDeepUpdatedAt = null;
19
- // only used for root entities to track delete/restore state.
20
- this.wasDeletedLastChange = false;
21
- this.cachedView = undefined;
22
- this.onAdd = (_store, data) => {
23
- if (data.oid === this.oid) {
24
- this.addConfirmedData(data);
25
- }
26
- };
27
- this.onReplace = (_store, data) => {
28
- if (data.oid === this.oid) {
29
- this.replaceAllData(data);
30
- }
31
- };
32
- this.onResetAll = () => {
33
- this.resetAllData();
34
- };
35
- this.childIsNull = (child) => {
36
- if (child instanceof Entity) {
37
- const childView = child.view;
38
- return childView === null || childView === undefined;
39
- }
40
- return child === null || child === undefined;
41
- };
42
- /**
43
- * Pruning - when entities have invalid children, we 'prune' that
44
- * data up to the nearest prunable point - a nullable field,
45
- * or a list.
46
- */
47
- this.validate = (0, common_1.memoByKeys)(() => {
48
- var _a;
49
- this.validationError =
50
- (_a = (0, common_1.validateEntityField)({
51
- field: this.schema,
52
- value: this.rawView,
53
- fieldPath: this.fieldPath,
54
- depth: 1,
55
- })) !== null && _a !== void 0 ? _a : undefined;
56
- return this.validationError;
57
- }, () => [this.viewData]);
58
- this.viewWithMappedChildren = (mapper) => {
59
- const view = this.view;
60
- if (!view) {
61
- return null;
62
- }
63
- if (Array.isArray(view)) {
64
- const mapped = view.map((value) => {
65
- if (value instanceof Entity || value instanceof index_js_1.EntityFile) {
66
- return mapper(value);
67
- }
68
- else {
69
- return value;
70
- }
71
- });
72
- (0, common_1.assignOid)(mapped, this.oid);
73
- return mapped;
74
- }
75
- else {
76
- const mapped = Object.entries(view).reduce((acc, [key, value]) => {
77
- if (value instanceof Entity || value instanceof index_js_1.EntityFile) {
78
- acc[key] = mapper(value);
79
- }
80
- else {
81
- acc[key] = value;
82
- }
83
- return acc;
84
- }, {});
85
- (0, common_1.assignOid)(mapped, this.oid);
86
- return mapped;
87
- }
88
- };
89
- /**
90
- * A current snapshot of this Entity's data, including nested
91
- * Entities.
92
- */
93
- this.getSnapshot = () => {
94
- return this.viewWithMappedChildren((child) => child.getSnapshot());
95
- };
96
- // change management methods (internal use only)
97
- this.addPendingOperations = (operations) => {
98
- this.ctx.log('debug', 'Entity: adding pending operations', this.oid);
99
- const changes = this.metadataFamily.addPendingData(operations);
100
- for (const change of changes) {
101
- this.change(change);
102
- }
103
- };
104
- this.addConfirmedData = (data) => {
105
- this.ctx.log('debug', 'Entity: adding confirmed data', this.oid);
106
- const changes = this.metadataFamily.addConfirmedData(data);
107
- for (const change of changes) {
108
- this.change(change);
109
- }
110
- };
111
- this.replaceAllData = (data) => {
112
- this.ctx.log('debug', 'Entity: replacing all data', this.oid);
113
- const changes = this.metadataFamily.replaceAllData(data);
114
- for (const change of changes) {
115
- this.change(change);
116
- }
117
- };
118
- this.resetAllData = () => {
119
- this.ctx.log('debug', 'Entity: resetting all data', this.oid);
120
- this.cachedDeepUpdatedAt = null;
121
- this.cachedView = undefined;
122
- this._viewData = undefined;
123
- const changes = this.metadataFamily.replaceAllData({});
124
- for (const change of changes) {
125
- this.change(change);
126
- }
127
- };
128
- this.change = (ev) => {
129
- if (ev.oid === this.oid) {
130
- // reset cached view
131
- this._viewData = undefined;
132
- this.cachedView = undefined;
133
- // chain deepChanges to parents
134
- this.deepChange(this, ev);
135
- // emit the change, it's for us
136
- this.ctx.log('Emitting change event', this.oid);
137
- this.emit('change', { isLocal: ev.isLocal });
138
- // for root entities, we need to go ahead and decide if we're
139
- // deleted or not - so queries can exclude us if we are.
140
- if (!this.parent) {
141
- // newly deleted - emit event
142
- if (this.deleted && !this.wasDeletedLastChange) {
143
- this.ctx.log('debug', 'Entity deleted', this.oid);
144
- this.emit('delete', { isLocal: ev.isLocal });
145
- this.wasDeletedLastChange = true;
146
- }
147
- else if (!this.deleted && this.wasDeletedLastChange) {
148
- this.ctx.log('debug', 'Entity restored', this.oid);
149
- // newly restored - emit event
150
- this.emit('restore', { isLocal: ev.isLocal });
151
- this.wasDeletedLastChange = false;
152
- }
153
- }
154
- }
155
- else {
156
- // forward it to the correct family member. if none exists
157
- // in cache, no one will hear it anyways.
158
- const other = this.entityFamily.getCached(ev.oid);
159
- if (other && other instanceof Entity) {
160
- other.change(ev);
161
- }
162
- }
163
- };
164
- this.deepChange = (target, ev) => {
165
- var _a;
166
- // reset cached deep updated at timestamp; either this
167
- // entity or children have changed
168
- this.cachedDeepUpdatedAt = null;
169
- // reset this flag to recompute snapshot data - children
170
- // or self has changed. new pruning needs to happen.
171
- this.cachedView = undefined;
172
- this.ctx.log('debug', 'Deep change detected at', this.oid, 'reset cached view');
173
- this.ctx.log('debug', 'Emitting deep change event', this.oid);
174
- this.emit('changeDeep', target, ev);
175
- (_a = this.parent) === null || _a === void 0 ? void 0 : _a.deepChange(target, ev);
176
- };
177
- this.getChild = (key, oid) => {
178
- const schema = (0, common_1.getChildFieldSchema)(this.schema, key);
179
- if (!schema) {
180
- throw new Error(`No schema for key ${String(key)} in ${JSON.stringify(this.schema)}`);
181
- }
182
- return this.entityFamily.get({
183
- oid,
184
- schema,
185
- entityFamily: this.entityFamily,
186
- metadataFamily: this.metadataFamily,
187
- parent: this,
188
- ctx: this.ctx,
189
- files: this.files,
190
- fieldPath: [...this.fieldPath, key],
191
- patchCreator: this.patchCreator,
192
- events: this.events,
193
- });
194
- };
195
- // generic entity methods
196
- /**
197
- * Gets a value from this Entity. If the value
198
- * is an object, it will be wrapped in another
199
- * Entity.
200
- */
201
- this.get = (key) => {
202
- assertNotSymbol(key);
203
- const view = this.rawView;
204
- if (!view) {
205
- throw new Error(`Cannot access data at key ${key} on deleted entity ${this.oid}`);
206
- }
207
- const child = view[key];
208
- const schema = (0, common_1.getChildFieldSchema)(this.schema, key);
209
- if (!schema) {
210
- throw new Error(`No schema for key ${String(key)} in ${JSON.stringify(this.schema)}`);
211
- }
212
- if ((0, common_1.isRef)(child)) {
213
- if ((0, common_1.isFileRef)(child)) {
214
- if (schema.type !== 'file') {
215
- throw new Error(`Expected file schema for key ${String(key)}, got ${schema.type}`);
216
- }
217
- const file = this.files.get(child.id, {
218
- downloadRemote: !!schema.downloadRemote,
219
- });
220
- // FIXME: this seems bad and inconsistent
221
- file.subscribe('change', () => {
222
- this.deepChange(this, { isLocal: false, oid: this.oid });
223
- });
224
- return file;
225
- }
226
- else {
227
- return this.getChild(key, child.id);
228
- }
229
- }
230
- else {
231
- // prune invalid primitive fields
232
- if ((0, common_1.validateEntityField)({
233
- field: schema,
234
- value: child,
235
- fieldPath: [...this.fieldPath, key],
236
- depth: 1,
237
- requireDefaults: true,
238
- })) {
239
- if ((0, common_1.hasDefault)(schema)) {
240
- return (0, common_1.getDefault)(schema);
241
- }
242
- if ((0, common_1.isNullable)(schema)) {
243
- return null;
244
- }
245
- return undefined;
246
- }
247
- return child;
248
- }
249
- };
250
- this.processInputValue = (value, key) => {
251
- if (this.readonlyKeys.includes(key)) {
252
- throw new Error(`Cannot set readonly key ${key.toString()}`);
253
- }
254
- // disassociate incoming OIDs on values and generally break object
255
- // references. cloning doesn't work on files so those are
256
- // filtered out.
257
- // The goal here is to be safe about a bunch of cases that could
258
- // result in corrupt data, like...
259
- // ent1.set('objField', ent2.get('objField'))
260
- // or
261
- // var shared = { foo: 'bar' };
262
- // ent1.set('objField', shared);
263
- // ent2.set('objField', shared);
264
- // ... each of these would result in the same object being
265
- // referenced in multiple entities, which could mean introduction
266
- // of foreign OIDs, or one object being assigned different OIDs
267
- // with unexpected results.
268
- if (!(0, utils_js_1.isFile)(value)) {
269
- value = (0, common_1.cloneDeep)(value, false);
270
- }
271
- const fieldSchema = (0, common_1.getChildFieldSchema)(this.schema, key);
272
- if (fieldSchema) {
273
- (0, common_1.traverseCollectionFieldsAndApplyDefaults)(value, fieldSchema);
274
- const validationError = (0, common_1.validateEntityField)({
275
- field: fieldSchema,
276
- value,
277
- fieldPath: [...this.fieldPath, key],
278
- });
279
- if (validationError) {
280
- // TODO: is it a good idea to throw an error here? a runtime error won't be that helpful,
281
- // but also we don't really want invalid data supplied.
282
- throw new Error(validationError.message);
283
- }
284
- }
285
- return (0, utils_js_1.processValueFiles)(value, this.files.add);
286
- };
287
- this.getDeleteMode = (key) => {
288
- if (this.readonlyKeys.includes(key)) {
289
- return false;
290
- }
291
- // any is always deletable, and map values
292
- if (this.schema.type === 'any' || this.schema.type === 'map') {
293
- return 'delete';
294
- }
295
- if (this.schema.type === 'object') {
296
- const property = this.schema.properties[key];
297
- if (!property) {
298
- // huh, the property doesn't exist. it's ok to
299
- // remove I suppose.
300
- return 'delete';
301
- }
302
- if (property.type === 'any')
303
- return 'delete';
304
- // map can't be nullable. should it be?
305
- if (property.type === 'map')
306
- return false;
307
- if (property.nullable)
308
- return 'null';
309
- }
310
- // no other types are deletable
311
- return false;
312
- };
313
- /**
314
- * Returns the referent value of an item in the list, used for
315
- * operations which act on items. if the item is an object,
316
- * it will attempt to create an OID reference to it. If it
317
- * is a primitive, it will return the primitive.
318
- */
319
- this.getItemRefValue = (item) => {
320
- if (item instanceof Entity) {
321
- return (0, common_1.createRef)(item.oid);
322
- }
323
- if (item instanceof index_js_1.EntityFile) {
324
- return (0, common_1.createFileRef)(item.id);
325
- }
326
- if (typeof item === 'object') {
327
- const itemOid = (0, common_1.maybeGetOid)(item);
328
- if (!itemOid || !this.entityFamily.has(itemOid)) {
329
- throw new Error(`Cannot move object ${JSON.stringify(item)} which does not exist in this list`);
330
- }
331
- return (0, common_1.createRef)(itemOid);
332
- }
333
- else {
334
- return item;
335
- }
336
- };
337
- this.set = (key, value) => {
338
- assertNotSymbol(key);
339
- this.addPendingOperations(this.patchCreator.createSet(this.oid, key, this.processInputValue(value, key)));
340
- };
341
- /**
342
- * Returns a destructured version of this Entity, where child
343
- * Entities are accessible at their respective keys.
344
- */
345
- this.getAll = () => {
346
- return this.view;
347
- };
348
- this.delete = (key) => {
349
- if (this.isList) {
350
- assertNumber(key);
351
- this.addPendingOperations(this.patchCreator.createListDelete(this.oid, key));
352
- }
353
- else {
354
- // the key must be deletable - i.e. optional in the schema.
355
- const deleteMode = this.getDeleteMode(key);
356
- if (!deleteMode) {
357
- throw new Error(`Cannot delete key ${key.toString()} - the property is not marked as optional in the schema.`);
358
- }
359
- if (deleteMode === 'delete') {
360
- this.addPendingOperations(this.patchCreator.createRemove(this.oid, key));
361
- }
362
- else {
363
- this.addPendingOperations(this.patchCreator.createSet(this.oid, key, null));
364
- }
365
- }
366
- };
367
- // object entity methods
368
- this.keys = () => {
369
- if (!this.view)
370
- return [];
371
- return Object.keys(this.view);
372
- };
373
- this.entries = () => {
374
- if (!this.view)
375
- return [];
376
- return Object.entries(this.view);
377
- };
378
- this.values = () => {
379
- if (!this.view)
380
- return [];
381
- return Object.values(this.view);
382
- };
383
- this.update = (data, { merge = true, replaceSubObjects = false, } = {}) => {
384
- if (!merge && this.schema.type !== 'any' && this.schema.type !== 'map') {
385
- throw new Error('Cannot use .update without merge if the field has a strict schema type. merge: false is only available on "any" or "map" types.');
386
- }
387
- const changes = {};
388
- (0, common_1.assignOid)(changes, this.oid);
389
- for (const [key, field] of Object.entries(data)) {
390
- if (this.readonlyKeys.includes(key)) {
391
- throw new Error(`Cannot set readonly key ${key.toString()}`);
392
- }
393
- const fieldSchema = (0, common_1.getChildFieldSchema)(this.schema, key);
394
- if (fieldSchema) {
395
- (0, common_1.traverseCollectionFieldsAndApplyDefaults)(field, fieldSchema);
396
- }
397
- changes[key] = this.processInputValue(field, key);
398
- }
399
- this.addPendingOperations(this.patchCreator.createDiff(this.getSnapshot(), changes, {
400
- mergeUnknownObjects: !replaceSubObjects,
401
- defaultUndefined: merge,
402
- }));
403
- };
404
- this.push = (value) => {
405
- this.addPendingOperations(this.patchCreator.createListPush(this.oid, this.processInputValue(value, this.view.length)));
406
- };
407
- this.insert = (index, value) => {
408
- this.addPendingOperations(this.patchCreator.createListInsert(this.oid, index, this.processInputValue(value, index)));
409
- };
410
- this.move = (from, to) => {
411
- this.addPendingOperations(this.patchCreator.createListMoveByIndex(this.oid, from, to));
412
- };
413
- this.moveItem = (item, to) => {
414
- const itemRef = this.getItemRefValue(item);
415
- if ((0, common_1.isRef)(itemRef)) {
416
- this.addPendingOperations(this.patchCreator.createListMoveByRef(this.oid, itemRef, to));
417
- }
418
- else {
419
- const index = this.view.indexOf(item);
420
- if (index === -1) {
421
- throw new Error(`Cannot move item ${JSON.stringify(item)} which does not exist in this list`);
422
- }
423
- this.move(index, to);
424
- }
425
- };
426
- this.add = (value) => {
427
- this.addPendingOperations(this.patchCreator.createListAdd(this.oid, this.processInputValue(value, this.view.length)));
428
- };
429
- this.removeAll = (item) => {
430
- this.addPendingOperations(this.patchCreator.createListRemove(this.oid, this.getItemRefValue(item)));
431
- };
432
- this.removeFirst = (item) => {
433
- this.addPendingOperations(this.patchCreator.createListRemove(this.oid, this.getItemRefValue(item), 'first'));
434
- };
435
- this.removeLast = (item) => {
436
- this.addPendingOperations(this.patchCreator.createListRemove(this.oid, this.getItemRefValue(item), 'last'));
437
- };
438
- this.map = (callback) => {
439
- return this.view.map(callback);
440
- };
441
- this.filter = (callback) => {
442
- return this.view.filter(callback);
443
- };
444
- this.has = (value) => {
445
- if (!this.isList) {
446
- throw new Error('has() is only available on list entities');
447
- }
448
- const itemRef = this.getItemRefValue(value);
449
- if ((0, common_1.isRef)(itemRef)) {
450
- return this.view.some((item) => {
451
- if ((0, common_1.isRef)(item)) {
452
- return (0, common_1.compareRefs)(item, itemRef);
453
- }
454
- });
455
- }
456
- else {
457
- return this.view.includes(value);
458
- }
459
- };
460
- this.forEach = (callback) => {
461
- this.view.forEach(callback);
462
- };
463
- this.some = (predicate) => {
464
- return this.view.some(predicate);
465
- };
466
- this.every = (predicate) => {
467
- return this.view.every(predicate);
468
- };
469
- this.find = (predicate) => {
470
- return this.view.find(predicate);
471
- };
472
- this.includes = this.has;
473
- // TODO: make these escape hatches unnecessary
474
- this.__getViewData__ = (oid, type) => {
475
- return this.metadataFamily.get(oid).computeView(type === 'confirmed');
476
- };
477
- this.__getFamilyOids__ = () => this.metadataFamily.getAllOids();
478
- (0, common_1.assert)(!!oid, 'oid is required');
479
- this.oid = oid;
480
- this.readonlyKeys = readonlyKeys || [];
481
- this.ctx = ctx;
482
- this.files = files;
483
- this.schema = schema;
484
- this.entityFamily =
485
- childCache ||
486
- new EntityCache_js_1.EntityCache({
487
- initial: [this],
488
- });
489
- this.patchCreator = patchCreator;
490
- this.metadataFamily = metadataFamily;
491
- this.events = events;
492
- this.parent = parent;
493
- // TODO: should any but the root entity be listening to these?
494
- if (!this.parent) {
495
- events.add.attach(this.onAdd);
496
- events.replace.attach(this.onReplace);
497
- events.resetAll.attach(this.onResetAll);
498
- }
499
- }
500
- get metadata() {
501
- return this.metadataFamily.get(this.oid);
502
- }
503
- /**
504
- * The view of this Entity, not including nested
505
- * entities (that's the snapshot - see #getSnapshot())
506
- *
507
- * Nested entities are represented by refs.
508
- */
509
- get viewData() {
510
- if (this._viewData === undefined) {
511
- this._viewData = this.metadata.computeView();
512
- this.validate();
513
- }
514
- return this._viewData;
515
- }
516
- /** convenience getter for viewData.view */
517
- get rawView() {
518
- return this.viewData.view;
519
- }
520
- /**
521
- * An Entity's View includes the rendering of its underlying data,
522
- * connecting of children where refs were, and validation
523
- * and pruning according to schema.
524
- */
525
- get view() {
526
- if (this.cachedView !== undefined) {
527
- return this.cachedView;
528
- }
529
- if (this.viewData.deleted) {
530
- return null;
531
- }
532
- // can't use invalid data - but this should be bubbled up to
533
- // a prune point
534
- const rawView = this.rawView;
535
- const viewIsWrongType = (!rawView && !(0, common_1.isNullable)(this.schema)) ||
536
- (this.schema.type === 'array' && !Array.isArray(rawView)) ||
537
- ((this.schema.type === 'object' || this.schema.type === 'map') &&
538
- !(0, common_1.isObject)(rawView));
539
- if (viewIsWrongType) {
540
- // this will cover lists and maps, too.
541
- if ((0, common_1.hasDefault)(this.schema)) {
542
- return (0, common_1.getDefault)(this.schema);
543
- }
544
- // force null - invalid - will require parent prune
545
- return null;
546
- }
547
- this.cachedView = this.isList ? [] : {};
548
- (0, common_1.assignOid)(this.cachedView, this.oid);
549
- if (Array.isArray(rawView)) {
550
- const schema = (0, common_1.getChildFieldSchema)(this.schema, 0);
551
- if (!schema) {
552
- /**
553
- * PRUNE - this is a prune point. we can't continue
554
- * to render this data, so we'll just return [].
555
- * This skips the loop.
556
- */
557
- this.ctx.log('error', 'No child field schema for list entity.', this.oid);
558
- }
559
- else {
560
- for (let i = 0; i < rawView.length; i++) {
561
- const child = this.get(i);
562
- if (this.childIsNull(child) && !(0, common_1.isNullable)(schema)) {
563
- this.ctx.log('error', 'Child missing in non-nullable field', this.oid, 'index:', i);
564
- // this item will be pruned.
565
- }
566
- else {
567
- this.cachedView.push(child);
568
- }
569
- }
570
- }
571
- }
572
- else if ((0, common_1.isObject)(rawView)) {
573
- // iterate over known properties in object-type entities;
574
- // for maps, we just iterate over the keys.
575
- const keys = this.schema.type === 'object'
576
- ? Object.keys(this.schema.properties)
577
- : Object.keys(rawView);
578
- for (const key of keys) {
579
- const schema = (0, common_1.getChildFieldSchema)(this.schema, key);
580
- if (!schema) {
581
- /**
582
- * PRUNE - this is a prune point. we can't continue
583
- * to render this data. If this is a map, it will be
584
- * pruned empty. Otherwise, prune moves upward.
585
- *
586
- * This exits the loop.
587
- */
588
- this.ctx.log('error', 'No child field schema for object entity at key', key);
589
- if (this.schema.type === 'map') {
590
- // it's valid to prune here if it's a map
591
- this.cachedView = {};
592
- }
593
- else {
594
- // otherwise prune moves upward
595
- this.cachedView = null;
596
- }
597
- break;
598
- }
599
- const child = this.get(key);
600
- if (this.childIsNull(child) && !(0, common_1.isNullable)(schema)) {
601
- this.ctx.log('error', 'Child entity is missing for non-nullable field', this.oid, 'key:', key);
602
- /**
603
- * PRUNE - this is a prune point. we can't continue
604
- * to render this data. If this is a map, we can ignore
605
- * this value. Otherwise we must prune upward.
606
- * This exits the loop.
607
- */
608
- if (this.schema.type !== 'map') {
609
- this.cachedView = null;
610
- break;
611
- }
612
- }
613
- else {
614
- this.cachedView[key] = child;
615
- }
616
- }
617
- }
618
- return this.cachedView;
619
- }
620
- get uid() {
621
- return this.oid;
622
- }
623
- get deleted() {
624
- return this.viewData.deleted || this.view === null;
625
- }
626
- get invalid() {
627
- return !!this.validate();
628
- }
629
- get isList() {
630
- // have to turn TS off here as our two interfaces both implement
631
- // const values for this boolean.
632
- return (this.schema.type === 'array' || Array.isArray(this.viewData.view));
633
- }
634
- get updatedAt() {
635
- return this.viewData.updatedAt;
636
- }
637
- get deepUpdatedAt() {
638
- if (this.cachedDeepUpdatedAt)
639
- return this.cachedDeepUpdatedAt;
640
- // iterate over all children and take the latest timestamp
641
- let latest = this.updatedAt;
642
- if (this.isList) {
643
- this.forEach((child) => {
644
- if (child instanceof Entity) {
645
- const childTimestamp = child.deepUpdatedAt;
646
- if (childTimestamp && (!latest || childTimestamp > latest)) {
647
- latest = childTimestamp;
648
- }
649
- }
650
- });
651
- }
652
- else {
653
- this.values().forEach((child) => {
654
- if (child instanceof Entity) {
655
- const childTimestamp = child.deepUpdatedAt;
656
- if (childTimestamp && (!latest || childTimestamp > latest)) {
657
- latest = childTimestamp;
658
- }
659
- }
660
- });
661
- }
662
- this.cachedDeepUpdatedAt = latest;
663
- return latest;
664
- }
665
- /**
666
- * @internal - this is relevant to Verdant's system, not users.
667
- *
668
- * Indicates whether this document is from an outdated version
669
- * of the schema - which means it cannot be used until it is upgraded.
670
- */
671
- get isOutdatedVersion() {
672
- if (this.parent)
673
- return this.parent.isOutdatedVersion;
674
- return this.viewData.fromOlderVersion;
675
- }
676
- // array entity methods
677
- get length() {
678
- return this.view.length;
679
- }
680
- // list implements an iterator which maps items to wrapped
681
- // versions
682
- [Symbol.iterator]() {
683
- var _a;
684
- let index = 0;
685
- let length = (_a = this.view) === null || _a === void 0 ? void 0 : _a.length;
686
- return {
687
- next: () => {
688
- if (index < length) {
689
- return {
690
- value: this.get(index++),
691
- done: false,
692
- };
693
- }
694
- return {
695
- value: undefined,
696
- done: true,
697
- };
698
- },
699
- };
700
- }
701
- }
702
- exports.Entity = Entity;
703
- function assertNotSymbol(key) {
704
- if (typeof key === 'symbol')
705
- throw new Error("Symbol keys aren't supported");
706
- }
707
- function assertNumber(key) {
708
- if (typeof key !== 'number')
709
- throw new Error('Only number keys are supported in list entities');
710
- }
711
- //# sourceMappingURL=Entity.js.map