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).
2
2
3
3
module Node.Stream
4
- ( Stream
5
- , Read
6
- , Readable
4
+ ( Read
7
5
, Write
6
+ , Stream
7
+ , Readable
8
8
, Writable
9
9
, Duplex
10
10
, toEventEmitter
11
- , setEncoding
12
11
, closeH
13
12
, errorH
14
13
, drainH
@@ -23,10 +22,16 @@ module Node.Stream
23
22
, readableH
24
23
, resumeH
25
24
, endH
25
+ , readable
26
+ , readableEnded
27
+ , readableFlowing
28
+ , readableHighWaterMark
29
+ , readableLength
26
30
, resume
27
31
, pause
28
32
, isPaused
29
33
, pipe
34
+ , pipe'
30
35
, unpipe
31
36
, unpipeAll
32
37
, read
@@ -35,17 +40,33 @@ module Node.Stream
35
40
, readString'
36
41
, readEither
37
42
, readEither'
43
+ , writeable
44
+ , writeableEnded
45
+ , writeableCorked
46
+ , errored
47
+ , writeableFinished
48
+ , writeableHighWaterMark
49
+ , writeableLength
50
+ , writeableNeedDrain
38
51
, write
39
52
, write'
40
53
, writeString
41
54
, writeString'
42
55
, cork
43
56
, uncork
57
+ , setEncoding
44
58
, setDefaultEncoding
45
59
, end
46
60
, end'
47
61
, destroy
48
62
, destroy'
63
+ , closed
64
+ , destroyed
65
+ , allowHalfOpen
66
+ , pipeline
67
+ , fromString
68
+ , fromBuffer
69
+ , newPassThrough
49
70
) where
50
71
51
72
import Prelude
@@ -240,9 +261,6 @@ readEither' r size = do
240
261
-- | Set the encoding used to read chunks as strings from the stream. This
241
262
-- | function may be useful when you are passing a readable stream to some other
242
263
-- | 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.
246
264
setEncoding
247
265
:: forall w
248
266
. Readable w
@@ -282,6 +300,31 @@ resumeH = EventHandle "resume" identity
282
300
endH :: forall w . EventHandle0 (Readable w )
283
301
endH = EventHandle " end" identity
284
302
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
+
285
328
-- | Resume reading from the stream.
286
329
resume :: forall w . Readable w -> Effect Unit
287
330
resume r = runEffectFn1 resumeImpl r
@@ -306,6 +349,11 @@ pipe r w = runEffectFn2 pipeImpl r w
306
349
307
350
foreign import pipeImpl :: forall w r . EffectFn2 (Readable w ) (Writable r ) (Unit )
308
351
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
+
309
357
-- | Detach a Writable stream previously attached using `pipe`.
310
358
unpipe :: forall w r . Readable w -> Writable r -> Effect Unit
311
359
unpipe r w = runEffectFn2 unpipeImpl r w
@@ -318,6 +366,46 @@ unpipeAll r = runEffectFn1 unpipeAllImpl r
318
366
319
367
foreign import unpipeAllImpl :: forall w . EffectFn1 (Readable w ) (Unit )
320
368
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
+
321
409
write :: forall r . Writable r -> Buffer -> Effect Boolean
322
410
write w b = runEffectFn2 writeImpl w b
323
411
@@ -385,3 +473,34 @@ destroy' w e = runEffectFn2 destroyErrorImpl w e
385
473
386
474
foreign import destroyErrorImpl :: forall r . EffectFn2 (Stream r ) (Error ) Unit
387
475
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