Two test gaps: unverified prebuild `Info.plist` and a missing `.node` fixture in the Babel plugin tests

Open
#424 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
15/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale

Research direction

Start with the TODO-marked tests and packages/host/src/node/prebuilds/apple.ts, including writeFrameworkInfoPlist, then run the relevant unit tests. Done means the prebuild test verifies the generated Info.plist values and the Babel plugin fixture includes both my-addon.js and my-addon.node while preserving the intended resolution. PR #426 already covers this work.

Written by the indexing model from the issue text.

Description

Automatable good first issue

Two TODOs marking tests that assert less than they appear to.

verify-prebuilds skips the Info.plist it just found


The verifier walks each framework in the XCFramework and `continue`s past `Info.plist` without reading it. That file is written by `writeFrameworkInfoPlist` in `packages/host/src/node/prebuilds/apple.ts` from the library name and bundle identifier, and a wrong `CFBundleExecutable` or `CFBundleIdentifier` is exactly the kind of failure that passes every build step and then fails at load time on device. Parsing it and asserting the executable name matches the library, and the identifier matches what was requested, is a handful of lines given `@expo/plist` is already a dependency.

## "does not touch required JS files" doesn't prove what it claims

The test fixture has my-addon.js and asserts the plugin does not emit requireNodeAddon. But with no my-addon.node in the fixture there is nothing for the plugin to have found in the first place — the assertion passes for the wrong reason, and would keep passing even if the plugin's precedence between a .js and a sibling addon were broken. Adding a ./my-addon.node alongside it, as the TODO says, is what makes the test meaningful: with both present, require('./my-addon') must still resolve to the JS file.


Current status (as of 2026-09-14)

Both gaps above are fixed by #426, the only open PR against this issue. It's mergeable (clean), has two maintainer approvals, and CI is fully green (Lint + Unit tests on ubuntu/macos/windows; native app/device jobs skipped, which is expected for a fork PR without runner secrets/labels). Nothing further is needed here besides merging it — no competing implementation work is warranted.

Earlier independent attempts (#448, #449, #450, #455) were closed in favor of #426 once it became clear it already covered the same fixes (the shared isNodeApiModule .js/.node precedence bug, plus zod-validated Info.plist verification).

Dominant language
TypeScript
Stars
188
Forks
10
Avg merge
2d 17h
Merged PRs (30d)
3

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from callstackincubator/react-native-node-api

All issues in callstackincubator/react-native-node-api

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.