010_register_plugin.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env node
  2. /**
  3. * Push plugins to cordovaPlugins array after_plugin_add
  4. */
  5. var fs = require('fs'),
  6. packageJSON = require('../../package.json'),
  7. path = require('path');
  8. packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || [];
  9. process.env.CORDOVA_PLUGINS.split(',').forEach(function (plugin) {
  10. var configString,
  11. idRegEx,
  12. id,
  13. pluginXmlPath,
  14. pluginToAdd;
  15. if(plugin.indexOf('https') != -1 || plugin.indexOf('git') != -1) {
  16. console.log('Installing plugin from url');
  17. }
  18. if(plugin.indexOf('/') != -1) {
  19. try {
  20. pluginXmlPath = path.resolve(plugin, 'plugin.xml');
  21. console.log('got pluginXmlPath:', pluginXmlPath);
  22. if (!fs.existsSync(pluginXmlPath)) {
  23. var errorMessage = ['There was no plugin.xml file found for path: ', pluginXmlPath].join('');
  24. return;
  25. }
  26. configString = fs.readFileSync(pluginXmlPath,{encoding: 'utf8'});
  27. idRegEx = new RegExp('<plugin[^>]*id="(.*)"', 'i');
  28. id = idRegEx.exec(configString)[1]
  29. pluginToAdd = {id: id, locator: plugin};
  30. } catch(ex) {
  31. console.log('There was an error retrieving the plugin.xml filr from the 010_register_plugin.js hook', ex);
  32. }
  33. } else {
  34. pluginToAdd = plugin;
  35. }
  36. if(typeof pluginToAdd == 'string' && packageJSON.cordovaPlugins.indexOf(pluginToAdd) == -1) {
  37. packageJSON.cordovaPlugins.push(pluginToAdd);
  38. } else if (typeof pluginToAdd == 'object') {
  39. var pluginExists = false;
  40. packageJSON.cordovaPlugins.forEach(function(checkPlugin) {
  41. if(typeof checkPlugin == 'object' && checkPlugin.id == pluginToAdd.id) {
  42. pluginExists = true;
  43. }
  44. })
  45. if(!pluginExists) {
  46. packageJSON.cordovaPlugins.push(pluginToAdd);
  47. }
  48. }
  49. });
  50. fs.writeFileSync('package.json', JSON.stringify(packageJSON, null, 2));