mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-11-04 03:17:00 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			329 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			329 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
 | 
						|
const { Symbol, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')
 | 
						|
 | 
						|
const kDestroyed = Symbol('kDestroyed')
 | 
						|
const kIsErrored = Symbol('kIsErrored')
 | 
						|
const kIsReadable = Symbol('kIsReadable')
 | 
						|
const kIsDisturbed = Symbol('kIsDisturbed')
 | 
						|
 | 
						|
function isReadableNodeStream(obj, strict = false) {
 | 
						|
  var _obj$_readableState
 | 
						|
 | 
						|
  return !!(
 | 
						|
    (
 | 
						|
      obj &&
 | 
						|
      typeof obj.pipe === 'function' &&
 | 
						|
      typeof obj.on === 'function' &&
 | 
						|
      (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&
 | 
						|
      (!obj._writableState ||
 | 
						|
        ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined
 | 
						|
          ? undefined
 | 
						|
          : _obj$_readableState.readable) !== false) && // Duplex
 | 
						|
      (!obj._writableState || obj._readableState)
 | 
						|
    ) // Writable has .pipe.
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function isWritableNodeStream(obj) {
 | 
						|
  var _obj$_writableState
 | 
						|
 | 
						|
  return !!(
 | 
						|
    (
 | 
						|
      obj &&
 | 
						|
      typeof obj.write === 'function' &&
 | 
						|
      typeof obj.on === 'function' &&
 | 
						|
      (!obj._readableState ||
 | 
						|
        ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined
 | 
						|
          ? undefined
 | 
						|
          : _obj$_writableState.writable) !== false)
 | 
						|
    ) // Duplex
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function isDuplexNodeStream(obj) {
 | 
						|
  return !!(
 | 
						|
    obj &&
 | 
						|
    typeof obj.pipe === 'function' &&
 | 
						|
    obj._readableState &&
 | 
						|
    typeof obj.on === 'function' &&
 | 
						|
    typeof obj.write === 'function'
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function isNodeStream(obj) {
 | 
						|
  return (
 | 
						|
    obj &&
 | 
						|
    (obj._readableState ||
 | 
						|
      obj._writableState ||
 | 
						|
      (typeof obj.write === 'function' && typeof obj.on === 'function') ||
 | 
						|
      (typeof obj.pipe === 'function' && typeof obj.on === 'function'))
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
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'
 | 
						|
}
 | 
						|
 | 
						|
function isDestroyed(stream) {
 | 
						|
  if (!isNodeStream(stream)) return null
 | 
						|
  const wState = stream._writableState
 | 
						|
  const rState = stream._readableState
 | 
						|
  const state = wState || rState
 | 
						|
  return !!(stream.destroyed || stream[kDestroyed] || (state !== null && state !== undefined && state.destroyed))
 | 
						|
} // Have been end():d.
 | 
						|
 | 
						|
function isWritableEnded(stream) {
 | 
						|
  if (!isWritableNodeStream(stream)) return null
 | 
						|
  if (stream.writableEnded === true) return true
 | 
						|
  const wState = stream._writableState
 | 
						|
  if (wState !== null && wState !== undefined && wState.errored) return false
 | 
						|
  if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null
 | 
						|
  return wState.ended
 | 
						|
} // Have emitted 'finish'.
 | 
						|
 | 
						|
function isWritableFinished(stream, strict) {
 | 
						|
  if (!isWritableNodeStream(stream)) return null
 | 
						|
  if (stream.writableFinished === true) return true
 | 
						|
  const wState = stream._writableState
 | 
						|
  if (wState !== null && wState !== undefined && wState.errored) return false
 | 
						|
  if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null
 | 
						|
  return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))
 | 
						|
} // Have been push(null):d.
 | 
						|
 | 
						|
function isReadableEnded(stream) {
 | 
						|
  if (!isReadableNodeStream(stream)) return null
 | 
						|
  if (stream.readableEnded === true) return true
 | 
						|
  const rState = stream._readableState
 | 
						|
  if (!rState || rState.errored) return false
 | 
						|
  if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null
 | 
						|
  return rState.ended
 | 
						|
} // Have emitted 'end'.
 | 
						|
 | 
						|
function isReadableFinished(stream, strict) {
 | 
						|
  if (!isReadableNodeStream(stream)) return null
 | 
						|
  const rState = stream._readableState
 | 
						|
  if (rState !== null && rState !== undefined && rState.errored) return false
 | 
						|
  if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null
 | 
						|
  return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))
 | 
						|
}
 | 
						|
 | 
						|
function isReadable(stream) {
 | 
						|
  if (stream && stream[kIsReadable] != null) return stream[kIsReadable]
 | 
						|
  if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null
 | 
						|
  if (isDestroyed(stream)) return false
 | 
						|
  return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)
 | 
						|
}
 | 
						|
 | 
						|
function isWritable(stream) {
 | 
						|
  if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null
 | 
						|
  if (isDestroyed(stream)) return false
 | 
						|
  return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)
 | 
						|
}
 | 
						|
 | 
						|
function isFinished(stream, opts) {
 | 
						|
  if (!isNodeStream(stream)) {
 | 
						|
    return null
 | 
						|
  }
 | 
						|
 | 
						|
  if (isDestroyed(stream)) {
 | 
						|
    return true
 | 
						|
  }
 | 
						|
 | 
						|
  if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {
 | 
						|
    return false
 | 
						|
  }
 | 
						|
 | 
						|
  if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {
 | 
						|
    return false
 | 
						|
  }
 | 
						|
 | 
						|
  return true
 | 
						|
}
 | 
						|
 | 
						|
function isWritableErrored(stream) {
 | 
						|
  var _stream$_writableStat, _stream$_writableStat2
 | 
						|
 | 
						|
  if (!isNodeStream(stream)) {
 | 
						|
    return null
 | 
						|
  }
 | 
						|
 | 
						|
  if (stream.writableErrored) {
 | 
						|
    return stream.writableErrored
 | 
						|
  }
 | 
						|
 | 
						|
  return (_stream$_writableStat =
 | 
						|
    (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined
 | 
						|
      ? undefined
 | 
						|
      : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined
 | 
						|
    ? _stream$_writableStat
 | 
						|
    : null
 | 
						|
}
 | 
						|
 | 
						|
function isReadableErrored(stream) {
 | 
						|
  var _stream$_readableStat, _stream$_readableStat2
 | 
						|
 | 
						|
  if (!isNodeStream(stream)) {
 | 
						|
    return null
 | 
						|
  }
 | 
						|
 | 
						|
  if (stream.readableErrored) {
 | 
						|
    return stream.readableErrored
 | 
						|
  }
 | 
						|
 | 
						|
  return (_stream$_readableStat =
 | 
						|
    (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined
 | 
						|
      ? undefined
 | 
						|
      : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined
 | 
						|
    ? _stream$_readableStat
 | 
						|
    : null
 | 
						|
}
 | 
						|
 | 
						|
function isClosed(stream) {
 | 
						|
  if (!isNodeStream(stream)) {
 | 
						|
    return null
 | 
						|
  }
 | 
						|
 | 
						|
  if (typeof stream.closed === 'boolean') {
 | 
						|
    return stream.closed
 | 
						|
  }
 | 
						|
 | 
						|
  const wState = stream._writableState
 | 
						|
  const rState = stream._readableState
 | 
						|
 | 
						|
  if (
 | 
						|
    typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||
 | 
						|
    typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'
 | 
						|
  ) {
 | 
						|
    return (
 | 
						|
      (wState === null || wState === undefined ? undefined : wState.closed) ||
 | 
						|
      (rState === null || rState === undefined ? undefined : rState.closed)
 | 
						|
    )
 | 
						|
  }
 | 
						|
 | 
						|
  if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {
 | 
						|
    return stream._closed
 | 
						|
  }
 | 
						|
 | 
						|
  return null
 | 
						|
}
 | 
						|
 | 
						|
function isOutgoingMessage(stream) {
 | 
						|
  return (
 | 
						|
    typeof stream._closed === 'boolean' &&
 | 
						|
    typeof stream._defaultKeepAlive === 'boolean' &&
 | 
						|
    typeof stream._removedConnection === 'boolean' &&
 | 
						|
    typeof stream._removedContLen === 'boolean'
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function isServerResponse(stream) {
 | 
						|
  return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)
 | 
						|
}
 | 
						|
 | 
						|
function isServerRequest(stream) {
 | 
						|
  var _stream$req
 | 
						|
 | 
						|
  return (
 | 
						|
    typeof stream._consuming === 'boolean' &&
 | 
						|
    typeof stream._dumped === 'boolean' &&
 | 
						|
    ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===
 | 
						|
      undefined
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function willEmitClose(stream) {
 | 
						|
  if (!isNodeStream(stream)) return null
 | 
						|
  const wState = stream._writableState
 | 
						|
  const rState = stream._readableState
 | 
						|
  const state = wState || rState
 | 
						|
  return (
 | 
						|
    (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function isDisturbed(stream) {
 | 
						|
  var _stream$kIsDisturbed
 | 
						|
 | 
						|
  return !!(
 | 
						|
    stream &&
 | 
						|
    ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined
 | 
						|
      ? _stream$kIsDisturbed
 | 
						|
      : stream.readableDidRead || stream.readableAborted)
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function isErrored(stream) {
 | 
						|
  var _ref,
 | 
						|
    _ref2,
 | 
						|
    _ref3,
 | 
						|
    _ref4,
 | 
						|
    _ref5,
 | 
						|
    _stream$kIsErrored,
 | 
						|
    _stream$_readableStat3,
 | 
						|
    _stream$_writableStat3,
 | 
						|
    _stream$_readableStat4,
 | 
						|
    _stream$_writableStat4
 | 
						|
 | 
						|
  return !!(
 | 
						|
    stream &&
 | 
						|
    ((_ref =
 | 
						|
      (_ref2 =
 | 
						|
        (_ref3 =
 | 
						|
          (_ref4 =
 | 
						|
            (_ref5 =
 | 
						|
              (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined
 | 
						|
                ? _stream$kIsErrored
 | 
						|
                : stream.readableErrored) !== null && _ref5 !== undefined
 | 
						|
              ? _ref5
 | 
						|
              : stream.writableErrored) !== null && _ref4 !== undefined
 | 
						|
            ? _ref4
 | 
						|
            : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined
 | 
						|
            ? undefined
 | 
						|
            : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined
 | 
						|
          ? _ref3
 | 
						|
          : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined
 | 
						|
          ? undefined
 | 
						|
          : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined
 | 
						|
        ? _ref2
 | 
						|
        : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined
 | 
						|
        ? undefined
 | 
						|
        : _stream$_readableStat4.errored) !== null && _ref !== undefined
 | 
						|
      ? _ref
 | 
						|
      : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined
 | 
						|
      ? undefined
 | 
						|
      : _stream$_writableStat4.errored)
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  kDestroyed,
 | 
						|
  isDisturbed,
 | 
						|
  kIsDisturbed,
 | 
						|
  isErrored,
 | 
						|
  kIsErrored,
 | 
						|
  isReadable,
 | 
						|
  kIsReadable,
 | 
						|
  isClosed,
 | 
						|
  isDestroyed,
 | 
						|
  isDuplexNodeStream,
 | 
						|
  isFinished,
 | 
						|
  isIterable,
 | 
						|
  isReadableNodeStream,
 | 
						|
  isReadableEnded,
 | 
						|
  isReadableFinished,
 | 
						|
  isReadableErrored,
 | 
						|
  isNodeStream,
 | 
						|
  isWritable,
 | 
						|
  isWritableNodeStream,
 | 
						|
  isWritableEnded,
 | 
						|
  isWritableFinished,
 | 
						|
  isWritableErrored,
 | 
						|
  isServerRequest,
 | 
						|
  isServerResponse,
 | 
						|
  willEmitClose
 | 
						|
}
 |