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
|
@@ -1,15 +1,38 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
+
import * as PromClient from "prom-client";
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
function getOrCreate(name, create) {
|
|
6
|
+
let existing = PromClient.register.getSingleMetric(name);
|
|
7
|
+
if (existing !== undefined) {
|
|
8
|
+
return existing;
|
|
9
|
+
} else {
|
|
10
|
+
return create();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function makeCounter(config) {
|
|
15
|
+
return getOrCreate(config.name, () => new PromClient.Counter(config));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let Counter = {
|
|
19
|
+
makeCounter: makeCounter
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
function makeGauge(config) {
|
|
23
|
+
return getOrCreate(config.name, () => new PromClient.Gauge(config));
|
|
24
|
+
}
|
|
5
25
|
|
|
6
|
-
|
|
26
|
+
let Gauge = {
|
|
27
|
+
makeGauge: makeGauge
|
|
28
|
+
};
|
|
7
29
|
|
|
8
|
-
|
|
30
|
+
let Summary = {};
|
|
9
31
|
|
|
10
32
|
export {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
33
|
+
getOrCreate,
|
|
34
|
+
Counter,
|
|
35
|
+
Gauge,
|
|
36
|
+
Summary,
|
|
14
37
|
}
|
|
15
|
-
/*
|
|
38
|
+
/* prom-client Not a pure module */
|
package/src/bindings/Viem.res
CHANGED
|
@@ -14,7 +14,7 @@ type decodedEvent<'a> = {
|
|
|
14
14
|
type hex = EvmTypes.Hex.t
|
|
15
15
|
@module("viem") external toHex: 'a => hex = "toHex"
|
|
16
16
|
@module("viem") external keccak256: hex => hex = "keccak256"
|
|
17
|
-
@module("viem") external keccak256Bytes:
|
|
17
|
+
@module("viem") external keccak256Bytes: Uint8Array.t => hex = "keccak256"
|
|
18
18
|
@module("viem") external pad: hex => hex = "pad"
|
|
19
19
|
@module("viem")
|
|
20
20
|
external encodePacked: (~types: array<string>, ~values: array<'a>) => hex = "encodePacked"
|
|
@@ -24,7 +24,7 @@ type sizeOptions = {size: int}
|
|
|
24
24
|
@module("viem") external bigintToHex: (bigint, ~options: sizeOptions=?) => hex = "numberToHex"
|
|
25
25
|
@module("viem") external stringToHex: (string, ~options: sizeOptions=?) => hex = "stringToHex"
|
|
26
26
|
@module("viem") external boolToHex: (bool, ~options: sizeOptions=?) => hex = "boolToHex"
|
|
27
|
-
@module("viem") external bytesToHex: (
|
|
27
|
+
@module("viem") external bytesToHex: (Uint8Array.t, ~options: sizeOptions=?) => hex = "bytesToHex"
|
|
28
28
|
@module("viem") external concat: array<hex> => hex = "concat"
|
|
29
29
|
|
|
30
30
|
exception ParseError(exn)
|
|
@@ -37,7 +37,7 @@ let parseLogOrThrow = (
|
|
|
37
37
|
~data,
|
|
38
38
|
) => {
|
|
39
39
|
switch contractNameAbiMapping->Utils.Dict.dangerouslyGetNonOption(contractName) {
|
|
40
|
-
| None =>
|
|
40
|
+
| None => throw(UnknownContractName({contractName: contractName}))
|
|
41
41
|
| Some(abi) =>
|
|
42
42
|
let viemLog: eventLog = {
|
|
43
43
|
abi,
|
|
@@ -46,7 +46,7 @@ let parseLogOrThrow = (
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
try viemLog->decodeEventLogOrThrow catch {
|
|
49
|
-
| exn =>
|
|
49
|
+
| exn => throw(ParseError(exn))
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -1,46 +1,44 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
3
|
import * as Viem from "viem";
|
|
4
|
-
import * as
|
|
5
|
-
import * as
|
|
6
|
-
import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js";
|
|
4
|
+
import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
|
|
5
|
+
import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
let ParseError = /* @__PURE__ */Primitive_exceptions.create("Viem.ParseError");
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
let UnknownContractName = /* @__PURE__ */Primitive_exceptions.create("Viem.UnknownContractName");
|
|
11
10
|
|
|
12
11
|
function parseLogOrThrow(contractNameAbiMapping, contractName, topics, data) {
|
|
13
|
-
|
|
12
|
+
let abi = contractNameAbiMapping[contractName];
|
|
14
13
|
if (abi !== undefined) {
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
let viemLog_abi = Primitive_option.valFromOption(abi);
|
|
15
|
+
let viemLog = {
|
|
17
16
|
abi: viemLog_abi,
|
|
18
17
|
data: data,
|
|
19
18
|
topics: topics
|
|
20
19
|
};
|
|
21
20
|
try {
|
|
22
21
|
return Viem.decodeEventLog(viemLog);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
|
|
22
|
+
} catch (raw_exn) {
|
|
23
|
+
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
26
24
|
throw {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
RE_EXN_ID: ParseError,
|
|
26
|
+
_1: exn,
|
|
27
|
+
Error: new Error()
|
|
28
|
+
};
|
|
31
29
|
}
|
|
32
30
|
} else {
|
|
33
31
|
throw {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
RE_EXN_ID: UnknownContractName,
|
|
33
|
+
contractName: contractName,
|
|
34
|
+
Error: new Error()
|
|
35
|
+
};
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
export {
|
|
42
|
-
ParseError
|
|
43
|
-
UnknownContractName
|
|
44
|
-
parseLogOrThrow
|
|
40
|
+
ParseError,
|
|
41
|
+
UnknownContractName,
|
|
42
|
+
parseLogOrThrow,
|
|
45
43
|
}
|
|
46
44
|
/* viem Not a pure module */
|
package/src/bindings/Vitest.res
CHANGED
|
@@ -17,7 +17,7 @@ type readyState =
|
|
|
17
17
|
@get external readyState: t => readyState = "readyState"
|
|
18
18
|
|
|
19
19
|
@set external onopen: (t, unit => unit) => unit = "onopen"
|
|
20
|
-
@set external onerror: (t,
|
|
20
|
+
@set external onerror: (t, JsExn.t => unit) => unit = "onerror"
|
|
21
21
|
@set external onclose: (t, unit => unit) => unit = "onclose"
|
|
22
22
|
|
|
23
23
|
type messageEvent = {data: string}
|
package/src/db/EntityHistory.res
CHANGED
|
@@ -141,10 +141,16 @@ let backfillHistory = (sql, ~pgSchema, ~entityName, ~entityIndex, ~ids: array<st
|
|
|
141
141
|
makeBackfillHistoryQuery(~entityName, ~entityIndex, ~pgSchema),
|
|
142
142
|
[ids]->Obj.magic,
|
|
143
143
|
)
|
|
144
|
-
->Promise.ignoreValue
|
|
144
|
+
->Utils.Promise.ignoreValue
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
let rollback = (
|
|
147
|
+
let rollback = (
|
|
148
|
+
sql,
|
|
149
|
+
~pgSchema,
|
|
150
|
+
~entityName,
|
|
151
|
+
~entityIndex,
|
|
152
|
+
~rollbackTargetCheckpointId: Internal.checkpointId,
|
|
153
|
+
) => {
|
|
148
154
|
sql
|
|
149
155
|
->Postgres.preparedUnsafe(
|
|
150
156
|
`DELETE FROM "${pgSchema}"."${historyTableName(
|
|
@@ -153,5 +159,5 @@ let rollback = (sql, ~pgSchema, ~entityName, ~entityIndex, ~rollbackTargetCheckp
|
|
|
153
159
|
)}" WHERE "${checkpointIdFieldName}" > $1;`,
|
|
154
160
|
[rollbackTargetCheckpointId->BigInt.toString]->(Utils.magic: array<string> => unknown),
|
|
155
161
|
)
|
|
156
|
-
->Promise.ignoreValue
|
|
162
|
+
->Utils.Promise.ignoreValue
|
|
157
163
|
}
|
|
@@ -1,83 +1,96 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
3
|
import * as Table from "./Table.res.mjs";
|
|
4
|
-
import * as
|
|
5
|
-
import * as
|
|
4
|
+
import * as Js_string from "@rescript/runtime/lib/es6/Js_string.js";
|
|
5
|
+
import * as Stdlib_BigInt from "@rescript/runtime/lib/es6/Stdlib_BigInt.js";
|
|
6
6
|
import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
let variants = [
|
|
9
9
|
"SET",
|
|
10
10
|
"DELETE"
|
|
11
11
|
];
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
let name = "ENVIO_HISTORY_CHANGE";
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
let schema = S$RescriptSchema.$$enum(variants);
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
let config = {
|
|
18
18
|
name: name,
|
|
19
19
|
variants: variants,
|
|
20
20
|
schema: schema
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
let RowAction = {
|
|
24
24
|
variants: variants,
|
|
25
25
|
name: name,
|
|
26
26
|
schema: schema,
|
|
27
27
|
config: config
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
let changeFieldName = "envio_change";
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
let checkpointIdFieldName = "envio_checkpoint_id";
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
let changeFieldType = {
|
|
35
35
|
type: "Enum",
|
|
36
36
|
config: config
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return bigint.toString();
|
|
51
|
-
})
|
|
52
|
-
};
|
|
53
|
-
}));
|
|
39
|
+
let unsafeCheckpointIdSchema = S$RescriptSchema.transform(S$RescriptSchema.setName(S$RescriptSchema.string, "CheckpointId"), s => ({
|
|
40
|
+
p: string => {
|
|
41
|
+
let v = Stdlib_BigInt.fromString(string);
|
|
42
|
+
if (v !== undefined) {
|
|
43
|
+
return v;
|
|
44
|
+
} else {
|
|
45
|
+
return s.fail("The string is not valid CheckpointId", undefined);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
s: bigint => bigint.toString()
|
|
49
|
+
}));
|
|
54
50
|
|
|
55
51
|
function makeSetUpdateSchema(entitySchema) {
|
|
56
|
-
return S$RescriptSchema.object(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
return S$RescriptSchema.object(s => {
|
|
53
|
+
s.tag(changeFieldName, "SET");
|
|
54
|
+
return {
|
|
55
|
+
type: "SET",
|
|
56
|
+
entityId: s.f(Table.idFieldName, S$RescriptSchema.string),
|
|
57
|
+
entity: s.flatten(entitySchema),
|
|
58
|
+
checkpointId: s.f(checkpointIdFieldName, unsafeCheckpointIdSchema)
|
|
59
|
+
};
|
|
60
|
+
});
|
|
65
61
|
}
|
|
66
62
|
|
|
67
|
-
|
|
63
|
+
let historyTablePrefix = "envio_history_";
|
|
68
64
|
|
|
69
65
|
function historyTableName(entityName, entityIndex) {
|
|
70
|
-
|
|
66
|
+
let fullName = historyTablePrefix + entityName;
|
|
71
67
|
if (fullName.length <= 63) {
|
|
72
68
|
return fullName;
|
|
73
69
|
}
|
|
74
|
-
|
|
70
|
+
let entityIndexStr = String(entityIndex);
|
|
75
71
|
return Js_string.slice(0, 63 - entityIndexStr.length | 0, fullName) + entityIndexStr;
|
|
76
72
|
}
|
|
77
73
|
|
|
78
74
|
function makePruneStaleEntityHistoryQuery(entityName, entityIndex, pgSchema) {
|
|
79
|
-
|
|
80
|
-
return
|
|
75
|
+
let historyTableRef = `"` + pgSchema + `"."` + historyTableName(entityName, entityIndex) + `"`;
|
|
76
|
+
return `WITH anchors AS (
|
|
77
|
+
SELECT t.id, MAX(t.` + checkpointIdFieldName + `) AS keep_checkpoint_id
|
|
78
|
+
FROM ` + historyTableRef + ` t WHERE t.` + checkpointIdFieldName + ` <= $1
|
|
79
|
+
GROUP BY t.id
|
|
80
|
+
)
|
|
81
|
+
DELETE FROM ` + historyTableRef + ` d
|
|
82
|
+
USING anchors a
|
|
83
|
+
WHERE d.id = a.id
|
|
84
|
+
AND (
|
|
85
|
+
d.` + checkpointIdFieldName + ` < a.keep_checkpoint_id
|
|
86
|
+
OR (
|
|
87
|
+
d.` + checkpointIdFieldName + ` = a.keep_checkpoint_id AND
|
|
88
|
+
NOT EXISTS (
|
|
89
|
+
SELECT 1 FROM ` + historyTableRef + ` ps
|
|
90
|
+
WHERE ps.id = d.id AND ps.` + checkpointIdFieldName + ` > $1
|
|
91
|
+
)
|
|
92
|
+
)
|
|
93
|
+
);`;
|
|
81
94
|
}
|
|
82
95
|
|
|
83
96
|
function pruneStaleEntityHistory(sql, entityName, entityIndex, pgSchema, safeCheckpointId) {
|
|
@@ -85,8 +98,20 @@ function pruneStaleEntityHistory(sql, entityName, entityIndex, pgSchema, safeChe
|
|
|
85
98
|
}
|
|
86
99
|
|
|
87
100
|
function makeBackfillHistoryQuery(pgSchema, entityName, entityIndex) {
|
|
88
|
-
|
|
89
|
-
return
|
|
101
|
+
let historyTableRef = `"` + pgSchema + `"."` + historyTableName(entityName, entityIndex) + `"`;
|
|
102
|
+
return `WITH target_ids AS (
|
|
103
|
+
SELECT UNNEST($1::` + "TEXT" + `[]) AS id
|
|
104
|
+
),
|
|
105
|
+
missing_history AS (
|
|
106
|
+
SELECT e.*
|
|
107
|
+
FROM "` + pgSchema + `"."` + entityName + `" e
|
|
108
|
+
JOIN target_ids t ON e.id = t.id
|
|
109
|
+
LEFT JOIN ` + historyTableRef + ` h ON h.id = e.id
|
|
110
|
+
WHERE h.id IS NULL
|
|
111
|
+
)
|
|
112
|
+
INSERT INTO ` + historyTableRef + `
|
|
113
|
+
SELECT *, 0 AS ` + checkpointIdFieldName + `, '` + "SET" + `' as ` + changeFieldName + `
|
|
114
|
+
FROM missing_history;`;
|
|
90
115
|
}
|
|
91
116
|
|
|
92
117
|
function backfillHistory(sql, pgSchema, entityName, entityIndex, ids) {
|
|
@@ -94,28 +119,28 @@ function backfillHistory(sql, pgSchema, entityName, entityIndex, ids) {
|
|
|
94
119
|
}
|
|
95
120
|
|
|
96
121
|
function rollback(sql, pgSchema, entityName, entityIndex, rollbackTargetCheckpointId) {
|
|
97
|
-
return sql.unsafe(
|
|
122
|
+
return sql.unsafe(`DELETE FROM "` + pgSchema + `"."` + historyTableName(entityName, entityIndex) + `" WHERE "` + checkpointIdFieldName + `" > $1;`, [rollbackTargetCheckpointId.toString()], {prepare: true});
|
|
98
123
|
}
|
|
99
124
|
|
|
100
|
-
|
|
125
|
+
let checkpointIdFieldType = "UInt64";
|
|
101
126
|
|
|
102
|
-
|
|
127
|
+
let maxPgTableNameLength = 63;
|
|
103
128
|
|
|
104
129
|
export {
|
|
105
|
-
RowAction
|
|
106
|
-
changeFieldName
|
|
107
|
-
checkpointIdFieldName
|
|
108
|
-
checkpointIdFieldType
|
|
109
|
-
changeFieldType
|
|
110
|
-
unsafeCheckpointIdSchema
|
|
111
|
-
makeSetUpdateSchema
|
|
112
|
-
maxPgTableNameLength
|
|
113
|
-
historyTablePrefix
|
|
114
|
-
historyTableName
|
|
115
|
-
makePruneStaleEntityHistoryQuery
|
|
116
|
-
pruneStaleEntityHistory
|
|
117
|
-
makeBackfillHistoryQuery
|
|
118
|
-
backfillHistory
|
|
119
|
-
rollback
|
|
130
|
+
RowAction,
|
|
131
|
+
changeFieldName,
|
|
132
|
+
checkpointIdFieldName,
|
|
133
|
+
checkpointIdFieldType,
|
|
134
|
+
changeFieldType,
|
|
135
|
+
unsafeCheckpointIdSchema,
|
|
136
|
+
makeSetUpdateSchema,
|
|
137
|
+
maxPgTableNameLength,
|
|
138
|
+
historyTablePrefix,
|
|
139
|
+
historyTableName,
|
|
140
|
+
makePruneStaleEntityHistoryQuery,
|
|
141
|
+
pruneStaleEntityHistory,
|
|
142
|
+
makeBackfillHistoryQuery,
|
|
143
|
+
backfillHistory,
|
|
144
|
+
rollback,
|
|
120
145
|
}
|
|
121
146
|
/* schema Not a pure module */
|