{"version":3,"file":"Package.js","sourceRoot":"","sources":["../../src/android/Package.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs-extra';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createAndroidManifestPlugin, withAppBuildGradle } from '../plugins/android-plugins';\nimport { withDangerousMod } from '../plugins/core-plugins';\nimport * as WarningAggregator from '../utils/warnings';\nimport { AndroidManifest } from './Manifest';\nimport { getAppBuildGradle, getMainApplicationAsync } from './Paths';\n\nexport const withPackageManifest = createAndroidManifestPlugin(\n setPackageInAndroidManifest,\n 'withPackageManifest'\n);\n\nexport const withPackageGradle: ConfigPlugin = config => {\n return withAppBuildGradle(config, config => {\n if (config.modResults.language === 'groovy') {\n config.modResults.contents = setPackageInBuildGradle(config, config.modResults.contents);\n } else {\n WarningAggregator.addWarningAndroid(\n 'android-package',\n `Cannot automatically configure app build.gradle if it's not groovy`\n );\n }\n return config;\n });\n};\n\nexport const withPackageRefactor: ConfigPlugin = config => {\n return withDangerousMod(config, [\n 'android',\n async config => {\n await renamePackageOnDisk(config, config.modRequest.projectRoot);\n return config;\n },\n ]);\n};\n\nexport function getPackage(config: Pick) {\n return config.android?.package ?? null;\n}\n\nfunction getPackageRoot(projectRoot: string) {\n return path.join(projectRoot, 'android', 'app', 'src', 'main', 'java');\n}\n\nasync function getCurrentPackageName(projectRoot: string) {\n const packageRoot = getPackageRoot(projectRoot);\n const mainApplication = await getMainApplicationAsync(projectRoot);\n const packagePath = path.dirname(mainApplication.path);\n const packagePathParts = path.relative(packageRoot, packagePath).split(path.sep).filter(Boolean);\n\n return packagePathParts.join('.');\n}\n\n// NOTE(brentvatne): this assumes that our MainApplication.java file is in the root of the package\n// this makes sense for standard react-native projects but may not apply in customized projects, so if\n// we want this to be runnable in any app we need to handle other possibilities\nexport async function renamePackageOnDisk(\n config: Pick,\n projectRoot: string\n) {\n const newPackageName = getPackage(config);\n if (newPackageName === null) {\n return;\n }\n\n const currentPackageName = await getCurrentPackageName(projectRoot);\n if (currentPackageName === newPackageName) {\n return;\n }\n\n // Set up our paths\n const packageRoot = getPackageRoot(projectRoot);\n const currentPackagePath = path.join(packageRoot, ...currentPackageName.split('.'));\n const newPackagePath = path.join(packageRoot, ...newPackageName.split('.'));\n\n // Create the new directory\n fs.mkdirpSync(newPackagePath);\n\n // Move everything from the old directory over\n globSync('**/*', { cwd: currentPackagePath }).forEach(relativePath => {\n const filepath = path.join(currentPackagePath, relativePath);\n if (fs.lstatSync(filepath).isFile()) {\n fs.moveSync(filepath, path.join(newPackagePath, relativePath));\n } else {\n fs.mkdirpSync(filepath);\n }\n });\n\n // Remove the old directory recursively from com/old/package to com/old and com,\n // as long as the directories are empty\n const oldPathParts = currentPackageName.split('.');\n while (oldPathParts.length) {\n const pathToCheck = path.join(packageRoot, ...oldPathParts);\n try {\n const files = fs.readdirSync(pathToCheck);\n if (files.length === 0) {\n fs.rmdirSync(pathToCheck);\n }\n } finally {\n oldPathParts.pop();\n }\n }\n\n const filesToUpdate = [\n ...globSync('**/*', { cwd: newPackagePath, absolute: true }),\n path.join(projectRoot, 'android', 'app', 'BUCK'),\n ];\n // Replace all occurrences of the path in the project\n filesToUpdate.forEach((filepath: string) => {\n try {\n if (fs.lstatSync(filepath).isFile()) {\n let contents = fs.readFileSync(filepath).toString();\n contents = contents.replace(new RegExp(currentPackageName, 'g'), newPackageName);\n fs.writeFileSync(filepath, contents);\n }\n } catch {}\n });\n}\n\nexport function setPackageInBuildGradle(config: Pick, buildGradle: string) {\n const packageName = getPackage(config);\n if (packageName === null) {\n return buildGradle;\n }\n\n const pattern = new RegExp(`applicationId ['\"].*['\"]`);\n return buildGradle.replace(pattern, `applicationId '${packageName}'`);\n}\n\nexport function setPackageInAndroidManifest(\n config: Pick,\n androidManifest: AndroidManifest\n) {\n const packageName = getPackage(config);\n\n if (packageName) {\n androidManifest.manifest.$.package = packageName;\n } else {\n delete androidManifest.manifest.$.package;\n }\n\n return androidManifest;\n}\n\nexport async function getApplicationIdAsync(projectRoot: string): Promise {\n const buildGradlePath = getAppBuildGradle(projectRoot);\n if (!(await fs.pathExists(buildGradlePath))) {\n return null;\n }\n const buildGradle = await fs.readFile(buildGradlePath, 'utf8');\n const matchResult = buildGradle.match(/applicationId ['\"](.*)['\"]/);\n // TODO add fallback for legacy cases to read from AndroidManifest.xml\n return matchResult?.[1] ?? null;\n}\n"]}