You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

update_dependencies.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /* eslint-disable guard-for-in, no-continue */
  2. /* global __dirname */
  3. const fs = require('fs');
  4. const path = require('path');
  5. const semver = require('semver');
  6. const pathToPackageJSON = path.resolve(__dirname, '../../../package.json');
  7. const packageJSON = require(pathToPackageJSON);
  8. const RNSDKpackageJSON = require(path.resolve(__dirname, './package.json'));
  9. /**
  10. * Updates dependencies from the app package.json with the peer dependencies of the RNSDK package.json.
  11. */
  12. function updateDependencies() {
  13. let updated = false;
  14. for (const key in RNSDKpackageJSON.peerDependencies) {
  15. if (!packageJSON.dependencies.hasOwnProperty(key)) {
  16. if (packageJSON.devDependencies.hasOwnProperty('@react-native/metro-config')) {
  17. continue;
  18. }
  19. packageJSON.dependencies[key] = RNSDKpackageJSON.peerDependencies[key];
  20. updated = true;
  21. }
  22. if (!semver.valid(packageJSON.dependencies[key])
  23. && packageJSON.dependencies[key] !== RNSDKpackageJSON.peerDependencies[key]) {
  24. packageJSON.dependencies[key] = RNSDKpackageJSON.peerDependencies[key];
  25. updated = true;
  26. console.log(`
  27. ⚠️We changed ${key} version number from ${packageJSON.dependencies[key]} to ${RNSDKpackageJSON.peerDependencies[key]}`
  28. );
  29. continue;
  30. }
  31. if (semver.satisfies(RNSDKpackageJSON.peerDependencies[key], `=${packageJSON.dependencies[key]}`)) {
  32. continue;
  33. }
  34. if (semver.satisfies(RNSDKpackageJSON.peerDependencies[key], `>${packageJSON.dependencies[key]}`)) {
  35. packageJSON.dependencies[key] = RNSDKpackageJSON.peerDependencies[key];
  36. updated = true;
  37. console.log(`${key} is now set to ${RNSDKpackageJSON.peerDependencies[key]}`);
  38. }
  39. if (!semver.valid(RNSDKpackageJSON.peerDependencies[key])
  40. && RNSDKpackageJSON.peerDependencies[key].includes('github')
  41. && packageJSON.dependencies[key] !== RNSDKpackageJSON.peerDependencies[key]) {
  42. packageJSON.dependencies[key] = RNSDKpackageJSON.peerDependencies[key];
  43. updated = true;
  44. console.log(
  45. `A fix for ${key} is available on ${RNSDKpackageJSON.peerDependencies[key]}.
  46. This is now set on your end.`
  47. );
  48. }
  49. }
  50. packageJSON.overrides = packageJSON.overrides || {};
  51. for (const key in RNSDKpackageJSON.overrides) {
  52. if (!packageJSON.overrides.hasOwnProperty(key)) {
  53. packageJSON.overrides[key] = RNSDKpackageJSON.overrides[key];
  54. updated = true;
  55. }
  56. }
  57. if (!updated) {
  58. console.log('All your dependencies are up to date!');
  59. return;
  60. }
  61. console.log(`
  62. =========================
  63. 🚀 Your project was updated!
  64. 🛠 Make sure you run npm install
  65. 📱 If you are building for iOS run cd ios && pod install to link them.
  66. =========================
  67. `);
  68. packageJSON.dependencies = Object.keys(packageJSON.dependencies)
  69. .sort()
  70. .reduce((item, itemKey) => {
  71. item[itemKey] = packageJSON.dependencies[itemKey];
  72. return item;
  73. }, {});
  74. fs.writeFileSync(pathToPackageJSON, JSON.stringify(packageJSON, null, 2));
  75. console.log(
  76. 'All needed dependencies have been updated. \nPlease run npm install.'
  77. );
  78. }
  79. updateDependencies();