Initial commit
commit
858f393a7a
@ -0,0 +1,2 @@
|
|||||||
|
node_modules
|
||||||
|
yarn.lock
|
@ -0,0 +1,32 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const Promise = require("bluebird");
|
||||||
|
const propagateAbort = require("@ppstreams/propagate-abort");
|
||||||
|
const { isEndOfStream } = require("@ppstreams/end-of-stream-marker");
|
||||||
|
|
||||||
|
module.exports = function greedySinkStream(description, callback) {
|
||||||
|
return {
|
||||||
|
description: `greedy sink stream (${description})`,
|
||||||
|
abort: propagateAbort,
|
||||||
|
read: function produceValue_greedySinkStream(source) {
|
||||||
|
let lastResult;
|
||||||
|
|
||||||
|
function attemptRead() {
|
||||||
|
return Promise.try(() => {
|
||||||
|
return source.read();
|
||||||
|
}).then((value) => {
|
||||||
|
return callback(value);
|
||||||
|
}).then((result) => {
|
||||||
|
lastResult = result;
|
||||||
|
|
||||||
|
return attemptRead();
|
||||||
|
}).catch(isEndOfStream, () => {
|
||||||
|
/* Don't attempt to do another read, we're done. We return whatever value we got last from the specified callback. */
|
||||||
|
return lastResult;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return attemptRead();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "@ppstreams/greedy-sink",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"repository": "http://git.cryto.net/ppstreams/greedy-sink.git",
|
||||||
|
"author": "Sven Slootweg <admin@cryto.net>",
|
||||||
|
"license": "WTFPL OR CC0-1.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@ppstreams/propagate-abort": "^0.1.2",
|
||||||
|
"bluebird": "^3.5.4"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue