Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ module.exports = {
platforms: ['ios', 'android'],
},
moduleNameMapper: {
// These mappers allow out-of-tree platforms tests to seamlessly resolve RN imports
'^react-native/(.*)': '<rootDir>/packages/react-native/$1',
'^react-native$': '<rootDir>/packages/react-native/index.js',
Comment on lines +44 to +46
Copy link
Contributor

@NickGerleman NickGerleman Nov 29, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh hey I remember hitting this back in the day for RN Windows.

Something else you will run into is resolving files correctly based on platform extension, if you end up adding visionos there (even in internals of the fork).

@tido64 you ended up building a custom resolver or config for this right? Maybe we should upstream the solution we had.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We just upstreamed one bugfix (custom resolvers were not overridable when OOT was defined) and create a custom resolver here: callstack#32

We chose not to change the Platform and instead do something custom, because there's so much overlap between visionOS and iOS and we want to leverage 3rd party libs that rely on ios platform

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A nuance is that Jest uses a different resolver from Metro, but IIRC had some declarative fields to customize resolution. I looked it up, and here is the MSFT one I think: https://github.com/microsoft/rnx-kit/blob/main/packages/jest-preset/src/index.js

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As @NickGerleman pointed out, it's built into our Jest preset. react-native-windows uses it extensively: https://github.com/search?q=repo%3Amicrosoft%2Freact-native-windows%20%40rnx-kit%2Fjest-preset&type=code

It should work for react-native-visionos as well. If it doesn't, let me know.

Copy link
Contributor Author

@thymikee thymikee Nov 30, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is 3 lines that we need vs the whole package imported. But we'll definitely consider relying on rnx-kit infra as it's already prepared for OOT platforms out there 👍🏼

// This module is internal to Meta and used by their custom React renderer.
// In tests, we can just use a mock.
'^ReactNativeInternalFeatureFlags$':
Expand Down
27 changes: 15 additions & 12 deletions packages/react-native/types/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": ["es6"],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"types": [],
"jsx": "react",
"noEmit": true,
"forceConsistentCasingInFileNames": true,
"paths": {"react-native": ["."]}
"compilerOptions": {
"module": "commonjs",
"lib": ["es6"],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"types": [],
"jsx": "react",
"noEmit": true,
"forceConsistentCasingInFileNames": true,
"paths": {
"react-native": ["."],
"react-native/*": ["../*"]
}
}
}