diff --git a/package.json b/package.json index f724877..d677fce 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "author": "Danny Lin ", "license": "MIT", "dependencies": { - "@zip.js/zip.js": "2.2.27" + "@zip.js/zip.js": "^2.7.6" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.0.2", @@ -22,7 +22,7 @@ "typescript": "^5.0.4" }, "scripts": { - "build": "rollup -c" + "build": "rollup -c && cp node_modules/@zip.js/zip.js/dist/z-worker-pako.js dist/vendor" }, "files": [ "dist/fastboot.*" diff --git a/src/factory.ts b/src/factory.ts index 5999b35..a24f7c2 100644 --- a/src/factory.ts +++ b/src/factory.ts @@ -6,7 +6,7 @@ import { TextWriter, Entry, EntryGetDataOptions, - Writer, + WritableWriter, } from "@zip.js/zip.js"; import { FastbootDevice, FastbootError, ReconnectCallback } from "./fastboot"; @@ -68,11 +68,11 @@ const FASTBOOTD_REBOOT_TIME = 16000; // ms const USERDATA_ERASE_TIME = 1000; // ms // Wrapper for Entry#getData() that unwraps ProgressEvent errors -async function zipGetData( +async function zipGetData( entry: Entry, - writer: Writer, + writer: WritableWriter, options?: EntryGetDataOptions, -) { +): Promise { try { return await entry.getData!(writer, options); } catch (e) { @@ -94,15 +94,19 @@ async function flashEntryBlob( onProgress: FactoryProgressCallback, partition: string ) { - common.logDebug(`Unpacking ${partition}`); - onProgress("unpack", partition, 0.0); - let blob = await zipGetData( + let blob: Blob = await zipGetData( entry, new BlobWriter("application/octet-stream"), { - onprogress: (bytes: number, len: number) => { - onProgress("unpack", partition, bytes / len); + onstart(total: number): Promise | undefined { + common.logDebug(`Unpacking ${partition} (${total} bytes)`); + onProgress("unpack", partition, 0.0); + return; }, + onprogress(progress: number, total: number): Promise | undefined { + onProgress("unpack", partition, progress / total); + return; + } } ); @@ -271,16 +275,20 @@ export async function flashZip( } // Load nested images for the following steps - common.logDebug("Loading nested images from zip"); - onProgress("unpack", "images", 0.0); let entry = entries.find((e) => e.filename.match(/image-.+\.zip$/)); - let imagesBlob = await zipGetData( + let imagesBlob: Blob = await zipGetData( entry!, new BlobWriter("application/zip"), { - onprogress: (bytes: number, len: number) => { - onProgress("unpack", "images", bytes / len); + onstart(total: number): Promise | undefined { + common.logDebug(`Loading nested images from zip (${total} bytes)`); + onProgress("unpack", "images", 0.0); + return; }, + onprogress(progress: number, total: number): Promise | undefined { + onProgress("unpack", "images", progress / total); + return; + } } ); let imageReader = new ZipReader(new BlobReader(imagesBlob)); @@ -289,7 +297,7 @@ export async function flashZip( // 3. Check requirements entry = imageEntries.find((e) => e.filename === "android-info.txt"); if (entry !== undefined) { - let reqText = await zipGetData(entry, new TextWriter()); + let reqText: string = await zipGetData(entry, new TextWriter()); await checkRequirements(device, reqText); } @@ -320,7 +328,7 @@ export async function flashZip( let superAction = wipe ? "wipe" : "flash"; onProgress(superAction, "super", 0.0); - let superBlob = await zipGetData( + let superBlob: Blob = await zipGetData( entry, new BlobWriter("application/octet-stream") ); diff --git a/yarn.lock b/yarn.lock index 891287c..fb6cd19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -172,10 +172,10 @@ resolved "https://registry.yarnpkg.com/@types/w3c-web-usb/-/w3c-web-usb-1.0.6.tgz#5d8560d0d9f585ffc80865bc773db7bc975b680c" integrity sha512-cSjhgrr8g4KbPnnijAr/KJDNKa/bBa+ixYkywFRvrhvi9n1WEl7yYbtRyzE6jqNQiSxxJxoAW3STaOQwJHndaw== -"@zip.js/zip.js@2.2.27": - version "2.2.27" - resolved "https://registry.yarnpkg.com/@zip.js/zip.js/-/zip.js-2.2.27.tgz#672c63fd586d83c6f6c6231a38b54a16b5abe267" - integrity sha512-lQLsq41xUIGJnUizICgjLL+1hrnlLcqyWnQcaNi8FdsxfJl8y0bqdolDit8o65Huai+/GwXbCODMVu05kNU8mA== +"@zip.js/zip.js@^2.7.6": + version "2.7.6" + resolved "https://registry.yarnpkg.com/@zip.js/zip.js/-/zip.js-2.7.6.tgz#76dfa2f36780f6a2a34ef7979f4464063ffe1ca7" + integrity sha512-j9gaYG84Qd3tI3X7BiOpL5bckbbAetpxtpilKnSyW5rMTnrXwH6GtXkL8rEBxnPk100exbfxNlORwFagX7fMfg== acorn-jsx@^5.3.2: version "5.3.2"