Skip to content

Commit b86b50f

Browse files
committed
improve uniformity of node/web checksumstream api
1 parent 1621795 commit b86b50f

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

packages/util-stream/src/checksum/createChecksumStream.browser.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { Checksum, Encoder } from "@smithy/types";
22
import { toBase64 } from "@smithy/util-base64";
33

4+
import { isReadableStream } from "../stream-type-check";
5+
46
/**
57
* @internal
68
*/
@@ -59,7 +61,7 @@ export const createChecksumStream = ({
5961
checksumSourceLocation,
6062
base64Encoder,
6163
}: ChecksumStreamInit): ReadableStreamType => {
62-
if (!(source instanceof ReadableStream)) {
64+
if (!isReadableStream(source)) {
6365
throw new Error(
6466
`@smithy/util-stream: unsupported source type ${(source as any)?.constructor?.name ?? source} in ChecksumStream.`
6567
);
@@ -100,5 +102,21 @@ export const createChecksumStream = ({
100102
});
101103

102104
source.pipeThrough(transform);
103-
return transform.readable;
105+
const readable = transform.readable;
106+
Object.setPrototypeOf(readable, ChecksumStream.prototype);
107+
return readable;
104108
};
109+
110+
/**
111+
* This stub exists so that the readable returned by createChecksumStream
112+
* identifies as "ChecksumStream" in alignment with the Node.js
113+
* implementation.
114+
*
115+
* @extends ReadableStream
116+
*/
117+
export class ChecksumStream {}
118+
119+
if (typeof ReadableStream === "function") {
120+
ChecksumStream.prototype = Object.create(ReadableStream.prototype);
121+
ChecksumStream.prototype.constructor = ChecksumStream;
122+
}

packages/util-stream/src/checksum/createChecksumStream.spec.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import { toUtf8 } from "@smithy/util-utf8";
44
import { Readable } from "stream";
55

66
import { headStream } from "../headStream";
7-
import { createChecksumStream } from "./createChecksumStream";
7+
import { ChecksumStream, createChecksumStream } from "./createChecksumStream";
8+
import { ChecksumStream as ChecksumStreamWeb } from "./createChecksumStream.browser";
89

910
describe("Checksum streams", () => {
1011
/**
@@ -44,6 +45,7 @@ describe("Checksum streams", () => {
4445

4546
expect(checksumStream.constructor.name).toEqual("ChecksumStream");
4647
expect(checksumStream).toBeInstanceOf(Readable);
48+
expect(checksumStream).toBeInstanceOf(ChecksumStream);
4749

4850
const collected = toUtf8(await headStream(checksumStream, Infinity));
4951
expect(collected).toEqual(canonicalUtf8);
@@ -99,7 +101,9 @@ describe("Checksum streams", () => {
99101
source: stream,
100102
});
101103

104+
expect(checksumStream.constructor.name).toEqual("ChecksumStream");
102105
expect(checksumStream).toBeInstanceOf(ReadableStream);
106+
expect(checksumStream).toBeInstanceOf(ChecksumStreamWeb);
103107

104108
const collected = toUtf8(await headStream(checksumStream, Infinity));
105109
expect(collected).toEqual(canonicalUtf8);

packages/util-stream/src/checksum/createChecksumStream.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export function createChecksumStream(
5656
* buffering the stream.
5757
*
5858
*/
59-
class ChecksumStream extends Duplex {
59+
export class ChecksumStream extends Duplex {
6060
private expectedChecksum: string;
6161
private checksumSourceLocation: string;
6262
private checksum: Checksum;

packages/util-stream/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export * from "./sdk-stream-mixin";
44
export * from "./splitStream";
55
export * from "./headStream";
66
export * from "./stream-type-check";
7+
export * from "./checksum/createChecksumStream";

0 commit comments

Comments
 (0)