Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function runUninstallPlatform (actions, platform, project_dir, plugin_dir, plugins_dir, options) {
var pluginInfoProvider = options.pluginInfoProvider;
// If this plugin is not really installed, return (CB-7004).
if (!fs.existsSync(plugin_dir)) {
return Promise.resolve(true);
}
var pluginInfo = pluginInfoProvider.get(plugin_dir);
var plugin_id = pluginInfo.id;
// Merge cli_variables and plugin.xml variables
var variables = variableMerge.mergeVariables(plugin_dir, platform, options);
// Deps info can be passed recusively
var platformJson = PlatformJson.load(plugins_dir, platform);
var depsInfo = options.depsInfo || dependencies.generateDependencyInfo(platformJson, plugins_dir, pluginInfoProvider);
// Check that this plugin has no dependents.
var dependents = dependencies.dependents(plugin_id, depsInfo, platformJson, pluginInfoProvider);
if (options.is_top_level && dependents && dependents.length > 0) {
var msg = 'The plugin \'' + plugin_id + '\' is required by (' + dependents.join(', ') + ')';
if (options.force) {
events.emit('warn', msg + ' but forcing removal');
} else {
return Promise.reject(new CordovaError(msg + ', skipping uninstallation. (try --force if trying to update)'));
}
}
// Check how many dangling dependencies this plugin has.
var deps = depsInfo.graph.getChain(plugin_id);
module.exports.prepare = function (cordovaProject, options) {
var self = this;
var platformJson = PlatformJson.load(this.locations.root, this.platform);
var munger = new PlatformMunger(this.platform, this.locations.root, platformJson, new PluginInfoProvider());
this._config = updateConfigFilesFrom(cordovaProject.projectConfig, munger, this.locations);
// Update own www dir with project's www assets and plugins' assets and js-files
return Q.when(updateWww(cordovaProject, this.locations)).then(function () {
// update project according to config.xml changes.
return updateProjectAccordingTo(self._config, self.locations);
}).then(function () {
updateIcons(cordovaProject, path.relative(cordovaProject.root, self.locations.res));
updateSplashes(cordovaProject, path.relative(cordovaProject.root, self.locations.res));
updateFileResources(cordovaProject, path.relative(cordovaProject.root, self.locations.root));
}).then(function () {
events.emit('verbose', 'Prepared android project successfully');
});
};
function runUninstallPlatform(actions, platform, project_dir, plugin_dir, plugins_dir, options) {
var pluginInfoProvider = options.pluginInfoProvider;
// If this plugin is not really installed, return (CB-7004).
if (!fs.existsSync(plugin_dir)) {
return Q(true);
}
var pluginInfo = pluginInfoProvider.get(plugin_dir);
var plugin_id = pluginInfo.id;
// Deps info can be passed recusively
var platformJson = PlatformJson.load(plugins_dir, platform);
var depsInfo = options.depsInfo || dependencies.generateDependencyInfo(platformJson, plugins_dir, pluginInfoProvider);
// Check that this plugin has no dependents.
var dependents = dependencies.dependents(plugin_id, depsInfo, platformJson, pluginInfoProvider);
if(options.is_top_level && dependents && dependents.length > 0) {
var msg = 'The plugin \'' + plugin_id + '\' is required by (' + dependents.join(', ') + ')';
if(options.force) {
events.emit('warn', msg + ' but forcing removal');
} else {
return Q.reject( new CordovaError(msg + ', skipping uninstallation. (try --force if trying to update)') );
}
}
// Check how many dangling dependencies this plugin has.
var deps = depsInfo.graph.getChain(plugin_id);
module.exports.prepare = function (cordovaProject, options) {
var self = this;
var platformJson = PlatformJson.load(this.locations.root, this.platform);
var munger = new PlatformMunger(this.platform, this.locations.root, platformJson, new PluginInfoProvider());
this._config = updateConfigFilesFrom(cordovaProject.projectConfig, munger, this.locations);
// Update own www dir with project's www assets and plugins' assets and js-files
return Q.when(updateWww(cordovaProject, this.locations))
.then(function () {
// update project according to config.xml changes.
return updateProjectAccordingTo(self._config, self.locations);
})
.then(function () {
updateIcons(cordovaProject, path.relative(cordovaProject.root, self.locations.res));
updateSplashes(cordovaProject, path.relative(cordovaProject.root, self.locations.res));
})
.then(function () {
events.emit('verbose', 'Prepared android project successfully');
function restoreMissingPluginsForPlatform(platform, projectRoot, options) {
events.emit('verbose', 'Checking for any plugins added to the project that have not been installed in ' + platform + ' platform');
// Flow:
// 1. Compare .json file in /plugins ("old") and platforms/ ("new")
// 2. If there is any differences - merge "old" one into "new"
// 3. Reinstall plugins that are missing and was merged on previous step
var oldPlatformJson = PlatformJson.load(path.join(projectRoot, 'plugins'), platform);
var platformJson = PlatformJson.load(path.join(projectRoot, 'platforms', platform), platform);
var missingPlugins = Object.keys(oldPlatformJson.root.installed_plugins)
.concat(Object.keys(oldPlatformJson.root.dependent_plugins))
.reduce(function (result, candidate) {
if (!platformJson.isPluginInstalled(candidate))
result.push({name: candidate,
// Note: isPluginInstalled is actually returns not a boolean,
// but object which corresponds to this particular plugin
variables: oldPlatformJson.isPluginInstalled(candidate)});
return result;
}, []);
if (missingPlugins.length === 0) {
events.emit('verbose', 'No differences found between plugins added to project and installed in ' +
platform + ' platform. Continuing...');
function runInstall(actions, platform, project_dir, plugin_dir, plugins_dir, options) {
project_dir = cordovaUtil.convertToRealPathSafe(project_dir);
plugin_dir = cordovaUtil.convertToRealPathSafe(plugin_dir);
plugins_dir = cordovaUtil.convertToRealPathSafe(plugins_dir);
options = options || {};
options.graph = options.graph || new dep_graph();
options.pluginInfoProvider = options.pluginInfoProvider || new PluginInfoProvider();
var pluginInfoProvider = options.pluginInfoProvider;
var pluginInfo = pluginInfoProvider.get(plugin_dir);
var filtered_variables = {};
var platformJson = PlatformJson.load(plugins_dir, platform);
if (platformJson.isPluginInstalled(pluginInfo.id)) {
if (options.is_top_level) {
var msg = 'Plugin "' + pluginInfo.id + '" already installed on ' + platform + '.';
if (platformJson.isPluginDependent(pluginInfo.id)) {
msg += ' Making it top-level.';
platformJson.makeTopLevel(pluginInfo.id).save();
}
events.emit('log', msg);
} else {
events.emit('log', 'Dependent plugin "' + pluginInfo.id + '" already installed on ' + platform + '.');
}
// CB-11022 return true always in this case since if the plugin is installed
// we don't need to call prepare in any way
return Q(true);
function installPluginsForNewPlatform(platform, projectRoot, opts) {
// Install all currently installed plugins into this new platform.
var plugins_dir = path.join(projectRoot, 'plugins');
// Get a list of all currently installed plugins, ignoring those that have already been installed for this platform
// during prepare (installed from config.xml).
var platformJson = PlatformJson.load(plugins_dir, platform);
var plugins = cordova_util.findPlugins(plugins_dir).filter(function (plugin) {
return !platformJson.isPluginInstalled(plugin);
});
if (plugins.length === 0) {
return Q();
}
var output = path.join(projectRoot, 'platforms', platform);
var plugman = require('../plugman/plugman');
var fetchMetadata = require('../plugman/util/metadata');
// Install them serially.
return plugins.reduce(function (soFar, plugin) {
return soFar.then(function () {
events.emit('verbose', 'Installing plugin "' + plugin + '" following successful platform add of ' + platform);
plugin = path.basename(plugin);
module.exports.prepare = function (cordovaProject, options) {
var self = this;
var platformJson = PlatformJson.load(this.locations.root, this.platform);
var munger = new PlatformMunger(this.platform, this.locations.root, platformJson, new PluginInfoProvider());
this._config = updateConfigFilesFrom(cordovaProject.projectConfig, munger, this.locations);
// Get the min SDK version from config.xml
const minSdkVersion = this._config.getPreference('android-minSdkVersion', 'android');
const maxSdkVersion = this._config.getPreference('android-maxSdkVersion', 'android');
const targetSdkVersion = this._config.getPreference('android-targetSdkVersion', 'android');
let gradlePropertiesUserConfig = {};
if (minSdkVersion) gradlePropertiesUserConfig.cdvMinSdkVersion = minSdkVersion;
if (maxSdkVersion) gradlePropertiesUserConfig.cdvMaxSdkVersion = maxSdkVersion;
if (targetSdkVersion) gradlePropertiesUserConfig.cdvTargetSdkVersion = targetSdkVersion;
let gradlePropertiesParser = new GradlePropertiesParser(this.locations.root);
gradlePropertiesParser.configure(gradlePropertiesUserConfig);
function Api(platform, platformRootDir, events) {
this.platform = PLATFORM;
this.root = path.resolve(__dirname, '..');
this.events = events || ConsoleLogger.get();
// NOTE: trick to share one EventEmitter instance across all js code
require('cordova-common').events = this.events;
this._platformJson = PlatformJson.load(this.root, platform);
this._pluginInfoProvider = new PluginInfoProvider();
this._munger = new PlatformMunger(this.platform, this.root, this._platformJson, this._pluginInfoProvider);
var self = this;
this.locations = {
root: self.root,
www: path.join(self.root, 'assets/www'),
platformWww: path.join(self.root, 'platform_www'),
configXml: path.join(self.root, 'res/xml/config.xml'),
defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'),
strings: path.join(self.root, 'res/values/strings.xml'),
manifest: path.join(self.root, 'AndroidManifest.xml'),
// NOTE: Due to platformApi spec we need to return relative paths here
cordovaJs: 'bin/templates/project/assets/www/cordova.js',
cordovaJsSrc: 'cordova-js-src'