refactor: Move scan and scanMerge to stream module (#1718)
This commit is contained in:
parent
c08b3f3c20
commit
683d85a952
5 changed files with 40 additions and 45 deletions
|
|
@ -1,13 +0,0 @@
|
|||
"use strict"
|
||||
|
||||
var combine = require("./stream").combine
|
||||
|
||||
module.exports = function (reducer, seed, stream) {
|
||||
var newStream = combine(function (s) {
|
||||
return seed = reducer(seed, s._state.value)
|
||||
}, [stream])
|
||||
|
||||
if (newStream._state.state === 0) newStream(seed)
|
||||
|
||||
return newStream
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
"use strict"
|
||||
|
||||
var combine = require("./stream").combine
|
||||
|
||||
module.exports = function(tuples, seed) {
|
||||
var streams = tuples.map(function(tuple) {
|
||||
var stream = tuple[0]
|
||||
if (stream._state.state === 0) stream(undefined)
|
||||
return stream
|
||||
})
|
||||
|
||||
var newStream = combine(function() {
|
||||
var changed = arguments[arguments.length - 1]
|
||||
|
||||
streams.forEach(function(stream, idx) {
|
||||
if (changed.indexOf(stream) > -1) {
|
||||
seed = tuples[idx][1](seed, stream._state.value)
|
||||
}
|
||||
})
|
||||
|
||||
return seed
|
||||
}, streams)
|
||||
|
||||
return newStream
|
||||
}
|
||||
|
|
@ -109,13 +109,48 @@ function merge(streams) {
|
|||
return streams.map(function(s) {return s()})
|
||||
}, streams)
|
||||
}
|
||||
|
||||
function scan(reducer, seed, stream) {
|
||||
var newStream = combine(function (s) {
|
||||
return seed = reducer(seed, s._state.value)
|
||||
}, [stream])
|
||||
|
||||
if (newStream._state.state === 0) newStream(seed)
|
||||
|
||||
return newStream
|
||||
}
|
||||
|
||||
function scanMerge(tuples, seed) {
|
||||
var streams = tuples.map(function(tuple) {
|
||||
var stream = tuple[0]
|
||||
if (stream._state.state === 0) stream(undefined)
|
||||
return stream
|
||||
})
|
||||
|
||||
var newStream = combine(function() {
|
||||
var changed = arguments[arguments.length - 1]
|
||||
|
||||
streams.forEach(function(stream, idx) {
|
||||
if (changed.indexOf(stream) > -1) {
|
||||
seed = tuples[idx][1](seed, stream._state.value)
|
||||
}
|
||||
})
|
||||
|
||||
return seed
|
||||
}, streams)
|
||||
|
||||
return newStream
|
||||
}
|
||||
|
||||
createStream["fantasy-land/of"] = createStream
|
||||
createStream.merge = merge
|
||||
createStream.combine = combine
|
||||
createStream.scan = scan
|
||||
createStream.scanMerge = scanMerge
|
||||
createStream.HALT = HALT
|
||||
|
||||
if (typeof module !== "undefined") module["exports"] = createStream
|
||||
else if (typeof window.m === "function" && !("stream" in window.m)) window.m.stream = createStream
|
||||
else window.m = {stream : createStream}
|
||||
|
||||
}());
|
||||
}());
|
||||
|
|
|
|||
|
|
@ -2,12 +2,11 @@
|
|||
|
||||
var o = require("../../ospec/ospec")
|
||||
var stream = require("../stream")
|
||||
var scan = require("../scan")
|
||||
|
||||
o.spec("scan", function() {
|
||||
o("defaults to seed", function() {
|
||||
var parent = stream()
|
||||
var child = scan(function(out, p) {
|
||||
var child = stream.scan(function(out, p) {
|
||||
return out - p
|
||||
}, 123, parent)
|
||||
o(child()).equals(123)
|
||||
|
|
@ -15,7 +14,7 @@ o.spec("scan", function() {
|
|||
|
||||
o("accumulates values as expected", function() {
|
||||
var parent = stream()
|
||||
var child = scan(function(arr, p) {
|
||||
var child = stream.scan(function(arr, p) {
|
||||
return arr.concat(p)
|
||||
}, [], parent)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,14 +2,13 @@
|
|||
|
||||
var o = require("../../ospec/ospec")
|
||||
var stream = require("../stream")
|
||||
var scanMerge = require("../scanMerge")
|
||||
|
||||
o.spec("scanMerge", function() {
|
||||
o("defaults to seed", function() {
|
||||
var parent1 = stream()
|
||||
var parent2 = stream()
|
||||
|
||||
var child = scanMerge([
|
||||
var child = stream.scanMerge([
|
||||
[parent1, function(out, p1) {
|
||||
return out + p1
|
||||
}],
|
||||
|
|
@ -25,7 +24,7 @@ o.spec("scanMerge", function() {
|
|||
var parent1 = stream()
|
||||
var parent2 = stream()
|
||||
|
||||
var child = scanMerge([
|
||||
var child = stream.scanMerge([
|
||||
[parent1, function(out, p1) {
|
||||
return out + p1
|
||||
}],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue