1 | const yaz = require('yauzl')
|
2 | const path = require('path')
|
3 | const mk = require('mkdirp')
|
4 | const fs = require('fs')
|
5 |
|
6 | const log = console.log
|
7 |
|
8 | module.exports = (src, dst, done) => {
|
9 | yaz.open(src, { lazyEntries: true }, (err, f) => {
|
10 | if (err) return done(err)
|
11 | f.readEntry()
|
12 | f.on('entry', ent => {
|
13 | if (/\/$/.test(ent.fileName)) {
|
14 |
|
15 | f.readEntry()
|
16 | } else {
|
17 |
|
18 | mk(path.dirname(path.join(dst, ent.fileName)), err => {
|
19 | f.openReadStream(ent, (err, rs) => {
|
20 | if (err) return done(err)
|
21 |
|
22 | rs.pipe(fs.createWriteStream(path.join(dst, ent.fileName))).on(
|
23 | 'close',
|
24 | () => {
|
25 | f.readEntry()
|
26 | }
|
27 | )
|
28 | })
|
29 | })
|
30 | }
|
31 | }).on('end', () => {
|
32 | done()
|
33 | })
|
34 | })
|
35 | }
|