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.
- package/bin.mjs +2 -48
- package/evm.schema.json +67 -0
- package/fuel.schema.json +67 -0
- package/index.d.ts +822 -38
- package/index.js +5 -3
- package/package.json +10 -8
- package/rescript.json +5 -9
- package/src/Address.res +4 -5
- package/src/Address.res.mjs +9 -12
- package/src/Api.res +15 -0
- package/src/Api.res.mjs +20 -0
- package/src/Batch.res +32 -34
- package/src/Batch.res.mjs +172 -187
- package/src/Bin.res +89 -0
- package/src/Bin.res.mjs +97 -0
- package/src/ChainFetcher.res +33 -57
- package/src/ChainFetcher.res.mjs +197 -227
- package/src/ChainManager.res +6 -14
- package/src/ChainManager.res.mjs +74 -85
- package/src/ChainMap.res +14 -16
- package/src/ChainMap.res.mjs +38 -38
- package/src/Config.res +193 -135
- package/src/Config.res.mjs +566 -592
- package/src/Core.res +182 -0
- package/src/Core.res.mjs +207 -0
- package/src/Ecosystem.res +25 -4
- package/src/Ecosystem.res.mjs +12 -13
- package/src/Env.res +20 -13
- package/src/Env.res.mjs +124 -113
- package/src/EnvSafe.res +269 -0
- package/src/EnvSafe.res.mjs +296 -0
- package/src/EnvSafe.resi +18 -0
- package/src/Envio.res +37 -26
- package/src/Envio.res.mjs +59 -60
- package/src/ErrorHandling.res +2 -2
- package/src/ErrorHandling.res.mjs +15 -15
- package/src/EventConfigBuilder.res +219 -81
- package/src/EventConfigBuilder.res.mjs +259 -202
- package/src/EventProcessing.res +27 -38
- package/src/EventProcessing.res.mjs +165 -183
- package/src/EventUtils.res +11 -11
- package/src/EventUtils.res.mjs +21 -22
- package/src/EvmTypes.res +0 -1
- package/src/EvmTypes.res.mjs +5 -5
- package/src/FetchState.res +360 -256
- package/src/FetchState.res.mjs +958 -914
- package/src/GlobalState.res +365 -351
- package/src/GlobalState.res.mjs +958 -992
- package/src/GlobalStateManager.res +1 -2
- package/src/GlobalStateManager.res.mjs +36 -44
- package/src/HandlerLoader.res +107 -23
- package/src/HandlerLoader.res.mjs +128 -38
- package/src/HandlerRegister.res +127 -103
- package/src/HandlerRegister.res.mjs +164 -164
- package/src/HandlerRegister.resi +12 -4
- package/src/Hasura.res +35 -22
- package/src/Hasura.res.mjs +158 -167
- package/src/InMemoryStore.res +20 -27
- package/src/InMemoryStore.res.mjs +64 -80
- package/src/InMemoryTable.res +34 -39
- package/src/InMemoryTable.res.mjs +165 -170
- package/src/Internal.res +52 -33
- package/src/Internal.res.mjs +84 -81
- package/src/LazyLoader.res.mjs +55 -61
- package/src/LoadLayer.res +77 -78
- package/src/LoadLayer.res.mjs +160 -189
- package/src/LoadManager.res +16 -21
- package/src/LoadManager.res.mjs +79 -84
- package/src/LogSelection.res +236 -68
- package/src/LogSelection.res.mjs +211 -141
- package/src/Logging.res +13 -9
- package/src/Logging.res.mjs +130 -143
- package/src/Main.res +428 -51
- package/src/Main.res.mjs +528 -271
- package/src/Persistence.res +77 -84
- package/src/Persistence.res.mjs +131 -132
- package/src/PgStorage.res +291 -167
- package/src/PgStorage.res.mjs +797 -817
- package/src/Prometheus.res +50 -58
- package/src/Prometheus.res.mjs +345 -373
- package/src/ReorgDetection.res +22 -24
- package/src/ReorgDetection.res.mjs +100 -106
- package/src/SafeCheckpointTracking.res +7 -7
- package/src/SafeCheckpointTracking.res.mjs +40 -43
- package/src/SimulateItems.res +41 -49
- package/src/SimulateItems.res.mjs +257 -272
- package/src/Sink.res +2 -2
- package/src/Sink.res.mjs +22 -26
- package/src/TableIndices.res +1 -2
- package/src/TableIndices.res.mjs +42 -48
- package/src/TestIndexer.res +196 -189
- package/src/TestIndexer.res.mjs +536 -536
- package/src/TestIndexerProxyStorage.res +15 -16
- package/src/TestIndexerProxyStorage.res.mjs +98 -122
- package/src/TestIndexerWorker.res +4 -0
- package/src/TestIndexerWorker.res.mjs +7 -0
- package/src/Throttler.res +3 -3
- package/src/Throttler.res.mjs +23 -24
- package/src/Time.res +1 -1
- package/src/Time.res.mjs +18 -21
- package/src/TopicFilter.res +3 -3
- package/src/TopicFilter.res.mjs +29 -30
- package/src/UserContext.res +93 -54
- package/src/UserContext.res.mjs +197 -182
- package/src/Utils.res +141 -86
- package/src/Utils.res.mjs +334 -295
- package/src/bindings/BigDecimal.res +0 -2
- package/src/bindings/BigDecimal.res.mjs +19 -23
- package/src/bindings/ClickHouse.res +28 -27
- package/src/bindings/ClickHouse.res.mjs +243 -240
- package/src/bindings/DateFns.res +11 -11
- package/src/bindings/DateFns.res.mjs +7 -7
- package/src/bindings/EventSource.res.mjs +2 -2
- package/src/bindings/Express.res +2 -5
- package/src/bindings/Hrtime.res +2 -2
- package/src/bindings/Hrtime.res.mjs +30 -32
- package/src/bindings/Lodash.res.mjs +1 -1
- package/src/bindings/NodeJs.res +14 -9
- package/src/bindings/NodeJs.res.mjs +20 -20
- package/src/bindings/Pino.res +8 -10
- package/src/bindings/Pino.res.mjs +40 -43
- package/src/bindings/Postgres.res +2 -5
- package/src/bindings/Postgres.res.mjs +9 -9
- package/src/bindings/PromClient.res +17 -2
- package/src/bindings/PromClient.res.mjs +30 -7
- package/src/bindings/SDSL.res.mjs +2 -2
- package/src/bindings/Viem.res +4 -4
- package/src/bindings/Viem.res.mjs +20 -22
- package/src/bindings/Vitest.res +1 -1
- package/src/bindings/Vitest.res.mjs +2 -2
- package/src/bindings/WebSocket.res +1 -1
- package/src/db/EntityHistory.res +9 -3
- package/src/db/EntityHistory.res.mjs +84 -59
- package/src/db/InternalTable.res +62 -60
- package/src/db/InternalTable.res.mjs +271 -203
- package/src/db/Schema.res +1 -2
- package/src/db/Schema.res.mjs +28 -32
- package/src/db/Table.res +28 -27
- package/src/db/Table.res.mjs +276 -292
- package/src/sources/EventRouter.res +21 -16
- package/src/sources/EventRouter.res.mjs +55 -57
- package/src/sources/Evm.res +17 -1
- package/src/sources/Evm.res.mjs +16 -8
- package/src/sources/EvmChain.res +15 -17
- package/src/sources/EvmChain.res.mjs +40 -42
- package/src/sources/Fuel.res +14 -1
- package/src/sources/Fuel.res.mjs +16 -8
- package/src/sources/FuelSDK.res +1 -1
- package/src/sources/FuelSDK.res.mjs +6 -8
- package/src/sources/HyperFuel.res +8 -10
- package/src/sources/HyperFuel.res.mjs +113 -123
- package/src/sources/HyperFuelClient.res.mjs +6 -7
- package/src/sources/HyperFuelSource.res +19 -20
- package/src/sources/HyperFuelSource.res.mjs +339 -356
- package/src/sources/HyperSync.res +11 -13
- package/src/sources/HyperSync.res.mjs +206 -220
- package/src/sources/HyperSyncClient.res +5 -7
- package/src/sources/HyperSyncClient.res.mjs +70 -75
- package/src/sources/HyperSyncHeightStream.res +8 -9
- package/src/sources/HyperSyncHeightStream.res.mjs +78 -86
- package/src/sources/HyperSyncJsonApi.res +18 -15
- package/src/sources/HyperSyncJsonApi.res.mjs +201 -231
- package/src/sources/HyperSyncSource.res +17 -21
- package/src/sources/HyperSyncSource.res.mjs +268 -290
- package/src/sources/Rpc.res +5 -5
- package/src/sources/Rpc.res.mjs +168 -192
- package/src/sources/RpcSource.res +166 -167
- package/src/sources/RpcSource.res.mjs +972 -1046
- package/src/sources/RpcWebSocketHeightStream.res +10 -11
- package/src/sources/RpcWebSocketHeightStream.res.mjs +131 -145
- package/src/sources/SimulateSource.res +1 -1
- package/src/sources/SimulateSource.res.mjs +35 -38
- package/src/sources/Source.res +1 -1
- package/src/sources/Source.res.mjs +3 -3
- package/src/sources/SourceManager.res +39 -20
- package/src/sources/SourceManager.res.mjs +340 -371
- package/src/sources/SourceManager.resi +2 -1
- package/src/sources/Svm.res +12 -5
- package/src/sources/Svm.res.mjs +44 -41
- package/src/tui/Tui.res +23 -12
- package/src/tui/Tui.res.mjs +292 -290
- package/src/tui/bindings/Ink.res +2 -4
- package/src/tui/bindings/Ink.res.mjs +35 -41
- package/src/tui/components/BufferedProgressBar.res +7 -7
- package/src/tui/components/BufferedProgressBar.res.mjs +46 -46
- package/src/tui/components/CustomHooks.res +1 -2
- package/src/tui/components/CustomHooks.res.mjs +102 -122
- package/src/tui/components/Messages.res +1 -2
- package/src/tui/components/Messages.res.mjs +38 -42
- package/src/tui/components/SyncETA.res +10 -11
- package/src/tui/components/SyncETA.res.mjs +178 -196
- package/src/tui/components/TuiData.res +1 -1
- package/src/tui/components/TuiData.res.mjs +7 -6
- package/src/vendored/Rest.res +52 -66
- package/src/vendored/Rest.res.mjs +324 -364
- package/svm.schema.json +67 -0
- package/src/Address.gen.ts +0 -8
- package/src/Config.gen.ts +0 -19
- package/src/Envio.gen.ts +0 -55
- package/src/EvmTypes.gen.ts +0 -6
- package/src/InMemoryStore.gen.ts +0 -6
- package/src/Internal.gen.ts +0 -64
- package/src/PgStorage.gen.ts +0 -10
- package/src/PgStorage.res.d.mts +0 -5
- package/src/Types.ts +0 -56
- package/src/bindings/BigDecimal.gen.ts +0 -14
- package/src/bindings/BigDecimal.res.d.mts +0 -5
- package/src/bindings/BigInt.gen.ts +0 -10
- package/src/bindings/BigInt.res +0 -70
- package/src/bindings/BigInt.res.d.mts +0 -5
- package/src/bindings/BigInt.res.mjs +0 -154
- package/src/bindings/Ethers.res.d.mts +0 -5
- package/src/bindings/Pino.gen.ts +0 -17
- package/src/bindings/Postgres.gen.ts +0 -8
- package/src/bindings/Postgres.res.d.mts +0 -5
- package/src/bindings/Promise.res +0 -67
- package/src/bindings/Promise.res.mjs +0 -26
- package/src/db/InternalTable.gen.ts +0 -36
- package/src/sources/HyperSyncClient.gen.ts +0 -19
package/src/UserContext.res.mjs
CHANGED
|
@@ -2,29 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
import * as Table from "./db/Table.res.mjs";
|
|
4
4
|
import * as Utils from "./Utils.res.mjs";
|
|
5
|
-
import * as Js_exn from "rescript/lib/es6/js_exn.js";
|
|
6
5
|
import * as Address from "./Address.res.mjs";
|
|
7
6
|
import * as Logging from "./Logging.res.mjs";
|
|
7
|
+
import * as ChainMap from "./ChainMap.res.mjs";
|
|
8
8
|
import * as Internal from "./Internal.res.mjs";
|
|
9
9
|
import * as LoadLayer from "./LoadLayer.res.mjs";
|
|
10
|
-
import * as Belt_Array from "rescript/lib/es6/
|
|
11
|
-
import * as Belt_Option from "rescript/lib/es6/
|
|
10
|
+
import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
|
|
11
|
+
import * as Belt_Option from "@rescript/runtime/lib/es6/Belt_Option.js";
|
|
12
12
|
import * as ErrorHandling from "./ErrorHandling.res.mjs";
|
|
13
13
|
import * as InMemoryStore from "./InMemoryStore.res.mjs";
|
|
14
14
|
import * as InMemoryTable from "./InMemoryTable.res.mjs";
|
|
15
|
+
import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
|
|
15
16
|
import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
let codegenHelpMessage = `Rerun 'pnpm dev' to update generated code after schema.graphql changes.`;
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
let paramsByThis = new WeakMap();
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
let effectContextPrototype = (Object.create(null));
|
|
22
23
|
|
|
23
24
|
Object.defineProperty(effectContextPrototype, "log", {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
})
|
|
27
|
-
});
|
|
25
|
+
get: () => Logging.getUserLogger(paramsByThis.get(this).item)
|
|
26
|
+
});
|
|
28
27
|
|
|
29
28
|
var EffectContext = function(params, defaultShouldCache, callEffect) {
|
|
30
29
|
paramsByThis.set(this, params);
|
|
@@ -35,10 +34,10 @@ EffectContext.prototype = effectContextPrototype;
|
|
|
35
34
|
;
|
|
36
35
|
|
|
37
36
|
function initEffect(params) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
let callEffect = (effect, input) => {
|
|
38
|
+
let effectContext = new EffectContext(params, effect.defaultShouldCache, callEffect);
|
|
39
|
+
let effectArgs_cacheKey = Utils.Hash.makeOrThrow(S$RescriptSchema.reverseConvertOrThrow(input, effect.input));
|
|
40
|
+
let effectArgs = {
|
|
42
41
|
input: input,
|
|
43
42
|
context: effectContext,
|
|
44
43
|
cacheKey: effectArgs_cacheKey
|
|
@@ -49,68 +48,64 @@ function initEffect(params) {
|
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
function getWhereHandler(params, filter) {
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
let entityConfig = params.entityConfig;
|
|
52
|
+
let filterKeys = Object.keys(filter);
|
|
54
53
|
if (filterKeys.length === 0) {
|
|
55
|
-
|
|
54
|
+
Stdlib_JsError.throwWithMessage(`Empty filter passed to context.` + entityConfig.name + `.getWhere(). Please provide a filter like { fieldName: { _eq: value } }.`);
|
|
56
55
|
}
|
|
57
56
|
if (filterKeys.length > 1) {
|
|
58
|
-
|
|
57
|
+
Stdlib_JsError.throwWithMessage(`Multiple filter fields passed to context.` + entityConfig.name + `.getWhere(). Currently only one filter field per call is supported. Received fields: ` + filterKeys.join(", ") + `.`);
|
|
59
58
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
let dbFieldName = filterKeys[0];
|
|
60
|
+
let operatorObj = filter[dbFieldName];
|
|
61
|
+
let operatorKeys = Object.keys(operatorObj);
|
|
63
62
|
if (operatorKeys.length === 0) {
|
|
64
|
-
|
|
63
|
+
Stdlib_JsError.throwWithMessage(`Empty operator passed to context.` + entityConfig.name + `.getWhere({ ` + dbFieldName + `: {} }). Please provide an operator like { _eq: value }, { _gt: value }, { _lt: value }, { _gte: value }, { _lte: value }, or { _in: [values] }.`);
|
|
65
64
|
}
|
|
66
65
|
if (operatorKeys.length > 1) {
|
|
67
|
-
|
|
66
|
+
Stdlib_JsError.throwWithMessage(`Multiple operators passed to context.` + entityConfig.name + `.getWhere({ ` + dbFieldName + `: ... }). Currently only one operator per filter field is supported. Received operators: ` + operatorKeys.join(", ") + `.`);
|
|
68
67
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
let operatorKey = operatorKeys[0];
|
|
69
|
+
let match = Table.getFieldByDbName(entityConfig.table, dbFieldName);
|
|
70
|
+
let fieldSchema;
|
|
72
71
|
if (match !== undefined) {
|
|
73
72
|
if (match.TAG === "Field") {
|
|
74
|
-
|
|
75
|
-
fieldSchema = match$1.isIndex || match$1.linkedEntity !== undefined ? match$1.fieldSchema :
|
|
73
|
+
let match$1 = match._0;
|
|
74
|
+
fieldSchema = match$1.isIndex || match$1.linkedEntity !== undefined ? match$1.fieldSchema : Stdlib_JsError.throwWithMessage(`The field "` + dbFieldName + `" on entity "` + entityConfig.name + `" does not have an index. To use it in getWhere(), add the @index directive in your schema.graphql:\n\n ` + dbFieldName + `: ... @index\n\nThen run 'pnpm envio codegen' to regenerate.`);
|
|
76
75
|
} else {
|
|
77
|
-
fieldSchema =
|
|
76
|
+
fieldSchema = Stdlib_JsError.throwWithMessage(`The field "` + dbFieldName + `" on entity "` + entityConfig.name + `" is a derived field and cannot be used in getWhere(). Use the source entity's indexed field instead.`);
|
|
78
77
|
}
|
|
79
78
|
} else {
|
|
80
|
-
fieldSchema =
|
|
79
|
+
fieldSchema = Stdlib_JsError.throwWithMessage(`Invalid field "` + dbFieldName + `" in context.` + entityConfig.name + `.getWhere(). The field doesn't exist. ` + codegenHelpMessage);
|
|
81
80
|
}
|
|
82
81
|
if (operatorKey === "_in") {
|
|
83
|
-
|
|
84
|
-
return Promise.all(fieldValues.map(
|
|
85
|
-
return LoadLayer.loadByField(params.loadManager, params.persistence, "Eq", entityConfig, params.inMemoryStore, dbFieldName, fieldSchema, params.isPreload, params.item, fieldValue);
|
|
86
|
-
})).then(Belt_Array.concatMany);
|
|
82
|
+
let fieldValues = operatorObj[operatorKey];
|
|
83
|
+
return Promise.all(fieldValues.map(fieldValue => LoadLayer.loadByField(params.loadManager, params.persistence, "Eq", entityConfig, params.inMemoryStore, dbFieldName, fieldSchema, params.isPreload, params.item, fieldValue))).then(Belt_Array.concatMany);
|
|
87
84
|
}
|
|
88
85
|
if (operatorKey === "_gte" || operatorKey === "_lte") {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return LoadLayer.loadByField(params.loadManager, params.persistence, operator, entityConfig, params.inMemoryStore, dbFieldName, fieldSchema, params.isPreload, params.item, fieldValue);
|
|
93
|
-
};
|
|
86
|
+
let rangeOperator = operatorKey === "_gte" ? "Gt" : "Lt";
|
|
87
|
+
let fieldValue = operatorObj[operatorKey];
|
|
88
|
+
let loadWithOperator = operator => LoadLayer.loadByField(params.loadManager, params.persistence, operator, entityConfig, params.inMemoryStore, dbFieldName, fieldSchema, params.isPreload, params.item, fieldValue);
|
|
94
89
|
return Promise.all([
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
90
|
+
loadWithOperator("Eq"),
|
|
91
|
+
loadWithOperator(rangeOperator)
|
|
92
|
+
]).then(Belt_Array.concatMany);
|
|
98
93
|
}
|
|
99
|
-
|
|
94
|
+
let operator;
|
|
100
95
|
switch (operatorKey) {
|
|
101
96
|
case "_eq" :
|
|
102
|
-
|
|
103
|
-
|
|
97
|
+
operator = "Eq";
|
|
98
|
+
break;
|
|
104
99
|
case "_gt" :
|
|
105
|
-
|
|
106
|
-
|
|
100
|
+
operator = "Gt";
|
|
101
|
+
break;
|
|
107
102
|
case "_lt" :
|
|
108
|
-
|
|
109
|
-
|
|
103
|
+
operator = "Lt";
|
|
104
|
+
break;
|
|
110
105
|
default:
|
|
111
|
-
operator =
|
|
106
|
+
operator = Stdlib_JsError.throwWithMessage(`Invalid operator "` + operatorKey + `" in context.` + entityConfig.name + `.getWhere({ ` + dbFieldName + `: { ` + operatorKey + `: ... } }). Valid operators are _eq, _gt, _lt, _gte, _lte, _in.`);
|
|
112
107
|
}
|
|
113
|
-
|
|
108
|
+
let fieldValue$1 = operatorObj[operatorKey];
|
|
114
109
|
return LoadLayer.loadByField(params.loadManager, params.persistence, operator, entityConfig, params.inMemoryStore, dbFieldName, fieldSchema, params.isPreload, params.item, fieldValue$1);
|
|
115
110
|
}
|
|
116
111
|
|
|
@@ -122,132 +117,150 @@ function noopDeleteUnsafe(_entityId) {
|
|
|
122
117
|
|
|
123
118
|
}
|
|
124
119
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
type: "DELETE",
|
|
143
|
-
entityId: entityId,
|
|
144
|
-
checkpointId: params.checkpointId
|
|
145
|
-
}, params.shouldSaveHistory, undefined);
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
case "get" :
|
|
149
|
-
return function (entityId) {
|
|
150
|
-
return LoadLayer.loadById(params.loadManager, params.persistence, params.entityConfig, params.inMemoryStore, params.isPreload, params.item, entityId);
|
|
151
|
-
};
|
|
152
|
-
case "getOrCreate" :
|
|
153
|
-
return function (entity) {
|
|
154
|
-
return LoadLayer.loadById(params.loadManager, params.persistence, params.entityConfig, params.inMemoryStore, params.isPreload, params.item, entity.id).then(function (storageEntity) {
|
|
155
|
-
if (storageEntity !== undefined) {
|
|
156
|
-
return storageEntity;
|
|
157
|
-
} else {
|
|
158
|
-
set(entity);
|
|
159
|
-
return entity;
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
};
|
|
163
|
-
case "getOrThrow" :
|
|
164
|
-
return function (entityId, message) {
|
|
165
|
-
return LoadLayer.loadById(params.loadManager, params.persistence, params.entityConfig, params.inMemoryStore, params.isPreload, params.item, entityId).then(function (entity) {
|
|
166
|
-
if (entity !== undefined) {
|
|
167
|
-
return entity;
|
|
168
|
-
} else {
|
|
169
|
-
return Js_exn.raiseError(Belt_Option.getWithDefault(message, "Entity '" + params.entityConfig.name + "' with ID '" + entityId + "' is expected to exist."));
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
};
|
|
173
|
-
case "getWhere" :
|
|
174
|
-
return function (filter) {
|
|
175
|
-
return getWhereHandler(params, filter);
|
|
176
|
-
};
|
|
177
|
-
case "set" :
|
|
178
|
-
return set;
|
|
179
|
-
default:
|
|
180
|
-
return Js_exn.raiseError("Invalid context." + params.entityConfig.name + "." + prop + " operation.");
|
|
120
|
+
let entityTraps_get = (params, prop) => {
|
|
121
|
+
let set = params.isPreload ? noopSet : entity => InMemoryTable.Entity.set(InMemoryStore.getInMemTable(params.inMemoryStore, params.entityConfig), {
|
|
122
|
+
type: "SET",
|
|
123
|
+
entityId: entity.id,
|
|
124
|
+
entity: entity,
|
|
125
|
+
checkpointId: params.checkpointId
|
|
126
|
+
}, params.shouldSaveHistory, undefined);
|
|
127
|
+
switch (prop) {
|
|
128
|
+
case "deleteUnsafe" :
|
|
129
|
+
if (params.isPreload) {
|
|
130
|
+
return noopDeleteUnsafe;
|
|
131
|
+
} else {
|
|
132
|
+
return entityId => InMemoryTable.Entity.set(InMemoryStore.getInMemTable(params.inMemoryStore, params.entityConfig), {
|
|
133
|
+
type: "DELETE",
|
|
134
|
+
entityId: entityId,
|
|
135
|
+
checkpointId: params.checkpointId
|
|
136
|
+
}, params.shouldSaveHistory, undefined);
|
|
181
137
|
}
|
|
182
|
-
|
|
138
|
+
case "get" :
|
|
139
|
+
return entityId => LoadLayer.loadById(params.loadManager, params.persistence, params.entityConfig, params.inMemoryStore, params.isPreload, params.item, entityId);
|
|
140
|
+
case "getOrCreate" :
|
|
141
|
+
return entity => LoadLayer.loadById(params.loadManager, params.persistence, params.entityConfig, params.inMemoryStore, params.isPreload, params.item, entity.id).then(storageEntity => {
|
|
142
|
+
if (storageEntity !== undefined) {
|
|
143
|
+
return storageEntity;
|
|
144
|
+
} else {
|
|
145
|
+
set(entity);
|
|
146
|
+
return entity;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
case "getOrThrow" :
|
|
150
|
+
return (entityId, message) => LoadLayer.loadById(params.loadManager, params.persistence, params.entityConfig, params.inMemoryStore, params.isPreload, params.item, entityId).then(entity => {
|
|
151
|
+
if (entity !== undefined) {
|
|
152
|
+
return entity;
|
|
153
|
+
} else {
|
|
154
|
+
return Stdlib_JsError.throwWithMessage(Belt_Option.getWithDefault(message, `Entity '` + params.entityConfig.name + `' with ID '` + entityId + `' is expected to exist.`));
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
case "getWhere" :
|
|
158
|
+
return filter => getWhereHandler(params, filter);
|
|
159
|
+
case "set" :
|
|
160
|
+
return set;
|
|
161
|
+
default:
|
|
162
|
+
return Stdlib_JsError.throwWithMessage(`Invalid context.` + params.entityConfig.name + `.` + prop + ` operation.`);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
let entityTraps = {
|
|
167
|
+
get: entityTraps_get
|
|
183
168
|
};
|
|
184
169
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
170
|
+
let handlerTraps_get = (params, prop) => {
|
|
171
|
+
if (params.isResolved) {
|
|
172
|
+
ErrorHandling.mkLogAndRaise(Logging.getItemLogger(params.item), undefined, new Error(`Impossible to access context.` + prop + ` after the handler is resolved. Make sure you didn't miss an await in the handler.`));
|
|
173
|
+
}
|
|
174
|
+
switch (prop) {
|
|
175
|
+
case "chain" :
|
|
176
|
+
let chainId = Internal.getItemChainId(params.item);
|
|
177
|
+
return params.chains[chainId];
|
|
178
|
+
case "effect" :
|
|
179
|
+
return initEffect(params);
|
|
180
|
+
case "isPreload" :
|
|
181
|
+
return params.isPreload;
|
|
182
|
+
case "log" :
|
|
183
|
+
if (params.isPreload) {
|
|
184
|
+
return Logging.noopLogger;
|
|
185
|
+
} else {
|
|
186
|
+
return Logging.getUserLogger(params.item);
|
|
189
187
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
item: params.item,
|
|
209
|
-
checkpointId: params.checkpointId,
|
|
210
|
-
inMemoryStore: params.inMemoryStore,
|
|
211
|
-
loadManager: params.loadManager,
|
|
212
|
-
persistence: params.persistence,
|
|
213
|
-
isPreload: params.isPreload,
|
|
214
|
-
shouldSaveHistory: params.shouldSaveHistory,
|
|
215
|
-
chains: params.chains,
|
|
216
|
-
config: params.config,
|
|
217
|
-
isResolved: params.isResolved,
|
|
218
|
-
entityConfig: entityConfig
|
|
219
|
-
}, entityTraps);
|
|
220
|
-
} else {
|
|
221
|
-
return Js_exn.raiseError("Invalid context access by '" + prop + "' property. " + codegenHelpMessage);
|
|
222
|
-
}
|
|
188
|
+
default:
|
|
189
|
+
let entityConfig = params.config.userEntitiesByName[prop];
|
|
190
|
+
if (entityConfig !== undefined) {
|
|
191
|
+
return new Proxy({
|
|
192
|
+
item: params.item,
|
|
193
|
+
checkpointId: params.checkpointId,
|
|
194
|
+
inMemoryStore: params.inMemoryStore,
|
|
195
|
+
loadManager: params.loadManager,
|
|
196
|
+
persistence: params.persistence,
|
|
197
|
+
isPreload: params.isPreload,
|
|
198
|
+
shouldSaveHistory: params.shouldSaveHistory,
|
|
199
|
+
chains: params.chains,
|
|
200
|
+
config: params.config,
|
|
201
|
+
isResolved: params.isResolved,
|
|
202
|
+
entityConfig: entityConfig
|
|
203
|
+
}, entityTraps);
|
|
204
|
+
} else {
|
|
205
|
+
return Stdlib_JsError.throwWithMessage(`Invalid context access by '` + prop + `' property. ` + codegenHelpMessage);
|
|
223
206
|
}
|
|
224
|
-
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
let handlerTraps = {
|
|
211
|
+
get: handlerTraps_get
|
|
225
212
|
};
|
|
226
213
|
|
|
227
214
|
function getHandlerContext(params) {
|
|
228
215
|
return new Proxy(params, handlerTraps);
|
|
229
216
|
}
|
|
230
217
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
218
|
+
function makeAddFunction(params, contractName) {
|
|
219
|
+
return contractAddress => {
|
|
220
|
+
if (params.isResolved) {
|
|
221
|
+
ErrorHandling.mkLogAndRaise(Logging.getItemLogger(params.item), undefined, new Error(`Impossible to access context.chain after the contract register is resolved. Make sure you didn't miss an await in the handler.`));
|
|
222
|
+
}
|
|
223
|
+
let validatedAddress = params.config.ecosystem.name === "evm" ? (
|
|
224
|
+
params.config.lowercaseAddresses ? Address.Evm.fromAddressLowercaseOrThrow(contractAddress) : Address.Evm.fromAddressOrThrow(contractAddress)
|
|
225
|
+
) : contractAddress;
|
|
226
|
+
params.onRegister(params.item, validatedAddress, contractName);
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
let contractRegisterChainTraps_get = (params, prop) => {
|
|
231
|
+
if (prop === "id") {
|
|
232
|
+
return params.item.chain;
|
|
233
|
+
}
|
|
234
|
+
let isValidContract = ChainMap.values(params.config.chainMap).some(chain => chain.contracts.some(c => c.name === prop));
|
|
235
|
+
if (isValidContract) {
|
|
236
|
+
return {
|
|
237
|
+
add: makeAddFunction(params, prop)
|
|
238
|
+
};
|
|
239
|
+
} else {
|
|
240
|
+
return Stdlib_JsError.throwWithMessage(`Invalid contract name '` + prop + `' on context.chain. ` + codegenHelpMessage);
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
let contractRegisterChainTraps = {
|
|
245
|
+
get: contractRegisterChainTraps_get
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
let contractRegisterTraps_get = (params, prop) => {
|
|
249
|
+
if (params.isResolved) {
|
|
250
|
+
ErrorHandling.mkLogAndRaise(Logging.getItemLogger(params.item), undefined, new Error(`Impossible to access context.` + prop + ` after the contract register is resolved. Make sure you didn't miss an await in the handler.`));
|
|
251
|
+
}
|
|
252
|
+
switch (prop) {
|
|
253
|
+
case "chain" :
|
|
254
|
+
return new Proxy(params, contractRegisterChainTraps);
|
|
255
|
+
case "log" :
|
|
256
|
+
return Logging.getUserLogger(params.item);
|
|
257
|
+
default:
|
|
258
|
+
return Stdlib_JsError.throwWithMessage(`Invalid context access by '` + prop + `' property. Use context.chain.ContractName.add(address) to register contracts. ` + codegenHelpMessage);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
let contractRegisterTraps = {
|
|
263
|
+
get: contractRegisterTraps_get
|
|
251
264
|
};
|
|
252
265
|
|
|
253
266
|
function getContractRegisterContext(params) {
|
|
@@ -256,24 +269,26 @@ function getContractRegisterContext(params) {
|
|
|
256
269
|
|
|
257
270
|
function getContractRegisterArgs(params) {
|
|
258
271
|
return {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
272
|
+
event: params.item.event,
|
|
273
|
+
context: new Proxy(params, contractRegisterTraps)
|
|
274
|
+
};
|
|
262
275
|
}
|
|
263
276
|
|
|
264
277
|
export {
|
|
265
|
-
codegenHelpMessage
|
|
266
|
-
paramsByThis
|
|
267
|
-
effectContextPrototype
|
|
268
|
-
initEffect
|
|
269
|
-
getWhereHandler
|
|
270
|
-
noopSet
|
|
271
|
-
noopDeleteUnsafe
|
|
272
|
-
entityTraps
|
|
273
|
-
handlerTraps
|
|
274
|
-
getHandlerContext
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
+
codegenHelpMessage,
|
|
279
|
+
paramsByThis,
|
|
280
|
+
effectContextPrototype,
|
|
281
|
+
initEffect,
|
|
282
|
+
getWhereHandler,
|
|
283
|
+
noopSet,
|
|
284
|
+
noopDeleteUnsafe,
|
|
285
|
+
entityTraps,
|
|
286
|
+
handlerTraps,
|
|
287
|
+
getHandlerContext,
|
|
288
|
+
makeAddFunction,
|
|
289
|
+
contractRegisterChainTraps,
|
|
290
|
+
contractRegisterTraps,
|
|
291
|
+
getContractRegisterContext,
|
|
292
|
+
getContractRegisterArgs,
|
|
278
293
|
}
|
|
279
294
|
/* paramsByThis Not a pure module */
|