plywood
Version:
A query planner and executor
76 lines (75 loc) • 3 kB
JavaScript
export function verboseRequesterFactory(parameters) {
var requester = parameters.requester;
var myName = parameters.name || 'rq' + String(Math.random()).substr(2, 5);
if (parameters.preQuery) {
console.warn('verboseRequesterFactory option preQuery has been renamed to onQuery');
parameters.onQuery = parameters.preQuery;
}
var printLine = parameters.printLine ||
(function (line) {
console['log'](line);
});
var onQuery = parameters.onQuery ||
(function (param) {
printLine('vvvvvvvvvvvvvvvvvvvvvvvvvv');
var ctx = param.context ? " [context: ".concat(JSON.stringify(param.context), "]") : '';
printLine("Requester ".concat(param.name, " sending query ").concat(param.queryNumber, ":").concat(ctx));
printLine(JSON.stringify(param.query, null, 2));
printLine('^^^^^^^^^^^^^^^^^^^^^^^^^^');
});
var onSuccess = parameters.onSuccess ||
(function (param) {
printLine('vvvvvvvvvvvvvvvvvvvvvvvvvv');
printLine("Requester ".concat(param.name, " got result from query ").concat(param.queryNumber, ": (in ").concat(param.time, "ms)"));
printLine(JSON.stringify(param.data, null, 2));
printLine('^^^^^^^^^^^^^^^^^^^^^^^^^^');
});
var onError = parameters.onError ||
(function (param) {
printLine('vvvvvvvvvvvvvvvvvvvvvvvvvv');
printLine("Requester ".concat(param.name, " got error in query ").concat(param.queryNumber, ": ").concat(param.error.message, " (in ").concat(param.time, "ms)"));
printLine('^^^^^^^^^^^^^^^^^^^^^^^^^^');
});
var curQueryNumber = 0;
return function (request) {
curQueryNumber++;
var myQueryNumber = curQueryNumber;
onQuery({
name: myName,
queryNumber: myQueryNumber,
query: request.query,
context: request.context,
});
var startTime = Date.now();
var stream = requester(request);
var errorSeen = false;
stream.on('error', function (error) {
errorSeen = true;
onError({
name: myName,
queryNumber: myQueryNumber,
query: request.query,
context: request.context,
time: Date.now() - startTime,
error: error,
});
});
var data = [];
stream.on('data', function (datum) {
data.push(JSON.parse(JSON.stringify(datum)));
});
stream.on('end', function () {
if (errorSeen)
return;
onSuccess({
name: myName,
queryNumber: myQueryNumber,
query: request.query,
context: request.context,
time: Date.now() - startTime,
data: data,
});
});
return stream;
};
}