react-native-scanbot-sdk
Version:
Scanbot Document and Barcode Scanner SDK React Native Plugin for Android and iOS
52 lines (45 loc) • 1.95 kB
text/typescript
import { ConfigPlugin, WarningAggregator } from '@expo/config-plugins';
import { withProjectBuildGradle } from '@expo/config-plugins/build/plugins/android-plugins';
import { mergeContents } from '@expo/config-plugins/build/utils/generateCode';
import { ScanbotConfigPlugin } from './pluginTypes';
export const withAndroidMavenURLs: ConfigPlugin<Pick<ScanbotConfigPlugin, 'mavenURLs'>> = (
config,
{ mavenURLs }
) => {
if (mavenURLs) {
config = withProjectBuildGradle(config, (gradleProps) => {
try {
gradleProps.modResults.contents = addMavenRepo(gradleProps.modResults.contents);
} catch (error: any) {
WarningAggregator.addWarningAndroid(
'react-native-scanbot-sdk',
`Could not add maven URL to project build.gradle. Please insert the following\n` +
'maven { url "https://nexus.scanbot.io/nexus/content/repositories/releases/" }\n' +
'maven { url "https://nexus.scanbot.io/nexus/content/repositories/snapshots/" }\n' +
error.message ?? ''
);
}
return gradleProps;
});
}
return config;
};
export const addMavenRepo = (projectBuildGradle: string) => {
const regex = new RegExp(/(?=allprojects\s*\{\s*\s*repositories\s*)[\s\S]*/, 'gm');
const allProjectRepositories = projectBuildGradle.match(regex);
if (allProjectRepositories && allProjectRepositories.length > 0) {
const merged = mergeContents({
src: allProjectRepositories[0],
newSrc:
' maven { url "https://nexus.scanbot.io/nexus/content/repositories/releases/" }\n' +
' maven { url "https://nexus.scanbot.io/nexus/content/repositories/snapshots/" }',
tag: 'react-native-scanbot-sdk',
anchor: new RegExp('repositories {', 'gm'),
offset: 1,
comment: '//',
}).contents;
return projectBuildGradle.replace(regex, merged);
} else {
throw new Error('Could not find project repositories');
}
};