expo-modules-autolinking 2.0.0-preview.0 → 2.0.0-preview.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/build/reactNativeConfig/androidResolver.d.ts +1 -1
- package/build/reactNativeConfig/androidResolver.js +8 -6
- package/build/reactNativeConfig/androidResolver.js.map +1 -1
- package/build/reactNativeConfig/reactNativeConfig.js +1 -1
- package/build/reactNativeConfig/reactNativeConfig.js.map +1 -1
- package/package.json +2 -2
- package/scripts/android/autolinking_implementation.gradle +5 -1
- package/src/reactNativeConfig/androidResolver.ts +9 -7
- package/src/reactNativeConfig/reactNativeConfig.ts +1 -4
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,18 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 2.0.0-preview.2 — 2024-10-28
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug fixes
|
|
16
|
+
|
|
17
|
+
- Fixed react-native core autolinking for react-native-unistyles on Android. ([#32375](https://github.com/expo/expo/pull/32375) by [@kudo](https://github.com/kudo))
|
|
18
|
+
|
|
19
|
+
## 2.0.0-preview.1 — 2024-10-25
|
|
20
|
+
|
|
21
|
+
### 🐛 Bug fixes
|
|
22
|
+
|
|
23
|
+
- Fixed build error from `gradleAarProjects`. ([#32349](https://github.com/expo/expo/pull/32349) by [@kudo](https://github.com/kudo))
|
|
24
|
+
|
|
13
25
|
## 2.0.0-preview.0 — 2024-10-22
|
|
14
26
|
|
|
15
27
|
### 🛠 Breaking changes
|
|
@@ -3,7 +3,7 @@ export declare function resolveDependencyConfigImplAndroidAsync(packageRoot: str
|
|
|
3
3
|
/**
|
|
4
4
|
* Parse the `RNConfigDependencyAndroid.packageName`
|
|
5
5
|
*/
|
|
6
|
-
export declare function parsePackageNameAsync(manifestPath: string | null, gradlePath: string | null): Promise<string | null>;
|
|
6
|
+
export declare function parsePackageNameAsync(androidDir: string, manifestPath: string | null, gradlePath: string | null): Promise<string | null>;
|
|
7
7
|
/**
|
|
8
8
|
* Parse the Java or Kotlin class name to for `ReactPackage` or `TurboReactPackage`.
|
|
9
9
|
*/
|
|
@@ -15,11 +15,13 @@ async function resolveDependencyConfigImplAndroidAsync(packageRoot, reactNativeC
|
|
|
15
15
|
}
|
|
16
16
|
const androidDir = path_1.default.join(packageRoot, 'android');
|
|
17
17
|
const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: true });
|
|
18
|
-
if (!manifest
|
|
18
|
+
if (!manifest && !gradle) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const packageName = reactNativeConfig?.packageName || (await parsePackageNameAsync(androidDir, manifest, gradle));
|
|
22
|
+
if (!packageName) {
|
|
19
23
|
return null;
|
|
20
24
|
}
|
|
21
|
-
const packageName = reactNativeConfig?.packageName ||
|
|
22
|
-
(await parsePackageNameAsync(path_1.default.join(androidDir, manifest), path_1.default.join(androidDir, gradle)));
|
|
23
25
|
const nativePackageClassName = await parseNativePackageClassNameAsync(packageRoot, androidDir);
|
|
24
26
|
if (!nativePackageClassName) {
|
|
25
27
|
return null;
|
|
@@ -71,16 +73,16 @@ exports.resolveDependencyConfigImplAndroidAsync = resolveDependencyConfigImplAnd
|
|
|
71
73
|
/**
|
|
72
74
|
* Parse the `RNConfigDependencyAndroid.packageName`
|
|
73
75
|
*/
|
|
74
|
-
async function parsePackageNameAsync(manifestPath, gradlePath) {
|
|
76
|
+
async function parsePackageNameAsync(androidDir, manifestPath, gradlePath) {
|
|
75
77
|
if (gradlePath) {
|
|
76
|
-
const gradleContents = await promises_1.default.readFile(gradlePath, 'utf8');
|
|
78
|
+
const gradleContents = await promises_1.default.readFile(path_1.default.join(androidDir, gradlePath), 'utf8');
|
|
77
79
|
const match = gradleContents.match(/namespace\s*[=]*\s*["'](.+?)["']/);
|
|
78
80
|
if (match) {
|
|
79
81
|
return match[1];
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
if (manifestPath) {
|
|
83
|
-
const manifestContents = await promises_1.default.readFile(manifestPath, 'utf8');
|
|
85
|
+
const manifestContents = await promises_1.default.readFile(path_1.default.join(androidDir, manifestPath), 'utf8');
|
|
84
86
|
const match = manifestContents.match(/package="(.+?)"/);
|
|
85
87
|
if (match) {
|
|
86
88
|
return match[1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"androidResolver.js","sourceRoot":"","sources":["../../src/reactNativeConfig/androidResolver.ts"],"names":[],"mappings":"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","sourcesContent":["import glob from 'fast-glob';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport type {\n RNConfigDependencyAndroid,\n RNConfigReactNativePlatformsConfigAndroid,\n} from './reactNativeConfig.types';\nimport {\n fileExistsAsync,\n globMatchFunctorAllAsync,\n globMatchFunctorFirstAsync,\n} from '../fileUtils';\n\nexport async function resolveDependencyConfigImplAndroidAsync(\n packageRoot: string,\n reactNativeConfig: RNConfigReactNativePlatformsConfigAndroid | null | undefined\n): Promise<RNConfigDependencyAndroid | null> {\n if (reactNativeConfig === null) {\n // Skip autolinking for this package.\n return null;\n }\n const androidDir = path.join(packageRoot, 'android');\n const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: true });\n if (!manifest || !gradle) {\n return null;\n }\n\n const packageName =\n reactNativeConfig?.packageName ||\n (await parsePackageNameAsync(path.join(androidDir, manifest), path.join(androidDir, gradle)));\n const nativePackageClassName = await parseNativePackageClassNameAsync(packageRoot, androidDir);\n\n if (!nativePackageClassName) {\n return null;\n }\n\n const packageJson = JSON.parse(await fs.readFile(path.join(packageRoot, 'package.json'), 'utf8'));\n const packageImportPath =\n reactNativeConfig?.packageImportPath || `import ${packageName}.${nativePackageClassName};`;\n const packageInstance = reactNativeConfig?.packageInstance || `new ${nativePackageClassName}()`;\n const buildTypes = reactNativeConfig?.buildTypes || [];\n const dependencyConfiguration = reactNativeConfig?.dependencyConfiguration;\n const libraryName =\n reactNativeConfig?.libraryName || (await parseLibraryNameAsync(androidDir, packageJson));\n const componentDescriptors =\n reactNativeConfig?.componentDescriptors ||\n (await parseComponentDescriptorsAsync(packageRoot, packageJson));\n let cmakeListsPath = reactNativeConfig?.cmakeListsPath\n ? path.join(androidDir, reactNativeConfig?.cmakeListsPath)\n : path.join(androidDir, 'build/generated/source/codegen/jni/CMakeLists.txt');\n const cxxModuleCMakeListsModuleName = reactNativeConfig?.cxxModuleCMakeListsModuleName || null;\n const cxxModuleHeaderName = reactNativeConfig?.cxxModuleHeaderName || null;\n let cxxModuleCMakeListsPath = reactNativeConfig?.cxxModuleCMakeListsPath\n ? path.join(androidDir, reactNativeConfig?.cxxModuleCMakeListsPath)\n : null;\n if (process.platform === 'win32') {\n cmakeListsPath = cmakeListsPath.replace(/\\\\/g, '/');\n if (cxxModuleCMakeListsPath) {\n cxxModuleCMakeListsPath = cxxModuleCMakeListsPath.replace(/\\\\/g, '/');\n }\n }\n\n const result: RNConfigDependencyAndroid = {\n sourceDir: androidDir,\n packageImportPath,\n packageInstance,\n dependencyConfiguration,\n buildTypes,\n libraryName,\n componentDescriptors,\n cmakeListsPath,\n cxxModuleCMakeListsModuleName,\n cxxModuleCMakeListsPath,\n cxxModuleHeaderName,\n };\n if (!result.libraryName) {\n delete result.libraryName;\n }\n if (!result.dependencyConfiguration) {\n delete result.dependencyConfiguration;\n }\n return result;\n}\n\n/**\n * Parse the `RNConfigDependencyAndroid.packageName`\n */\nexport async function parsePackageNameAsync(\n manifestPath: string | null,\n gradlePath: string | null\n) {\n if (gradlePath) {\n const gradleContents = await fs.readFile(gradlePath, 'utf8');\n const match = gradleContents.match(/namespace\\s*[=]*\\s*[\"'](.+?)[\"']/);\n if (match) {\n return match[1];\n }\n }\n if (manifestPath) {\n const manifestContents = await fs.readFile(manifestPath, 'utf8');\n const match = manifestContents.match(/package=\"(.+?)\"/);\n if (match) {\n return match[1];\n }\n }\n return null;\n}\n\n/**\n * Parse the Java or Kotlin class name to for `ReactPackage` or `TurboReactPackage`.\n */\nexport async function parseNativePackageClassNameAsync(\n packageRoot: string,\n androidDir: string\n): Promise<string | null> {\n const matched = await globMatchFunctorFirstAsync(\n '**/*Package.{java,kt}',\n matchNativePackageClassName,\n { cwd: androidDir }\n );\n if (matched) {\n return matched;\n }\n\n // Early return if the module is an Expo module\n if (await fileExistsAsync(path.join(packageRoot, 'expo-module.config.json'))) {\n return null;\n }\n\n return await globMatchFunctorFirstAsync('**/*.{java,kt}', matchNativePackageClassName, {\n cwd: androidDir,\n });\n}\n\nlet lazyReactPackageRegex: RegExp | null = null;\nlet lazyTurboReactPackageRegex: RegExp | null = null;\nfunction matchNativePackageClassName(filePath: string, contents: Buffer): string | null {\n const fileContents = contents.toString();\n\n // [0] Match ReactPackage\n if (!lazyReactPackageRegex) {\n lazyReactPackageRegex =\n /class\\s+(\\w+[^(\\s]*)[\\s\\w():]*(\\s+implements\\s+|:)[\\s\\w():,]*[^{]*ReactPackage/;\n }\n const matchReactPackage = fileContents.match(lazyReactPackageRegex);\n if (matchReactPackage) {\n return matchReactPackage[1];\n }\n\n // [1] Match TurboReactPackage\n if (!lazyTurboReactPackageRegex) {\n lazyTurboReactPackageRegex =\n /class\\s+(\\w+[^(\\s]*)[\\s\\w():]*(\\s+extends\\s+|:)[\\s\\w():,]*[^{]*TurboReactPackage/;\n }\n const matchTurboReactPackage = fileContents.match(lazyTurboReactPackageRegex);\n if (matchTurboReactPackage) {\n return matchTurboReactPackage[1];\n }\n\n return null;\n}\n\nexport async function parseLibraryNameAsync(\n androidDir: string,\n packageJson: any\n): Promise<string | null> {\n // [0] `codegenConfig.name` from package.json\n if (packageJson.codegenConfig?.name) {\n return packageJson.codegenConfig.name;\n }\n\n const libraryNameRegExp = /libraryName = [\"'](.+)[\"']/;\n const gradlePath = path.join(androidDir, 'build.gradle');\n // [1] `libraryName` from build.gradle\n if (await fileExistsAsync(gradlePath)) {\n const buildGradleContents = await fs.readFile(gradlePath, 'utf8');\n const match = buildGradleContents.match(libraryNameRegExp);\n if (match) {\n return match[1];\n }\n }\n\n // [2] `libraryName` from build.gradle.kts\n const gradleKtsPath = path.join(androidDir, 'build.gradle.kts');\n if (await fileExistsAsync(gradleKtsPath)) {\n const buildGradleContents = await fs.readFile(gradleKtsPath, 'utf8');\n const match = buildGradleContents.match(libraryNameRegExp);\n if (match) {\n return match[1];\n }\n }\n\n return null;\n}\n\nexport async function parseComponentDescriptorsAsync(\n packageRoot: string,\n pacakgeJson: any\n): Promise<string[]> {\n const jsRoot = pacakgeJson?.codegenConfig?.jsSrcsDir\n ? path.join(packageRoot, pacakgeJson.codegenConfig.jsSrcsDir)\n : packageRoot;\n const results = await globMatchFunctorAllAsync(\n '**/*.{js,jsx,ts,tsx}',\n matchComponentDescriptors,\n {\n cwd: jsRoot,\n ignore: ['**/node_modules/**'],\n }\n );\n\n // Filter out duplicates as it happens that libraries contain multiple outputs due to package publishing.\n // TODO: consider using \"codegenConfig\" to avoid this.\n return Array.from(new Set(results));\n}\n\nlet lazyCodegenComponentRegex: RegExp | null = null;\nfunction matchComponentDescriptors(filePath: string, contents: Buffer): string | null {\n const fileContents = contents.toString();\n\n if (!lazyCodegenComponentRegex) {\n lazyCodegenComponentRegex =\n /codegenNativeComponent(<.*>)?\\s*\\(\\s*[\"'`](\\w+)[\"'`](,?[\\s\\S]+interfaceOnly:\\s*(\\w+))?/m;\n }\n const match = fileContents.match(lazyCodegenComponentRegex);\n if (!(match?.[4] === 'true') && match?.[2]) {\n return `${match[2]}ComponentDescriptor`;\n }\n return null;\n}\n\nexport async function findGradleAndManifestAsync({\n androidDir,\n isLibrary,\n}: {\n androidDir: string;\n isLibrary: boolean;\n}): Promise<{ gradle: string | null; manifest: string | null }> {\n const globExcludes = [\n 'node_modules/**',\n '**/build/**',\n '**/debug/**',\n 'Examples/**',\n 'examples/**',\n '**/Pods/**',\n '**/sdks/hermes/android/**',\n '**/src/androidTest/**',\n '**/src/test/**',\n ];\n const gradlePattern = isLibrary ? 'build.gradle{,.kts}' : 'app/build.gradle{,.kts}';\n const [manifests, gradles] = await Promise.all([\n glob('**/AndroidManifest.xml', { cwd: androidDir, ignore: globExcludes }),\n glob(gradlePattern, { cwd: androidDir, ignore: globExcludes }),\n ]);\n const manifest = manifests.find((manifest) => manifest.includes('src/main/')) ?? manifests[0];\n const gradle = gradles[0];\n return { gradle: gradle || null, manifest: manifest || null };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"androidResolver.js","sourceRoot":"","sources":["../../src/reactNativeConfig/androidResolver.ts"],"names":[],"mappings":"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","sourcesContent":["import glob from 'fast-glob';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport type {\n RNConfigDependencyAndroid,\n RNConfigReactNativePlatformsConfigAndroid,\n} from './reactNativeConfig.types';\nimport {\n fileExistsAsync,\n globMatchFunctorAllAsync,\n globMatchFunctorFirstAsync,\n} from '../fileUtils';\n\nexport async function resolveDependencyConfigImplAndroidAsync(\n packageRoot: string,\n reactNativeConfig: RNConfigReactNativePlatformsConfigAndroid | null | undefined\n): Promise<RNConfigDependencyAndroid | null> {\n if (reactNativeConfig === null) {\n // Skip autolinking for this package.\n return null;\n }\n const androidDir = path.join(packageRoot, 'android');\n const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: true });\n if (!manifest && !gradle) {\n return null;\n }\n\n const packageName =\n reactNativeConfig?.packageName || (await parsePackageNameAsync(androidDir, manifest, gradle));\n if (!packageName) {\n return null;\n }\n const nativePackageClassName = await parseNativePackageClassNameAsync(packageRoot, androidDir);\n if (!nativePackageClassName) {\n return null;\n }\n\n const packageJson = JSON.parse(await fs.readFile(path.join(packageRoot, 'package.json'), 'utf8'));\n const packageImportPath =\n reactNativeConfig?.packageImportPath || `import ${packageName}.${nativePackageClassName};`;\n const packageInstance = reactNativeConfig?.packageInstance || `new ${nativePackageClassName}()`;\n const buildTypes = reactNativeConfig?.buildTypes || [];\n const dependencyConfiguration = reactNativeConfig?.dependencyConfiguration;\n const libraryName =\n reactNativeConfig?.libraryName || (await parseLibraryNameAsync(androidDir, packageJson));\n const componentDescriptors =\n reactNativeConfig?.componentDescriptors ||\n (await parseComponentDescriptorsAsync(packageRoot, packageJson));\n let cmakeListsPath = reactNativeConfig?.cmakeListsPath\n ? path.join(androidDir, reactNativeConfig?.cmakeListsPath)\n : path.join(androidDir, 'build/generated/source/codegen/jni/CMakeLists.txt');\n const cxxModuleCMakeListsModuleName = reactNativeConfig?.cxxModuleCMakeListsModuleName || null;\n const cxxModuleHeaderName = reactNativeConfig?.cxxModuleHeaderName || null;\n let cxxModuleCMakeListsPath = reactNativeConfig?.cxxModuleCMakeListsPath\n ? path.join(androidDir, reactNativeConfig?.cxxModuleCMakeListsPath)\n : null;\n if (process.platform === 'win32') {\n cmakeListsPath = cmakeListsPath.replace(/\\\\/g, '/');\n if (cxxModuleCMakeListsPath) {\n cxxModuleCMakeListsPath = cxxModuleCMakeListsPath.replace(/\\\\/g, '/');\n }\n }\n\n const result: RNConfigDependencyAndroid = {\n sourceDir: androidDir,\n packageImportPath,\n packageInstance,\n dependencyConfiguration,\n buildTypes,\n libraryName,\n componentDescriptors,\n cmakeListsPath,\n cxxModuleCMakeListsModuleName,\n cxxModuleCMakeListsPath,\n cxxModuleHeaderName,\n };\n if (!result.libraryName) {\n delete result.libraryName;\n }\n if (!result.dependencyConfiguration) {\n delete result.dependencyConfiguration;\n }\n return result;\n}\n\n/**\n * Parse the `RNConfigDependencyAndroid.packageName`\n */\nexport async function parsePackageNameAsync(\n androidDir: string,\n manifestPath: string | null,\n gradlePath: string | null\n): Promise<string | null> {\n if (gradlePath) {\n const gradleContents = await fs.readFile(path.join(androidDir, gradlePath), 'utf8');\n const match = gradleContents.match(/namespace\\s*[=]*\\s*[\"'](.+?)[\"']/);\n if (match) {\n return match[1];\n }\n }\n if (manifestPath) {\n const manifestContents = await fs.readFile(path.join(androidDir, manifestPath), 'utf8');\n const match = manifestContents.match(/package=\"(.+?)\"/);\n if (match) {\n return match[1];\n }\n }\n return null;\n}\n\n/**\n * Parse the Java or Kotlin class name to for `ReactPackage` or `TurboReactPackage`.\n */\nexport async function parseNativePackageClassNameAsync(\n packageRoot: string,\n androidDir: string\n): Promise<string | null> {\n const matched = await globMatchFunctorFirstAsync(\n '**/*Package.{java,kt}',\n matchNativePackageClassName,\n { cwd: androidDir }\n );\n if (matched) {\n return matched;\n }\n\n // Early return if the module is an Expo module\n if (await fileExistsAsync(path.join(packageRoot, 'expo-module.config.json'))) {\n return null;\n }\n\n return await globMatchFunctorFirstAsync('**/*.{java,kt}', matchNativePackageClassName, {\n cwd: androidDir,\n });\n}\n\nlet lazyReactPackageRegex: RegExp | null = null;\nlet lazyTurboReactPackageRegex: RegExp | null = null;\nfunction matchNativePackageClassName(filePath: string, contents: Buffer): string | null {\n const fileContents = contents.toString();\n\n // [0] Match ReactPackage\n if (!lazyReactPackageRegex) {\n lazyReactPackageRegex =\n /class\\s+(\\w+[^(\\s]*)[\\s\\w():]*(\\s+implements\\s+|:)[\\s\\w():,]*[^{]*ReactPackage/;\n }\n const matchReactPackage = fileContents.match(lazyReactPackageRegex);\n if (matchReactPackage) {\n return matchReactPackage[1];\n }\n\n // [1] Match TurboReactPackage\n if (!lazyTurboReactPackageRegex) {\n lazyTurboReactPackageRegex =\n /class\\s+(\\w+[^(\\s]*)[\\s\\w():]*(\\s+extends\\s+|:)[\\s\\w():,]*[^{]*TurboReactPackage/;\n }\n const matchTurboReactPackage = fileContents.match(lazyTurboReactPackageRegex);\n if (matchTurboReactPackage) {\n return matchTurboReactPackage[1];\n }\n\n return null;\n}\n\nexport async function parseLibraryNameAsync(\n androidDir: string,\n packageJson: any\n): Promise<string | null> {\n // [0] `codegenConfig.name` from package.json\n if (packageJson.codegenConfig?.name) {\n return packageJson.codegenConfig.name;\n }\n\n const libraryNameRegExp = /libraryName = [\"'](.+)[\"']/;\n const gradlePath = path.join(androidDir, 'build.gradle');\n // [1] `libraryName` from build.gradle\n if (await fileExistsAsync(gradlePath)) {\n const buildGradleContents = await fs.readFile(gradlePath, 'utf8');\n const match = buildGradleContents.match(libraryNameRegExp);\n if (match) {\n return match[1];\n }\n }\n\n // [2] `libraryName` from build.gradle.kts\n const gradleKtsPath = path.join(androidDir, 'build.gradle.kts');\n if (await fileExistsAsync(gradleKtsPath)) {\n const buildGradleContents = await fs.readFile(gradleKtsPath, 'utf8');\n const match = buildGradleContents.match(libraryNameRegExp);\n if (match) {\n return match[1];\n }\n }\n\n return null;\n}\n\nexport async function parseComponentDescriptorsAsync(\n packageRoot: string,\n pacakgeJson: any\n): Promise<string[]> {\n const jsRoot = pacakgeJson?.codegenConfig?.jsSrcsDir\n ? path.join(packageRoot, pacakgeJson.codegenConfig.jsSrcsDir)\n : packageRoot;\n const results = await globMatchFunctorAllAsync(\n '**/*.{js,jsx,ts,tsx}',\n matchComponentDescriptors,\n {\n cwd: jsRoot,\n ignore: ['**/node_modules/**'],\n }\n );\n\n // Filter out duplicates as it happens that libraries contain multiple outputs due to package publishing.\n // TODO: consider using \"codegenConfig\" to avoid this.\n return Array.from(new Set(results));\n}\n\nlet lazyCodegenComponentRegex: RegExp | null = null;\nfunction matchComponentDescriptors(filePath: string, contents: Buffer): string | null {\n const fileContents = contents.toString();\n\n if (!lazyCodegenComponentRegex) {\n lazyCodegenComponentRegex =\n /codegenNativeComponent(<.*>)?\\s*\\(\\s*[\"'`](\\w+)[\"'`](,?[\\s\\S]+interfaceOnly:\\s*(\\w+))?/m;\n }\n const match = fileContents.match(lazyCodegenComponentRegex);\n if (!(match?.[4] === 'true') && match?.[2]) {\n return `${match[2]}ComponentDescriptor`;\n }\n return null;\n}\n\nexport async function findGradleAndManifestAsync({\n androidDir,\n isLibrary,\n}: {\n androidDir: string;\n isLibrary: boolean;\n}): Promise<{ gradle: string | null; manifest: string | null }> {\n const globExcludes = [\n 'node_modules/**',\n '**/build/**',\n '**/debug/**',\n 'Examples/**',\n 'examples/**',\n '**/Pods/**',\n '**/sdks/hermes/android/**',\n '**/src/androidTest/**',\n '**/src/test/**',\n ];\n const gradlePattern = isLibrary ? 'build.gradle{,.kts}' : 'app/build.gradle{,.kts}';\n const [manifests, gradles] = await Promise.all([\n glob('**/AndroidManifest.xml', { cwd: androidDir, ignore: globExcludes }),\n glob(gradlePattern, { cwd: androidDir, ignore: globExcludes }),\n ]);\n const manifest = manifests.find((manifest) => manifest.includes('src/main/')) ?? manifests[0];\n const gradle = gradles[0];\n return { gradle: gradle || null, manifest: manifest || null };\n}\n"]}
|
|
@@ -104,7 +104,7 @@ async function resolveAppProjectConfigAsync(projectRoot, platform) {
|
|
|
104
104
|
if (gradle == null || manifest == null) {
|
|
105
105
|
return {};
|
|
106
106
|
}
|
|
107
|
-
const packageName = await (0, androidResolver_1.parsePackageNameAsync)(
|
|
107
|
+
const packageName = await (0, androidResolver_1.parsePackageNameAsync)(androidDir, manifest, gradle);
|
|
108
108
|
return {
|
|
109
109
|
android: {
|
|
110
110
|
packageName: packageName ?? '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactNativeConfig.js","sourceRoot":"","sources":["../../src/reactNativeConfig/reactNativeConfig.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reactNativeConfig.js","sourceRoot":"","sources":["../../src/reactNativeConfig/reactNativeConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs/promises';\nimport path from 'path';\n\nimport {\n findGradleAndManifestAsync,\n parsePackageNameAsync,\n resolveDependencyConfigImplAndroidAsync,\n} from './androidResolver';\nimport { loadConfigAsync } from './config';\nimport { resolveDependencyConfigImplIosAsync } from './iosResolver';\nimport type {\n RNConfigCommandOptions,\n RNConfigDependency,\n RNConfigReactNativeAppProjectConfig,\n RNConfigReactNativeLibraryConfig,\n RNConfigReactNativeProjectConfig,\n RNConfigResult,\n} from './reactNativeConfig.types';\nimport { getIsolatedModulesPath } from '../autolinking/utils';\nimport { fileExistsAsync } from '../fileUtils';\nimport type { SupportedPlatform } from '../types';\n\n/**\n * Create config for react-native core autolinking.\n */\nexport async function createReactNativeConfigAsync({\n platform,\n projectRoot,\n searchPaths,\n}: RNConfigCommandOptions): Promise<RNConfigResult> {\n const projectConfig = await loadConfigAsync<RNConfigReactNativeProjectConfig>(projectRoot);\n const dependencyRoots = await findDependencyRootsAsync(projectRoot, searchPaths);\n const reactNativePath = dependencyRoots['react-native'];\n\n const dependencyConfigs = await Promise.all(\n Object.entries(dependencyRoots).map(async ([name, packageRoot]) => {\n const config = await resolveDependencyConfigAsync(platform, name, packageRoot, projectConfig);\n return [name, config];\n })\n );\n const dependencyResults = Object.fromEntries<RNConfigDependency>(\n dependencyConfigs.filter(([, config]) => config != null) as Iterable<\n [string, RNConfigDependency]\n >\n );\n const projectData = await resolveAppProjectConfigAsync(projectRoot, platform);\n return {\n root: projectRoot,\n reactNativePath,\n dependencies: dependencyResults,\n project: projectData,\n };\n}\n\n/**\n * Find all dependencies and their directories from the project.\n */\nexport async function findDependencyRootsAsync(\n projectRoot: string,\n searchPaths: string[]\n): Promise<Record<string, string>> {\n const packageJson = JSON.parse(await fs.readFile(path.join(projectRoot, 'package.json'), 'utf8'));\n const dependencies = [\n ...Object.keys(packageJson.dependencies ?? {}),\n ...Object.keys(packageJson.devDependencies ?? {}),\n ];\n\n const results: Record<string, string> = {};\n // `searchPathSet` can be mutated to discover all \"isolated modules groups\", when using isolated modules\n const searchPathSet = new Set(searchPaths);\n\n for (const name of dependencies) {\n for (const searchPath of searchPathSet) {\n const packageConfigPath = path.resolve(searchPath, name, 'package.json');\n if (await fileExistsAsync(packageConfigPath)) {\n const packageRoot = path.dirname(packageConfigPath);\n results[name] = packageRoot;\n\n const maybeIsolatedModulesPath = getIsolatedModulesPath(packageRoot, name);\n if (maybeIsolatedModulesPath) {\n searchPathSet.add(maybeIsolatedModulesPath);\n }\n break;\n }\n }\n }\n\n return results;\n}\n\nexport async function resolveDependencyConfigAsync(\n platform: SupportedPlatform,\n name: string,\n packageRoot: string,\n projectConfig: RNConfigReactNativeProjectConfig | null\n): Promise<RNConfigDependency | null> {\n const libraryConfig = await loadConfigAsync<RNConfigReactNativeLibraryConfig>(packageRoot);\n const reactNativeConfig = {\n ...libraryConfig?.dependency,\n ...projectConfig?.dependencies[name],\n };\n\n if (Object.keys(libraryConfig?.platforms ?? {}).length > 0) {\n // Package defines platforms would be a platform host package.\n // The rnc-cli will skip this package.\n return null;\n }\n if (name === 'react-native') {\n // Starting from version 0.76, the `react-native` package only defines platforms\n // when @react-native-community/cli-platform-android/ios is installed.\n // Therefore, we need to manually filter it out.\n return null;\n }\n\n let platformData = null;\n if (platform === 'android') {\n platformData = await resolveDependencyConfigImplAndroidAsync(\n packageRoot,\n reactNativeConfig.platforms?.android\n );\n } else if (platform === 'ios') {\n platformData = await resolveDependencyConfigImplIosAsync(\n packageRoot,\n reactNativeConfig.platforms?.ios\n );\n }\n if (!platformData) {\n return null;\n }\n return {\n root: packageRoot,\n name,\n platforms: {\n [platform]: platformData,\n },\n };\n}\n\nexport async function resolveAppProjectConfigAsync(\n projectRoot: string,\n platform: SupportedPlatform\n): Promise<RNConfigReactNativeAppProjectConfig> {\n if (platform === 'android') {\n const androidDir = path.join(projectRoot, 'android');\n const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: false });\n if (gradle == null || manifest == null) {\n return {};\n }\n const packageName = await parsePackageNameAsync(androidDir, manifest, gradle);\n\n return {\n android: {\n packageName: packageName ?? '',\n sourceDir: path.join(projectRoot, 'android'),\n },\n };\n }\n\n if (platform === 'ios') {\n return {\n ios: {\n sourceDir: path.join(projectRoot, 'ios'),\n },\n };\n }\n\n return {};\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-modules-autolinking",
|
|
3
|
-
"version": "2.0.0-preview.
|
|
3
|
+
"version": "2.0.0-preview.2",
|
|
4
4
|
"description": "Scripts that autolink Expo modules.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"require-from-string": "^2.0.2",
|
|
49
49
|
"resolve-from": "^5.0.0"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "fc8a1408cab82e003dd2424db2994d7dea958067"
|
|
52
52
|
}
|
|
@@ -245,7 +245,11 @@ if (rootProject instanceof ProjectDescriptor) {
|
|
|
245
245
|
}
|
|
246
246
|
for (moduleAarProject in module.aarProjects) {
|
|
247
247
|
include(":${moduleAarProject.name}")
|
|
248
|
-
|
|
248
|
+
def projectDir = new File(moduleAarProject.projectDir)
|
|
249
|
+
if (!projectDir.exists()) {
|
|
250
|
+
projectDir.mkdirs()
|
|
251
|
+
}
|
|
252
|
+
project(":${moduleAarProject.name}").projectDir = projectDir
|
|
249
253
|
}
|
|
250
254
|
}
|
|
251
255
|
|
|
@@ -22,15 +22,16 @@ export async function resolveDependencyConfigImplAndroidAsync(
|
|
|
22
22
|
}
|
|
23
23
|
const androidDir = path.join(packageRoot, 'android');
|
|
24
24
|
const { gradle, manifest } = await findGradleAndManifestAsync({ androidDir, isLibrary: true });
|
|
25
|
-
if (!manifest
|
|
25
|
+
if (!manifest && !gradle) {
|
|
26
26
|
return null;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
const packageName =
|
|
30
|
-
reactNativeConfig?.packageName ||
|
|
31
|
-
|
|
30
|
+
reactNativeConfig?.packageName || (await parsePackageNameAsync(androidDir, manifest, gradle));
|
|
31
|
+
if (!packageName) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
32
34
|
const nativePackageClassName = await parseNativePackageClassNameAsync(packageRoot, androidDir);
|
|
33
|
-
|
|
34
35
|
if (!nativePackageClassName) {
|
|
35
36
|
return null;
|
|
36
37
|
}
|
|
@@ -87,18 +88,19 @@ export async function resolveDependencyConfigImplAndroidAsync(
|
|
|
87
88
|
* Parse the `RNConfigDependencyAndroid.packageName`
|
|
88
89
|
*/
|
|
89
90
|
export async function parsePackageNameAsync(
|
|
91
|
+
androidDir: string,
|
|
90
92
|
manifestPath: string | null,
|
|
91
93
|
gradlePath: string | null
|
|
92
|
-
) {
|
|
94
|
+
): Promise<string | null> {
|
|
93
95
|
if (gradlePath) {
|
|
94
|
-
const gradleContents = await fs.readFile(gradlePath, 'utf8');
|
|
96
|
+
const gradleContents = await fs.readFile(path.join(androidDir, gradlePath), 'utf8');
|
|
95
97
|
const match = gradleContents.match(/namespace\s*[=]*\s*["'](.+?)["']/);
|
|
96
98
|
if (match) {
|
|
97
99
|
return match[1];
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
if (manifestPath) {
|
|
101
|
-
const manifestContents = await fs.readFile(manifestPath, 'utf8');
|
|
103
|
+
const manifestContents = await fs.readFile(path.join(androidDir, manifestPath), 'utf8');
|
|
102
104
|
const match = manifestContents.match(/package="(.+?)"/);
|
|
103
105
|
if (match) {
|
|
104
106
|
return match[1];
|
|
@@ -146,10 +146,7 @@ export async function resolveAppProjectConfigAsync(
|
|
|
146
146
|
if (gradle == null || manifest == null) {
|
|
147
147
|
return {};
|
|
148
148
|
}
|
|
149
|
-
const packageName = await parsePackageNameAsync(
|
|
150
|
-
path.join(androidDir, manifest),
|
|
151
|
-
path.join(androidDir, gradle)
|
|
152
|
-
);
|
|
149
|
+
const packageName = await parsePackageNameAsync(androidDir, manifest, gradle);
|
|
153
150
|
|
|
154
151
|
return {
|
|
155
152
|
android: {
|