Skip to content

Commit 74b80c1

Browse files
shanejonasGudahtt
andauthored
throw error if parent is destroyed already when creating sub streams (#17)
* throw error if parent is destroyed already when creating sub streams * add guards for streams ended already * Update test/index.js Co-authored-by: Mark Stacey <[email protected]> Co-authored-by: Mark Stacey <[email protected]>
1 parent 149045d commit 74b80c1

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v12
1+
v12

src/ObjectMultiplex.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ export class ObjectMultiplex extends Duplex {
2323
}
2424

2525
createStream(name: string): Substream {
26+
// guard stream against destroyed already
27+
if (this.destroyed) {
28+
throw new Error('ObjectMultiplex - parent stream already destroyed');
29+
}
30+
31+
// guard stream against ended already
32+
if (this._readableState.ended || this._writableState.ended) {
33+
throw new Error('ObjectMultiplex - parent stream already ended');
34+
}
35+
2636
// validate name
2737
if (!name) {
2838
throw new Error('ObjectMultiplex - name must not be empty');

test/index.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,28 @@ test('roundtrip', (t) => {
7979
setTimeout(() => outTransport.destroy(), 100);
8080
});
8181

82+
test('error on createStream if destroyed', (t) => {
83+
const stream = new ObjMultiplex();
84+
stream.destroy();
85+
try {
86+
stream.createStream('controller');
87+
} catch (e) {
88+
t.assert(e.message.includes('already destroyed'), true);
89+
t.end();
90+
}
91+
});
92+
93+
test('error on createStream if ended', (t) => {
94+
const stream = new ObjMultiplex();
95+
stream.end();
96+
try {
97+
stream.createStream('controller');
98+
} catch (e) {
99+
t.assert(e.message.includes('already ended'), true);
100+
t.end();
101+
}
102+
});
103+
82104
// util
83105

84106
function basicTestSetup() {

0 commit comments

Comments
 (0)