envio 3.0.0-alpha.21 → 3.0.0-alpha.22

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 (219) hide show
  1. package/bin.mjs +2 -48
  2. package/evm.schema.json +67 -0
  3. package/fuel.schema.json +67 -0
  4. package/index.d.ts +822 -38
  5. package/index.js +5 -3
  6. package/package.json +10 -8
  7. package/rescript.json +5 -9
  8. package/src/Address.res +4 -5
  9. package/src/Address.res.mjs +9 -12
  10. package/src/Api.res +15 -0
  11. package/src/Api.res.mjs +20 -0
  12. package/src/Batch.res +32 -34
  13. package/src/Batch.res.mjs +172 -187
  14. package/src/Bin.res +89 -0
  15. package/src/Bin.res.mjs +97 -0
  16. package/src/ChainFetcher.res +33 -57
  17. package/src/ChainFetcher.res.mjs +197 -227
  18. package/src/ChainManager.res +6 -14
  19. package/src/ChainManager.res.mjs +74 -85
  20. package/src/ChainMap.res +14 -16
  21. package/src/ChainMap.res.mjs +38 -38
  22. package/src/Config.res +193 -135
  23. package/src/Config.res.mjs +566 -592
  24. package/src/Core.res +182 -0
  25. package/src/Core.res.mjs +207 -0
  26. package/src/Ecosystem.res +25 -4
  27. package/src/Ecosystem.res.mjs +12 -13
  28. package/src/Env.res +20 -13
  29. package/src/Env.res.mjs +124 -113
  30. package/src/EnvSafe.res +269 -0
  31. package/src/EnvSafe.res.mjs +296 -0
  32. package/src/EnvSafe.resi +18 -0
  33. package/src/Envio.res +37 -26
  34. package/src/Envio.res.mjs +59 -60
  35. package/src/ErrorHandling.res +2 -2
  36. package/src/ErrorHandling.res.mjs +15 -15
  37. package/src/EventConfigBuilder.res +219 -81
  38. package/src/EventConfigBuilder.res.mjs +259 -202
  39. package/src/EventProcessing.res +27 -38
  40. package/src/EventProcessing.res.mjs +165 -183
  41. package/src/EventUtils.res +11 -11
  42. package/src/EventUtils.res.mjs +21 -22
  43. package/src/EvmTypes.res +0 -1
  44. package/src/EvmTypes.res.mjs +5 -5
  45. package/src/FetchState.res +360 -256
  46. package/src/FetchState.res.mjs +958 -914
  47. package/src/GlobalState.res +365 -351
  48. package/src/GlobalState.res.mjs +958 -992
  49. package/src/GlobalStateManager.res +1 -2
  50. package/src/GlobalStateManager.res.mjs +36 -44
  51. package/src/HandlerLoader.res +107 -23
  52. package/src/HandlerLoader.res.mjs +128 -38
  53. package/src/HandlerRegister.res +127 -103
  54. package/src/HandlerRegister.res.mjs +164 -164
  55. package/src/HandlerRegister.resi +12 -4
  56. package/src/Hasura.res +35 -22
  57. package/src/Hasura.res.mjs +158 -167
  58. package/src/InMemoryStore.res +20 -27
  59. package/src/InMemoryStore.res.mjs +64 -80
  60. package/src/InMemoryTable.res +34 -39
  61. package/src/InMemoryTable.res.mjs +165 -170
  62. package/src/Internal.res +52 -33
  63. package/src/Internal.res.mjs +84 -81
  64. package/src/LazyLoader.res.mjs +55 -61
  65. package/src/LoadLayer.res +77 -78
  66. package/src/LoadLayer.res.mjs +160 -189
  67. package/src/LoadManager.res +16 -21
  68. package/src/LoadManager.res.mjs +79 -84
  69. package/src/LogSelection.res +236 -68
  70. package/src/LogSelection.res.mjs +211 -141
  71. package/src/Logging.res +13 -9
  72. package/src/Logging.res.mjs +130 -143
  73. package/src/Main.res +428 -51
  74. package/src/Main.res.mjs +528 -271
  75. package/src/Persistence.res +77 -84
  76. package/src/Persistence.res.mjs +131 -132
  77. package/src/PgStorage.res +291 -167
  78. package/src/PgStorage.res.mjs +797 -817
  79. package/src/Prometheus.res +50 -58
  80. package/src/Prometheus.res.mjs +345 -373
  81. package/src/ReorgDetection.res +22 -24
  82. package/src/ReorgDetection.res.mjs +100 -106
  83. package/src/SafeCheckpointTracking.res +7 -7
  84. package/src/SafeCheckpointTracking.res.mjs +40 -43
  85. package/src/SimulateItems.res +41 -49
  86. package/src/SimulateItems.res.mjs +257 -272
  87. package/src/Sink.res +2 -2
  88. package/src/Sink.res.mjs +22 -26
  89. package/src/TableIndices.res +1 -2
  90. package/src/TableIndices.res.mjs +42 -48
  91. package/src/TestIndexer.res +196 -189
  92. package/src/TestIndexer.res.mjs +536 -536
  93. package/src/TestIndexerProxyStorage.res +15 -16
  94. package/src/TestIndexerProxyStorage.res.mjs +98 -122
  95. package/src/TestIndexerWorker.res +4 -0
  96. package/src/TestIndexerWorker.res.mjs +7 -0
  97. package/src/Throttler.res +3 -3
  98. package/src/Throttler.res.mjs +23 -24
  99. package/src/Time.res +1 -1
  100. package/src/Time.res.mjs +18 -21
  101. package/src/TopicFilter.res +3 -3
  102. package/src/TopicFilter.res.mjs +29 -30
  103. package/src/UserContext.res +93 -54
  104. package/src/UserContext.res.mjs +197 -182
  105. package/src/Utils.res +141 -86
  106. package/src/Utils.res.mjs +334 -295
  107. package/src/bindings/BigDecimal.res +0 -2
  108. package/src/bindings/BigDecimal.res.mjs +19 -23
  109. package/src/bindings/ClickHouse.res +28 -27
  110. package/src/bindings/ClickHouse.res.mjs +243 -240
  111. package/src/bindings/DateFns.res +11 -11
  112. package/src/bindings/DateFns.res.mjs +7 -7
  113. package/src/bindings/EventSource.res.mjs +2 -2
  114. package/src/bindings/Express.res +2 -5
  115. package/src/bindings/Hrtime.res +2 -2
  116. package/src/bindings/Hrtime.res.mjs +30 -32
  117. package/src/bindings/Lodash.res.mjs +1 -1
  118. package/src/bindings/NodeJs.res +14 -9
  119. package/src/bindings/NodeJs.res.mjs +20 -20
  120. package/src/bindings/Pino.res +8 -10
  121. package/src/bindings/Pino.res.mjs +40 -43
  122. package/src/bindings/Postgres.res +2 -5
  123. package/src/bindings/Postgres.res.mjs +9 -9
  124. package/src/bindings/PromClient.res +17 -2
  125. package/src/bindings/PromClient.res.mjs +30 -7
  126. package/src/bindings/SDSL.res.mjs +2 -2
  127. package/src/bindings/Viem.res +4 -4
  128. package/src/bindings/Viem.res.mjs +20 -22
  129. package/src/bindings/Vitest.res +1 -1
  130. package/src/bindings/Vitest.res.mjs +2 -2
  131. package/src/bindings/WebSocket.res +1 -1
  132. package/src/db/EntityHistory.res +9 -3
  133. package/src/db/EntityHistory.res.mjs +84 -59
  134. package/src/db/InternalTable.res +62 -60
  135. package/src/db/InternalTable.res.mjs +271 -203
  136. package/src/db/Schema.res +1 -2
  137. package/src/db/Schema.res.mjs +28 -32
  138. package/src/db/Table.res +28 -27
  139. package/src/db/Table.res.mjs +276 -292
  140. package/src/sources/EventRouter.res +21 -16
  141. package/src/sources/EventRouter.res.mjs +55 -57
  142. package/src/sources/Evm.res +17 -1
  143. package/src/sources/Evm.res.mjs +16 -8
  144. package/src/sources/EvmChain.res +15 -17
  145. package/src/sources/EvmChain.res.mjs +40 -42
  146. package/src/sources/Fuel.res +14 -1
  147. package/src/sources/Fuel.res.mjs +16 -8
  148. package/src/sources/FuelSDK.res +1 -1
  149. package/src/sources/FuelSDK.res.mjs +6 -8
  150. package/src/sources/HyperFuel.res +8 -10
  151. package/src/sources/HyperFuel.res.mjs +113 -123
  152. package/src/sources/HyperFuelClient.res.mjs +6 -7
  153. package/src/sources/HyperFuelSource.res +19 -20
  154. package/src/sources/HyperFuelSource.res.mjs +339 -356
  155. package/src/sources/HyperSync.res +11 -13
  156. package/src/sources/HyperSync.res.mjs +206 -220
  157. package/src/sources/HyperSyncClient.res +5 -7
  158. package/src/sources/HyperSyncClient.res.mjs +70 -75
  159. package/src/sources/HyperSyncHeightStream.res +8 -9
  160. package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
  161. package/src/sources/HyperSyncJsonApi.res +18 -15
  162. package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
  163. package/src/sources/HyperSyncSource.res +17 -21
  164. package/src/sources/HyperSyncSource.res.mjs +268 -290
  165. package/src/sources/Rpc.res +5 -5
  166. package/src/sources/Rpc.res.mjs +168 -192
  167. package/src/sources/RpcSource.res +166 -167
  168. package/src/sources/RpcSource.res.mjs +972 -1046
  169. package/src/sources/RpcWebSocketHeightStream.res +10 -11
  170. package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
  171. package/src/sources/SimulateSource.res +1 -1
  172. package/src/sources/SimulateSource.res.mjs +35 -38
  173. package/src/sources/Source.res +1 -1
  174. package/src/sources/Source.res.mjs +3 -3
  175. package/src/sources/SourceManager.res +39 -20
  176. package/src/sources/SourceManager.res.mjs +340 -371
  177. package/src/sources/SourceManager.resi +2 -1
  178. package/src/sources/Svm.res +12 -5
  179. package/src/sources/Svm.res.mjs +44 -41
  180. package/src/tui/Tui.res +23 -12
  181. package/src/tui/Tui.res.mjs +292 -290
  182. package/src/tui/bindings/Ink.res +2 -4
  183. package/src/tui/bindings/Ink.res.mjs +35 -41
  184. package/src/tui/components/BufferedProgressBar.res +7 -7
  185. package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
  186. package/src/tui/components/CustomHooks.res +1 -2
  187. package/src/tui/components/CustomHooks.res.mjs +102 -122
  188. package/src/tui/components/Messages.res +1 -2
  189. package/src/tui/components/Messages.res.mjs +38 -42
  190. package/src/tui/components/SyncETA.res +10 -11
  191. package/src/tui/components/SyncETA.res.mjs +178 -196
  192. package/src/tui/components/TuiData.res +1 -1
  193. package/src/tui/components/TuiData.res.mjs +7 -6
  194. package/src/vendored/Rest.res +52 -66
  195. package/src/vendored/Rest.res.mjs +324 -364
  196. package/svm.schema.json +67 -0
  197. package/src/Address.gen.ts +0 -8
  198. package/src/Config.gen.ts +0 -19
  199. package/src/Envio.gen.ts +0 -55
  200. package/src/EvmTypes.gen.ts +0 -6
  201. package/src/InMemoryStore.gen.ts +0 -6
  202. package/src/Internal.gen.ts +0 -64
  203. package/src/PgStorage.gen.ts +0 -10
  204. package/src/PgStorage.res.d.mts +0 -5
  205. package/src/Types.ts +0 -56
  206. package/src/bindings/BigDecimal.gen.ts +0 -14
  207. package/src/bindings/BigDecimal.res.d.mts +0 -5
  208. package/src/bindings/BigInt.gen.ts +0 -10
  209. package/src/bindings/BigInt.res +0 -70
  210. package/src/bindings/BigInt.res.d.mts +0 -5
  211. package/src/bindings/BigInt.res.mjs +0 -154
  212. package/src/bindings/Ethers.res.d.mts +0 -5
  213. package/src/bindings/Pino.gen.ts +0 -17
  214. package/src/bindings/Postgres.gen.ts +0 -8
  215. package/src/bindings/Postgres.res.d.mts +0 -5
  216. package/src/bindings/Promise.res +0 -67
  217. package/src/bindings/Promise.res.mjs +0 -26
  218. package/src/db/InternalTable.gen.ts +0 -36
  219. 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
  }