From dd66d1ab50dd3952befd5587ade23558e939fb86 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Thu, 9 Dec 2021 11:08:59 -0800 Subject: [PATCH] chore(hash-stream-node): move fileStreamHasher to own file (#3086) --- ...culator.spec.ts => HashCalculator.spec.ts} | 2 +- .../{hash-calculator.ts => HashCalculator.ts} | 0 ...index.spec.ts => fileStreamHasher.spec.ts} | 2 +- .../hash-stream-node/src/fileStreamHasher.ts | 34 +++++++++++++++ packages/hash-stream-node/src/index.ts | 41 +------------------ 5 files changed, 37 insertions(+), 42 deletions(-) rename packages/hash-stream-node/src/{hash-calculator.spec.ts => HashCalculator.spec.ts} (96%) rename packages/hash-stream-node/src/{hash-calculator.ts => HashCalculator.ts} (100%) rename packages/hash-stream-node/src/{index.spec.ts => fileStreamHasher.spec.ts} (96%) create mode 100644 packages/hash-stream-node/src/fileStreamHasher.ts diff --git a/packages/hash-stream-node/src/hash-calculator.spec.ts b/packages/hash-stream-node/src/HashCalculator.spec.ts similarity index 96% rename from packages/hash-stream-node/src/hash-calculator.spec.ts rename to packages/hash-stream-node/src/HashCalculator.spec.ts index 6fa3f234f2ea..efdc331dfbe2 100644 --- a/packages/hash-stream-node/src/hash-calculator.spec.ts +++ b/packages/hash-stream-node/src/HashCalculator.spec.ts @@ -1,4 +1,4 @@ -import { HashCalculator } from "./hash-calculator"; +import { HashCalculator } from "./HashCalculator"; function createMockHash(): { updates: Buffer[]; diff --git a/packages/hash-stream-node/src/hash-calculator.ts b/packages/hash-stream-node/src/HashCalculator.ts similarity index 100% rename from packages/hash-stream-node/src/hash-calculator.ts rename to packages/hash-stream-node/src/HashCalculator.ts diff --git a/packages/hash-stream-node/src/index.spec.ts b/packages/hash-stream-node/src/fileStreamHasher.spec.ts similarity index 96% rename from packages/hash-stream-node/src/index.spec.ts rename to packages/hash-stream-node/src/fileStreamHasher.spec.ts index 13caee8b898c..4eaa73e180a9 100644 --- a/packages/hash-stream-node/src/index.spec.ts +++ b/packages/hash-stream-node/src/fileStreamHasher.spec.ts @@ -5,7 +5,7 @@ import { tmpdir } from "os"; import { join } from "path"; import { Readable } from "stream"; -import { fileStreamHasher } from "./index"; +import { fileStreamHasher } from "./fileStreamHasher"; function createTemporaryFile(contents: string): string { const folder = mkdtempSync(join(tmpdir(), "sha256-stream-node-")); diff --git a/packages/hash-stream-node/src/fileStreamHasher.ts b/packages/hash-stream-node/src/fileStreamHasher.ts new file mode 100644 index 000000000000..b15a92af4a03 --- /dev/null +++ b/packages/hash-stream-node/src/fileStreamHasher.ts @@ -0,0 +1,34 @@ +import { HashConstructor, StreamHasher } from "@aws-sdk/types"; +import { createReadStream, ReadStream } from "fs"; +import { Readable } from "stream"; + +import { HashCalculator } from "./HashCalculator"; + +export const fileStreamHasher: StreamHasher = (hashCtor: HashConstructor, fileStream: Readable) => + new Promise((resolve, reject) => { + if (!isReadStream(fileStream)) { + reject(new Error("Unable to calculate hash for non-file streams.")); + return; + } + + const fileStreamTee = createReadStream(fileStream.path, { + start: (fileStream as any).start, + end: (fileStream as any).end, + }); + + const hash = new hashCtor(); + const hashCalculator = new HashCalculator(hash); + + fileStreamTee.pipe(hashCalculator); + fileStreamTee.on("error", (err: any) => { + // if the source errors, the destination stream needs to manually end + hashCalculator.end(); + reject(err); + }); + hashCalculator.on("error", reject); + hashCalculator.on("finish", function (this: HashCalculator) { + hash.digest().then(resolve).catch(reject); + }); + }); + +const isReadStream = (stream: Readable): stream is ReadStream => typeof (stream as ReadStream).path === "string"; diff --git a/packages/hash-stream-node/src/index.ts b/packages/hash-stream-node/src/index.ts index d34edbd1d948..5624a7a012f8 100644 --- a/packages/hash-stream-node/src/index.ts +++ b/packages/hash-stream-node/src/index.ts @@ -1,40 +1 @@ -import { HashConstructor, StreamHasher } from "@aws-sdk/types"; -import { createReadStream, ReadStream } from "fs"; -import { Readable } from "stream"; - -import { HashCalculator } from "./hash-calculator"; - -export const fileStreamHasher: StreamHasher = function fileStreamHasher( - hashCtor: HashConstructor, - fileStream: Readable -): Promise { - return new Promise((resolve, reject) => { - if (!isReadStream(fileStream)) { - reject(new Error("Unable to calculate hash for non-file streams.")); - return; - } - - const fileStreamTee = createReadStream(fileStream.path, { - start: (fileStream as any).start, - end: (fileStream as any).end, - }); - - const hash = new hashCtor(); - const hashCalculator = new HashCalculator(hash); - - fileStreamTee.pipe(hashCalculator); - fileStreamTee.on("error", (err: any) => { - // if the source errors, the destination stream needs to manually end - hashCalculator.end(); - reject(err); - }); - hashCalculator.on("error", reject); - hashCalculator.on("finish", function (this: HashCalculator) { - hash.digest().then(resolve).catch(reject); - }); - }); -}; - -function isReadStream(stream: Readable): stream is ReadStream { - return typeof (stream as ReadStream).path === "string"; -} +export * from "./fileStreamHasher";