Skip to content

Instantly share code, notes, and snippets.

@raimohanska
Last active January 6, 2024 04:19
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raimohanska/6202053 to your computer and use it in GitHub Desktop.
Save raimohanska/6202053 to your computer and use it in GitHub Desktop.
Bacon.fromNodeStream
fs = require("fs")
Bacon = require("baconjs")
# Bacon.fromNodeStream converts Node.js ReadableStream into an EventStream
Bacon.fromNodeStream = (stream) ->
Bacon.fromBinder (sink) ->
listeners = {}
addListener = (event, listener) ->
listeners[event] = listener
stream.on event, listener
addListener "data", (chunk) -> sink(chunk)
addListener "end", () -> sink(new Bacon.End())
addListener "error", (error) -> sink(new Bacon.Error(error))
-> for event,listener of listeners
stream.removeListener event,listener
# Example code
toCharStream = (str) -> Bacon.fromArray(str.split(""))
Bacon.fromNodeStream(fs.createReadStream "bacon.md", { encoding: "utf8" })
.flatMap(toCharStream)
.bufferWithCount(80)
.map(".join", "").
.log()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment