Scripts that autolink Expo modules.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Core functionality for finding and resolving Expo modules with support for custom search paths, platform-specific configuration, and advanced filtering options.
Find modules in specified search paths and app root directory.
/**
* Find modules in specified search paths and app root
* @param params - Find modules parameters
* @returns Promise resolving to search results
*/
function findModulesAsync(params: FindModulesParams): Promise<SearchResults>;
interface FindModulesParams {
appRoot: string;
autolinkingOptions: AutolinkingOptions & { platform: SupportedPlatform };
}Usage Examples:
import { findModulesAsync, createAutolinkingOptionsLoader } from "expo-modules-autolinking";
// Find modules for iOS platform
const autolinkingOptionsLoader = createAutolinkingOptionsLoader({ platform: "ios" });
const appRoot = await autolinkingOptionsLoader.getAppRoot();
const autolinkingOptions = await autolinkingOptionsLoader.getPlatformOptions("ios");
const searchResults = await findModulesAsync({
appRoot,
autolinkingOptions
});
console.log("Found modules:", Object.keys(searchResults));Resolve found modules into platform-specific descriptors.
/**
* Resolve found modules into platform-specific descriptors
* @param searchResults - Results from findModulesAsync
* @param options - Autolinking options
* @returns Promise resolving to module descriptors
*/
function resolveModulesAsync(
searchResults: SearchResults,
options: AutolinkingOptions
): Promise<ModuleDescriptor[]>;
/**
* Resolve extra build dependencies for platform
* @param params - Resolution parameters
* @returns Promise resolving to extra dependencies
*/
function resolveExtraBuildDependenciesAsync(params: ResolveParams): Promise<ExtraDependencies>;
interface ResolveParams {
commandRoot: string;
platform: SupportedPlatform;
}Usage Examples:
import { resolveModulesAsync, resolveExtraBuildDependenciesAsync } from "expo-modules-autolinking";
// Resolve modules from search results
const modules = await resolveModulesAsync(searchResults, autolinkingOptions);
// Get extra build dependencies
const extraDependencies = await resolveExtraBuildDependenciesAsync({
commandRoot: autolinkingOptionsLoader.getCommandRoot(),
platform: "ios"
});
console.log("Resolved modules:", modules.map(m => m.packageName));
console.log("Extra dependencies:", extraDependencies);Generate native source files for linking modules.
/**
* Generate package list for Android platform
* @param modules - Array of resolved module descriptors
* @param options - Package list generation options
*/
function generatePackageListAsync(
modules: ModuleDescriptor[],
options: PackageListOptions
): Promise<void>;
/**
* Generate modules provider for Apple platforms
* @param modules - Array of resolved module descriptors
* @param options - Modules provider generation options
*/
function generateModulesProviderAsync(
modules: ModuleDescriptor[],
options: ModulesProviderOptions
): Promise<void>;
interface PackageListOptions {
target: string;
namespace?: string;
empty?: boolean;
}
interface ModulesProviderOptions {
target: string;
entitlement?: string;
packages?: string[];
}Usage Examples:
import { generatePackageListAsync, generateModulesProviderAsync } from "expo-modules-autolinking";
// Generate Android package list
await generatePackageListAsync(modules, {
target: "./android/app/src/main/java/MainApplication.java",
namespace: "com.myapp"
});
// Generate iOS modules provider
await generateModulesProviderAsync(modules, {
target: "./ios/MyApp/ExpoModulesProvider.swift",
entitlement: "./ios/MyApp/MyApp.entitlements"
});Access autolinking configuration for platform-specific settings.
/**
* Get autolinking configuration for current options
* @param params - Configuration parameters
* @returns Configuration object or null
*/
function getConfiguration(params: {
autolinkingOptions: AutolinkingOptions;
}): any;Usage Examples:
import { getConfiguration } from "expo-modules-autolinking";
// Get platform configuration
const config = getConfiguration({ autolinkingOptions });
if (config) {
console.log("Platform configuration:", config);
}The following APIs are deprecated but maintained for backward compatibility:
/**
* Query autolinking modules from a project for specific platform
* @param projectRoot - Root directory of the project
* @param options - Query configuration options including platform
* @returns Promise resolving to array of resolved module descriptors
* @deprecated Use newer autolinking options loader instead
*/
function queryAutolinkingModulesFromProjectAsync(
projectRoot: string,
options: QueryAutolinkingModulesFromProjectParams
): Promise<ModuleDescriptor[]>;
interface QueryAutolinkingModulesFromProjectParams extends Partial<AutolinkingCommonArguments> {
platform: SupportedPlatform;
[extra: string]: unknown;
}/**
* Merge command arguments with autolinking options
* @param argumentsOptions - Command line argument options
* @returns Promise resolving to merged autolinking options
* @deprecated Use createAutolinkingOptionsLoader instead
*/
function mergeLinkingOptionsAsync<Options extends Partial<AutolinkingCommonArguments>>(
argumentsOptions: Options
): Promise<Options & AutolinkingOptions>;
/**
* Find project root directory by searching for package.json
* @param cwd - Current working directory to search from
* @returns Path to directory containing package.json
* @deprecated Use newer project discovery mechanisms
*/
function findProjectRootSync(cwd?: string): string;
/**
* Resolve and validate search paths for module discovery
* @param searchPaths - Array of search path strings or null
* @param cwd - Current working directory for relative path resolution
* @returns Promise resolving to array of resolved search paths
* @deprecated Use newer search path resolution mechanisms
*/
function resolveSearchPathsAsync(
searchPaths: string[] | null,
cwd: string
): Promise<string[]>;type SearchResults = {
[moduleName: string]: PackageRevision;
};
interface PackageRevision {
name: string;
path: string;
version: string;
config?: ExpoModuleConfig;
duplicates?: PackageRevision[];
}
interface ExtraDependencies {
[platform: string]: any[];
}The recommended module discovery workflow using the current APIs:
createAutolinkingOptionsLoader to manage configurationfindModulesAsync to discover available modulesresolveModulesAsync to convert to platform descriptorsresolveExtraBuildDependenciesAsync for additional dependenciesComplete Workflow Example:
import {
createAutolinkingOptionsLoader,
findModulesAsync,
resolveModulesAsync,
resolveExtraBuildDependenciesAsync,
generateModulesProviderAsync
} from "expo-modules-autolinking";
async function completeAutolinkingWorkflow(platform: SupportedPlatform) {
// 1. Create options loader
const optionsLoader = createAutolinkingOptionsLoader({ platform });
// 2. Get configuration
const appRoot = await optionsLoader.getAppRoot();
const autolinkingOptions = await optionsLoader.getPlatformOptions(platform);
// 3. Find modules
const searchResults = await findModulesAsync({
appRoot,
autolinkingOptions
});
// 4. Resolve modules
const modules = await resolveModulesAsync(searchResults, autolinkingOptions);
// 5. Get extra dependencies
const extraDeps = await resolveExtraBuildDependenciesAsync({
commandRoot: optionsLoader.getCommandRoot(),
platform
});
// 6. Generate source files (example for iOS)
if (platform === "ios") {
await generateModulesProviderAsync(modules, {
target: "./ios/MyApp/ExpoModulesProvider.swift"
});
}
return { modules, extraDeps };
}