mirror of
				https://gitcode.com/github-mirrors/react-native-update-cli.git
				synced 2025-10-31 14:53:11 +08:00 
			
		
		
		
	implement getAppInfo and uploadApp methods
This commit is contained in:
		
							
								
								
									
										16
									
								
								src/utils/app-info-parser/app.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/utils/app-info-parser/app.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| const Zip = require('./zip') | ||||
|  | ||||
| class AppParser extends Zip { | ||||
|   /** | ||||
|    * parser for parsing .apk file | ||||
|    * @param {String | File | Blob} file // file's path in Node, instance of File or Blob in Browser | ||||
|    */ | ||||
|   constructor (file) { | ||||
|     super(file) | ||||
|     if (!(this instanceof AppParser)) { | ||||
|       return new AppParser(file) | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| module.exports = AppParser | ||||
| @@ -1,35 +1,43 @@ | ||||
| const ApkParser = require('./apk') | ||||
| const IpaParser = require('./ipa') | ||||
| const supportFileTypes = ['ipa', 'apk'] | ||||
| const ApkParser = require('./apk'); | ||||
| const IpaParser = require('./ipa'); | ||||
| const AppParser = require('./app'); | ||||
| const supportFileTypes = ['ipa', 'apk', 'app']; | ||||
|  | ||||
| class AppInfoParser { | ||||
|   /** | ||||
|    * parser for parsing .ipa or .apk file | ||||
|    * @param {String | File | Blob} file // file's path in Node, instance of File or Blob in Browser | ||||
|    */ | ||||
|   constructor (file) { | ||||
|   constructor(file) { | ||||
|     if (!file) { | ||||
|       throw new Error('Param miss: file(file\'s path in Node, instance of File or Blob in browser).') | ||||
|       throw new Error( | ||||
|         "Param miss: file(file's path in Node, instance of File or Blob in browser).", | ||||
|       ); | ||||
|     } | ||||
|     const splits = (file.name || file).split('.') | ||||
|     const fileType = splits[splits.length - 1].toLowerCase() | ||||
|     const splits = (file.name || file).split('.'); | ||||
|     const fileType = splits[splits.length - 1].toLowerCase(); | ||||
|     if (!supportFileTypes.includes(fileType)) { | ||||
|       throw new Error('Unsupported file type, only support .ipa or .apk file.') | ||||
|       throw new Error( | ||||
|         'Unsupported file type, only support .ipa or .apk or .app file.', | ||||
|       ); | ||||
|     } | ||||
|     this.file = file | ||||
|     this.file = file; | ||||
|  | ||||
|     switch (fileType) { | ||||
|       case 'ipa': | ||||
|         this.parser = new IpaParser(this.file) | ||||
|         break | ||||
|         this.parser = new IpaParser(this.file); | ||||
|         break; | ||||
|       case 'apk': | ||||
|         this.parser = new ApkParser(this.file) | ||||
|         break | ||||
|         this.parser = new ApkParser(this.file); | ||||
|         break; | ||||
|       case 'app': | ||||
|         this.parser = new AppParser(this.file); | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
|   parse () { | ||||
|     return this.parser.parse() | ||||
|   parse() { | ||||
|     return this.parser.parse(); | ||||
|   } | ||||
| } | ||||
|  | ||||
| module.exports = AppInfoParser | ||||
| module.exports = AppInfoParser; | ||||
|   | ||||
| @@ -1,20 +1,23 @@ | ||||
| const Unzip = require('isomorphic-unzip') | ||||
| const { isBrowser, decodeNullUnicode } = require('./utils') | ||||
| const Unzip = require('isomorphic-unzip'); | ||||
| const { isBrowser, decodeNullUnicode } = require('./utils'); | ||||
| import { enumZipEntries, readEntire } from '../../bundle'; | ||||
|  | ||||
| class Zip { | ||||
|   constructor (file) { | ||||
|   constructor(file) { | ||||
|     if (isBrowser()) { | ||||
|       if (!(file instanceof window.Blob || typeof file.size !== 'undefined')) { | ||||
|         throw new Error('Param error: [file] must be an instance of Blob or File in browser.') | ||||
|         throw new Error( | ||||
|           'Param error: [file] must be an instance of Blob or File in browser.', | ||||
|         ); | ||||
|       } | ||||
|       this.file = file | ||||
|       this.file = file; | ||||
|     } else { | ||||
|       if (typeof file !== 'string') { | ||||
|         throw new Error('Param error: [file] must be file path in Node.') | ||||
|         throw new Error('Param error: [file] must be file path in Node.'); | ||||
|       } | ||||
|       this.file = require('path').resolve(file) | ||||
|       this.file = require('path').resolve(file); | ||||
|     } | ||||
|     this.unzip = new Unzip(this.file) | ||||
|     this.unzip = new Unzip(this.file); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @@ -22,27 +25,42 @@ class Zip { | ||||
|    * @param {Array} regexps // regexps for matching files | ||||
|    * @param {String} type // return type, can be buffer or blob, default buffer | ||||
|    */ | ||||
|   getEntries (regexps, type = 'buffer') { | ||||
|     regexps = regexps.map(regex => decodeNullUnicode(regex)) | ||||
|   getEntries(regexps, type = 'buffer') { | ||||
|     regexps = regexps.map((regex) => decodeNullUnicode(regex)); | ||||
|     return new Promise((resolve, reject) => { | ||||
|       this.unzip.getBuffer(regexps, { type }, (err, buffers) => { | ||||
|         err ? reject(err) : resolve(buffers) | ||||
|       }) | ||||
|     }) | ||||
|         err ? reject(err) : resolve(buffers); | ||||
|       }); | ||||
|     }); | ||||
|   } | ||||
|   /** | ||||
|    * get entry by regex, return an instance of Buffer or Blob | ||||
|    * @param {Regex} regex // regex for matching file | ||||
|    * @param {String} type // return type, can be buffer or blob, default buffer | ||||
|    */ | ||||
|   getEntry (regex, type = 'buffer') { | ||||
|     regex = decodeNullUnicode(regex) | ||||
|   getEntry(regex, type = 'buffer') { | ||||
|     regex = decodeNullUnicode(regex); | ||||
|     return new Promise((resolve, reject) => { | ||||
|       this.unzip.getBuffer([regex], { type }, (err, buffers) => { | ||||
|         err ? reject(err) : resolve(buffers[regex]) | ||||
|       }) | ||||
|     }) | ||||
|         console.log(buffers); | ||||
|         err ? reject(err) : resolve(buffers[regex]); | ||||
|       }); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   async getEntryFromHarmonyApp(regex) { | ||||
|     try { | ||||
|       let originSource; | ||||
|       await enumZipEntries(this.file, (entry, zipFile) => { | ||||
|         if (regex.test(entry.fileName)) { | ||||
|           return readEntire(entry, zipFile).then((v) => (originSource = v)); | ||||
|         } | ||||
|       }); | ||||
|       return originSource; | ||||
|     } catch (error) { | ||||
|       console.error('Error in getEntryFromHarmonyApp:', error); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| module.exports = Zip | ||||
| module.exports = Zip; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 HeYanbo
					HeYanbo