Move fs to exporter and add browser packer
This commit is contained in:
22
demo/browser-demo.html
Normal file
22
demo/browser-demo.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<script src="../build/index.web.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>DOCX browser Word document generation</h1>
|
||||||
|
|
||||||
|
<button type="button" onclick="generate()">Click to generate document</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function generate() {
|
||||||
|
console.log('g');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -12,6 +12,7 @@
|
|||||||
"build": "npm run webpack && npm run fix-types",
|
"build": "npm run webpack && npm run fix-types",
|
||||||
"tsc": "rimraf ./build && tsc -p .",
|
"tsc": "rimraf ./build && tsc -p .",
|
||||||
"webpack": "rimraf ./build && webpack",
|
"webpack": "rimraf ./build && webpack",
|
||||||
|
"build.web": "webpack --config webpack.web.config.js",
|
||||||
"demo": "npm run build && node ./demo",
|
"demo": "npm run build && node ./demo",
|
||||||
"typedoc": "typedoc --out docs/ src/ --module commonjs --target ES6 --disableOutputCheck --excludePrivate --externalPattern \"**/*.spec.ts\"",
|
"typedoc": "typedoc --out docs/ src/ --module commonjs --target ES6 --disableOutputCheck --excludePrivate --externalPattern \"**/*.spec.ts\"",
|
||||||
"style": "prettier -l \"src/**/*.ts\"",
|
"style": "prettier -l \"src/**/*.ts\"",
|
||||||
|
17
src/export/packer/browser.ts
Normal file
17
src/export/packer/browser.ts
Normal file
@ -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<void> {
|
||||||
|
filePath = filePath.replace(/.docx$/, "");
|
||||||
|
|
||||||
|
const zip = await this.packer.compile();
|
||||||
|
const zipBlob = await zip.generateAsync({ type: "blob" });
|
||||||
|
|
||||||
|
saveAs(zipBlob, `${filePath}.docx`);
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
import * as archiver from "archiver";
|
import * as archiver from "archiver";
|
||||||
import * as express from "express";
|
import * as express from "express";
|
||||||
|
import * as fs from "fs";
|
||||||
import { Writable } from "stream";
|
import { Writable } from "stream";
|
||||||
import * as xml from "xml";
|
import * as xml from "xml";
|
||||||
|
|
||||||
@ -89,7 +90,7 @@ export class Compiler {
|
|||||||
});
|
});
|
||||||
|
|
||||||
for (const data of this.file.Media.array) {
|
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}`,
|
name: `word/media/${data.fileName}`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@ describe("Drawing", () => {
|
|||||||
currentBreak = new Drawing({
|
currentBreak = new Drawing({
|
||||||
fileName: "test.jpg",
|
fileName: "test.jpg",
|
||||||
referenceId: 1,
|
referenceId: 1,
|
||||||
stream: fs.createReadStream(path),
|
|
||||||
path: path,
|
path: path,
|
||||||
dimensions: {
|
dimensions: {
|
||||||
pixels: {
|
pixels: {
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import * as fs from "fs";
|
|
||||||
|
|
||||||
export interface IMediaDataDimensions {
|
export interface IMediaDataDimensions {
|
||||||
pixels: {
|
pixels: {
|
||||||
x: number;
|
x: number;
|
||||||
@ -13,7 +11,6 @@ export interface IMediaDataDimensions {
|
|||||||
|
|
||||||
export interface IMediaData {
|
export interface IMediaData {
|
||||||
referenceId: number;
|
referenceId: number;
|
||||||
stream: fs.ReadStream;
|
|
||||||
path: string;
|
path: string;
|
||||||
fileName: string;
|
fileName: string;
|
||||||
dimensions: IMediaDataDimensions;
|
dimensions: IMediaDataDimensions;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import * as fs from "fs";
|
|
||||||
import * as sizeOf from "image-size";
|
import * as sizeOf from "image-size";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
|
|
||||||
@ -27,7 +26,6 @@ export class Media {
|
|||||||
|
|
||||||
const imageData = {
|
const imageData = {
|
||||||
referenceId: this.map.size + relationshipsCount + 1,
|
referenceId: this.map.size + relationshipsCount + 1,
|
||||||
stream: fs.createReadStream(filePath),
|
|
||||||
path: filePath,
|
path: filePath,
|
||||||
fileName: key,
|
fileName: key,
|
||||||
dimensions: {
|
dimensions: {
|
||||||
|
32
webpack.web.config.js
Normal file
32
webpack.web.config.js
Normal file
@ -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"
|
||||||
|
}
|
||||||
|
};
|
Reference in New Issue
Block a user