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()})
|
return streams.map(function(s) {return s()})
|
||||||
}, streams)
|
}, 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["fantasy-land/of"] = createStream
|
||||||
createStream.merge = merge
|
createStream.merge = merge
|
||||||
createStream.combine = combine
|
createStream.combine = combine
|
||||||
|
createStream.scan = scan
|
||||||
|
createStream.scanMerge = scanMerge
|
||||||
createStream.HALT = HALT
|
createStream.HALT = HALT
|
||||||
|
|
||||||
if (typeof module !== "undefined") module["exports"] = createStream
|
if (typeof module !== "undefined") module["exports"] = createStream
|
||||||
else if (typeof window.m === "function" && !("stream" in window.m)) window.m.stream = createStream
|
else if (typeof window.m === "function" && !("stream" in window.m)) window.m.stream = createStream
|
||||||
else window.m = {stream : createStream}
|
else window.m = {stream : createStream}
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,11 @@
|
||||||
|
|
||||||
var o = require("../../ospec/ospec")
|
var o = require("../../ospec/ospec")
|
||||||
var stream = require("../stream")
|
var stream = require("../stream")
|
||||||
var scan = require("../scan")
|
|
||||||
|
|
||||||
o.spec("scan", function() {
|
o.spec("scan", function() {
|
||||||
o("defaults to seed", function() {
|
o("defaults to seed", function() {
|
||||||
var parent = stream()
|
var parent = stream()
|
||||||
var child = scan(function(out, p) {
|
var child = stream.scan(function(out, p) {
|
||||||
return out - p
|
return out - p
|
||||||
}, 123, parent)
|
}, 123, parent)
|
||||||
o(child()).equals(123)
|
o(child()).equals(123)
|
||||||
|
|
@ -15,7 +14,7 @@ o.spec("scan", function() {
|
||||||
|
|
||||||
o("accumulates values as expected", function() {
|
o("accumulates values as expected", function() {
|
||||||
var parent = stream()
|
var parent = stream()
|
||||||
var child = scan(function(arr, p) {
|
var child = stream.scan(function(arr, p) {
|
||||||
return arr.concat(p)
|
return arr.concat(p)
|
||||||
}, [], parent)
|
}, [], parent)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,13 @@
|
||||||
|
|
||||||
var o = require("../../ospec/ospec")
|
var o = require("../../ospec/ospec")
|
||||||
var stream = require("../stream")
|
var stream = require("../stream")
|
||||||
var scanMerge = require("../scanMerge")
|
|
||||||
|
|
||||||
o.spec("scanMerge", function() {
|
o.spec("scanMerge", function() {
|
||||||
o("defaults to seed", function() {
|
o("defaults to seed", function() {
|
||||||
var parent1 = stream()
|
var parent1 = stream()
|
||||||
var parent2 = stream()
|
var parent2 = stream()
|
||||||
|
|
||||||
var child = scanMerge([
|
var child = stream.scanMerge([
|
||||||
[parent1, function(out, p1) {
|
[parent1, function(out, p1) {
|
||||||
return out + p1
|
return out + p1
|
||||||
}],
|
}],
|
||||||
|
|
@ -25,7 +24,7 @@ o.spec("scanMerge", function() {
|
||||||
var parent1 = stream()
|
var parent1 = stream()
|
||||||
var parent2 = stream()
|
var parent2 = stream()
|
||||||
|
|
||||||
var child = scanMerge([
|
var child = stream.scanMerge([
|
||||||
[parent1, function(out, p1) {
|
[parent1, function(out, p1) {
|
||||||
return out + p1
|
return out + p1
|
||||||
}],
|
}],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue