From ded155a6afd56835deeb8037847d55e49221ddbd Mon Sep 17 00:00:00 2001 From: Dolan Miu Date: Sun, 1 Jul 2018 02:16:11 +0100 Subject: [PATCH] Add buffer packer --- demo/demo19.js | 20 ++++++++++++++++++++ src/export/index.ts | 1 + src/export/packer/buffer-stream.ts | 28 ++++++++++++++++++++++++++++ src/export/packer/buffer.ts | 19 +++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 demo/demo19.js create mode 100644 src/export/packer/buffer-stream.ts create mode 100644 src/export/packer/buffer.ts diff --git a/demo/demo19.js b/demo/demo19.js new file mode 100644 index 0000000000..3aafebc142 --- /dev/null +++ b/demo/demo19.js @@ -0,0 +1,20 @@ +const fs = require("fs"); +const docx = require("../build"); + +var doc = new docx.Document(); + +var paragraph = new docx.Paragraph("Hello World"); +var institutionText = new docx.TextRun("Foo").bold(); +var dateText = new docx.TextRun("Bar").tab().bold(); +paragraph.addRun(institutionText); +paragraph.addRun(dateText); + +doc.addParagraph(paragraph); + +var exporter = new docx.BufferPacker(doc); +exporter.pack("My Document").then((buffer) => { + // At this point, you can do anything with the buffer, including casting it to a string etc. + console.log(buffer); + fs.writeFileSync('My Document.docx', buffer); + console.log("Document created successfully at project root!"); +}); diff --git a/src/export/index.ts b/src/export/index.ts index a68c57de55..f6a47e4826 100644 --- a/src/export/index.ts +++ b/src/export/index.ts @@ -2,3 +2,4 @@ export * from "./packer/local"; export * from "./packer/express"; export * from "./packer/packer"; export * from "./packer/stream"; +export * from "./packer/buffer"; diff --git a/src/export/packer/buffer-stream.ts b/src/export/packer/buffer-stream.ts new file mode 100644 index 0000000000..d1b9b0daa1 --- /dev/null +++ b/src/export/packer/buffer-stream.ts @@ -0,0 +1,28 @@ +import { Writable } from "stream"; + +export class BufferStream extends Writable { + private data: Buffer[]; + + constructor() { + super(); + + this.data = []; + } + + // tslint:disable-next-line:no-any + public _write(chunk: any, encoding: string, next: (err?: Error) => void): void { + this.data.push(Buffer.from(chunk)); + next(); + } + + // tslint:disable-next-line:ban-types + public end(cb?: Function): void { + super.end(cb); + + this.emit("close"); + } + + public get Buffer(): Buffer { + return Buffer.concat(this.data); + } +} diff --git a/src/export/packer/buffer.ts b/src/export/packer/buffer.ts new file mode 100644 index 0000000000..c30fe202e6 --- /dev/null +++ b/src/export/packer/buffer.ts @@ -0,0 +1,19 @@ +import { File } from "../../file"; +import { BufferStream } from "./buffer-stream"; +import { Compiler } from "./compiler"; + +export class BufferPacker { + private readonly packer: Compiler; + + constructor(file: File) { + this.packer = new Compiler(file); + } + + public async pack(): Promise { + const stream = new BufferStream(); + + await this.packer.compile(stream); + + return stream.Buffer; + } +}