| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- 'use strict'
- const { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')
- // We need to use SymbolFor to make these globally available
- // for interopt with readable-stream, i.e. readable-stream
- // and node core needs to be able to read/write private state
- // from each other for proper interoperability.
- const kIsDestroyed = SymbolFor('nodejs.stream.destroyed')
- const kIsErrored = SymbolFor('nodejs.stream.errored')
- const kIsReadable = SymbolFor('nodejs.stream.readable')
- const kIsWritable = SymbolFor('nodejs.stream.writable')
- const kIsDisturbed = SymbolFor('nodejs.stream.disturbed')
- const kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')
- const kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')
- 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 isReadableStream(obj) {
- return !!(
- obj &&
- !isNodeStream(obj) &&
- typeof obj.pipeThrough === 'function' &&
- typeof obj.getReader === 'function' &&
- typeof obj.cancel === 'function'
- )
- }
- function isWritableStream(obj) {
- return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')
- }
- function isTransformStream(obj) {
- return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')
- }
- function isWebStream(obj) {
- return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(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'
- }
- function isDestroyed(stream) {
- if (!isNodeStream(stream)) return null
- const wState = stream._writableState
- const rState = stream._readableState
- const state = wState || rState
- return !!(stream.destroyed || stream[kIsDestroyed] || (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 (stream && stream[kIsWritable] != null) return stream[kIsWritable]
- 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 = {
- isDestroyed,
- kIsDestroyed,
- isDisturbed,
- kIsDisturbed,
- isErrored,
- kIsErrored,
- isReadable,
- kIsReadable,
- kIsClosedPromise,
- kControllerErrorFunction,
- kIsWritable,
- isClosed,
- isDuplexNodeStream,
- isFinished,
- isIterable,
- isReadableNodeStream,
- isReadableStream,
- isReadableEnded,
- isReadableFinished,
- isReadableErrored,
- isNodeStream,
- isWebStream,
- isWritable,
- isWritableNodeStream,
- isWritableStream,
- isWritableEnded,
- isWritableFinished,
- isWritableErrored,
- isServerRequest,
- isServerResponse,
- willEmitClose,
- isTransformStream
- }
|