diff --git a/isReadableStream.js b/isReadableStream.js new file mode 100644 index 000000000..e69de29bb diff --git a/isStream.js b/isStream.js new file mode 100644 index 000000000..e69de29bb diff --git a/isWritableStream.js b/isWritableStream.js new file mode 100644 index 000000000..e69de29bb diff --git a/snippets/isDuplexStream.md b/snippets/isDuplexStream.md new file mode 100644 index 000000000..24e5b05a8 --- /dev/null +++ b/snippets/isDuplexStream.md @@ -0,0 +1,23 @@ +### isDuplexStream + +Checks if the given argument is a duplex (readable and writable) stream. + +Check if the value is different from `null`, use `typeof` to check if a value is of type `object` and the `pipe` property is of type `function`. +Additionally check if the `typeof` the `_read`, `_write` and `_readableState`, `_writableState` properties are `function` and `object` respectively. + +```js +const isDuplexStream = val => + val !== null && + typeof val === 'object' && + typeof val.pipe === 'function' && + typeof val.pipe === 'function' && + typeof val._read === 'function' && + typeof val._readableState === 'object' && + typeof val._write === 'function' && + typeof val._writableState === 'object'; +``` + +```js +const Stream = require('stream'); +isDuplexStream(new Stream.Duplex()); // true +``` diff --git a/snippets/isReadableStream.md b/snippets/isReadableStream.md new file mode 100644 index 000000000..3ac9701eb --- /dev/null +++ b/snippets/isReadableStream.md @@ -0,0 +1,20 @@ +### isReadableStream + +Checks if the given argument is a readable stream. + +Check if the value is different from `null`, use `typeof` to check if the value is of type `object` and the `pipe` property is of type `function`. +Additionally check if the `typeof` the `_read` and `_readableState` properties are `function` and `object` respectively. + +```js +const isReadableStream = val => + val !== null && + typeof val === 'object' && + typeof val.pipe === 'function' && + typeof val._read === 'function' && + typeof val._readableState === 'object'; +``` + +```js +const fs = require('fs'); +isReadableStream(fs.createReadStream('test.txt')); // true +``` diff --git a/snippets/isStream.md b/snippets/isStream.md index bce9ea22a..6cb83a703 100644 --- a/snippets/isStream.md +++ b/snippets/isStream.md @@ -2,7 +2,7 @@ Checks if the given argument is a stream. -Check if the value is different from `null`, use `typeof` to check if a value is of type `object` and the `pipe` property is of type `function`. +Check if the value is different from `null`, use `typeof` to check if the value is of type `object` and the `pipe` property is of type `function`. ```js const isStream = val => val !== null && typeof val === 'object' && typeof val.pipe === 'function'; diff --git a/snippets/isWritableStream.md b/snippets/isWritableStream.md new file mode 100644 index 000000000..8c30b8d2b --- /dev/null +++ b/snippets/isWritableStream.md @@ -0,0 +1,20 @@ +### isWritableStream + +Checks if the given argument is a writable stream. + +Check if the value is different from `null`, use `typeof` to check if the value is of type `object` and the `pipe` property is of type `function`. +Additionally check if the `typeof` the `_write` and `_writableState` properties are `function` and `object` respectively. + +```js +const isWritableStream = val => + val !== null && + typeof val === 'object' && + typeof val.pipe === 'function' && + typeof val._write === 'function' && + typeof val._writableState === 'object'; +``` + +```js +const fs = require('fs'); +isWritableStream(fs.createWriteStream('test.txt')); // true +``` diff --git a/tag_database b/tag_database index a93ae3bcc..f84b5ee40 100644 --- a/tag_database +++ b/tag_database @@ -139,6 +139,7 @@ isBoolean:type,beginner isBrowser:utility,browser,intermediate isBrowserTabFocused:browser,beginner isDivisible:math,beginner +isDuplexStream:node,type,intermediate isEmpty:type,array,object,string,beginner isEven:math,beginner isFunction:type,function,beginner @@ -152,6 +153,7 @@ isPlainObject:type,object,intermediate isPrime:math,beginner,intermediate isPrimitive:type,function,array,string,intermediate isPromiseLike:type,function,promise,intermediate +isReadableStream:node,type,intermediate isSameDate:date,utility,beginner isSorted:array,intermediate isStream:node,type,intermediate @@ -161,6 +163,7 @@ isTravisCI:node,intermediate isUndefined:type,beginner isUpperCase:string,utility,beginner isValidJSON:type,json,intermediate +isWritableStream:node,type,intermediate join:array,intermediate JSONtoCSV:array,string,object,advanced JSONToFile:node,json,intermediate diff --git a/test/isDuplexStream/isDuplexStream.js b/test/isDuplexStream/isDuplexStream.js new file mode 100644 index 000000000..fe650454b --- /dev/null +++ b/test/isDuplexStream/isDuplexStream.js @@ -0,0 +1,10 @@ +const isDuplexStream = val => + val !== null && + typeof val === 'object' && + typeof val.pipe === 'function' && + typeof val.pipe === 'function' && + typeof val._read === 'function' && + typeof val._readableState === 'object' && + typeof val._write === 'function' && + typeof val._writableState === 'object'; +module.exports = isDuplexStream; diff --git a/test/isDuplexStream/isDuplexStream.test.js b/test/isDuplexStream/isDuplexStream.test.js new file mode 100644 index 000000000..6ff332242 --- /dev/null +++ b/test/isDuplexStream/isDuplexStream.test.js @@ -0,0 +1,20 @@ +const expect = require('expect'); +const isDuplexStream = require('./isDuplexStream.js'); +const fs = require('fs'); +const Stream = require('stream'); + +test('isDuplexStream is a Function', () => { + expect(isDuplexStream).toBeInstanceOf(Function); +}); +test('isDuplexStream returns true for read streams', () => { + expect(isDuplexStream(fs.createReadStream('isDuplexStream.js'))).toBeTruthy(); +}); +test('isDuplexStream returns true for write streams', () => { + expect(isDuplexStream(fs.createWriteStream('isDuplexStream.js'))).toBeTruthy(); +}); +test('isDuplexStream returns true for duplex streams', () => { + expect(isDuplexStream(new Stream.Duplex())).toBeTruthy(); +}); +test('isDuplexStream returns false for non-streams', () => { + expect(isDuplexStream({})).toBeFalsy(); +}); diff --git a/test/isReadableStream/isReadableStream.js b/test/isReadableStream/isReadableStream.js new file mode 100644 index 000000000..a514cc8d2 --- /dev/null +++ b/test/isReadableStream/isReadableStream.js @@ -0,0 +1,7 @@ +const isReadableStream = val => + val !== null && + typeof val === 'object' && + typeof val.pipe === 'function' && + typeof val._read === 'function' && + typeof val._readableState === 'object'; +module.exports = isReadableStream; diff --git a/test/isReadableStream/isReadableStream.test.js b/test/isReadableStream/isReadableStream.test.js new file mode 100644 index 000000000..7c5174d99 --- /dev/null +++ b/test/isReadableStream/isReadableStream.test.js @@ -0,0 +1,20 @@ +const expect = require('expect'); +const isReadableStream = require('./isReadableStream.js'); +const fs = require('fs'); +const Stream = require('stream'); + +test('isReadableStream is a Function', () => { + expect(isReadableStream).toBeInstanceOf(Function); +}); +test('isReadableStream returns true for read streams', () => { + expect(isReadableStream(fs.createReadStream('isReadableStream.js'))).toBeTruthy(); +}); +test('isReadableStream returns false for write streams', () => { + expect(isReadableStream(fs.createWriteStream('isReadableStream.js'))).toBeFalsy(); +}); +test('isReadableStream returns true for duplex streams', () => { + expect(isReadableStream(new Stream.Duplex())).toBeTruthy(); +}); +test('isReadableStream returns false for non-streams', () => { + expect(isReadableStream({})).toBeFalsy(); +}); diff --git a/test/isStream/isStream.test.js b/test/isStream/isStream.test.js index 07dd965b1..3d0f18e56 100644 --- a/test/isStream/isStream.test.js +++ b/test/isStream/isStream.test.js @@ -1,13 +1,20 @@ const expect = require('expect'); const isStream = require('./isStream.js'); const fs = require('fs'); +const Stream = require('stream'); test('isStream is a Function', () => { expect(isStream).toBeInstanceOf(Function); }); -test('isStream returns true for streams', () => { +test('isStream returns true for read streams', () => { expect(isStream(fs.createReadStream('isStream.js'))).toBeTruthy(); }); +test('isStream returns true for write streams', () => { + expect(isStream(fs.createWriteStream('isStream.js'))).toBeTruthy(); +}); +test('isStream returns true for duplex streams', () => { + expect(isStream(new Stream.Duplex())).toBeTruthy(); +}); test('isStream returns false for non-streams', () => { expect(isStream({})).toBeFalsy(); }); diff --git a/test/isWritableStream/isWritableStream.js b/test/isWritableStream/isWritableStream.js new file mode 100644 index 000000000..a9679cc3d --- /dev/null +++ b/test/isWritableStream/isWritableStream.js @@ -0,0 +1,7 @@ +const isWritableStream = val => + val !== null && + typeof val === 'object' && + typeof val.pipe === 'function' && + typeof val._write === 'function' && + typeof val._writableState === 'object'; +module.exports = isWritableStream; diff --git a/test/isWritableStream/isWritableStream.test.js b/test/isWritableStream/isWritableStream.test.js new file mode 100644 index 000000000..4ad21eb23 --- /dev/null +++ b/test/isWritableStream/isWritableStream.test.js @@ -0,0 +1,20 @@ +const expect = require('expect'); +const isWritableStream = require('./isWritableStream.js'); +const fs = require('fs'); +const Stream = require('stream'); + +test('isWritableStream is a Function', () => { + expect(isWritableStream).toBeInstanceOf(Function); +}); +test('isWritableStream returns false for read streams', () => { + expect(isWritableStream(fs.createReadStream('isWritableStream.js'))).toBeFalsy(); +}); +test('isWritableStream returns true for write streams', () => { + expect(isWritableStream(fs.createWriteStream('isWritableStream.js'))).toBeTruthy(); +}); +test('isWritableStream returns true for duplex streams', () => { + expect(isWritableStream(new Stream.Duplex())).toBeTruthy(); +}); +test('isWritableStream returns false for non-streams', () => { + expect(isWritableStream({})).toBeFalsy(); +}); diff --git a/test/takeRightWhile/takeRightWhile.js b/test/takeRightWhile/takeRightWhile.js index 29011dc3d..b01512663 100644 --- a/test/takeRightWhile/takeRightWhile.js +++ b/test/takeRightWhile/takeRightWhile.js @@ -1,2 +1,3 @@ -const takeRightWhile = (arr, func) => arr.reduceRight((acc, el) => func(el) ? acc : [el, ...acc], []); +const takeRightWhile = (arr, func) => + arr.reduceRight((acc, el) => (func(el) ? acc : [el, ...acc]), []); module.exports = takeRightWhile;