jsketcher/modules/lstream/base.js

45 lines
1,022 B
JavaScript

export class StreamBase {
attach(observer) {}
map(fn) {
return new MapStream(this, fn);
}
filter(predicate) {
return new FilterStream(this, predicate);
}
pairwise(first) {
return new PairwiseStream(this, first);
}
scan(initAccumulator) {
return new ScanStream(this, initAccumulator);
}
remember(initialValue, usingStream) {
if (!usingStream) {
usingStream = StateStream;
}
let stateStream = new usingStream(initialValue);
this.attach(v => stateStream.next(v));
return stateStream;
}
distinct() {
return new DistinctStream(this);
}
throttle(delay, accumulator) {
return new ThrottleStream(this, delay, accumulator);
}
}
const {MapStream} = require('./map');
const {FilterStream} = require('./filter');
const {StateStream} = require('./state');
const {PairwiseStream} = require('./pairwise');
const {ScanStream} = require('./scan');
const {DistinctStream} = require('./distinct');
const {ThrottleStream} = require('./throttle');