1- -- | This module provides a low-level wrapper for the [Node Stream API](https://nodejs.org/api/stream.html).
1+ -- | This module provides a low-level wrapper for the [Node Stream API (v18 LTS) ](https://nodejs.org/docs/latest-v18.x /api/stream.html).
22
33module Node.Stream
4- ( Stream
5- , Read
6- , Readable
4+ ( Read
75 , Write
6+ , Stream
7+ , Readable
88 , Writable
99 , Duplex
1010 , toEventEmitter
11- , setEncoding
1211 , closeH
1312 , errorH
1413 , drainH
@@ -23,10 +22,16 @@ module Node.Stream
2322 , readableH
2423 , resumeH
2524 , endH
25+ , readable
26+ , readableEnded
27+ , readableFlowing
28+ , readableHighWaterMark
29+ , readableLength
2630 , resume
2731 , pause
2832 , isPaused
2933 , pipe
34+ , pipe'
3035 , unpipe
3136 , unpipeAll
3237 , read
@@ -35,17 +40,33 @@ module Node.Stream
3540 , readString'
3641 , readEither
3742 , readEither'
43+ , writeable
44+ , writeableEnded
45+ , writeableCorked
46+ , errored
47+ , writeableFinished
48+ , writeableHighWaterMark
49+ , writeableLength
50+ , writeableNeedDrain
3851 , write
3952 , write'
4053 , writeString
4154 , writeString'
4255 , cork
4356 , uncork
57+ , setEncoding
4458 , setDefaultEncoding
4559 , end
4660 , end'
4761 , destroy
4862 , destroy'
63+ , closed
64+ , destroyed
65+ , allowHalfOpen
66+ , pipeline
67+ , fromString
68+ , fromBuffer
69+ , newPassThrough
4970 ) where
5071
5172import Prelude
@@ -240,9 +261,6 @@ readEither' r size = do
240261-- | Set the encoding used to read chunks as strings from the stream. This
241262-- | function may be useful when you are passing a readable stream to some other
242263-- | JavaScript library, which already expects an encoding to be set.
243- -- |
244- -- | Where possible, you should try to use `onDataString` instead of this
245- -- | function.
246264setEncoding
247265 :: forall w
248266 . Readable w
@@ -282,6 +300,31 @@ resumeH = EventHandle "resume" identity
282300endH :: forall w . EventHandle0 (Readable w )
283301endH = EventHandle " end" identity
284302
303+ readable :: forall w . Readable w -> Effect Boolean
304+ readable r = runEffectFn1 readableImpl r
305+
306+ foreign import readableImpl :: forall w . EffectFn1 (Readable w ) (Boolean )
307+
308+ readableEnded :: forall w . Readable w -> Effect Boolean
309+ readableEnded r = runEffectFn1 readableEndedImpl r
310+
311+ foreign import readableEndedImpl :: forall w . EffectFn1 (Readable w ) (Boolean )
312+
313+ readableFlowing :: forall w . Readable w -> Effect Boolean
314+ readableFlowing r = runEffectFn1 readableFlowingImpl r
315+
316+ foreign import readableFlowingImpl :: forall w . EffectFn1 (Readable w ) (Boolean )
317+
318+ readableHighWaterMark :: forall w . Readable w -> Effect Boolean
319+ readableHighWaterMark r = runEffectFn1 readableHighWaterMarkImpl r
320+
321+ foreign import readableHighWaterMarkImpl :: forall w . EffectFn1 (Readable w ) (Boolean )
322+
323+ readableLength :: forall w . Readable w -> Effect Boolean
324+ readableLength r = runEffectFn1 readableLengthImpl r
325+
326+ foreign import readableLengthImpl :: forall w . EffectFn1 (Readable w ) (Boolean )
327+
285328-- | Resume reading from the stream.
286329resume :: forall w . Readable w -> Effect Unit
287330resume r = runEffectFn1 resumeImpl r
@@ -306,6 +349,11 @@ pipe r w = runEffectFn2 pipeImpl r w
306349
307350foreign import pipeImpl :: forall w r . EffectFn2 (Readable w ) (Writable r ) (Unit )
308351
352+ pipe' :: forall w r . Readable w -> Writable r -> { end :: Boolean } -> Effect Unit
353+ pipe' r w o = runEffectFn3 pipeCbImpl r w o
354+
355+ foreign import pipeCbImpl :: forall w r . EffectFn3 (Readable w ) (Writable r ) ({ end :: Boolean } ) (Unit )
356+
309357-- | Detach a Writable stream previously attached using `pipe`.
310358unpipe :: forall w r . Readable w -> Writable r -> Effect Unit
311359unpipe r w = runEffectFn2 unpipeImpl r w
@@ -318,6 +366,46 @@ unpipeAll r = runEffectFn1 unpipeAllImpl r
318366
319367foreign import unpipeAllImpl :: forall w . EffectFn1 (Readable w ) (Unit )
320368
369+ writeable :: forall r . Writable r -> Effect Boolean
370+ writeable w = runEffectFn1 writeableImpl w
371+
372+ foreign import writeableImpl :: forall r . EffectFn1 (Writable r ) (Boolean )
373+
374+ writeableEnded :: forall r . Writable r -> Effect Boolean
375+ writeableEnded w = runEffectFn1 writeableEndedImpl w
376+
377+ foreign import writeableEndedImpl :: forall r . EffectFn1 (Writable r ) (Boolean )
378+
379+ writeableCorked :: forall r . Writable r -> Effect Boolean
380+ writeableCorked w = runEffectFn1 writeableCorkedImpl w
381+
382+ foreign import writeableCorkedImpl :: forall r . EffectFn1 (Writable r ) (Boolean )
383+
384+ errored :: forall rw . Stream rw -> Effect Boolean
385+ errored rw = runEffectFn1 erroredImpl rw
386+
387+ foreign import erroredImpl :: forall rw . EffectFn1 (Stream rw ) (Boolean )
388+
389+ writeableFinished :: forall r . Writable r -> Effect Boolean
390+ writeableFinished w = runEffectFn1 writeableFinishedImpl w
391+
392+ foreign import writeableFinishedImpl :: forall r . EffectFn1 (Writable r ) (Boolean )
393+
394+ writeableHighWaterMark :: forall r . Writable r -> Effect Number
395+ writeableHighWaterMark w = runEffectFn1 writeableHighWaterMarkImpl w
396+
397+ foreign import writeableHighWaterMarkImpl :: forall r . EffectFn1 (Writable r ) (Number )
398+
399+ writeableLength :: forall r . Writable r -> Effect Number
400+ writeableLength w = runEffectFn1 writeableLengthImpl w
401+
402+ foreign import writeableLengthImpl :: forall r . EffectFn1 (Writable r ) (Number )
403+
404+ writeableNeedDrain :: forall r . Writable r -> Effect Boolean
405+ writeableNeedDrain w = runEffectFn1 writeableNeedDrainImpl w
406+
407+ foreign import writeableNeedDrainImpl :: forall r . EffectFn1 (Writable r ) (Boolean )
408+
321409write :: forall r . Writable r -> Buffer -> Effect Boolean
322410write w b = runEffectFn2 writeImpl w b
323411
@@ -385,3 +473,34 @@ destroy' w e = runEffectFn2 destroyErrorImpl w e
385473
386474foreign import destroyErrorImpl :: forall r . EffectFn2 (Stream r ) (Error ) Unit
387475
476+ closed :: forall r . Stream r -> Effect Boolean
477+ closed w = runEffectFn1 closedImpl w
478+
479+ foreign import closedImpl :: forall r . EffectFn1 (Stream r ) (Boolean )
480+
481+ destroyed :: forall r . Stream r -> Effect Boolean
482+ destroyed w = runEffectFn1 destroyedImpl w
483+
484+ foreign import destroyedImpl :: forall r . EffectFn1 (Stream r ) (Boolean )
485+
486+ allowHalfOpen :: Duplex -> Effect Boolean
487+ allowHalfOpen d = runEffectFn1 allowHalfOpenImpl d
488+
489+ foreign import allowHalfOpenImpl :: EffectFn1 (Duplex ) (Boolean )
490+
491+ pipeline :: forall w r . Readable w -> Array Duplex -> Writable r -> (Error -> Effect Unit ) -> Effect Unit
492+ pipeline src transforms dest cb = runEffectFn4 pipelineImpl src transforms dest cb
493+
494+ foreign import pipelineImpl :: forall w r . EffectFn4 (Readable w ) (Array Duplex ) (Writable r ) ((Error -> Effect Unit )) (Unit )
495+
496+ fromString :: String -> Effect (Readable ())
497+ fromString str = runEffectFn1 readableFromStrImpl str
498+
499+ foreign import readableFromStrImpl :: EffectFn1 (String ) (Readable ())
500+
501+ fromBuffer :: Buffer -> Effect (Readable ())
502+ fromBuffer buf = runEffectFn1 readableFromBufImpl buf
503+
504+ foreign import readableFromBufImpl :: EffectFn1 (Buffer ) (Readable ())
505+
506+ foreign import newPassThrough :: Effect Duplex
0 commit comments