expo-modules-autolinking
Advanced tools
Comparing version
@@ -1,2 +0,2 @@ | ||
import { AndroidGradlePluginDescriptor, RawExpoModuleConfig, RawModuleConfigApple, SupportedPlatform } from './types'; | ||
import { AndroidGradleAarProjectDescriptor, AndroidGradlePluginDescriptor, RawExpoModuleConfig, RawModuleConfigApple, SupportedPlatform } from './types'; | ||
/** | ||
@@ -53,2 +53,6 @@ * A class that wraps the raw config (`expo-module.json` or `unimodule.json`). | ||
/** | ||
* Returns gradle projects containing AAR files defined by the module author. | ||
*/ | ||
androidGradleAarProjects(): AndroidGradleAarProjectDescriptor[]; | ||
/** | ||
* Returns serializable raw config. | ||
@@ -55,0 +59,0 @@ */ |
@@ -96,2 +96,8 @@ "use strict"; | ||
/** | ||
* Returns gradle projects containing AAR files defined by the module author. | ||
*/ | ||
androidGradleAarProjects() { | ||
return arrayize(this.rawConfig.android?.gradleAarProjects ?? []); | ||
} | ||
/** | ||
* Returns serializable raw config. | ||
@@ -98,0 +104,0 @@ */ |
@@ -9,2 +9,9 @@ import type { ExtraDependencies, ModuleDescriptorAndroid, PackageRevision } from '../types'; | ||
/** | ||
* Converts the package name to Android's project name. | ||
* `/` path will transform as `-` | ||
* | ||
* Example: `@expo/example` + `android/build.gradle` → `expo-example` | ||
*/ | ||
export declare function convertPackageToProjectName(packageName: string): string; | ||
/** | ||
* Converts the package name and gradle file path to Android's project name. | ||
@@ -20,3 +27,3 @@ * `$` to indicate subprojects | ||
*/ | ||
export declare function convertPackageNameToProjectName(packageName: string, buildGradleFile: string): string; | ||
export declare function convertPackageWithGradleToProjectName(packageName: string, buildGradleFile: string): string; | ||
/** | ||
@@ -23,0 +30,0 @@ * Given the contents of a `gradle.properties` file, |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.searchGradlePropertyFirst = exports.convertPackageNameToProjectName = exports.resolveExtraBuildDependenciesAsync = exports.resolveModuleAsync = exports.generatePackageListAsync = void 0; | ||
exports.searchGradlePropertyFirst = exports.convertPackageWithGradleToProjectName = exports.convertPackageToProjectName = exports.resolveExtraBuildDependenciesAsync = exports.resolveModuleAsync = exports.generatePackageListAsync = void 0; | ||
const fast_glob_1 = __importDefault(require("fast-glob")); | ||
@@ -26,3 +26,3 @@ const fs_extra_1 = __importDefault(require("fs-extra")); | ||
} | ||
const buildGradleFiles = await (0, fast_glob_1.default)('*/build.gradle', { | ||
const buildGradleFiles = await (0, fast_glob_1.default)('*/build.gradle{,.kts}', { | ||
cwd: revision.path, | ||
@@ -44,9 +44,2 @@ ignore: ['**/node_modules/**'], | ||
} | ||
const projects = buildGradleFiles.map((buildGradleFile) => { | ||
const gradleFilePath = path_1.default.join(revision.path, buildGradleFile); | ||
return { | ||
name: convertPackageNameToProjectName(packageName, path_1.default.relative(revision.path, gradleFilePath)), | ||
sourceDir: path_1.default.dirname(gradleFilePath), | ||
}; | ||
}); | ||
const plugins = (revision.config?.androidGradlePlugins() ?? []).map(({ id, group, sourceDir }) => ({ | ||
@@ -57,2 +50,22 @@ id, | ||
})); | ||
const aarProjects = (revision.config?.androidGradleAarProjects() ?? []).map(({ name, aarFilePath }) => { | ||
const mainProjectName = convertPackageToProjectName(packageName); | ||
const projectName = `${mainProjectName}$${name}`; | ||
const projectDir = path_1.default.join(revision.path, 'android', 'build', projectName); | ||
return { | ||
name: projectName, | ||
aarFilePath: path_1.default.join(revision.path, aarFilePath), | ||
projectDir, | ||
}; | ||
}); | ||
const projects = buildGradleFiles | ||
.map((buildGradleFile) => { | ||
const gradleFilePath = path_1.default.join(revision.path, buildGradleFile); | ||
return { | ||
name: convertPackageWithGradleToProjectName(packageName, path_1.default.relative(revision.path, gradleFilePath)), | ||
sourceDir: path_1.default.dirname(gradleFilePath), | ||
}; | ||
}) | ||
// Filter out projects that are already linked by plugins | ||
.filter(({ sourceDir }) => !plugins.some((plugin) => plugin.sourceDir === sourceDir)); | ||
return { | ||
@@ -63,2 +76,3 @@ packageName, | ||
modules: revision.config?.androidModules() ?? [], | ||
...(aarProjects.length > 0 ? { aarProjects } : {}), | ||
}; | ||
@@ -159,2 +173,12 @@ } | ||
/** | ||
* Converts the package name to Android's project name. | ||
* `/` path will transform as `-` | ||
* | ||
* Example: `@expo/example` + `android/build.gradle` → `expo-example` | ||
*/ | ||
function convertPackageToProjectName(packageName) { | ||
return packageName.replace(/^@/g, '').replace(/\W+/g, '-'); | ||
} | ||
exports.convertPackageToProjectName = convertPackageToProjectName; | ||
/** | ||
* Converts the package name and gradle file path to Android's project name. | ||
@@ -170,8 +194,8 @@ * `$` to indicate subprojects | ||
*/ | ||
function convertPackageNameToProjectName(packageName, buildGradleFile) { | ||
const name = packageName.replace(/^@/g, '').replace(/\W+/g, '-'); | ||
function convertPackageWithGradleToProjectName(packageName, buildGradleFile) { | ||
const name = convertPackageToProjectName(packageName); | ||
const baseDir = path_1.default.dirname(buildGradleFile).replace(/\//g, '-'); | ||
return baseDir === 'android' ? name : `${name}$${baseDir}`; | ||
} | ||
exports.convertPackageNameToProjectName = convertPackageNameToProjectName; | ||
exports.convertPackageWithGradleToProjectName = convertPackageWithGradleToProjectName; | ||
/** | ||
@@ -178,0 +202,0 @@ * Given the contents of a `gradle.properties` file, |
@@ -13,1 +13,8 @@ import type { RNConfigDependencyAndroid, RNConfigReactNativePlatformsConfigAndroid } from './reactNativeConfig.types'; | ||
export declare function parseComponentDescriptorsAsync(packageRoot: string, pacakgeJson: any): Promise<string[]>; | ||
export declare function findGradleAndManifestAsync({ androidDir, isLibrary, }: { | ||
androidDir: string; | ||
isLibrary: boolean; | ||
}): Promise<{ | ||
gradle: string; | ||
manifest: string; | ||
}>; |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.parseComponentDescriptorsAsync = exports.parseLibraryNameAsync = exports.parseNativePackageClassNameAsync = exports.parsePackageNameAsync = exports.resolveDependencyConfigImplAndroidAsync = void 0; | ||
exports.findGradleAndManifestAsync = exports.parseComponentDescriptorsAsync = exports.parseLibraryNameAsync = exports.parseNativePackageClassNameAsync = exports.parsePackageNameAsync = exports.resolveDependencyConfigImplAndroidAsync = void 0; | ||
const fast_glob_1 = __importDefault(require("fast-glob")); | ||
@@ -18,19 +18,3 @@ const promises_1 = __importDefault(require("fs/promises")); | ||
const androidDir = path_1.default.join(packageRoot, 'android'); | ||
const globExcludes = [ | ||
'node_modules/**', | ||
'**/build/**', | ||
'**/debug/**', | ||
'Examples/**', | ||
'examples/**', | ||
'**/Pods/**', | ||
'**/sdks/hermes/android/**', | ||
'**/src/androidTest/**', | ||
'**/src/test/**', | ||
]; | ||
const [manifests, gradles] = await Promise.all([ | ||
(0, fast_glob_1.default)('**/AndroidManifest.xml', { cwd: androidDir, ignore: globExcludes }), | ||
(0, fast_glob_1.default)('build.gradle{,.kts}', { cwd: androidDir, ignore: globExcludes }), | ||
]); | ||
const manifest = manifests.find((manifest) => manifest.includes('src/main/')) ?? manifests[0]; | ||
const gradle = gradles[0]; | ||
const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: true }); | ||
if (!manifest && !gradle) { | ||
@@ -204,2 +188,24 @@ return null; | ||
} | ||
async function findGradleAndManifestAsync({ androidDir, isLibrary, }) { | ||
const globExcludes = [ | ||
'node_modules/**', | ||
'**/build/**', | ||
'**/debug/**', | ||
'Examples/**', | ||
'examples/**', | ||
'**/Pods/**', | ||
'**/sdks/hermes/android/**', | ||
'**/src/androidTest/**', | ||
'**/src/test/**', | ||
]; | ||
const gradlePattern = isLibrary ? 'build.gradle{,.kts}' : 'app/build.gradle{,.kts}'; | ||
const [manifests, gradles] = await Promise.all([ | ||
(0, fast_glob_1.default)('**/AndroidManifest.xml', { cwd: androidDir, ignore: globExcludes }), | ||
(0, fast_glob_1.default)(gradlePattern, { cwd: androidDir, ignore: globExcludes }), | ||
]); | ||
const manifest = manifests.find((manifest) => manifest.includes('src/main/')) ?? manifests[0]; | ||
const gradle = gradles[0]; | ||
return { gradle, manifest }; | ||
} | ||
exports.findGradleAndManifestAsync = findGradleAndManifestAsync; | ||
//# sourceMappingURL=androidResolver.js.map |
@@ -1,2 +0,2 @@ | ||
import type { RNConfigCommandOptions, RNConfigDependency, RNConfigReactNativeProjectConfig, RNConfigResult } from './reactNativeConfig.types'; | ||
import type { RNConfigCommandOptions, RNConfigDependency, RNConfigReactNativeAppProjectConfig, RNConfigReactNativeProjectConfig, RNConfigResult } from './reactNativeConfig.types'; | ||
import type { SupportedPlatform } from '../types'; | ||
@@ -12,1 +12,2 @@ /** | ||
export declare function resolveDependencyConfigAsync(platform: SupportedPlatform, name: string, packageRoot: string, projectConfig: RNConfigReactNativeProjectConfig | null): Promise<RNConfigDependency | null>; | ||
export declare function resolveAppProjectConfigAsync(projectRoot: string, platform: SupportedPlatform): Promise<RNConfigReactNativeAppProjectConfig>; |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.resolveDependencyConfigAsync = exports.findDependencyRootsAsync = exports.createReactNativeConfigAsync = void 0; | ||
exports.resolveAppProjectConfigAsync = exports.resolveDependencyConfigAsync = exports.findDependencyRootsAsync = exports.createReactNativeConfigAsync = void 0; | ||
const promises_1 = __importDefault(require("fs/promises")); | ||
@@ -27,3 +27,3 @@ const path_1 = __importDefault(require("path")); | ||
const dependencyResults = Object.fromEntries(dependencyConfigs.filter(([, config]) => config != null)); | ||
const projectData = platform === 'ios' ? { ios: { sourceDir: path_1.default.join(projectRoot, 'ios') } } : {}; | ||
const projectData = await resolveAppProjectConfigAsync(projectRoot, platform); | ||
return { | ||
@@ -97,2 +97,24 @@ root: projectRoot, | ||
exports.resolveDependencyConfigAsync = resolveDependencyConfigAsync; | ||
async function resolveAppProjectConfigAsync(projectRoot, platform) { | ||
if (platform === 'android') { | ||
const androidDir = path_1.default.join(projectRoot, 'android'); | ||
const { gradle, manifest } = await (0, androidResolver_1.findGradleAndManifestAsync)({ androidDir, isLibrary: false }); | ||
const packageName = await (0, androidResolver_1.parsePackageNameAsync)(path_1.default.join(androidDir, manifest), path_1.default.join(androidDir, gradle)); | ||
return { | ||
android: { | ||
packageName: packageName ?? '', | ||
sourceDir: path_1.default.join(projectRoot, 'android'), | ||
}, | ||
}; | ||
} | ||
if (platform === 'ios') { | ||
return { | ||
ios: { | ||
sourceDir: path_1.default.join(projectRoot, 'ios'), | ||
}, | ||
}; | ||
} | ||
return {}; | ||
} | ||
exports.resolveAppProjectConfigAsync = resolveAppProjectConfigAsync; | ||
//# sourceMappingURL=reactNativeConfig.js.map |
@@ -81,2 +81,14 @@ import type { SupportedPlatform } from '../types'; | ||
export type RNConfigReactNativeConfig = RNConfigReactNativeProjectConfig | RNConfigReactNativeLibraryConfig; | ||
/** | ||
* The `project` config represents the app project configuration. | ||
*/ | ||
export interface RNConfigReactNativeAppProjectConfig { | ||
android?: { | ||
sourceDir: string; | ||
packageName: string; | ||
}; | ||
ios?: { | ||
sourceDir: string; | ||
}; | ||
} | ||
export {}; |
@@ -63,2 +63,5 @@ import { ExpoModuleConfig } from './ExpoModuleConfig'; | ||
} | ||
export interface ModuleAndroidAarProjectInfo extends AndroidGradleAarProjectDescriptor { | ||
projectDir: string; | ||
} | ||
export interface ModuleDescriptorAndroid { | ||
@@ -69,2 +72,3 @@ packageName: string; | ||
modules: string[]; | ||
aarProjects?: ModuleAndroidAarProjectInfo[]; | ||
} | ||
@@ -105,2 +109,12 @@ export interface ModuleIosPodspecInfo { | ||
} | ||
export interface AndroidGradleAarProjectDescriptor { | ||
/** | ||
* Gradle project name | ||
*/ | ||
name: string; | ||
/** | ||
* Path to the AAR file | ||
*/ | ||
aarFilePath: string; | ||
} | ||
/** | ||
@@ -183,2 +197,6 @@ * Represents a raw config specific to Apple platforms. | ||
gradlePlugins?: AndroidGradlePluginDescriptor[]; | ||
/** | ||
* Gradle projects containing AAR files. | ||
*/ | ||
gradleAarProjects?: AndroidGradleAarProjectDescriptor[]; | ||
}; | ||
@@ -185,0 +203,0 @@ /** |
@@ -10,2 +10,3 @@ # Changelog | ||
- Added `react-native-config` command to support core autolinking for react-native. ([#29818](https://github.com/expo/expo/pull/29818) by [@kudo](https://github.com/kudo)) | ||
- Added AAR files autolinking as Gradle projects. ([#30706](https://github.com/expo/expo/pull/30706) by [@kudo](https://github.com/kudo)) | ||
@@ -15,2 +16,4 @@ ### 🐛 Bug fixes | ||
- [Android] Fixed autolinking of Maven AWS S3 repository. ([#30204](https://github.com/expo/expo/pull/30204) by [@ElielC](https://github.com/ElielC)) | ||
- [Android] Fixed autolinking when using Gradle Kotlin script. ([#30448](https://github.com/expo/expo/pull/30448) by [@amrfarid140](https://github.com/amrfarid140)) | ||
- Added missing `project.android.packageName` in react-native-config for Android core autolinking. ([#30913](https://github.com/expo/expo/pull/30913) by [@kudo](https://github.com/kudo)) | ||
@@ -17,0 +20,0 @@ ### 💡 Others |
{ | ||
"name": "expo-modules-autolinking", | ||
"version": "1.12.0-canary-20240719-83ee47b", | ||
"version": "1.12.0-canary-20240814-ce0f7d5", | ||
"description": "Scripts that autolink Expo modules.", | ||
@@ -39,5 +39,4 @@ "main": "build/index.js", | ||
"@types/fs-extra": "^9.0.11", | ||
"expo-module-scripts": "3.6.0-canary-20240719-83ee47b", | ||
"minimatch": "^3.0.4", | ||
"tempy": "^0.7.1" | ||
"expo-module-scripts": "3.6.0-canary-20240814-ce0f7d5", | ||
"minimatch": "^3.0.4" | ||
}, | ||
@@ -50,6 +49,6 @@ "dependencies": { | ||
"fs-extra": "^9.1.0", | ||
"resolve-from": "^5.0.0", | ||
"require-from-string": "^2.0.2" | ||
"require-from-string": "^2.0.2", | ||
"resolve-from": "^5.0.0" | ||
}, | ||
"gitHead": "83ee47b5c89c7f1b1a5101189580eaf3555f5962" | ||
"gitHead": "ce0f7d5c7eaec2c8d06ee4e0dc0e58cd6c1612ed" | ||
} |
import { | ||
AndroidGradleAarProjectDescriptor, | ||
AndroidGradlePluginDescriptor, | ||
@@ -113,2 +114,9 @@ RawExpoModuleConfig, | ||
/** | ||
* Returns gradle projects containing AAR files defined by the module author. | ||
*/ | ||
androidGradleAarProjects(): AndroidGradleAarProjectDescriptor[] { | ||
return arrayize(this.rawConfig.android?.gradleAarProjects ?? []); | ||
} | ||
/** | ||
* Returns serializable raw config. | ||
@@ -115,0 +123,0 @@ */ |
@@ -28,3 +28,3 @@ import glob from 'fast-glob'; | ||
const buildGradleFiles = await glob('*/build.gradle', { | ||
const buildGradleFiles = await glob('*/build.gradle{,.kts}', { | ||
cwd: revision.path, | ||
@@ -54,13 +54,2 @@ ignore: ['**/node_modules/**'], | ||
const projects = buildGradleFiles.map((buildGradleFile) => { | ||
const gradleFilePath = path.join(revision.path, buildGradleFile); | ||
return { | ||
name: convertPackageNameToProjectName( | ||
packageName, | ||
path.relative(revision.path, gradleFilePath) | ||
), | ||
sourceDir: path.dirname(gradleFilePath), | ||
}; | ||
}); | ||
const plugins = (revision.config?.androidGradlePlugins() ?? []).map( | ||
@@ -74,2 +63,29 @@ ({ id, group, sourceDir }) => ({ | ||
const aarProjects = (revision.config?.androidGradleAarProjects() ?? []).map( | ||
({ name, aarFilePath }) => { | ||
const mainProjectName = convertPackageToProjectName(packageName); | ||
const projectName = `${mainProjectName}$${name}`; | ||
const projectDir = path.join(revision.path, 'android', 'build', projectName); | ||
return { | ||
name: projectName, | ||
aarFilePath: path.join(revision.path, aarFilePath), | ||
projectDir, | ||
}; | ||
} | ||
); | ||
const projects = buildGradleFiles | ||
.map((buildGradleFile) => { | ||
const gradleFilePath = path.join(revision.path, buildGradleFile); | ||
return { | ||
name: convertPackageWithGradleToProjectName( | ||
packageName, | ||
path.relative(revision.path, gradleFilePath) | ||
), | ||
sourceDir: path.dirname(gradleFilePath), | ||
}; | ||
}) | ||
// Filter out projects that are already linked by plugins | ||
.filter(({ sourceDir }) => !plugins.some((plugin) => plugin.sourceDir === sourceDir)); | ||
return { | ||
@@ -80,2 +96,3 @@ packageName, | ||
modules: revision.config?.androidModules() ?? [], | ||
...(aarProjects.length > 0 ? { aarProjects } : {}), | ||
}; | ||
@@ -195,2 +212,12 @@ } | ||
/** | ||
* Converts the package name to Android's project name. | ||
* `/` path will transform as `-` | ||
* | ||
* Example: `@expo/example` + `android/build.gradle` → `expo-example` | ||
*/ | ||
export function convertPackageToProjectName(packageName: string): string { | ||
return packageName.replace(/^@/g, '').replace(/\W+/g, '-'); | ||
} | ||
/** | ||
* Converts the package name and gradle file path to Android's project name. | ||
@@ -206,7 +233,7 @@ * `$` to indicate subprojects | ||
*/ | ||
export function convertPackageNameToProjectName( | ||
export function convertPackageWithGradleToProjectName( | ||
packageName: string, | ||
buildGradleFile: string | ||
): string { | ||
const name = packageName.replace(/^@/g, '').replace(/\W+/g, '-'); | ||
const name = convertPackageToProjectName(packageName); | ||
const baseDir = path.dirname(buildGradleFile).replace(/\//g, '-'); | ||
@@ -213,0 +240,0 @@ return baseDir === 'android' ? name : `${name}$${baseDir}`; |
@@ -20,20 +20,3 @@ import glob from 'fast-glob'; | ||
const androidDir = path.join(packageRoot, 'android'); | ||
const globExcludes = [ | ||
'node_modules/**', | ||
'**/build/**', | ||
'**/debug/**', | ||
'Examples/**', | ||
'examples/**', | ||
'**/Pods/**', | ||
'**/sdks/hermes/android/**', | ||
'**/src/androidTest/**', | ||
'**/src/test/**', | ||
]; | ||
const [manifests, gradles] = await Promise.all([ | ||
glob('**/AndroidManifest.xml', { cwd: androidDir, ignore: globExcludes }), | ||
glob('build.gradle{,.kts}', { cwd: androidDir, ignore: globExcludes }), | ||
]); | ||
const manifest = manifests.find((manifest) => manifest.includes('src/main/')) ?? manifests[0]; | ||
const gradle = gradles[0]; | ||
const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: true }); | ||
if (!manifest && !gradle) { | ||
@@ -246,1 +229,29 @@ return null; | ||
} | ||
export async function findGradleAndManifestAsync({ | ||
androidDir, | ||
isLibrary, | ||
}: { | ||
androidDir: string; | ||
isLibrary: boolean; | ||
}): Promise<{ gradle: string; manifest: string }> { | ||
const globExcludes = [ | ||
'node_modules/**', | ||
'**/build/**', | ||
'**/debug/**', | ||
'Examples/**', | ||
'examples/**', | ||
'**/Pods/**', | ||
'**/sdks/hermes/android/**', | ||
'**/src/androidTest/**', | ||
'**/src/test/**', | ||
]; | ||
const gradlePattern = isLibrary ? 'build.gradle{,.kts}' : 'app/build.gradle{,.kts}'; | ||
const [manifests, gradles] = await Promise.all([ | ||
glob('**/AndroidManifest.xml', { cwd: androidDir, ignore: globExcludes }), | ||
glob(gradlePattern, { cwd: androidDir, ignore: globExcludes }), | ||
]); | ||
const manifest = manifests.find((manifest) => manifest.includes('src/main/')) ?? manifests[0]; | ||
const gradle = gradles[0]; | ||
return { gradle, manifest }; | ||
} |
import fs from 'fs/promises'; | ||
import path from 'path'; | ||
import { resolveDependencyConfigImplAndroidAsync } from './androidResolver'; | ||
import { | ||
findGradleAndManifestAsync, | ||
parsePackageNameAsync, | ||
resolveDependencyConfigImplAndroidAsync, | ||
} from './androidResolver'; | ||
import { loadConfigAsync } from './config'; | ||
@@ -10,2 +14,3 @@ import { resolveDependencyConfigImplIosAsync } from './iosResolver'; | ||
RNConfigDependency, | ||
RNConfigReactNativeAppProjectConfig, | ||
RNConfigReactNativeLibraryConfig, | ||
@@ -42,4 +47,3 @@ RNConfigReactNativeProjectConfig, | ||
); | ||
const projectData = | ||
platform === 'ios' ? { ios: { sourceDir: path.join(projectRoot, 'ios') } } : {}; | ||
const projectData = await resolveAppProjectConfigAsync(projectRoot, platform); | ||
return { | ||
@@ -131,1 +135,32 @@ root: projectRoot, | ||
} | ||
export async function resolveAppProjectConfigAsync( | ||
projectRoot: string, | ||
platform: SupportedPlatform | ||
): Promise<RNConfigReactNativeAppProjectConfig> { | ||
if (platform === 'android') { | ||
const androidDir = path.join(projectRoot, 'android'); | ||
const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: false }); | ||
const packageName = await parsePackageNameAsync( | ||
path.join(androidDir, manifest), | ||
path.join(androidDir, gradle) | ||
); | ||
return { | ||
android: { | ||
packageName: packageName ?? '', | ||
sourceDir: path.join(projectRoot, 'android'), | ||
}, | ||
}; | ||
} | ||
if (platform === 'ios') { | ||
return { | ||
ios: { | ||
sourceDir: path.join(projectRoot, 'ios'), | ||
}, | ||
}; | ||
} | ||
return {}; | ||
} |
@@ -93,1 +93,14 @@ import type { SupportedPlatform } from '../types'; | ||
| RNConfigReactNativeLibraryConfig; | ||
/** | ||
* The `project` config represents the app project configuration. | ||
*/ | ||
export interface RNConfigReactNativeAppProjectConfig { | ||
android?: { | ||
sourceDir: string; | ||
packageName: string; | ||
}; | ||
ios?: { | ||
sourceDir: string; | ||
}; | ||
} |
@@ -78,2 +78,6 @@ import { ExpoModuleConfig } from './ExpoModuleConfig'; | ||
export interface ModuleAndroidAarProjectInfo extends AndroidGradleAarProjectDescriptor { | ||
projectDir: string; | ||
} | ||
export interface ModuleDescriptorAndroid { | ||
@@ -84,2 +88,3 @@ packageName: string; | ||
modules: string[]; | ||
aarProjects?: ModuleAndroidAarProjectInfo[]; | ||
} | ||
@@ -130,2 +135,14 @@ | ||
export interface AndroidGradleAarProjectDescriptor { | ||
/** | ||
* Gradle project name | ||
*/ | ||
name: string; | ||
/** | ||
* Path to the AAR file | ||
*/ | ||
aarFilePath: string; | ||
} | ||
/** | ||
@@ -221,2 +238,7 @@ * Represents a raw config specific to Apple platforms. | ||
gradlePlugins?: AndroidGradlePluginDescriptor[]; | ||
/** | ||
* Gradle projects containing AAR files. | ||
*/ | ||
gradleAarProjects?: AndroidGradleAarProjectDescriptor[]; | ||
}; | ||
@@ -223,0 +245,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
385188
3.84%4
-20%4620
4.79%