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/db/Schema.res CHANGED
@@ -1,8 +1,7 @@
1
- open Belt
2
1
  type t = dict<Table.table>
3
2
 
4
3
  let make = (tables: array<Table.table>) => {
5
- tables->Array.map(table => (table.tableName, table))->Js.Dict.fromArray
4
+ tables->Array.map(table => (table.tableName, table))->Dict.fromArray
6
5
  }
7
6
 
8
7
  exception UndefinedEntity(Table.derivedFromField)
@@ -1,55 +1,51 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
3
  import * as Table from "./Table.res.mjs";
4
- import * as Js_dict from "rescript/lib/es6/js_dict.js";
5
- import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
6
- import * as Caml_exceptions from "rescript/lib/es6/caml_exceptions.js";
4
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
7
5
 
8
6
  function make(tables) {
9
- return Js_dict.fromArray(Belt_Array.map(tables, (function (table) {
10
- return [
11
- table.tableName,
12
- table
13
- ];
14
- })));
7
+ return Object.fromEntries(tables.map(table => [
8
+ table.tableName,
9
+ table
10
+ ]));
15
11
  }
16
12
 
17
- var UndefinedEntity = /* @__PURE__ */Caml_exceptions.create("Schema.UndefinedEntity");
13
+ let UndefinedEntity = /* @__PURE__ */Primitive_exceptions.create("Schema.UndefinedEntity");
18
14
 
19
- var UndefinedFieldInEntity = /* @__PURE__ */Caml_exceptions.create("Schema.UndefinedFieldInEntity");
15
+ let UndefinedFieldInEntity = /* @__PURE__ */Primitive_exceptions.create("Schema.UndefinedFieldInEntity");
20
16
 
21
17
  function getDerivedFromFieldName(schema, derivedFromField) {
22
- var entity = schema[derivedFromField.derivedFromEntity];
18
+ let entity = schema[derivedFromField.derivedFromEntity];
23
19
  if (entity === undefined) {
24
20
  return {
25
- TAG: "Error",
26
- _0: {
27
- RE_EXN_ID: UndefinedEntity,
28
- _1: derivedFromField
29
- }
30
- };
21
+ TAG: "Error",
22
+ _0: {
23
+ RE_EXN_ID: UndefinedEntity,
24
+ _1: derivedFromField
25
+ }
26
+ };
31
27
  }
32
- var field = Table.getFieldByName(entity, derivedFromField.derivedFromField);
28
+ let field = Table.getFieldByName(entity, derivedFromField.derivedFromField);
33
29
  if (field !== undefined) {
34
30
  return {
35
- TAG: "Ok",
36
- _0: Table.getFieldName(field)
37
- };
31
+ TAG: "Ok",
32
+ _0: Table.getFieldName(field)
33
+ };
38
34
  } else {
39
35
  return {
40
- TAG: "Error",
41
- _0: {
42
- RE_EXN_ID: UndefinedFieldInEntity,
43
- _1: derivedFromField
44
- }
45
- };
36
+ TAG: "Error",
37
+ _0: {
38
+ RE_EXN_ID: UndefinedFieldInEntity,
39
+ _1: derivedFromField
40
+ }
41
+ };
46
42
  }
47
43
  }
48
44
 
49
45
  export {
50
- make ,
51
- UndefinedEntity ,
52
- UndefinedFieldInEntity ,
53
- getDerivedFromFieldName ,
46
+ make,
47
+ UndefinedEntity,
48
+ UndefinedFieldInEntity,
49
+ getDerivedFromFieldName,
54
50
  }
55
51
  /* Table Not a pure module */
package/src/db/Table.res CHANGED
@@ -1,5 +1,3 @@
1
- open Belt
2
-
3
1
  type primitive
4
2
  type derived
5
3
 
@@ -173,7 +171,7 @@ let mkTable = (tableName, ~compositeIndices=[], ~fields) => {
173
171
  }
174
172
 
175
173
  let getPrimaryKeyFieldNames = table =>
176
- table.fields->Array.keepMap(field =>
174
+ table.fields->Array.filterMap(field =>
177
175
  switch field {
178
176
  | Field({isPrimaryKey: true, fieldName}) => Some(fieldName)
179
177
  | _ => None
@@ -181,7 +179,7 @@ let getPrimaryKeyFieldNames = table =>
181
179
  )
182
180
 
183
181
  let getFields = table =>
184
- table.fields->Array.keepMap(field =>
182
+ table.fields->Array.filterMap(field =>
185
183
  switch field {
186
184
  | Field(field) => Some(field)
187
185
  | DerivedFrom(_) => None
@@ -193,7 +191,7 @@ let getFieldNames = table => {
193
191
  }
194
192
 
195
193
  let getNonDefaultFields = table =>
196
- table.fields->Array.keepMap(field =>
194
+ table.fields->Array.filterMap(field =>
197
195
  switch field {
198
196
  | Field(field) if field.defaultValue->Option.isNone => Some(field)
199
197
  | _ => None
@@ -201,7 +199,7 @@ let getNonDefaultFields = table =>
201
199
  )
202
200
 
203
201
  let getLinkedEntityFields = table =>
204
- table.fields->Array.keepMap(field =>
202
+ table.fields->Array.filterMap(field =>
205
203
  switch field {
206
204
  | Field({linkedEntity: Some(linkedEntityName)} as field) => Some((field, linkedEntityName))
207
205
  | Field({linkedEntity: None})
@@ -211,7 +209,7 @@ let getLinkedEntityFields = table =>
211
209
  )
212
210
 
213
211
  let getDerivedFromFields = table =>
214
- table.fields->Array.keepMap(field =>
212
+ table.fields->Array.filterMap(field =>
215
213
  switch field {
216
214
  | DerivedFrom(field) => Some(field)
217
215
  | Field(_) => None
@@ -223,10 +221,12 @@ let getNonDefaultFieldNames = table => {
223
221
  }
224
222
 
225
223
  let getFieldByName = (table, fieldName) =>
226
- table.fields->Js.Array2.find(field => field->getUserDefinedFieldName === fieldName)
224
+ table.fields->Array.find(field => field->getUserDefinedFieldName === fieldName)
225
+
226
+ // TODO: Test whether it should be passed via args and match the column type
227
227
 
228
228
  let getFieldByDbName = (table, dbFieldName) =>
229
- table.fields->Js.Array2.find(field =>
229
+ table.fields->Array.find(field =>
230
230
  switch field {
231
231
  | Field(f) => f->getDbFieldName
232
232
  | DerivedFrom({fieldName}) => fieldName
@@ -244,7 +244,7 @@ let getUnfilteredCompositeIndicesUnsafe = (table): array<array<compositeIndexFie
244
244
  compositeIndex->Array.map(indexField => {
245
245
  let dbFieldName = switch table->getFieldByName(indexField.fieldName) {
246
246
  | Some(field) => field->getFieldName
247
- | None => raise(NonExistingTableField(indexField.fieldName)) //Unexpected should be validated in schema parser
247
+ | None => throw(NonExistingTableField(indexField.fieldName)) //Unexpected should be validated in schema parser
248
248
  }
249
249
  {fieldName: dbFieldName, direction: indexField.direction}
250
250
  })
@@ -265,14 +265,14 @@ let toSqlParams = (table: table, ~schema, ~pgSchema) => {
265
265
  let arrayFieldTypes = []
266
266
  let hasArrayField = ref(false)
267
267
 
268
- let dbSchema: S.t<Js.Dict.t<unknown>> = S.schema(s =>
268
+ let dbSchema: S.t<dict<unknown>> = S.schema(s =>
269
269
  switch schema->S.classify {
270
270
  | Object({items}) =>
271
- let dict = Js.Dict.empty()
271
+ let dict = Dict.make()
272
272
  items->Belt.Array.forEach(({location, inlinedLocation, schema}) => {
273
273
  let rec coerceSchema = schema =>
274
274
  switch schema->S.classify {
275
- | BigInt => BigInt.schema->S.toUnknown
275
+ | BigInt => Utils.BigInt.schema->S.toUnknown
276
276
  | Option(child)
277
277
  | Null(child) =>
278
278
  S.null(child->coerceSchema)->S.toUnknown
@@ -295,22 +295,22 @@ let toSqlParams = (table: table, ~schema, ~pgSchema) => {
295
295
 
296
296
  let field = switch table->getFieldByDbName(location) {
297
297
  | Some(field) => field
298
- | None => raise(NonExistingTableField(location))
298
+ | None => throw(NonExistingTableField(location))
299
299
  }
300
300
 
301
301
  quotedFieldNames
302
- ->Js.Array2.push(inlinedLocation)
302
+ ->Array.push(inlinedLocation)
303
303
  ->ignore
304
304
  switch field {
305
305
  | Field({isPrimaryKey: false}) =>
306
306
  quotedNonPrimaryFieldNames
307
- ->Js.Array2.push(inlinedLocation)
307
+ ->Array.push(inlinedLocation)
308
308
  ->ignore
309
309
  | _ => ()
310
310
  }
311
311
 
312
312
  arrayFieldTypes
313
- ->Js.Array2.push(
313
+ ->Array.push(
314
314
  switch field {
315
315
  | Field(f) =>
316
316
  let pgFieldType = getPgFieldType(
@@ -318,7 +318,7 @@ let toSqlParams = (table: table, ~schema, ~pgSchema) => {
318
318
  ~pgSchema,
319
319
  ~isArray=true,
320
320
  ~isNullable=f.isNullable,
321
- ~isNumericArrayAsText=false, // TODO: Test whether it should be passed via args and match the column type
321
+ ~isNumericArrayAsText=false,
322
322
  )
323
323
  switch f.fieldType {
324
324
  | Enum(_) => `${(Text: Postgres.columnType :> string)}[]::${pgFieldType}`
@@ -329,10 +329,11 @@ let toSqlParams = (table: table, ~schema, ~pgSchema) => {
329
329
  },
330
330
  )
331
331
  ->ignore
332
- dict->Js.Dict.set(location, s.matches(schema->coerceSchema))
332
+ dict->Dict.set(location, s.matches(schema->coerceSchema))
333
333
  })
334
334
  dict
335
- | _ => Js.Exn.raiseError("Failed creating db schema. Expected an object schema for table")
335
+ | _ =>
336
+ JsError.throwWithMessage("Failed creating db schema. Expected an object schema for table")
336
337
  }
337
338
  )
338
339
 
@@ -350,7 +351,7 @@ Gets all single indicies
350
351
  And maps the fields defined to their actual db name (some have _id suffix)
351
352
  */
352
353
  let getSingleIndices = (table): array<string> => {
353
- let indexFields = table.fields->Array.keepMap(field =>
354
+ let indexFields = table.fields->Array.filterMap(field =>
354
355
  switch field {
355
356
  | Field(field) if field.isIndex => Some(field->getDbFieldName)
356
357
  | _ => None
@@ -361,17 +362,17 @@ let getSingleIndices = (table): array<string> => {
361
362
  ->getUnfilteredCompositeIndicesUnsafe
362
363
  //get all composite indices with only 1 field defined
363
364
  //this is still a single index
364
- ->Array.keepMap(cidx =>
365
+ ->Array.filterMap(cidx =>
365
366
  switch cidx {
366
367
  | [{fieldName}] => Some([fieldName])
367
368
  | _ => None
368
369
  }
369
370
  )
370
371
  ->Array.concat([indexFields])
371
- ->Array.concatMany
372
- ->Set.String.fromArray
373
- ->Set.String.toArray
374
- ->Js.Array2.sortInPlace
372
+ ->Array.flat
373
+ ->Set.fromArray
374
+ ->Set.toArray
375
+ ->Array.toSorted(String.compare)
375
376
  }
376
377
 
377
378
  /*
@@ -381,5 +382,5 @@ And maps the fields defined to their actual db name (some have _id suffix)
381
382
  let getCompositeIndices = (table): array<array<compositeIndexField>> => {
382
383
  table
383
384
  ->getUnfilteredCompositeIndicesUnsafe
384
- ->Array.keep(ind => ind->Array.length > 1)
385
+ ->Array.filter(ind => ind->Array.length > 1)
385
386
  }