From e8bc7952db0e98e5b0b44cc01d523075dee09c8a Mon Sep 17 00:00:00 2001 From: Dolan Date: Tue, 24 Apr 2018 22:56:56 +0100 Subject: [PATCH] Move fs to exporter and add browser packer --- demo/browser-demo.html | 22 ++++++++++++++++++++++ package.json | 1 + src/export/packer/browser.ts | 17 +++++++++++++++++ src/export/packer/compiler.ts | 3 ++- src/file/drawing/drawing.spec.ts | 1 - src/file/media/data.ts | 3 --- src/file/media/media.ts | 2 -- webpack.web.config.js | 32 ++++++++++++++++++++++++++++++++ 8 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 demo/browser-demo.html create mode 100644 src/export/packer/browser.ts create mode 100644 webpack.web.config.js diff --git a/demo/browser-demo.html b/demo/browser-demo.html new file mode 100644 index 0000000000..17508b74eb --- /dev/null +++ b/demo/browser-demo.html @@ -0,0 +1,22 @@ + + + + + + + + + +

DOCX browser Word document generation

+ + + + + + + + diff --git a/package.json b/package.json index 99104a157d..cc5394462b 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "build": "npm run webpack && npm run fix-types", "tsc": "rimraf ./build && tsc -p .", "webpack": "rimraf ./build && webpack", + "build.web": "webpack --config webpack.web.config.js", "demo": "npm run build && node ./demo", "typedoc": "typedoc --out docs/ src/ --module commonjs --target ES6 --disableOutputCheck --excludePrivate --externalPattern \"**/*.spec.ts\"", "style": "prettier -l \"src/**/*.ts\"", diff --git a/src/export/packer/browser.ts b/src/export/packer/browser.ts new file mode 100644 index 0000000000..ad88a5552c --- /dev/null +++ b/src/export/packer/browser.ts @@ -0,0 +1,17 @@ +import { Compiler } from "./next-compiler"; +import { IPacker } from "./packer"; + +declare var saveAs; + +export class BrowserPacker implements IPacker { + private readonly packer: Compiler; + + public async pack(filePath: string): Promise { + filePath = filePath.replace(/.docx$/, ""); + + const zip = await this.packer.compile(); + const zipBlob = await zip.generateAsync({ type: "blob" }); + + saveAs(zipBlob, `${filePath}.docx`); + } +} diff --git a/src/export/packer/compiler.ts b/src/export/packer/compiler.ts index 44c7817249..410ecc669b 100644 --- a/src/export/packer/compiler.ts +++ b/src/export/packer/compiler.ts @@ -1,5 +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"; @@ -89,7 +90,7 @@ export class Compiler { }); for (const data of this.file.Media.array) { - this.archive.append(data.stream, { + this.archive.append(fs.createReadStream(data.path), { name: `word/media/${data.fileName}`, }); } diff --git a/src/file/drawing/drawing.spec.ts b/src/file/drawing/drawing.spec.ts index 9b113da0bf..6ca09faa4d 100644 --- a/src/file/drawing/drawing.spec.ts +++ b/src/file/drawing/drawing.spec.ts @@ -12,7 +12,6 @@ describe("Drawing", () => { currentBreak = new Drawing({ fileName: "test.jpg", referenceId: 1, - stream: fs.createReadStream(path), path: path, dimensions: { pixels: { diff --git a/src/file/media/data.ts b/src/file/media/data.ts index 00836ed962..b4a349a967 100644 --- a/src/file/media/data.ts +++ b/src/file/media/data.ts @@ -1,5 +1,3 @@ -import * as fs from "fs"; - export interface IMediaDataDimensions { pixels: { x: number; @@ -13,7 +11,6 @@ export interface IMediaDataDimensions { export interface IMediaData { referenceId: number; - stream: fs.ReadStream; path: string; fileName: string; dimensions: IMediaDataDimensions; diff --git a/src/file/media/media.ts b/src/file/media/media.ts index 5ac8905bc7..3f23e50b38 100644 --- a/src/file/media/media.ts +++ b/src/file/media/media.ts @@ -1,4 +1,3 @@ -import * as fs from "fs"; import * as sizeOf from "image-size"; import * as path from "path"; @@ -27,7 +26,6 @@ export class Media { const imageData = { referenceId: this.map.size + relationshipsCount + 1, - stream: fs.createReadStream(filePath), path: filePath, fileName: key, dimensions: { diff --git a/webpack.web.config.js b/webpack.web.config.js new file mode 100644 index 0000000000..9672df789c --- /dev/null +++ b/webpack.web.config.js @@ -0,0 +1,32 @@ +const path = require('path'); + +module.exports = { + entry: './src/index.ts', + + output: { + path: path.resolve('build'), + filename: 'index.web.js', + libraryTarget: 'umd' + }, + + resolve: { + extensions: ['.tsx', '.ts', '.js'], + modules: [path.resolve('./src'), "node_modules"] + }, + + module: { + rules: [ + { + test: /\.ts$/, + loaders: ["awesome-typescript-loader"], + } + ], + }, + + node: { + __dirname: true, + fs: "empty", + tls: "empty", + net: "empty" + } +};