isstream-0.1.2/000775 000000 000000 00000000000 12476441411 013325 5ustar00rootroot000000 000000 isstream-0.1.2/.gitignore000664 000000 000000 00000000016 12476441411 015312 0ustar00rootroot000000 000000 node_modules/ isstream-0.1.2/.jshintrc000664 000000 000000 00000002173 12476441411 015155 0ustar00rootroot000000 000000 { "predef": [ ] , "bitwise": false , "camelcase": false , "curly": false , "eqeqeq": false , "forin": false , "immed": false , "latedef": false , "noarg": true , "noempty": true , "nonew": true , "plusplus": false , "quotmark": true , "regexp": false , "undef": true , "unused": true , "strict": false , "trailing": true , "maxlen": 120 , "asi": true , "boss": true , "debug": true , "eqnull": true , "esnext": true , "evil": true , "expr": true , "funcscope": false , "globalstrict": false , "iterator": false , "lastsemic": true , "laxbreak": true , "laxcomma": true , "loopfunc": true , "multistr": false , "onecase": false , "proto": false , "regexdash": false , "scripturl": true , "smarttabs": false , "shadow": false , "sub": true , "supernew": false , "validthis": true , "browser": true , "couch": false , "devel": false , "dojo": false , "mootools": false , "node": true , "nonstandard": true , "prototypejs": false , "rhino": false , "worker": true , "wsh": false , "nomen": false , "onevar": false , "passfail": false }isstream-0.1.2/.npmignore000664 000000 000000 00000000006 12476441411 015320 0ustar00rootroot000000 000000 *.tgz isstream-0.1.2/.travis.yml000664 000000 000000 00000000226 12476441411 015436 0ustar00rootroot000000 000000 language: node_js node_js: - "0.8" - "0.10" - "0.11" branches: only: - master notifications: email: - rod@vagg.org script: npm test isstream-0.1.2/LICENSE.md000664 000000 000000 00000002145 12476441411 014733 0ustar00rootroot000000 000000 The MIT License (MIT) ===================== Copyright (c) 2015 Rod Vagg --------------------------- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. isstream-0.1.2/README.md000664 000000 000000 00000004570 12476441411 014612 0ustar00rootroot000000 000000 # isStream [![Build Status](https://secure.travis-ci.org/rvagg/isstream.png)](http://travis-ci.org/rvagg/isstream) **Test if an object is a `Stream`** [![NPM](https://nodei.co/npm/isstream.svg)](https://nodei.co/npm/isstream/) The missing `Stream.isStream(obj)`: determine if an object is standard Node.js `Stream`. Works for Node-core `Stream` objects (for 0.8, 0.10, 0.11, and in theory, older and newer versions) and all versions of **[readable-stream](https://github.com/isaacs/readable-stream)**. ## Usage: ```js var isStream = require('isstream') var Stream = require('stream') isStream(new Stream()) // true isStream({}) // false isStream(new Stream.Readable()) // true isStream(new Stream.Writable()) // true isStream(new Stream.Duplex()) // true isStream(new Stream.Transform()) // true isStream(new Stream.PassThrough()) // true ``` ## But wait! There's more! You can also test for `isReadable(obj)`, `isWritable(obj)` and `isDuplex(obj)` to test for implementations of Streams2 (and Streams3) base classes. ```js var isReadable = require('isstream').isReadable var isWritable = require('isstream').isWritable var isDuplex = require('isstream').isDuplex var Stream = require('stream') isReadable(new Stream()) // false isWritable(new Stream()) // false isDuplex(new Stream()) // false isReadable(new Stream.Readable()) // true isReadable(new Stream.Writable()) // false isReadable(new Stream.Duplex()) // true isReadable(new Stream.Transform()) // true isReadable(new Stream.PassThrough()) // true isWritable(new Stream.Readable()) // false isWritable(new Stream.Writable()) // true isWritable(new Stream.Duplex()) // true isWritable(new Stream.Transform()) // true isWritable(new Stream.PassThrough()) // true isDuplex(new Stream.Readable()) // false isDuplex(new Stream.Writable()) // false isDuplex(new Stream.Duplex()) // true isDuplex(new Stream.Transform()) // true isDuplex(new Stream.PassThrough()) // true ``` *Reminder: when implementing your own streams, please [use **readable-stream** rather than core streams](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html).* ## License **isStream** is Copyright (c) 2015 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. isstream-0.1.2/isstream.js000664 000000 000000 00000001114 12476441411 015507 0ustar00rootroot000000 000000 var stream = require('stream') function isStream (obj) { return obj instanceof stream.Stream } function isReadable (obj) { return isStream(obj) && typeof obj._read == 'function' && typeof obj._readableState == 'object' } function isWritable (obj) { return isStream(obj) && typeof obj._write == 'function' && typeof obj._writableState == 'object' } function isDuplex (obj) { return isReadable(obj) && isWritable(obj) } module.exports = isStream module.exports.isReadable = isReadable module.exports.isWritable = isWritable module.exports.isDuplex = isDuplex isstream-0.1.2/package.json000664 000000 000000 00000001601 12476441411 015611 0ustar00rootroot000000 000000 { "name": "isstream", "version": "0.1.2", "description": "Determine if an object is a Stream", "main": "isstream.js", "scripts": { "test": "tar --xform 's/^package/readable-stream-1.0/' -zxf readable-stream-1.0.*.tgz && tar --xform 's/^package/readable-stream-1.1/' -zxf readable-stream-1.1.*.tgz && node test.js; rm -rf readable-stream-1.?/" }, "repository": { "type": "git", "url": "https://github.com/rvagg/isstream.git" }, "keywords": [ "stream", "type", "streams", "readable-stream", "hippo" ], "devDependencies": { "tape": "~2.12.3", "core-util-is": "~1.0.0", "isarray": "0.0.1", "string_decoder": "~0.10.x", "inherits": "~2.0.1" }, "author": "Rod Vagg ", "license": "MIT", "bugs": { "url": "https://github.com/rvagg/isstream/issues" }, "homepage": "https://github.com/rvagg/isstream" } isstream-0.1.2/test.js000664 000000 000000 00000015477 12476441411 014660 0ustar00rootroot000000 000000 var tape = require('tape') , EE = require('events').EventEmitter , util = require('util') , isStream = require('./') , isReadable = require('./').isReadable , isWritable = require('./').isWritable , isDuplex = require('./').isDuplex , CoreStreams = require('stream') , ReadableStream10 = require('./readable-stream-1.0/') , ReadableStream11 = require('./readable-stream-1.1/') function test (pass, type, stream) { tape('isStream(' + type + ')', function (t) { t.plan(1) t.ok(pass === isStream(stream), type) }) } function testReadable (pass, type, stream) { tape('isReadable(' + type + ')', function (t) { t.plan(1) t.ok(pass === isReadable(stream), type) }) } function testWritable (pass, type, stream) { tape('isWritable(' + type + ')', function (t) { t.plan(1) t.ok(pass === isWritable(stream), type) }) } function testDuplex (pass, type, stream) { tape('isDuplex(' + type + ')', function (t) { t.plan(1) t.ok(pass === isDuplex(stream), type) }) } [ undefined, null, '', true, false, 0, 1, 1.0, 'string', {}, function foo () {} ].forEach(function (o) { test(false, 'non-stream / primitive: ' + (JSON.stringify(o) || (o && o.toString()) || o), o) }) test(false, 'fake stream obj', { pipe: function () {} }) ;(function () { // looks like a stream! function Stream () { EE.call(this) } util.inherits(Stream, EE) Stream.prototype.pipe = function () {} Stream.Stream = Stream test(false, 'fake stream "new Stream()"', new Stream()) }()) test(true, 'CoreStreams.Stream', new (CoreStreams.Stream)()) test(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) test(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) test(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) test(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) test(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) test(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) test(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) test(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) test(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) test(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) test(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) test(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) test(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) test(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) test(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) testReadable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) testReadable(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) testReadable(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) testReadable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) testReadable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) testReadable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) testReadable(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) testReadable(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) testReadable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) testReadable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) testReadable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) testReadable(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) testReadable(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) testReadable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) testReadable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) testReadable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) testWritable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) testWritable(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) testWritable(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) testWritable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) testWritable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) testWritable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) testWritable(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) testWritable(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) testWritable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) testWritable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) testWritable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) testWritable(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) testWritable(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) testWritable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) testWritable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) testWritable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) testDuplex(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) testDuplex(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) testDuplex(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) testDuplex(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) testDuplex(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) testDuplex(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) testDuplex(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) testDuplex(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) testDuplex(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) testDuplex(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) testDuplex(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) testDuplex(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) testDuplex(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) testDuplex(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) testDuplex(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) testDuplex(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) ;[ CoreStreams, ReadableStream10, ReadableStream11 ].forEach(function (p) { [ 'Stream', 'Readable', 'Writable', 'Duplex', 'Transform', 'PassThrough' ].forEach(function (k) { if (!p[k]) return function SubStream () { p[k].call(this) } util.inherits(SubStream, p[k]) test(true, 'Stream subclass: ' + p.name + '.' + k, new SubStream()) }) })