Skip to content

feat: zip interop CI, AbortSignal, and published TypeScript types - #383

Merged
plrthink merged 4 commits into
masterfrom
cursor/weekly-interop-ci-docs-233d
Sep 4, 2026
Merged

feat: zip interop CI, AbortSignal, and published TypeScript types#383
plrthink merged 4 commits into
masterfrom
cursor/weekly-interop-ci-docs-233d

Conversation

@plrthink

@plrthink plrthink commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Targets latest (master / 9.x). Not the v7 maintenance branch.

What landed

Release quality (RNZA-16)

JS API

  • package.json "types": "index.d.ts" so TypeScript (and later reactnative.directory hasTypes) resolve.
  • AbortSignal on zip / zipWithPassword / unzip / unzipWithPassword / unzipAssets via { signal } (positional args unchanged).
  • ZipError with a stable .code (factory, not an ES class, so Metro in playground-rn does not need @babel/runtime helpers).

Docs

  • SECURITY.md: v7 Zip Slip backport is 7.1.2 (maintenance-7), EOL 2027-02-19 (RNZA-9).
  • README Comparison table still covers zip vs JSZip vs Nitro. The extra “Non-goals” paragraph is not in this PR.

CI

All checks on 3745e98 were green: Zip Interop, Android/iOS builds (RN + Expo), E2E Android/iOS (RN + Expo). Docs-only follow-up is bafe545.

Test plan

  • npm test (64 passing, including after the README cleanup)
  • npm run test:interop
  • GitHub Actions on 3745e98

Review notes

  • v7 code is unchanged; only the supported-versions line in SECURITY.md.
  • ZipError is a factory function so instanceof ZipError is not reliable; check error.code.
Open in Web Open in Cursor 

cursoragent and others added 2 commits September 3, 2026 01:53
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>
@cursor cursor Bot changed the title ci: gate npm publish on zip interop (this week's remaining Linear work) feat: zip interop CI, AbortSignal, and published TypeScript types Sep 3, 2026
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
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
plrthink merged commit 80b5a3e into master Sep 4, 2026
10 checks passed
@plrthink plrthink mentioned this pull request Sep 4, 2026
2 tasks
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants