@stamhoofd/excel-writer 2.42.0 → 2.42.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/exportToExcel.d.ts.map +1 -1
- package/dist/src/exportToExcel.js +1 -0
- package/dist/src/exportToExcel.js.map +1 -1
- package/dist/src/stream-writer/adapters/ArchiverWriterAdapter.d.ts +9 -13
- package/dist/src/stream-writer/adapters/ArchiverWriterAdapter.d.ts.map +1 -1
- package/dist/src/stream-writer/adapters/ArchiverWriterAdapter.js +72 -59
- package/dist/src/stream-writer/adapters/ArchiverWriterAdapter.js.map +1 -1
- package/esm/dist/src/exportToExcel.d.ts.map +1 -1
- package/esm/dist/src/exportToExcel.js +1 -0
- package/esm/dist/src/exportToExcel.js.map +1 -1
- package/esm/dist/src/stream-writer/adapters/ArchiverWriterAdapter.d.ts +9 -13
- package/esm/dist/src/stream-writer/adapters/ArchiverWriterAdapter.d.ts.map +1 -1
- package/esm/dist/src/stream-writer/adapters/ArchiverWriterAdapter.js +72 -59
- package/esm/dist/src/stream-writer/adapters/ArchiverWriterAdapter.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportToExcel.d.ts","sourceRoot":"","sources":["../../src/exportToExcel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAI3F,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;IACnF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IAChD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;CACrC,
|
|
1
|
+
{"version":3,"file":"exportToExcel.d.ts","sourceRoot":"","sources":["../../src/exportToExcel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAI3F,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;IACnF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IAChD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;CACrC,iBAqBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportToExcel.js","sourceRoot":"","sources":["../../src/exportToExcel.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"exportToExcel.js","sourceRoot":"","sources":["../../src/exportToExcel.ts"],"names":[],"mappings":";;AAIA,sCA0BC;AA7BD,6DAA0D;AAC1D,uDAAoD;AAE7C,KAAK,UAAU,aAAa,CAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAKlF;IACG,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,uCAAkB,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEzE,4FAA4F;QAC5F,MAAM,WAAW,GAAG,IAAI,iCAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExD,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAEzB,8BAA8B;QAC9B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACrC,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACtE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC;IACZ,CAAC;AACL,CAAC"}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
import archiver from 'archiver';
|
|
2
1
|
import { ZipWriterAdapter } from '../interfaces';
|
|
2
|
+
import { Writable } from 'node:stream';
|
|
3
3
|
export declare class ArchiverWriterAdapter implements ZipWriterAdapter {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @param writer The data of the zip file will be written to this stream
|
|
13
|
-
*/
|
|
14
|
-
constructor(writer: WritableStream<Buffer>);
|
|
4
|
+
output: Writable;
|
|
5
|
+
fileStreams: {
|
|
6
|
+
tmpFile: string;
|
|
7
|
+
fileName: string;
|
|
8
|
+
stream: WritableStream<Buffer>;
|
|
9
|
+
}[];
|
|
10
|
+
constructor(output: Writable);
|
|
15
11
|
addFile(name: string): Promise<WritableStream<Buffer>>;
|
|
16
12
|
addDirectory(name: string): Promise<void>;
|
|
17
13
|
ready(): Promise<void>;
|
|
18
14
|
/**
|
|
19
15
|
* Note: make sure all writeable streams are closed before calling this
|
|
20
16
|
*/
|
|
21
|
-
close(): Promise<void
|
|
17
|
+
close(): Promise<void>;
|
|
22
18
|
abort(): Promise<void>;
|
|
23
19
|
}
|
|
24
20
|
//# sourceMappingURL=ArchiverWriterAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArchiverWriterAdapter.d.ts","sourceRoot":"","sources":["../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ArchiverWriterAdapter.d.ts","sourceRoot":"","sources":["../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC,qBAAa,qBAAsB,YAAW,gBAAgB;IAC1D,MAAM,EAAE,QAAQ,CAAC;IACjB,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;KAAE,EAAE,CAAM;gBAE9E,MAAM,EAAE,QAAQ;IAOtB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAsBtD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,KAAK;IAIX;;OAEG;IACG,KAAK;IAiDL,KAAK;CAoBd"}
|
|
@@ -2,36 +2,51 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ArchiverWriterAdapter = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const archiver_1 = tslib_1.__importDefault(require("archiver"));
|
|
6
5
|
const node_stream_1 = require("node:stream");
|
|
6
|
+
const os_1 = tslib_1.__importDefault(require("os"));
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
|
|
9
|
+
const archiver_1 = tslib_1.__importDefault(require("archiver"));
|
|
7
10
|
class ArchiverWriterAdapter {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
output;
|
|
12
|
+
fileStreams = [];
|
|
13
|
+
constructor(output) {
|
|
14
|
+
this.output = output;
|
|
15
|
+
// setup
|
|
16
|
+
// todo
|
|
17
|
+
}
|
|
18
|
+
async addFile(name) {
|
|
19
|
+
const tmpDir = os_1.default.tmpdir() + '/stamhoofd-excel-writer';
|
|
20
|
+
// generate random filename
|
|
21
|
+
const tmpFilename = 'excel_writer_' + (0, uuid_1.v4)();
|
|
22
|
+
const filePath = tmpDir + '/' + tmpFilename;
|
|
23
|
+
await node_fs_1.default.promises.mkdir(tmpDir, { recursive: true });
|
|
24
|
+
const s = node_fs_1.default.createWriteStream(filePath, 'binary');
|
|
25
|
+
s.on('close', () => {
|
|
26
|
+
console.log('PassThrough closed file: File written to disk', filePath);
|
|
27
|
+
});
|
|
28
|
+
const webStream = node_stream_1.Writable.toWeb(s);
|
|
29
|
+
this.fileStreams.push({ tmpFile: filePath, fileName: name, stream: webStream });
|
|
30
|
+
return Promise.resolve(webStream);
|
|
31
|
+
}
|
|
32
|
+
async addDirectory(name) {
|
|
33
|
+
// Empty directories are not supported by archiver
|
|
34
|
+
// Directories should be created automatically when using addFile in this adapter
|
|
35
|
+
}
|
|
36
|
+
async ready() {
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
15
39
|
/**
|
|
16
|
-
*
|
|
40
|
+
* Note: make sure all writeable streams are closed before calling this
|
|
17
41
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
console.log('Archiver has been finalized and the output file descriptor has closed: ' + this.archive.pointer() + ' total bytes');
|
|
22
|
-
});
|
|
23
|
-
output.on('end', function () {
|
|
24
|
-
console.log('Data has been drained');
|
|
25
|
-
});
|
|
26
|
-
output.on('error', (e) => {
|
|
27
|
-
console.error('Error in output stream', e);
|
|
28
|
-
throw e;
|
|
29
|
-
});
|
|
30
|
-
this.archive = (0, archiver_1.default)('zip', {
|
|
42
|
+
async close() {
|
|
43
|
+
// All streams should be closed now
|
|
44
|
+
const archive = (0, archiver_1.default)('zip', {
|
|
31
45
|
zlib: { level: 9 }, // Sets the compression level.
|
|
46
|
+
highWaterMark: 1,
|
|
32
47
|
});
|
|
33
48
|
// good practice to catch warnings (ie stat failures and other non-blocking errors)
|
|
34
|
-
|
|
49
|
+
archive.on('warning', function (err) {
|
|
35
50
|
if (err.code === 'ENOENT') {
|
|
36
51
|
console.warn(err);
|
|
37
52
|
}
|
|
@@ -41,49 +56,47 @@ class ArchiverWriterAdapter {
|
|
|
41
56
|
}
|
|
42
57
|
});
|
|
43
58
|
// good practice to catch this error explicitly
|
|
44
|
-
|
|
59
|
+
archive.on('error', function (err) {
|
|
45
60
|
console.error('Archiver error', err);
|
|
46
61
|
throw err;
|
|
47
62
|
});
|
|
48
63
|
// pipe archive data to the file
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
async addDirectory(name) {
|
|
68
|
-
// Empty directories are not supported by archiver
|
|
69
|
-
// Directories should be created automatically when using addFile in this adapter
|
|
70
|
-
}
|
|
71
|
-
async ready() {
|
|
72
|
-
this.finalizePromise = this.archive.finalize();
|
|
73
|
-
return Promise.resolve();
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Note: make sure all writeable streams are closed before calling this
|
|
77
|
-
*/
|
|
78
|
-
async close() {
|
|
79
|
-
return await this.finalizePromise;
|
|
64
|
+
archive.pipe(this.output);
|
|
65
|
+
// Pass to destionation stream
|
|
66
|
+
for (const { tmpFile, fileName } of this.fileStreams) {
|
|
67
|
+
console.log('File written to disk', tmpFile);
|
|
68
|
+
// Create read stream
|
|
69
|
+
archive.append(node_fs_1.default.createReadStream(tmpFile), { name: fileName });
|
|
70
|
+
}
|
|
71
|
+
await archive.finalize();
|
|
72
|
+
// Clear all tmp files
|
|
73
|
+
for (const { tmpFile } of this.fileStreams) {
|
|
74
|
+
try {
|
|
75
|
+
await node_fs_1.default.promises.unlink(tmpFile);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
console.error('Error while deleting tmp file', tmpFile, e);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
80
81
|
}
|
|
81
82
|
async abort() {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
for (const { stream } of this.fileStreams) {
|
|
84
|
+
try {
|
|
85
|
+
await stream.abort();
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
// Ignore
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Clear all tmp files
|
|
92
|
+
for (const { tmpFile } of this.fileStreams) {
|
|
93
|
+
try {
|
|
94
|
+
await node_fs_1.default.promises.unlink(tmpFile);
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
console.error('Error while deleting tmp file', tmpFile, e);
|
|
98
|
+
}
|
|
85
99
|
}
|
|
86
|
-
await this.finalizePromise;
|
|
87
100
|
}
|
|
88
101
|
}
|
|
89
102
|
exports.ArchiverWriterAdapter = ArchiverWriterAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArchiverWriterAdapter.js","sourceRoot":"","sources":["../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"ArchiverWriterAdapter.js","sourceRoot":"","sources":["../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportToExcel.d.ts","sourceRoot":"","sources":["../../../src/exportToExcel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAI3F,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;IACnF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IAChD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;CACrC,
|
|
1
|
+
{"version":3,"file":"exportToExcel.d.ts","sourceRoot":"","sources":["../../../src/exportToExcel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAI3F,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;IACnF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IAChD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;CACrC,iBAqBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportToExcel.js","sourceRoot":"","sources":["../../../src/exportToExcel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAKlF;IACG,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEzE,4FAA4F;QAC5F,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExD,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAEzB,8BAA8B;QAC9B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACrC,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC;IACZ,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"exportToExcel.js","sourceRoot":"","sources":["../../../src/exportToExcel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAKlF;IACG,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEzE,4FAA4F;QAC5F,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExD,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAEzB,8BAA8B;QAC9B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACrC,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACtE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC;IACZ,CAAC;AACL,CAAC"}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
import archiver from 'archiver';
|
|
2
1
|
import { ZipWriterAdapter } from '../interfaces';
|
|
2
|
+
import { Writable } from 'node:stream';
|
|
3
3
|
export declare class ArchiverWriterAdapter implements ZipWriterAdapter {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @param writer The data of the zip file will be written to this stream
|
|
13
|
-
*/
|
|
14
|
-
constructor(writer: WritableStream<Buffer>);
|
|
4
|
+
output: Writable;
|
|
5
|
+
fileStreams: {
|
|
6
|
+
tmpFile: string;
|
|
7
|
+
fileName: string;
|
|
8
|
+
stream: WritableStream<Buffer>;
|
|
9
|
+
}[];
|
|
10
|
+
constructor(output: Writable);
|
|
15
11
|
addFile(name: string): Promise<WritableStream<Buffer>>;
|
|
16
12
|
addDirectory(name: string): Promise<void>;
|
|
17
13
|
ready(): Promise<void>;
|
|
18
14
|
/**
|
|
19
15
|
* Note: make sure all writeable streams are closed before calling this
|
|
20
16
|
*/
|
|
21
|
-
close(): Promise<void
|
|
17
|
+
close(): Promise<void>;
|
|
22
18
|
abort(): Promise<void>;
|
|
23
19
|
}
|
|
24
20
|
//# sourceMappingURL=ArchiverWriterAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArchiverWriterAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ArchiverWriterAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC,qBAAa,qBAAsB,YAAW,gBAAgB;IAC1D,MAAM,EAAE,QAAQ,CAAC;IACjB,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;KAAE,EAAE,CAAM;gBAE9E,MAAM,EAAE,QAAQ;IAOtB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAsBtD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,KAAK;IAIX;;OAEG;IACG,KAAK;IAiDL,KAAK;CAoBd"}
|
|
@@ -1,33 +1,48 @@
|
|
|
1
|
+
import { Writable } from 'node:stream';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
4
|
+
import fs from 'node:fs';
|
|
1
5
|
import archiver from 'archiver';
|
|
2
|
-
import { PassThrough, Writable } from 'node:stream';
|
|
3
6
|
export class ArchiverWriterAdapter {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
output;
|
|
8
|
+
fileStreams = [];
|
|
9
|
+
constructor(output) {
|
|
10
|
+
this.output = output;
|
|
11
|
+
// setup
|
|
12
|
+
// todo
|
|
13
|
+
}
|
|
14
|
+
async addFile(name) {
|
|
15
|
+
const tmpDir = os.tmpdir() + '/stamhoofd-excel-writer';
|
|
16
|
+
// generate random filename
|
|
17
|
+
const tmpFilename = 'excel_writer_' + uuidv4();
|
|
18
|
+
const filePath = tmpDir + '/' + tmpFilename;
|
|
19
|
+
await fs.promises.mkdir(tmpDir, { recursive: true });
|
|
20
|
+
const s = fs.createWriteStream(filePath, 'binary');
|
|
21
|
+
s.on('close', () => {
|
|
22
|
+
console.log('PassThrough closed file: File written to disk', filePath);
|
|
23
|
+
});
|
|
24
|
+
const webStream = Writable.toWeb(s);
|
|
25
|
+
this.fileStreams.push({ tmpFile: filePath, fileName: name, stream: webStream });
|
|
26
|
+
return Promise.resolve(webStream);
|
|
27
|
+
}
|
|
28
|
+
async addDirectory(name) {
|
|
29
|
+
// Empty directories are not supported by archiver
|
|
30
|
+
// Directories should be created automatically when using addFile in this adapter
|
|
31
|
+
}
|
|
32
|
+
async ready() {
|
|
33
|
+
return Promise.resolve();
|
|
34
|
+
}
|
|
11
35
|
/**
|
|
12
|
-
*
|
|
36
|
+
* Note: make sure all writeable streams are closed before calling this
|
|
13
37
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
console.log('Archiver has been finalized and the output file descriptor has closed: ' + this.archive.pointer() + ' total bytes');
|
|
18
|
-
});
|
|
19
|
-
output.on('end', function () {
|
|
20
|
-
console.log('Data has been drained');
|
|
21
|
-
});
|
|
22
|
-
output.on('error', (e) => {
|
|
23
|
-
console.error('Error in output stream', e);
|
|
24
|
-
throw e;
|
|
25
|
-
});
|
|
26
|
-
this.archive = archiver('zip', {
|
|
38
|
+
async close() {
|
|
39
|
+
// All streams should be closed now
|
|
40
|
+
const archive = archiver('zip', {
|
|
27
41
|
zlib: { level: 9 }, // Sets the compression level.
|
|
42
|
+
highWaterMark: 1,
|
|
28
43
|
});
|
|
29
44
|
// good practice to catch warnings (ie stat failures and other non-blocking errors)
|
|
30
|
-
|
|
45
|
+
archive.on('warning', function (err) {
|
|
31
46
|
if (err.code === 'ENOENT') {
|
|
32
47
|
console.warn(err);
|
|
33
48
|
}
|
|
@@ -37,49 +52,47 @@ export class ArchiverWriterAdapter {
|
|
|
37
52
|
}
|
|
38
53
|
});
|
|
39
54
|
// good practice to catch this error explicitly
|
|
40
|
-
|
|
55
|
+
archive.on('error', function (err) {
|
|
41
56
|
console.error('Archiver error', err);
|
|
42
57
|
throw err;
|
|
43
58
|
});
|
|
44
59
|
// pipe archive data to the file
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
async addDirectory(name) {
|
|
64
|
-
// Empty directories are not supported by archiver
|
|
65
|
-
// Directories should be created automatically when using addFile in this adapter
|
|
66
|
-
}
|
|
67
|
-
async ready() {
|
|
68
|
-
this.finalizePromise = this.archive.finalize();
|
|
69
|
-
return Promise.resolve();
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Note: make sure all writeable streams are closed before calling this
|
|
73
|
-
*/
|
|
74
|
-
async close() {
|
|
75
|
-
return await this.finalizePromise;
|
|
60
|
+
archive.pipe(this.output);
|
|
61
|
+
// Pass to destionation stream
|
|
62
|
+
for (const { tmpFile, fileName } of this.fileStreams) {
|
|
63
|
+
console.log('File written to disk', tmpFile);
|
|
64
|
+
// Create read stream
|
|
65
|
+
archive.append(fs.createReadStream(tmpFile), { name: fileName });
|
|
66
|
+
}
|
|
67
|
+
await archive.finalize();
|
|
68
|
+
// Clear all tmp files
|
|
69
|
+
for (const { tmpFile } of this.fileStreams) {
|
|
70
|
+
try {
|
|
71
|
+
await fs.promises.unlink(tmpFile);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
console.error('Error while deleting tmp file', tmpFile, e);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
76
77
|
}
|
|
77
78
|
async abort() {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
for (const { stream } of this.fileStreams) {
|
|
80
|
+
try {
|
|
81
|
+
await stream.abort();
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
// Ignore
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Clear all tmp files
|
|
88
|
+
for (const { tmpFile } of this.fileStreams) {
|
|
89
|
+
try {
|
|
90
|
+
await fs.promises.unlink(tmpFile);
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
console.error('Error while deleting tmp file', tmpFile, e);
|
|
94
|
+
}
|
|
81
95
|
}
|
|
82
|
-
await this.finalizePromise;
|
|
83
96
|
}
|
|
84
97
|
}
|
|
85
98
|
//# sourceMappingURL=ArchiverWriterAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArchiverWriterAdapter.js","sourceRoot":"","sources":["../../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ArchiverWriterAdapter.js","sourceRoot":"","sources":["../../../../../src/stream-writer/adapters/ArchiverWriterAdapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/excel-writer",
|
|
3
|
-
"version": "2.42.
|
|
3
|
+
"version": "2.42.2",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./esm/dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "efb340b03cda94c2388d8b761b11de54aebc61eb"
|
|
27
27
|
}
|