First adaptation pass

This commit is contained in:
2025-11-06 00:01:59 +01:00
parent 5b1fd847c2
commit 6b883f8126
112 changed files with 44142 additions and 953 deletions
+20 -6
View File
@@ -1,11 +1,13 @@
const { EventEmitter } = require('events')
const { EventEmitter } = require('events-universal')
const STREAM_DESTROYED = new Error('Stream was destroyed')
const PREMATURE_CLOSE = new Error('Premature close')
const queueTick = require('queue-tick')
const FIFO = require('fast-fifo')
const TextDecoder = require('text-decoder')
// if we do a future major, expect queue microtask to be there always, for now a bit defensive
const qmt = typeof queueMicrotask === 'undefined' ? fn => global.process.nextTick(fn) : queueMicrotask
/* eslint-disable no-multi-spaces */
// 29 bits used total (4 from shared, 14 from read, and 11 from write)
@@ -98,6 +100,7 @@ const READ_READABLE_STATUS = OPEN_STATUS | READ_EMIT_READABLE | READ_QUEUED | RE
const SHOULD_NOT_READ = OPEN_STATUS | READ_ACTIVE | READ_ENDING | READ_DONE | READ_NEEDS_PUSH | READ_READ_AHEAD
const READ_BACKPRESSURE_STATUS = DESTROY_STATUS | READ_ENDING | READ_DONE
const READ_UPDATE_SYNC_STATUS = READ_UPDATING | OPEN_STATUS | READ_NEXT_TICK | READ_PRIMARY
const READ_NEXT_TICK_OR_OPENING = READ_NEXT_TICK | OPENING
// Combined write state
const WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE
@@ -232,7 +235,7 @@ class WritableState {
updateNextTick () {
if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return
this.stream._duplexState |= WRITE_NEXT_TICK
if ((this.stream._duplexState & WRITE_UPDATING) === 0) queueTick(this.afterUpdateNextTick)
if ((this.stream._duplexState & WRITE_UPDATING) === 0) qmt(this.afterUpdateNextTick)
}
}
@@ -417,10 +420,16 @@ class ReadableState {
else this.updateNextTick()
}
updateNextTickIfOpen () {
if ((this.stream._duplexState & READ_NEXT_TICK_OR_OPENING) !== 0) return
this.stream._duplexState |= READ_NEXT_TICK
if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)
}
updateNextTick () {
if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return
this.stream._duplexState |= READ_NEXT_TICK
if ((this.stream._duplexState & READ_UPDATING) === 0) queueTick(this.afterUpdateNextTick)
if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)
}
}
@@ -728,12 +737,12 @@ class Readable extends Stream {
}
push (data) {
this._readableState.updateNextTick()
this._readableState.updateNextTickIfOpen()
return this._readableState.push(data)
}
unshift (data) {
this._readableState.updateNextTick()
this._readableState.updateNextTickIfOpen()
return this._readableState.unshift(data)
}
@@ -1134,6 +1143,10 @@ function isReadStreamx (stream) {
return isStreamx(stream) && stream.readable
}
function isDisturbed (stream) {
return (stream._duplexState & OPENING) !== OPENING || (stream._duplexState & ACTIVE_OR_TICKING) !== 0
}
function isTypedArray (data) {
return typeof data === 'object' && data !== null && typeof data.byteLength === 'number'
}
@@ -1159,6 +1172,7 @@ module.exports = {
isStreamx,
isEnded,
isFinished,
isDisturbed,
getStreamError,
Stream,
Writable,
+4 -12
View File
@@ -1,11 +1,11 @@
{
"name": "streamx",
"version": "2.20.2",
"version": "2.23.0",
"description": "An iteration of the Node.js core streams with a series of improvements",
"main": "index.js",
"dependencies": {
"events-universal": "^1.0.0",
"fast-fifo": "^1.3.2",
"queue-tick": "^1.0.1",
"text-decoder": "^1.1.0"
},
"devDependencies": {
@@ -14,20 +14,12 @@
"end-of-stream": "^1.4.4",
"standard": "^17.0.0"
},
"optionalDependencies": {
"bare-events": "^2.2.0"
},
"files": [
"index.js"
],
"imports": {
"events": {
"bare": "bare-events",
"default": "events"
}
},
"scripts": {
"test": "standard && brittle test/*.js"
"test": "standard && node test/all.js",
"test:bare": "standard && bare test/all.js"
},
"repository": {
"type": "git",