feat: zip interop CI, AbortSignal, and published TypeScript types - #383
Merged
Conversation
Fail the release workflow if a non-password zip cannot extract with Node unzipper and Java ZipInputStream, and reject WinZip-AES extra field 0x9901 (the #333 / #323 class). README now states tar/7z is out of scope and a Nitro rewrite is not a growth plan. SECURITY.md names 7.1.2 as the v7 Zip Slip backport. Co-authored-by: plrthink <plrthink@gmail.com>
Publish index.d.ts via package.json "types" so TypeScript and reactnative.directory hasTypes resolve. zip/unzip accept an options object with AbortSignal; JS-side failures are ZipError with a stable .code. Existing positional arguments stay compatible. Co-authored-by: plrthink <plrthink@gmail.com>
Metro transforms a class in the library's index.js into @babel/runtime/helpers/interopRequireDefault, which playground-rn could not resolve from the parent package. Keep ZipError as a factory. Also point playground-rn Metro at the app node_modules, and scroll to "Skipped hello.txt" in the list-contents Maestro flow. Co-authored-by: plrthink <plrthink@gmail.com>
plrthink
marked this pull request as ready for review
September 3, 2026 08:18
The Comparison table already covers zip vs JSZip vs Nitro. The extra tar/7z and Nitro-rewrite copy does not belong in the README. Co-authored-by: plrthink <plrthink@gmail.com>
plrthink
added a commit
that referenced
this pull request
Sep 4, 2026
Bump latest for AbortSignal, ZipError, published TypeScript types, and the zip interop publish gate from #383. Co-authored-by: Cursor Agent <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Targets latest (
master/ 9.x). Not the v7 maintenance branch.What landed
Release quality (RNZA-16)
unzipperand JavaZipInputStream.0x9901fails the job (iOS unzipping not working after upgrading to v7 #333 / ios压缩后zip上传到无法端,无法解压 #323 class).Zip Interopworkflow on PR/push;publish.ymlneeds: zip-interop.JS API
package.json"types": "index.d.ts"so TypeScript (and later reactnative.directoryhasTypes) resolve.AbortSignalonzip/zipWithPassword/unzip/unzipWithPassword/unzipAssetsvia{ signal }(positional args unchanged).ZipErrorwith a stable.code(factory, not an ESclass, so Metro in playground-rn does not need@babel/runtimehelpers).Docs
maintenance-7), EOL 2027-02-19 (RNZA-9).CI
All checks on
3745e98were green: Zip Interop, Android/iOS builds (RN + Expo), E2E Android/iOS (RN + Expo). Docs-only follow-up isbafe545.Test plan
npm test(64 passing, including after the README cleanup)npm run test:interop3745e98Review notes
ZipErroris a factory function soinstanceof ZipErroris not reliable; checkerror.code.