simonflex-framework
Version:
A library implements Meter Flex interface
65 lines • 4.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const filter_1 = require("./filter");
const rules_1 = require("./rules");
function newEventVisitor(ctx, addr, coder) {
const encode = (indexed) => {
const topics = coder.encode(indexed);
return {
address: addr,
topic0: topics[0] || undefined,
topic1: topics[1] || undefined,
topic2: topics[2] || undefined,
topic3: topics[3] || undefined,
topic4: topics[4] || undefined
};
};
return {
asCriteria: indexed => {
try {
return encode(indexed);
}
catch (err) {
throw new rules_1.BadParameter(`arg0: can not be encoded (${err.message})`);
}
},
filter: (indexed) => {
rules_1.test(indexed, [{}], 'arg0');
if (indexed.length === 0) {
indexed = [{}];
}
const criteriaSet = indexed.map((o, i) => {
try {
return encode(o);
}
catch (err) {
throw new rules_1.BadParameter(`arg0.#${i}: can not be encoded (${err.message})`);
}
});
const filter = filter_1.newFilter(ctx, 'event').criteria(criteriaSet);
return {
criteria(set) {
filter.criteria(set);
return this;
},
range(range) {
filter.range(range);
return this;
},
order(order) {
filter.order(order);
return this;
},
apply(offset, limit) {
return filter.apply(offset, limit)
.then(events => events.map(event => {
const decoded = coder.decode(event.data, event.topics);
return Object.assign({}, event, { decoded });
}));
}
};
}
};
}
exports.newEventVisitor = newEventVisitor;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mcmFtZXdvcmsvZXZlbnQtdmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHFDQUFvQztBQUNwQyxtQ0FBNEM7QUFFNUMsU0FBZ0IsZUFBZSxDQUMzQixHQUFZLEVBQ1osSUFBWSxFQUNaLEtBQWdCO0lBR2hCLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7UUFDL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwQyxPQUFPO1lBQ0gsT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7WUFDOUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO1lBQzlCLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztZQUM5QixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7WUFDOUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO1NBQ2pDLENBQUE7SUFDTCxDQUFDLENBQUE7SUFFRCxPQUFPO1FBQ0gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2xCLElBQUk7Z0JBQ0EsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDekI7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDVixNQUFNLElBQUksb0JBQVksQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUE7YUFDdEU7UUFDTCxDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEIsWUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBRTNCLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2FBQ2pCO1lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSTtvQkFDQSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtpQkFDbkI7Z0JBQUMsT0FBTyxHQUFHLEVBQUU7b0JBQ1YsTUFBTSxJQUFJLG9CQUFZLENBQUMsU0FBUyxDQUFDLHlCQUF5QixHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQTtpQkFDNUU7WUFDTCxDQUFDLENBQUMsQ0FBQTtZQUNGLE1BQU0sTUFBTSxHQUFHLGtCQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUM1RCxPQUFPO2dCQUNILFFBQVEsQ0FBQyxHQUFHO29CQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7b0JBQ3BCLE9BQU8sSUFBSSxDQUFBO2dCQUNmLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEtBQThCO29CQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNuQixPQUFPLElBQUksQ0FBQTtnQkFDZixDQUFDO2dCQUNELEtBQUssQ0FBQyxLQUFLO29CQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ25CLE9BQU8sSUFBSSxDQUFBO2dCQUNmLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLE1BQWMsRUFBRSxLQUFhO29CQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzt5QkFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTt3QkFDdEQseUJBQVksS0FBSyxJQUFFLE9BQU8sSUFBRTtvQkFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDWCxDQUFDO2FBQ0osQ0FBQTtRQUNMLENBQUM7S0FDSixDQUFBO0FBQ0wsQ0FBQztBQWhFRCwwQ0FnRUMifQ==