You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Feature-detect "use regular streams as an underlying socket for tls.connect()" #981
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 workvarsupportswrappedjsstreams=(function(){vars=require("stream").Duplex();s._read=s._write=function(){};try{require("tls").connect({stream: s});returntrue;}catch{returnfalse;}});
// This does work, but not sure if this is going to suddenly break in the futurevarsupportswrappedjsstreams=(function(){try{require("_stream_wrap");returntrue;}catch{returnfalse;}});
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.
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?
No, we can close it, because I just ended up ignoring io.js the entire time until the merge, so never ended up taking advantage of the feature since npm never let me do version detection against io.js.
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.versionis 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.0for 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.listenerCountparams?dougwilson commentedon Mar 12, 2015
Oops, I missed it's specifics. Let me test that real quick. I'll either close this or provide an update today.
dougwilson commentedon Mar 14, 2015
@chrisdickinson I'm very sorry for the delay. This does not seem to work:
The value seems to be different in various versions and doing the
> 0seems to create false positives.brendanashworth commentedon Sep 24, 2015
I don't see an issue with version sniffing as long as you are conservative with major versions. Semver is for machines.
@dougwilson would you like to keep this open?
dougwilson commentedon Sep 24, 2015
No, we can close it, because I just ended up ignoring io.js the entire time until the merge, so never ended up taking advantage of the feature since
npmnever let me do version detection against io.js.