check-symlinks.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const fs = require('fs');
  2. const path = require('path');
  3. const utils = require('./lib/utils');
  4. if (process.platform !== 'darwin') {
  5. console.log('Not checking symlinks on non-darwin platform');
  6. process.exit(0);
  7. }
  8. const appPath = path.resolve(__dirname, '..', '..', 'out', utils.getOutDir(), 'Electron.app');
  9. const visited = new Set();
  10. const traverse = (p) => {
  11. if (visited.has(p)) return;
  12. visited.add(p);
  13. if (!fs.statSync(p).isDirectory()) return;
  14. for (const child of fs.readdirSync(p)) {
  15. const childPath = path.resolve(p, child);
  16. let realPath;
  17. try {
  18. realPath = fs.realpathSync(childPath);
  19. } catch (err) {
  20. if (err.path) {
  21. console.error('Detected an invalid symlink');
  22. console.error('Source:', childPath);
  23. let link = fs.readlinkSync(childPath);
  24. if (!link.startsWith('.')) {
  25. link = `../${link}`;
  26. }
  27. console.error('Target:', path.resolve(childPath, link));
  28. process.exit(1);
  29. } else {
  30. throw err;
  31. }
  32. }
  33. traverse(realPath);
  34. }
  35. };
  36. traverse(appPath);