Closed
Description
Hi, I'm looking for a good solution to be able to detect if this feature exists in the runtime my module is running on so I can throw if it's not supported. It was suggested on IRC to make an issue here.
I originally thought perhaps if I just construct a duplex stream and pass it into tls.connect
, but it doesn't seem to throw an error on pre-1.4.1 versions. Suggestions?
// This doesn't seem to work
var supportswrappedjsstreams = (function(){
var s = require("stream").Duplex();s._read=s._write=function(){};
try { require("tls").connect({ stream: s }); return true; } catch { return false; }
});
// This does work, but not sure if this is going to suddenly break in the future
var supportswrappedjsstreams = (function(){
try { require("_stream_wrap"); return true; } catch { return false; }
});
Activity
tellnes commentedon Feb 27, 2015
@indutny
chrisdickinson commentedon Feb 27, 2015
Not sure about the state it leaves the SSL context in, but something like:
should work since TLS/streamwrap will always have to install error handlers.
dougwilson commentedon Feb 27, 2015
Ah, yes, that does seem to work, even to weed out Node.js stuff. Thanks!
dougwilson commentedon Feb 27, 2015
Oops, I may have closed that too early, because I only tested the pre-1.4.1 versions; it actually seems to have 0 listeners, even on 1.4.1:
chrisdickinson commentedon Feb 27, 2015
Ah, whoops: it should be
EE.listenerCount(emitter, "eventName");
. My bad!indutny commentedon Feb 27, 2015
Interesting question! Why not just check the
process.version
? :)mathiasbynens commentedon Feb 27, 2015
Checking
process.version
is to user-agent sniffing as feature testing is to, uhm, feature testing. Inferring behavior from a version number seems brittle IMHO.indutny commentedon Feb 27, 2015
@mathiasbynens the proposed check is much more brittle than version checking. We have semver, so this thing can't go away until
2.0.0
for sure.chrisdickinson commentedon Mar 12, 2015
@dougwilson I think the check works now – ok to close?
dougwilson commentedon Mar 12, 2015
The only working check that was provided here was to sniff the version and at the same time, I'm told in this thread not to sniff the version. I need clarification still: should I start version sniffing io.js features or can someone come up with a non-version-sniffing solution to this?
chrisdickinson commentedon Mar 12, 2015
@dougwilson Did you see my message about the order of
EE.listenerCount
params?25 remaining items