summaryrefslogtreecommitdiff
path: root/lib/internal/streams/utils.js
blob: 62eea022685e18c0d98238de540bef94891a0854 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'use strict';

const {
  SymbolAsyncIterator,
  SymbolIterator,
} = primordials;

function isReadable(obj) {
  return !!(obj && typeof obj.pipe === 'function' &&
            typeof obj.on === 'function');
}

function isWritable(obj) {
  return !!(obj && typeof obj.write === 'function' &&
            typeof obj.on === 'function');
}

function isStream(obj) {
  return isReadable(obj) || isWritable(obj);
}

function isIterable(obj, isAsync) {
  if (obj == null) return false;
  if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function';
  if (isAsync === false) return typeof obj[SymbolIterator] === 'function';
  return typeof obj[SymbolAsyncIterator] === 'function' ||
    typeof obj[SymbolIterator] === 'function';
}

module.exports = {
  isIterable,
  isReadable,
  isStream,
};