envio 3.0.0-alpha.21 → 3.0.0-alpha.23

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 (220) hide show
  1. package/README.md +3 -3
  2. package/bin.mjs +2 -48
  3. package/evm.schema.json +67 -0
  4. package/fuel.schema.json +67 -0
  5. package/index.d.ts +822 -38
  6. package/index.js +5 -3
  7. package/package.json +10 -8
  8. package/rescript.json +5 -9
  9. package/src/Address.res +4 -5
  10. package/src/Address.res.mjs +9 -12
  11. package/src/Api.res +15 -0
  12. package/src/Api.res.mjs +20 -0
  13. package/src/Batch.res +32 -34
  14. package/src/Batch.res.mjs +172 -187
  15. package/src/Bin.res +89 -0
  16. package/src/Bin.res.mjs +97 -0
  17. package/src/ChainFetcher.res +33 -57
  18. package/src/ChainFetcher.res.mjs +197 -227
  19. package/src/ChainManager.res +6 -14
  20. package/src/ChainManager.res.mjs +74 -85
  21. package/src/ChainMap.res +14 -16
  22. package/src/ChainMap.res.mjs +38 -38
  23. package/src/Config.res +193 -135
  24. package/src/Config.res.mjs +566 -592
  25. package/src/Core.res +182 -0
  26. package/src/Core.res.mjs +207 -0
  27. package/src/Ecosystem.res +25 -4
  28. package/src/Ecosystem.res.mjs +12 -13
  29. package/src/Env.res +20 -13
  30. package/src/Env.res.mjs +124 -113
  31. package/src/EnvSafe.res +269 -0
  32. package/src/EnvSafe.res.mjs +296 -0
  33. package/src/EnvSafe.resi +18 -0
  34. package/src/Envio.res +37 -26
  35. package/src/Envio.res.mjs +59 -60
  36. package/src/ErrorHandling.res +2 -2
  37. package/src/ErrorHandling.res.mjs +15 -15
  38. package/src/EventConfigBuilder.res +219 -81
  39. package/src/EventConfigBuilder.res.mjs +259 -202
  40. package/src/EventProcessing.res +27 -38
  41. package/src/EventProcessing.res.mjs +165 -183
  42. package/src/EventUtils.res +11 -11
  43. package/src/EventUtils.res.mjs +21 -22
  44. package/src/EvmTypes.res +0 -1
  45. package/src/EvmTypes.res.mjs +5 -5
  46. package/src/FetchState.res +360 -256
  47. package/src/FetchState.res.mjs +958 -914
  48. package/src/GlobalState.res +365 -351
  49. package/src/GlobalState.res.mjs +958 -992
  50. package/src/GlobalStateManager.res +1 -2
  51. package/src/GlobalStateManager.res.mjs +36 -44
  52. package/src/HandlerLoader.res +107 -23
  53. package/src/HandlerLoader.res.mjs +128 -38
  54. package/src/HandlerRegister.res +127 -103
  55. package/src/HandlerRegister.res.mjs +164 -164
  56. package/src/HandlerRegister.resi +12 -4
  57. package/src/Hasura.res +35 -22
  58. package/src/Hasura.res.mjs +158 -167
  59. package/src/InMemoryStore.res +20 -27
  60. package/src/InMemoryStore.res.mjs +64 -80
  61. package/src/InMemoryTable.res +34 -39
  62. package/src/InMemoryTable.res.mjs +165 -170
  63. package/src/Internal.res +52 -33
  64. package/src/Internal.res.mjs +84 -81
  65. package/src/LazyLoader.res.mjs +55 -61
  66. package/src/LoadLayer.res +77 -78
  67. package/src/LoadLayer.res.mjs +160 -189
  68. package/src/LoadManager.res +16 -21
  69. package/src/LoadManager.res.mjs +79 -84
  70. package/src/LogSelection.res +236 -68
  71. package/src/LogSelection.res.mjs +211 -141
  72. package/src/Logging.res +13 -9
  73. package/src/Logging.res.mjs +130 -143
  74. package/src/Main.res +430 -51
  75. package/src/Main.res.mjs +530 -271
  76. package/src/Persistence.res +80 -84
  77. package/src/Persistence.res.mjs +131 -132
  78. package/src/PgStorage.res +294 -167
  79. package/src/PgStorage.res.mjs +799 -817
  80. package/src/Prometheus.res +50 -58
  81. package/src/Prometheus.res.mjs +345 -373
  82. package/src/ReorgDetection.res +22 -24
  83. package/src/ReorgDetection.res.mjs +100 -106
  84. package/src/SafeCheckpointTracking.res +7 -7
  85. package/src/SafeCheckpointTracking.res.mjs +40 -43
  86. package/src/SimulateItems.res +41 -49
  87. package/src/SimulateItems.res.mjs +257 -272
  88. package/src/Sink.res +2 -2
  89. package/src/Sink.res.mjs +22 -26
  90. package/src/TableIndices.res +1 -2
  91. package/src/TableIndices.res.mjs +42 -48
  92. package/src/TestIndexer.res +196 -189
  93. package/src/TestIndexer.res.mjs +536 -536
  94. package/src/TestIndexerProxyStorage.res +16 -16
  95. package/src/TestIndexerProxyStorage.res.mjs +99 -122
  96. package/src/TestIndexerWorker.res +4 -0
  97. package/src/TestIndexerWorker.res.mjs +7 -0
  98. package/src/Throttler.res +3 -3
  99. package/src/Throttler.res.mjs +23 -24
  100. package/src/Time.res +1 -1
  101. package/src/Time.res.mjs +18 -21
  102. package/src/TopicFilter.res +3 -3
  103. package/src/TopicFilter.res.mjs +29 -30
  104. package/src/UserContext.res +93 -54
  105. package/src/UserContext.res.mjs +197 -182
  106. package/src/Utils.res +141 -86
  107. package/src/Utils.res.mjs +334 -295
  108. package/src/bindings/BigDecimal.res +0 -2
  109. package/src/bindings/BigDecimal.res.mjs +19 -23
  110. package/src/bindings/ClickHouse.res +28 -27
  111. package/src/bindings/ClickHouse.res.mjs +243 -240
  112. package/src/bindings/DateFns.res +11 -11
  113. package/src/bindings/DateFns.res.mjs +7 -7
  114. package/src/bindings/EventSource.res.mjs +2 -2
  115. package/src/bindings/Express.res +2 -5
  116. package/src/bindings/Hrtime.res +2 -2
  117. package/src/bindings/Hrtime.res.mjs +30 -32
  118. package/src/bindings/Lodash.res.mjs +1 -1
  119. package/src/bindings/NodeJs.res +14 -9
  120. package/src/bindings/NodeJs.res.mjs +20 -20
  121. package/src/bindings/Pino.res +8 -10
  122. package/src/bindings/Pino.res.mjs +40 -43
  123. package/src/bindings/Postgres.res +7 -5
  124. package/src/bindings/Postgres.res.mjs +9 -9
  125. package/src/bindings/PromClient.res +17 -2
  126. package/src/bindings/PromClient.res.mjs +30 -7
  127. package/src/bindings/SDSL.res.mjs +2 -2
  128. package/src/bindings/Viem.res +4 -4
  129. package/src/bindings/Viem.res.mjs +20 -22
  130. package/src/bindings/Vitest.res +1 -1
  131. package/src/bindings/Vitest.res.mjs +2 -2
  132. package/src/bindings/WebSocket.res +1 -1
  133. package/src/db/EntityHistory.res +9 -3
  134. package/src/db/EntityHistory.res.mjs +84 -59
  135. package/src/db/InternalTable.res +62 -60
  136. package/src/db/InternalTable.res.mjs +271 -203
  137. package/src/db/Schema.res +1 -2
  138. package/src/db/Schema.res.mjs +28 -32
  139. package/src/db/Table.res +28 -27
  140. package/src/db/Table.res.mjs +276 -292
  141. package/src/sources/EventRouter.res +21 -16
  142. package/src/sources/EventRouter.res.mjs +55 -57
  143. package/src/sources/Evm.res +17 -1
  144. package/src/sources/Evm.res.mjs +16 -8
  145. package/src/sources/EvmChain.res +15 -17
  146. package/src/sources/EvmChain.res.mjs +40 -42
  147. package/src/sources/Fuel.res +14 -1
  148. package/src/sources/Fuel.res.mjs +16 -8
  149. package/src/sources/FuelSDK.res +1 -1
  150. package/src/sources/FuelSDK.res.mjs +6 -8
  151. package/src/sources/HyperFuel.res +8 -10
  152. package/src/sources/HyperFuel.res.mjs +113 -123
  153. package/src/sources/HyperFuelClient.res.mjs +6 -7
  154. package/src/sources/HyperFuelSource.res +19 -20
  155. package/src/sources/HyperFuelSource.res.mjs +339 -356
  156. package/src/sources/HyperSync.res +11 -13
  157. package/src/sources/HyperSync.res.mjs +206 -220
  158. package/src/sources/HyperSyncClient.res +5 -7
  159. package/src/sources/HyperSyncClient.res.mjs +70 -75
  160. package/src/sources/HyperSyncHeightStream.res +8 -9
  161. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  162. package/src/sources/HyperSyncJsonApi.res +18 -15
  163. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  164. package/src/sources/HyperSyncSource.res +17 -21
  165. package/src/sources/HyperSyncSource.res.mjs +268 -290
  166. package/src/sources/Rpc.res +5 -5
  167. package/src/sources/Rpc.res.mjs +168 -192
  168. package/src/sources/RpcSource.res +166 -167
  169. package/src/sources/RpcSource.res.mjs +972 -1046
  170. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  171. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  172. package/src/sources/SimulateSource.res +1 -1
  173. package/src/sources/SimulateSource.res.mjs +35 -38
  174. package/src/sources/Source.res +1 -1
  175. package/src/sources/Source.res.mjs +3 -3
  176. package/src/sources/SourceManager.res +39 -20
  177. package/src/sources/SourceManager.res.mjs +340 -371
  178. package/src/sources/SourceManager.resi +2 -1
  179. package/src/sources/Svm.res +12 -5
  180. package/src/sources/Svm.res.mjs +44 -41
  181. package/src/tui/Tui.res +23 -12
  182. package/src/tui/Tui.res.mjs +292 -290
  183. package/src/tui/bindings/Ink.res +2 -4
  184. package/src/tui/bindings/Ink.res.mjs +35 -41
  185. package/src/tui/components/BufferedProgressBar.res +7 -7
  186. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  187. package/src/tui/components/CustomHooks.res +1 -2
  188. package/src/tui/components/CustomHooks.res.mjs +102 -122
  189. package/src/tui/components/Messages.res +1 -2
  190. package/src/tui/components/Messages.res.mjs +38 -42
  191. package/src/tui/components/SyncETA.res +10 -11
  192. package/src/tui/components/SyncETA.res.mjs +178 -196
  193. package/src/tui/components/TuiData.res +1 -1
  194. package/src/tui/components/TuiData.res.mjs +7 -6
  195. package/src/vendored/Rest.res +52 -66
  196. package/src/vendored/Rest.res.mjs +324 -364
  197. package/svm.schema.json +67 -0
  198. package/src/Address.gen.ts +0 -8
  199. package/src/Config.gen.ts +0 -19
  200. package/src/Envio.gen.ts +0 -55
  201. package/src/EvmTypes.gen.ts +0 -6
  202. package/src/InMemoryStore.gen.ts +0 -6
  203. package/src/Internal.gen.ts +0 -64
  204. package/src/PgStorage.gen.ts +0 -10
  205. package/src/PgStorage.res.d.mts +0 -5
  206. package/src/Types.ts +0 -56
  207. package/src/bindings/BigDecimal.gen.ts +0 -14
  208. package/src/bindings/BigDecimal.res.d.mts +0 -5
  209. package/src/bindings/BigInt.gen.ts +0 -10
  210. package/src/bindings/BigInt.res +0 -70
  211. package/src/bindings/BigInt.res.d.mts +0 -5
  212. package/src/bindings/BigInt.res.mjs +0 -154
  213. package/src/bindings/Ethers.res.d.mts +0 -5
  214. package/src/bindings/Pino.gen.ts +0 -17
  215. package/src/bindings/Postgres.gen.ts +0 -8
  216. package/src/bindings/Postgres.res.d.mts +0 -5
  217. package/src/bindings/Promise.res +0 -67
  218. package/src/bindings/Promise.res.mjs +0 -26
  219. package/src/db/InternalTable.gen.ts +0 -36
  220. package/src/sources/HyperSyncClient.gen.ts +0 -19
package/src/LoadLayer.res CHANGED
@@ -1,5 +1,3 @@
1
- open Belt
2
-
3
1
  let loadById = (
4
2
  ~loadManager,
5
3
  ~persistence: Persistence.t,
@@ -13,12 +11,13 @@ let loadById = (
13
11
  let inMemTable = inMemoryStore->InMemoryStore.getInMemTable(~entityConfig)
14
12
 
15
13
  let load = async (idsToLoad, ~onError as _) => {
16
- let timerRef = Prometheus.StorageLoad.startOperation(~operation=key)
14
+ let storage = persistence->Persistence.getInitializedStorageOrThrow
15
+ let timerRef = Prometheus.StorageLoad.startOperation(~storage=storage.name, ~operation=key)
17
16
 
18
17
  // Since LoadManager.call prevents registerign entities already existing in the inMemoryStore,
19
18
  // we can be sure that we load only the new ones.
20
19
  let dbEntities = try {
21
- await (persistence->Persistence.getInitializedStorageOrThrow).loadByIdsOrThrow(
20
+ await storage.loadByIdsOrThrow(
22
21
  ~table=entityConfig.table,
23
22
  ~rowsSchema=entityConfig.rowsSchema,
24
23
  ~ids=idsToLoad,
@@ -28,15 +27,14 @@ let loadById = (
28
27
  reason->ErrorHandling.mkLogAndRaise(~logger=item->Logging.getItemLogger, ~msg=message)
29
28
  }
30
29
 
31
- let entitiesMap = Js.Dict.empty()
30
+ let entitiesMap = Dict.make()
31
+
32
+ //Set the entity in the in memory store
32
33
  for idx in 0 to dbEntities->Array.length - 1 {
33
- let entity = dbEntities->Js.Array2.unsafe_get(idx)
34
- entitiesMap->Js.Dict.set(entity.id, entity)
34
+ let entity = dbEntities->Array.getUnsafe(idx)
35
+ entitiesMap->Dict.set(entity.id, entity)
35
36
  }
36
- idsToLoad->Js.Array2.forEach(entityId => {
37
- // Set the entity in the in memory store
38
- // without overwriting existing values
39
- // which might be newer than what we got from db
37
+ idsToLoad->Array.forEach(entityId => {
40
38
  inMemTable->InMemoryTable.Entity.initValue(
41
39
  ~allowOverWriteEntity=false,
42
40
  ~key=entityId,
@@ -45,6 +43,7 @@ let loadById = (
45
43
  })
46
44
 
47
45
  timerRef->Prometheus.StorageLoad.endOperation(
46
+ ~storage=storage.name,
48
47
  ~operation=key,
49
48
  ~whereSize=idsToLoad->Array.length,
50
49
  ~size=dbEntities->Array.length,
@@ -90,12 +89,12 @@ let callEffect = (
90
89
 
91
90
  effect.handler(arg)
92
91
  ->Promise.thenResolve(output => {
93
- inMemTable.dict->Js.Dict.set(arg.cacheKey, output)
92
+ inMemTable.dict->Dict.set(arg.cacheKey, output)
94
93
  if arg.context.cache {
95
94
  inMemTable.idsToStore->Array.push(arg.cacheKey)->ignore
96
95
  }
97
96
  })
98
- ->Promise.catchResolve(exn => {
97
+ ->Utils.Promise.catchResolve(exn => {
99
98
  onError(~inputKey=arg.cacheKey, ~exn)
100
99
  })
101
100
  ->Promise.finally(() => {
@@ -143,13 +142,13 @@ let rec executeWithRateLimit = (
143
142
  ~inMemTable,
144
143
  ~timerRef,
145
144
  ~onError,
146
- )->Promise.ignoreValue,
145
+ )->Utils.Promise.ignoreValue,
147
146
  )
148
147
  ->ignore
149
148
  }
150
149
 
151
150
  | Some(state) =>
152
- let now = Js.Date.now()
151
+ let now = Date.now()
153
152
 
154
153
  // Check if we need to reset the window
155
154
  if now >= state.windowStartTime +. state.durationMs->Int.toFloat {
@@ -159,9 +158,9 @@ let rec executeWithRateLimit = (
159
158
  }
160
159
 
161
160
  // Split into immediate and queued
162
- let immediateCount = Js.Math.min_int(state.availableCalls, effectArgs->Array.length)
163
- let immediateArgs = effectArgs->Array.slice(~offset=0, ~len=immediateCount)
164
- let queuedArgs = effectArgs->Array.sliceToEnd(immediateCount)
161
+ let immediateCount = Math.Int.min(state.availableCalls, effectArgs->Array.length)
162
+ let immediateArgs = effectArgs->Belt.Array.slice(~offset=0, ~len=immediateCount)
163
+ let queuedArgs = effectArgs->Belt.Array.sliceToEnd(immediateCount)
165
164
 
166
165
  // Update available calls
167
166
  state.availableCalls = state.availableCalls - immediateCount
@@ -176,7 +175,7 @@ let rec executeWithRateLimit = (
176
175
  ~inMemTable,
177
176
  ~timerRef,
178
177
  ~onError,
179
- )->Promise.ignoreValue,
178
+ )->Utils.Promise.ignoreValue,
180
179
  )
181
180
  ->ignore
182
181
  }
@@ -225,7 +224,7 @@ let rec executeWithRateLimit = (
225
224
  ~isFromQueue=true,
226
225
  )
227
226
  })
228
- ->Promise.ignoreValue,
227
+ ->Utils.Promise.ignoreValue,
229
228
  )
230
229
  ->ignore
231
230
  }
@@ -249,7 +248,7 @@ let loadEffect = (
249
248
  let inMemTable = inMemoryStore->InMemoryStore.getEffectInMemTable(~effect)
250
249
 
251
250
  let load = async (args, ~onError) => {
252
- let idsToLoad = args->Js.Array2.map((arg: Internal.effectArgs) => arg.cacheKey)
251
+ let idsToLoad = args->Array.map((arg: Internal.effectArgs) => arg.cacheKey)
253
252
  let idsFromCache = Utils.Set.make()
254
253
 
255
254
  if (
@@ -258,11 +257,12 @@ let loadEffect = (
258
257
  | _ => false
259
258
  }
260
259
  ) {
261
- let timerRef = Prometheus.StorageLoad.startOperation(~operation=key)
260
+ let storage = persistence->Persistence.getInitializedStorageOrThrow
261
+ let timerRef = Prometheus.StorageLoad.startOperation(~storage=storage.name, ~operation=key)
262
262
  let {table, outputSchema} = effect.storageMeta
263
263
 
264
264
  let dbEntities = try {
265
- await (persistence->Persistence.getInitializedStorageOrThrow).loadByIdsOrThrow(
265
+ await storage.loadByIdsOrThrow(
266
266
  ~table,
267
267
  ~rowsSchema=Internal.effectCacheItemRowsSchema,
268
268
  ~ids=idsToLoad,
@@ -279,11 +279,11 @@ let loadEffect = (
279
279
  []
280
280
  }
281
281
 
282
- dbEntities->Js.Array2.forEach(dbEntity => {
282
+ dbEntities->Array.forEach(dbEntity => {
283
283
  try {
284
284
  let output = dbEntity.output->S.parseOrThrow(outputSchema)
285
285
  idsFromCache->Utils.Set.add(dbEntity.id)->ignore
286
- inMemTable.dict->Js.Dict.set(dbEntity.id, output)
286
+ inMemTable.dict->Dict.set(dbEntity.id, output)
287
287
  } catch {
288
288
  | S.Raised(error) =>
289
289
  inMemTable.invalidationsCount = inMemTable.invalidationsCount + 1
@@ -300,6 +300,7 @@ let loadEffect = (
300
300
  })
301
301
 
302
302
  timerRef->Prometheus.StorageLoad.endOperation(
303
+ ~storage=storage.name,
303
304
  ~operation=key,
304
305
  ~whereSize=idsToLoad->Array.length,
305
306
  ~size=dbEntities->Array.length,
@@ -323,7 +324,7 @@ let loadEffect = (
323
324
  ~inMemTable,
324
325
  ~onError,
325
326
  ~isFromQueue=false,
326
- )->Promise.ignoreValue
327
+ )->Utils.Promise.ignoreValue
327
328
  }
328
329
  }
329
330
  }
@@ -333,7 +334,7 @@ let loadEffect = (
333
334
  ~load,
334
335
  ~shouldGroup,
335
336
  ~hasher=args => args.cacheKey,
336
- ~getUnsafeInMemory=hash => inMemTable.dict->Js.Dict.unsafeGet(hash),
337
+ ~getUnsafeInMemory=hash => inMemTable.dict->Dict.getUnsafe(hash),
337
338
  ~hasInMemory=hash => inMemTable.dict->Utils.Dict.has(hash),
338
339
  ~input=effectArgs,
339
340
  )
@@ -360,11 +361,12 @@ let loadByField = (
360
361
  let inMemTable = inMemoryStore->InMemoryStore.getInMemTable(~entityConfig)
361
362
 
362
363
  let load = async (fieldValues: array<'fieldValue>, ~onError as _) => {
363
- let timerRef = Prometheus.StorageLoad.startOperation(~operation=key)
364
+ let storage = persistence->Persistence.getInitializedStorageOrThrow
365
+ let timerRef = Prometheus.StorageLoad.startOperation(~storage=storage.name, ~operation=key)
364
366
 
365
367
  let size = ref(0)
366
368
 
367
- let indiciesToLoad = fieldValues->Js.Array2.map((fieldValue): TableIndices.Index.t => {
369
+ let indiciesToLoad = fieldValues->Array.map((fieldValue): TableIndices.Index.t => {
368
370
  Single({
369
371
  fieldName,
370
372
  fieldValue: TableIndices.FieldValue.castFrom(fieldValue),
@@ -372,59 +374,56 @@ let loadByField = (
372
374
  })
373
375
  })
374
376
 
375
- let _ =
376
- await indiciesToLoad
377
- ->Js.Array2.map(async index => {
378
- inMemTable->InMemoryTable.Entity.addEmptyIndex(~index)
379
- try {
380
- let entities = await (
381
- persistence->Persistence.getInitializedStorageOrThrow
382
- ).loadByFieldOrThrow(
383
- ~operator=switch index {
384
- | Single({operator: Gt}) => #">"
385
- | Single({operator: Eq}) => #"="
386
- | Single({operator: Lt}) => #"<"
387
- },
388
- ~table=entityConfig.table,
389
- ~rowsSchema=entityConfig.rowsSchema,
390
- ~fieldName=index->TableIndices.Index.getFieldName,
391
- ~fieldValue=switch index {
392
- | Single({fieldValue}) => fieldValue
393
- },
394
- ~fieldSchema=fieldValueSchema->(
395
- Utils.magic: S.t<'fieldValue> => S.t<TableIndices.FieldValue.t>
396
- ),
397
- )
398
-
399
- entities->Array.forEach(entity => {
400
- //Set the entity in the in memory store
401
- inMemTable->InMemoryTable.Entity.initValue(
402
- ~allowOverWriteEntity=false,
403
- ~key=entity.id,
404
- ~entity=Some(entity),
405
- )
406
- })
377
+ let _ = await indiciesToLoad
378
+ ->Array.map(async index => {
379
+ inMemTable->InMemoryTable.Entity.addEmptyIndex(~index)
380
+ try {
381
+ let entities = await storage.loadByFieldOrThrow(
382
+ ~operator=switch index {
383
+ | Single({operator: Gt}) => #">"
384
+ | Single({operator: Eq}) => #"="
385
+ | Single({operator: Lt}) => #"<"
386
+ },
387
+ ~table=entityConfig.table,
388
+ ~rowsSchema=entityConfig.rowsSchema,
389
+ ~fieldName=index->TableIndices.Index.getFieldName,
390
+ ~fieldValue=switch index {
391
+ | Single({fieldValue}) => fieldValue
392
+ },
393
+ ~fieldSchema=fieldValueSchema->(
394
+ Utils.magic: S.t<'fieldValue> => S.t<TableIndices.FieldValue.t>
395
+ ),
396
+ )
407
397
 
408
- size := size.contents + entities->Array.length
409
- } catch {
410
- | Persistence.StorageError({message, reason}) =>
411
- reason->ErrorHandling.mkLogAndRaise(
412
- ~logger=Logging.createChildFrom(
413
- ~logger=item->Logging.getItemLogger,
414
- ~params={
415
- "operator": operatorCallName,
416
- "tableName": entityConfig.table.tableName,
417
- "fieldName": fieldName,
418
- "fieldValue": fieldValue,
419
- },
420
- ),
421
- ~msg=message,
398
+ entities->Array.forEach(entity => {
399
+ inMemTable->InMemoryTable.Entity.initValue(
400
+ ~allowOverWriteEntity=false,
401
+ ~key=entity.id,
402
+ ~entity=Some(entity),
422
403
  )
423
- }
424
- })
425
- ->Promise.all
404
+ })
405
+
406
+ size := size.contents + entities->Array.length
407
+ } catch {
408
+ | Persistence.StorageError({message, reason}) =>
409
+ reason->ErrorHandling.mkLogAndRaise(
410
+ ~logger=Logging.createChildFrom(
411
+ ~logger=item->Logging.getItemLogger,
412
+ ~params={
413
+ "operator": operatorCallName,
414
+ "tableName": entityConfig.table.tableName,
415
+ "fieldName": fieldName,
416
+ "fieldValue": fieldValue,
417
+ },
418
+ ),
419
+ ~msg=message,
420
+ )
421
+ }
422
+ })
423
+ ->Promise.all
426
424
 
427
425
  timerRef->Prometheus.StorageLoad.endOperation(
426
+ ~storage=storage.name,
428
427
  ~operation=key,
429
428
  ~whereSize=fieldValues->Array.length,
430
429
  ~size=size.contents,