
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
@bearbytes/magellan
Advanced tools
Simplified navigation for React Native with improved Typescript support, based on react-navigation
This is a wrapper around react-navigation, the popular navigation library for React Native.
It adds improved Typescript support and a simplified API for basic navigation needs.
Install the dependency:
npm i @bearbytes/magellan
Define the available screens and their corresponding navigation parameters:
export interface AppScreens {
Home: {}
UserProfile: { userId: string }
Chat: { partnerUserId: string; isPrivate?: boolean }
}
Initialize the navigation system. It will create a StackNavigator which can be pre-configured with the usual configuration:
import { createNavigation } from './lib/Magellan/createNavigationRoot'
import { AppScreens } from './AppScreens'
export const {
NavigationRoot,
navigate,
navigateBack,
dispatchNavigationAction,
} = createNavigation<AppScreens>({
// Pass configuration for the main StackNavigator here
headerMode: 'none',
transparentCard: true,
})
The NavigationRoot is a React Component that will contain the currently visible screen(s). Put it into the root of your app. You will need to pass it a component for each screen in the AppScreens interface.
export default function MyApp() {
return (
<SomeContextProvider>
<MaybeReduxContainerOrSomething>
{/* Should be the main component */}
<NavigationRoot
Home={HomeScreen}
UserProfile={UserProfileScreen}
Chat={props => {
// You could also create adhoc components in here.
// The props passed to the component are equivalent to
// navigation parameters in react-navigation.
if (props.isPrivate) {
return <PrivateChatScreen {...props} />
} else {
return <PublicChatScreen {...props} />
}
}}
/>
</MaybeReduxContainerOrSomething>
</SomeContextProvider>
)
}
To avoid having to maintain duplicate props definitions, I would advise to use the AppScreens interface to define the screen props:
export function UserProfileScreen(props: AppScreens['UserProfile']) {
return <Text>Profile of {props.userId}.</Text>
}
As you may have noticed, the navigation prop that is usually used in react-nativation is nowhere to be found here. Instead, magellan opts to use top level functions to navigate between screens:
// The navigate function knows about which screens exist and
// what parameters can or must be passed to them. Typescript
// will enforce that we never forget something here.
navigate('UserProfile', { userId: 'bob' })
// Navigation params must always be passed, even when empty.
navigate('Home', {})
// Go back to the previous screen.
// Does nothing when there is only one screen on the stack.
navigateBack()
// The above actions should be enough for most usecases.
// If you need to use a more complex action, you can dispatch
// it directly. Note that unlike the other functions, no
// typesafeness is guaranteed here.
dispatchNavigationAction({ type: 'Navigation/OPEN_DRAWER' })
dispatchNavigationAction({
type: 'Navigation/POP_TO_TOP',
immediate: true,
})
FAQs
Simplified navigation for React Native with improved Typescript support, based on react-navigation
The npm package @bearbytes/magellan receives a total of 2 weekly downloads. As such, @bearbytes/magellan popularity was classified as not popular.
We found that @bearbytes/magellan demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.