# @rnx-kit/tools-react-native

[![Build](https://github.com/microsoft/rnx-kit/actions/workflows/build.yml/badge.svg)](https://github.com/microsoft/rnx-kit/actions/workflows/build.yml)
[![npm version](https://img.shields.io/npm/v/@rnx-kit/tools-react-native)](https://www.npmjs.com/package/@rnx-kit/tools-react-native)

`@rnx-kit/tools-react-native` is a collection of supplemental react-native
functions and types.

You can import the entire package, or, to save space, import individual
categories:

```typescript
import * as tools from "@rnx-kit/tools-react-native";
//
// Alternatively...
import * as metroTools from "@rnx-kit/tools-react-native/metro";
import * as platformTools from "@rnx-kit/tools-react-native/platform";
```

<!-- The following table can be updated by running `yarn update-readme` -->
<!-- @rnx-kit/api start -->

| Category    | Function                                               | Description                                                                                                                                                                                                                                                                     |
| ----------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| context     | `loadContext(projectRoot)`                             | Equivalent to calling `loadConfig()` from `@react-native-community/cli`, but the result is cached for faster subsequent accesses.                                                                                                                                               |
| context     | `loadContextAsync(projectRoot)`                        | Equivalent to calling `loadConfigAsync()` (with fallback to `loadConfig()`) from `@react-native-community/cli`, but the result is cached for faster subsequent accesses.                                                                                                        |
| context     | `resolveCommunityCLI(root, reactNativePath)`           | Finds path to `@react-native-community/cli`.                                                                                                                                                                                                                                    |
| metro       | `findMetroPath(projectRoot)`                           | Finds the installation path of Metro.                                                                                                                                                                                                                                           |
| metro       | `getMetroVersion(projectRoot)`                         | Returns Metro version number.                                                                                                                                                                                                                                                   |
| metro       | `requireModuleFromMetro(moduleName, fromDir)`          | Imports specified module starting from the installation directory of the currently used `metro` version.                                                                                                                                                                        |
| metro-utils | `mergeTransformerConfigs(...configs)`                  | Merges multiple Metro transformer configurations into one. Properties from later configs override earlier ones. If multiple configs provide a `getTransformOptions` function, the returned config wraps them so that each is called in order and their results are deep-merged. |
| platform    | `expandPlatformExtensions(platform, extensions)`       | Returns a list of extensions that should be tried for the target platform in prioritized order.                                                                                                                                                                                 |
| platform    | `getAvailablePlatforms(startDir)`                      | Returns a map of available React Native platforms. The result is cached.                                                                                                                                                                                                        |
| platform    | `getAvailablePlatformsUncached(startDir, platformMap)` | Returns a map of available React Native platforms. The result is NOT cached.                                                                                                                                                                                                    |
| platform    | `getModuleSuffixes(platform, appendEmpty)`             | Get the module suffixes array for a given platform, suitable for use with TypeScript's moduleSuffixes setting in the form of ['.ios', '.native', ''] or ['.windows', '.win', '.native', ''] or similar                                                                          |
| platform    | `parsePlatform(val)`                                   | Parse a string to ensure it maps to a valid react-native platform.                                                                                                                                                                                                              |
| platform    | `platformExtensions(platform)`                         | Returns file extensions that can be mapped to the target platform.                                                                                                                                                                                                              |
| platform    | `platformValues()`                                     |                                                                                                                                                                                                                                                                                 |
| platform    | `tryParsePlatform(val)`                                |                                                                                                                                                                                                                                                                                 |

<!-- @rnx-kit/api end -->
