From 40a8e581f1a46effff4a07c57fd1def3eeaf998f Mon Sep 17 00:00:00 2001 From: felipe Date: Fri, 23 Feb 2018 19:20:28 -0500 Subject: [PATCH] Added generic stream packer --- src/export/index.ts | 1 + src/export/packer/compiler.ts | 4 ++-- src/export/packer/stream.ts | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/export/packer/stream.ts diff --git a/src/export/index.ts b/src/export/index.ts index 530f7fc264..a68c57de55 100644 --- a/src/export/index.ts +++ b/src/export/index.ts @@ -1,3 +1,4 @@ export * from "./packer/local"; export * from "./packer/express"; export * from "./packer/packer"; +export * from "./packer/stream"; diff --git a/src/export/packer/compiler.ts b/src/export/packer/compiler.ts index 545897beb0..44c7817249 100644 --- a/src/export/packer/compiler.ts +++ b/src/export/packer/compiler.ts @@ -1,6 +1,6 @@ import * as archiver from "archiver"; import * as express from "express"; -import * as fs from "fs"; +import { Writable } from "stream"; import * as xml from "xml"; import { File } from "file"; @@ -19,7 +19,7 @@ export class Compiler { }); } - public async compile(output: fs.WriteStream | express.Response): Promise { + public async compile(output: Writable | express.Response): Promise { this.archive.pipe(output); const xmlDocument = xml(this.formatter.format(this.file.Document), true); diff --git a/src/export/packer/stream.ts b/src/export/packer/stream.ts new file mode 100644 index 0000000000..1182cd5dcb --- /dev/null +++ b/src/export/packer/stream.ts @@ -0,0 +1,25 @@ +import { Readable, Transform } from "stream"; +import { File } from "../../file"; +import { Compiler } from "./compiler"; +import { IPacker } from "./packer"; + +class Pipe extends Transform { + public _transform(chunk: Buffer | string, encoding: string, callback: () => void): void { + this.push(chunk, encoding); + callback(); + } +} + +export class StreamPacker implements IPacker { + private readonly compiler: Compiler; + + constructor(file: File) { + this.compiler = new Compiler(file); + } + + public pack(): Readable { + const pipe = new Pipe(); + this.compiler.compile(pipe); + return pipe; + } +}