envio
Version:
A latency and sync speed optimized, developer friendly blockchain data indexer.
126 lines (111 loc) • 3.77 kB
JavaScript
// Generated by ReScript, PLEASE EDIT WITH CARE
;
var Js_exn = require("rescript/lib/js/js_exn.js");
var ChainMap = require("../ChainMap.res.js");
var Belt_Array = require("rescript/lib/js/belt_Array.js");
var Belt_Option = require("rescript/lib/js/belt_Option.js");
var Caml_option = require("rescript/lib/js/caml_option.js");
var Caml_exceptions = require("rescript/lib/js/caml_exceptions.js");
var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js");
var EventDuplicate = /* @__PURE__ */Caml_exceptions.create("EventRouter.EventDuplicate");
var WildcardCollision = /* @__PURE__ */Caml_exceptions.create("EventRouter.WildcardCollision");
function empty() {
return {
wildcard: undefined,
byContractName: {}
};
}
function addOrThrow(group, $$event, contractName, isWildcard) {
var wildcard = group.wildcard;
var byContractName = group.byContractName;
var match = byContractName[contractName];
if (match !== undefined) {
throw {
RE_EXN_ID: EventDuplicate,
Error: new Error()
};
}
if (isWildcard && Belt_Option.isSome(wildcard)) {
throw {
RE_EXN_ID: WildcardCollision,
Error: new Error()
};
}
if (isWildcard) {
group.wildcard = Caml_option.some($$event);
}
byContractName[contractName] = $$event;
}
function get(group, contractAddress, blockNumber, indexingContracts) {
var wildcard = group.wildcard;
var indexingContract = indexingContracts[contractAddress];
if (indexingContract !== undefined) {
if (indexingContract.startBlock <= blockNumber) {
return group.byContractName[indexingContract.contractName];
} else {
return ;
}
} else {
return wildcard;
}
}
var Group = {
empty: empty,
addOrThrow: addOrThrow,
get: get
};
function empty$1() {
return {};
}
function addOrThrow$1(router, eventId, $$event, contractName, isWildcard, eventName, chain) {
var group = router[eventId];
var group$1;
if (group !== undefined) {
group$1 = group;
} else {
var group$2 = {
wildcard: undefined,
byContractName: {}
};
router[eventId] = group$2;
group$1 = group$2;
}
try {
return addOrThrow(group$1, $$event, contractName, isWildcard);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn.RE_EXN_ID === EventDuplicate) {
return Js_exn.raiseError("Duplicate event detected: " + eventName + " for contract " + contractName + " on chain " + ChainMap.Chain.toString(chain));
}
if (exn.RE_EXN_ID === WildcardCollision) {
return Js_exn.raiseError("Another event is already registered with the same signature that would interfer with wildcard filtering: " + eventName + " for contract " + contractName + " on chain " + ChainMap.Chain.toString(chain));
}
throw exn;
}
}
function get$1(router, tag, contractAddress, blockNumber, indexingContracts) {
var group = router[tag];
if (group !== undefined) {
return get(group, contractAddress, blockNumber, indexingContracts);
}
}
function getEvmEventId(sighash, topicCount) {
return sighash + "_" + String(topicCount);
}
function fromEvmEventModsOrThrow(events, chain) {
var router = {};
Belt_Array.forEach(events, (function (config) {
addOrThrow$1(router, config.id, config, config.contractName, config.isWildcard, config.name, chain);
}));
return router;
}
exports.EventDuplicate = EventDuplicate;
exports.WildcardCollision = WildcardCollision;
exports.Group = Group;
exports.empty = empty$1;
exports.addOrThrow = addOrThrow$1;
exports.get = get$1;
exports.getEvmEventId = getEvmEventId;
exports.fromEvmEventModsOrThrow = fromEvmEventModsOrThrow;
/* ChainMap Not a pure module */