|
1 | | -const Unzip = require('isomorphic-unzip') |
2 | | -const { isBrowser, decodeNullUnicode } = require('./utils') |
| 1 | +const Unzip = require('isomorphic-unzip'); |
| 2 | +const { isBrowser, decodeNullUnicode } = require('./utils'); |
| 3 | +import { enumZipEntries, readEntire } from '../../bundle'; |
3 | 4 |
|
4 | 5 | class Zip { |
5 | | - constructor (file) { |
| 6 | + constructor(file) { |
6 | 7 | if (isBrowser()) { |
7 | 8 | if (!(file instanceof window.Blob || typeof file.size !== 'undefined')) { |
8 | | - throw new Error('Param error: [file] must be an instance of Blob or File in browser.') |
| 9 | + throw new Error( |
| 10 | + 'Param error: [file] must be an instance of Blob or File in browser.', |
| 11 | + ); |
9 | 12 | } |
10 | | - this.file = file |
| 13 | + this.file = file; |
11 | 14 | } else { |
12 | 15 | if (typeof file !== 'string') { |
13 | | - throw new Error('Param error: [file] must be file path in Node.') |
| 16 | + throw new Error('Param error: [file] must be file path in Node.'); |
14 | 17 | } |
15 | | - this.file = require('path').resolve(file) |
| 18 | + this.file = require('path').resolve(file); |
16 | 19 | } |
17 | | - this.unzip = new Unzip(this.file) |
| 20 | + this.unzip = new Unzip(this.file); |
18 | 21 | } |
19 | 22 |
|
20 | 23 | /** |
21 | 24 | * get entries by regexps, the return format is: { <filename>: <Buffer|Blob> } |
22 | 25 | * @param {Array} regexps // regexps for matching files |
23 | 26 | * @param {String} type // return type, can be buffer or blob, default buffer |
24 | 27 | */ |
25 | | - getEntries (regexps, type = 'buffer') { |
26 | | - regexps = regexps.map(regex => decodeNullUnicode(regex)) |
| 28 | + getEntries(regexps, type = 'buffer') { |
| 29 | + regexps = regexps.map((regex) => decodeNullUnicode(regex)); |
27 | 30 | return new Promise((resolve, reject) => { |
28 | 31 | this.unzip.getBuffer(regexps, { type }, (err, buffers) => { |
29 | | - err ? reject(err) : resolve(buffers) |
30 | | - }) |
31 | | - }) |
| 32 | + err ? reject(err) : resolve(buffers); |
| 33 | + }); |
| 34 | + }); |
32 | 35 | } |
33 | 36 | /** |
34 | 37 | * get entry by regex, return an instance of Buffer or Blob |
35 | 38 | * @param {Regex} regex // regex for matching file |
36 | 39 | * @param {String} type // return type, can be buffer or blob, default buffer |
37 | 40 | */ |
38 | | - getEntry (regex, type = 'buffer') { |
39 | | - regex = decodeNullUnicode(regex) |
| 41 | + getEntry(regex, type = 'buffer') { |
| 42 | + regex = decodeNullUnicode(regex); |
40 | 43 | return new Promise((resolve, reject) => { |
41 | 44 | this.unzip.getBuffer([regex], { type }, (err, buffers) => { |
42 | | - err ? reject(err) : resolve(buffers[regex]) |
43 | | - }) |
44 | | - }) |
| 45 | + console.log(buffers); |
| 46 | + err ? reject(err) : resolve(buffers[regex]); |
| 47 | + }); |
| 48 | + }); |
| 49 | + } |
| 50 | + |
| 51 | + async getEntryFromHarmonyApp(regex) { |
| 52 | + try { |
| 53 | + let originSource; |
| 54 | + await enumZipEntries(this.file, (entry, zipFile) => { |
| 55 | + if (regex.test(entry.fileName)) { |
| 56 | + return readEntire(entry, zipFile).then((v) => (originSource = v)); |
| 57 | + } |
| 58 | + }); |
| 59 | + return originSource; |
| 60 | + } catch (error) { |
| 61 | + console.error('Error in getEntryFromHarmonyApp:', error); |
| 62 | + } |
45 | 63 | } |
46 | 64 | } |
47 | 65 |
|
48 | | -module.exports = Zip |
| 66 | +module.exports = Zip; |
0 commit comments