expo-srcpush
Version:
Expo module for Source Push, a service for over-the-air updates in React Native applications.
46 lines (40 loc) • 2.1 kB
text/typescript
import { ConfigPlugin, withAppBuildGradle } from 'expo/config-plugins'
import { PluginConfigType } from '../pluginConfig'
/**
* Update `<project>/build.gradle` by adding the codepush.gradle file
* as an additional build task definition underneath react.gradle
*/
function applyImplementation(appBuildGradle: string) {
const codePushImplementation = `apply from: new File(["node", "--print", "require.resolve('@srcpush/react-native-code-push/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/android/codepush.gradle"`;
// Make sure the project does not have the dependency already
if (!appBuildGradle.includes(codePushImplementation)) {
const reactNativeFileClassGradleInclude = `'apply from: new File(reactNativeRoot, "react.gradle")`;
if (appBuildGradle.includes(reactNativeFileClassGradleInclude)) {
return appBuildGradle.replace(
reactNativeFileClassGradleInclude,
`${reactNativeFileClassGradleInclude}\n${codePushImplementation}`
);
}
const reactNativeRawGradleInclude = `apply from: "../../node_modules/react-native/react.gradle"`;
if (appBuildGradle.includes(reactNativeRawGradleInclude)) {
return appBuildGradle.replace(
reactNativeRawGradleInclude,
`${reactNativeRawGradleInclude}\n${codePushImplementation}`
);
}
const reactNative71Include = `apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");`;
if (appBuildGradle.includes(reactNative71Include)) {
return appBuildGradle.replace(
reactNative71Include,
`${reactNative71Include}\n${codePushImplementation}`
);
}
}
return appBuildGradle;
}
export const withAndroidBuildscriptDependency: ConfigPlugin<PluginConfigType> = (config: any, _props: PluginConfigType) => {
return withAppBuildGradle(config, (config: any) => {
config.modResults.contents = applyImplementation(config.modResults.contents)
return config
})
}