Conversation
thejmazz
left a comment
There was a problem hiding this comment.
thanks @Colelyman!
In addition to my comments, I would also suggest switching usage of var to const and let; if we are going to include package-lock.json which is an npm v5 feature, I think it makes sense to use recent syntax as well (at least for new code).
cli.js
Outdated
| #!/usr/bin/env node | ||
| var fs = require('fs') | ||
| var minimist = require('minimist') | ||
| var fastq = require('./index') |
There was a problem hiding this comment.
style: blank line after #!/usr/bin/env node
There was a problem hiding this comment.
👍 these are fixed, thanks for pointing them out!
cli.js
Outdated
| }) | ||
|
|
||
| fq.on('error', function (err) { | ||
| console.log( |
There was a problem hiding this comment.
one line console.log('There was an error:\n', err)
@bmpvieira @tiagofilipe12 do we have an issue for standardized error messages across modules?
|
|
||
| process.stdin.setEncoding('utf8') | ||
|
|
||
| fq.on('data', function (data) { |
There was a problem hiding this comment.
using .on('data') puts a stream into streams 1 mode - it is preferred to use a pipe instead. It would look something like
const through = require('through2')
fq.pipe(through.obj(function (data, enc, next) {
this.push(JSON.stringify(data) + '\n')
next()
// alternatively, next(null, JSON.stringify(data) + '\n')
})
.pipe(writeStream)There is also ndjson.stringify which I believe does the same thing. (and it handles linux vs windows EOL)
So: use ndjson module.
There was a problem hiding this comment.
@thejmazz I am very new to nodejs streams, so I probably just don't understand the concept behind pipes. But, would using the code that you referenced above require the parser to be refactored? From what I understand, fastq.read(argv._[0]) returns an events.EventEmitter() object, so can an events.EventEmitter() be piped?
Perhaps this is the function of the ndjson module and I just don't know it.
There was a problem hiding this comment.
From what I can see it looks like the Refactoring branch might be a solution?
There was a problem hiding this comment.
There was a problem hiding this comment.
Ahh yes @Colelyman my bad - I thought this module was a stream. It does not make sense to pipe an event emitter. The CLI from this PR looks like it will work with the changes in refactoring branch - I suggest we merge this in now, finish refactoring (which I think is just some cleaning up and making sure tests pass), and as part of that can implement fs.createReadStream(input).pipe(fastq) in the CLI - which is what it looks like @tiagofilipe12 was using to test refactoring branch.
|
Thanks @Colelyman for the contribution! 🎉 Since this has been reviewed and approved you can go ahead and click the merge button yourself if you want. ;-) |
|
Awesome, thanks @bmpvieira! |
This is a CLI that is heavily based on the CLI from bionode-fasta.
This PR is in response to #8.
I'm not sure if test cases are necessary for a CLI, but I can make them if needed.