check-symlinks.js 1.1 KB

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