UNPKG

envio

Version:

A latency and sync speed optimized, developer friendly blockchain data indexer.

126 lines (111 loc) 3.77 kB
// Generated by ReScript, PLEASE EDIT WITH CARE 'use strict'; 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 */