react-native-legal
Version:
Acknowledge OSS libraries used in your React Native app
91 lines (90 loc) • 3.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.declareAboutLibrariesPluginUtil = declareAboutLibrariesPluginUtil;
exports.applyAndConfigureAboutLibrariesPluginUtil = applyAndConfigureAboutLibrariesPluginUtil;
exports.addListActivityUtil = addListActivityUtil;
const licenses_1 = require("@callstack/licenses");
/**
* Applies Gradle Plugin Portal & AboutLibraries Gradle plugin repositories (if needed) inside root build.gradle
*/
function declareAboutLibrariesPluginUtil(androidBuildGradleContent) {
if (!androidBuildGradleContent.match(PLUGIN_CLASSPATH)?.length) {
// Add Gradle Plugin Portal repository if it's not included
if (!androidBuildGradleContent.match(GRADLE_PLUGIN_PORTAL_URL)?.length) {
androidBuildGradleContent = androidBuildGradleContent.replace(/repositories\s?{/, `repositories {\n maven { url = uri("${GRADLE_PLUGIN_PORTAL_URL}") }`);
console.log('Gradle Plugin Portal repository - ADDED');
}
else {
console.log('Gradle Plugin Portal repository already added - SKIP');
}
// Declare the AboutLibraries plugin
androidBuildGradleContent = androidBuildGradleContent.replace(/dependencies\s?{/, `dependencies {\n classpath("${PLUGIN_CLASSPATH}:${PLUGIN_VERSION}")`);
console.log('About Libraries Gradle Plugin repository - ADDED');
}
else {
console.log('About Libraries Gradle Plugin already added - SKIP');
}
return androidBuildGradleContent;
}
/**
* Applies and configures AboutLibraries Grale plugin (if needed) inside app's build.gradle
*/
function applyAndConfigureAboutLibrariesPluginUtil(androidAppBuildGradleContent) {
// Apply plugin
const applyPluginBlockRegex = new RegExp(`apply\\s+plugin:\\s+['"]${PLUGIN_APPLY_BLOCK_IDENTIFIER}['"]`);
if (!androidAppBuildGradleContent.match(applyPluginBlockRegex)?.length) {
androidAppBuildGradleContent += `\n${PLUGIN_APPLY_BLOCK}`;
console.log('About Libraries Gradle Plugin - APPLIED');
}
else {
console.log('About Libraries Gradle Plugin already applied - SKIP');
}
// Configure plugin
const pluginConfigRegex = /aboutLibraries {/;
if (!androidAppBuildGradleContent.match(pluginConfigRegex)?.length) {
androidAppBuildGradleContent += '\n\naboutLibraries {\n configPath = "config"\n prettyPrint = true\n}\n';
console.log('About Libraries Gradle Plugin - CONFIGURED');
}
else {
console.log('About Libraries Gradle Plugin already configured - SKIP');
}
return androidAppBuildGradleContent;
}
/**
* adds a list activity to the list of application's activities
*/
function addListActivityUtil(activities) {
const listActivity = prepareListActivity();
if (!licenses_1.MiscUtils.arrayIncludesObject(activities, listActivity)) {
activities?.push(listActivity);
console.log('About Libraries activity - ADDED');
}
else {
console.log('About Libraries activity already added - SKIP');
}
return activities;
}
/**
* This JS object will evaluate to the following XML content:
*
* <activity
* android:name="com.reactnativelegal.ReactNativeLegalActivity"
* android:exported="false"
* android:launchMode="singleTask"
* />
*/
function prepareListActivity() {
return {
$: {
'android:name': PLUGIN_ACTIVITY,
'android:exported': 'false',
'android:launchMode': 'singleTask',
},
};
}
const GRADLE_PLUGIN_PORTAL_URL = 'https://plugins.gradle.org/m2';
const PLUGIN_ACTIVITY = 'com.reactnativelegal.ReactNativeLegalActivity';
const PLUGIN_APPLY_BLOCK = "apply plugin: 'com.mikepenz.aboutlibraries.plugin'";
const PLUGIN_APPLY_BLOCK_IDENTIFIER = 'com.mikepenz.aboutlibraries.plugin';
const PLUGIN_CLASSPATH = 'com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin';
const PLUGIN_VERSION = '11.6.3';