envio
Version:
A latency and sync speed optimized, developer friendly blockchain data indexer.
204 lines (191 loc) • 7.17 kB
JavaScript
// Generated by ReScript, PLEASE EDIT WITH CARE
;
var Utils = require("./Utils.res.js");
var Js_exn = require("rescript/lib/js/js_exn.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 MissingRequiredTopic0 = /* @__PURE__ */Caml_exceptions.create("LogSelection.MissingRequiredTopic0");
function makeTopicSelection(topic0, topic1Opt, topic2Opt, topic3Opt) {
var topic1 = topic1Opt !== undefined ? topic1Opt : [];
var topic2 = topic2Opt !== undefined ? topic2Opt : [];
var topic3 = topic3Opt !== undefined ? topic3Opt : [];
if (Utils.$$Array.isEmpty(topic0)) {
return {
TAG: "Error",
_0: {
RE_EXN_ID: MissingRequiredTopic0
}
};
} else {
return {
TAG: "Ok",
_0: {
topic0: topic0,
topic1: topic1,
topic2: topic2,
topic3: topic3
}
};
}
}
function hasFilters(param) {
return Belt_Option.isSome(Caml_option.undefined_to_opt([
param.topic1,
param.topic2,
param.topic3
].find(function (topic) {
return !Utils.$$Array.isEmpty(topic);
})));
}
function compressTopicSelections(topicSelections) {
var topic0sOfSelectionsWithoutFilters = [];
var selectionsWithFilters = [];
Belt_Array.forEach(topicSelections, (function (selection) {
if (hasFilters(selection)) {
selectionsWithFilters.push(selection);
return ;
} else {
return Belt_Array.forEach(selection.topic0, (function (topic0) {
topic0sOfSelectionsWithoutFilters.push(topic0);
}));
}
}));
if (topic0sOfSelectionsWithoutFilters.length === 0) {
return selectionsWithFilters;
}
var selectionWithoutFilters_topic1 = [];
var selectionWithoutFilters_topic2 = [];
var selectionWithoutFilters_topic3 = [];
var selectionWithoutFilters = {
topic0: topic0sOfSelectionsWithoutFilters,
topic1: selectionWithoutFilters_topic1,
topic2: selectionWithoutFilters_topic2,
topic3: selectionWithoutFilters_topic3
};
return Belt_Array.concat([selectionWithoutFilters], selectionsWithFilters);
}
function make(addresses, topicSelections) {
var topicSelections$1 = compressTopicSelections(topicSelections);
return {
addresses: addresses,
topicSelections: topicSelections$1
};
}
var emptyTopics = [];
function noopGetter(param) {
return emptyTopics;
}
function parseEventFiltersOrThrow(eventFilters, sighash, params, topic1Opt, topic2Opt, topic3Opt) {
var topic1 = topic1Opt !== undefined ? topic1Opt : noopGetter;
var topic2 = topic2Opt !== undefined ? topic2Opt : noopGetter;
var topic3 = topic3Opt !== undefined ? topic3Opt : noopGetter;
var filterByAddresses = {
contents: false
};
var topic0 = [sighash];
var $$default = {
topic0: topic0,
topic1: emptyTopics,
topic2: emptyTopics,
topic3: emptyTopics
};
var parse = function (eventFilters) {
var tmp;
tmp = !Array.isArray(eventFilters) && (eventFilters === null || typeof eventFilters !== "object") && typeof eventFilters !== "number" && typeof eventFilters !== "string" && typeof eventFilters !== "boolean" ? [eventFilters] : (
Array.isArray(eventFilters) ? (
eventFilters.length !== 0 ? eventFilters : [{}]
) : [eventFilters]
);
return tmp.map(function (eventFilter) {
if (!Array.isArray(eventFilter) && (eventFilter === null || typeof eventFilter !== "object") && typeof eventFilter !== "number" && typeof eventFilter !== "string" && typeof eventFilter !== "boolean") {
return Js_exn.raiseError("Invalid event filters configuration. Expected an object");
}
if (!(typeof eventFilter === "object" && !Array.isArray(eventFilter))) {
return Js_exn.raiseError("Invalid event filters configuration. Expected an object");
}
var filterKeys = Object.keys(eventFilter);
if (filterKeys.length !== 0) {
filterKeys.forEach(function (key) {
if (!params.includes(key)) {
return Js_exn.raiseError("Invalid event filters configuration. The event doesn't have an indexed parameter \"" + key + "\" and can't use it for filtering");
}
});
return {
topic0: topic0,
topic1: topic1(eventFilter),
topic2: topic2(eventFilter),
topic3: topic3(eventFilter)
};
} else {
return $$default;
}
});
};
var getEventFiltersOrThrow;
if (eventFilters !== undefined) {
if (typeof eventFilters === "function") {
try {
var args = Object.defineProperty({
chainId: 0,
addresses: []
}, "addresses", {
get: (function () {
filterByAddresses.contents = true;
return [];
})
});
eventFilters(args);
}
catch (exn){
}
getEventFiltersOrThrow = filterByAddresses.contents ? (function (chain) {
return {
TAG: "Dynamic",
_0: (function (addresses) {
return parse(eventFilters({
chainId: chain,
addresses: addresses
}));
})
};
}) : (function (chain) {
return {
TAG: "Static",
_0: parse(eventFilters({
chainId: chain,
addresses: []
}))
};
});
} else {
var $$static = {
TAG: "Static",
_0: parse(eventFilters)
};
getEventFiltersOrThrow = (function (param) {
return $$static;
});
}
} else {
var $$static$1 = {
TAG: "Static",
_0: [$$default]
};
getEventFiltersOrThrow = (function (param) {
return $$static$1;
});
}
return {
getEventFiltersOrThrow: getEventFiltersOrThrow,
filterByAddresses: filterByAddresses.contents
};
}
exports.MissingRequiredTopic0 = MissingRequiredTopic0;
exports.makeTopicSelection = makeTopicSelection;
exports.hasFilters = hasFilters;
exports.compressTopicSelections = compressTopicSelections;
exports.make = make;
exports.parseEventFiltersOrThrow = parseEventFiltersOrThrow;
/* Utils Not a pure module */