File tree Expand file tree Collapse file tree 2 files changed +47
-2
lines changed
Expand file tree Collapse file tree 2 files changed +47
-2
lines changed Original file line number Diff line number Diff line change 1+ // utility for whatwg streams
2+
3+ export function isReadableStream < T > ( object : unknown ) : object is ReadableStream < T > {
4+ return typeof ReadableStream !== "object" && object instanceof ReadableStream ;
5+ }
6+
7+ export async function * asyncIterableFromStream < T > ( stream : ReadableStream < T > ) : AsyncIterable < T > {
8+ const reader = stream . getReader ( ) ;
9+
10+ try {
11+ while ( true ) {
12+ const { done, value } = await reader . read ( ) ;
13+ if ( done ) {
14+ return ;
15+ }
16+ yield value ;
17+ }
18+ } finally {
19+ reader . releaseLock ( ) ;
20+ }
21+ }
Original file line number Diff line number Diff line change 11import { deepStrictEqual } from "assert" ;
2- import { encode , decode } from "../src" ;
2+ import { encode , decode , decodeAsync } from "@msgpack/msgpack" ;
3+ import { asyncIterableFromStream } from "../src/utils/stream" ;
34
45describe ( "README" , ( ) => {
5- context ( "#synopsis " , ( ) => {
6+ context ( "## Synopsis " , ( ) => {
67 it ( "runs" , ( ) => {
78 const object = {
89 nil : null ,
@@ -21,4 +22,27 @@ describe("README", () => {
2122 deepStrictEqual ( decode ( encoded ) , object ) ;
2223 } ) ;
2324 } ) ;
25+
26+ context ( "## ReadableStream" , ( ) => {
27+ before ( function ( ) {
28+ if ( typeof ReadableStream === "undefined" ) {
29+ this . skip ( ) ;
30+ }
31+ } ) ;
32+
33+ it ( "reads from stream" , async ( ) => {
34+ const data = [ 1 , 2 , 3 ] ;
35+ const encoded = encode ( data ) ;
36+ const stream = new ReadableStream ( {
37+ start ( controller ) {
38+ for ( const byte of encoded ) {
39+ controller . enqueue ( [ byte ] ) ;
40+ }
41+ controller . close ( ) ;
42+ } ,
43+ } ) ;
44+
45+ deepStrictEqual ( await decodeAsync ( asyncIterableFromStream ( stream ) ) , data ) ;
46+ } ) ;
47+ } ) ;
2448} ) ;
You can’t perform that action at this time.
0 commit comments