|
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