mirror of
https://github.com/atom/atom.git
synced 2026-01-14 09:27:57 -05:00
57 lines
1.2 KiB
JavaScript
57 lines
1.2 KiB
JavaScript
/** @babel */
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
module.exports = {
|
|
async enumerate() {
|
|
if (atom.inDevMode()) {
|
|
return [];
|
|
}
|
|
|
|
const duplicatePackages = [];
|
|
const names = atom.packages.getAvailablePackageNames();
|
|
for (let name of names) {
|
|
if (atom.packages.isBundledPackage(name)) {
|
|
const isDuplicatedPackage = await this.isInstalledAsCommunityPackage(
|
|
name
|
|
);
|
|
if (isDuplicatedPackage) {
|
|
duplicatePackages.push(name);
|
|
}
|
|
}
|
|
}
|
|
|
|
return duplicatePackages;
|
|
},
|
|
|
|
async isInstalledAsCommunityPackage(name) {
|
|
const availablePackagePaths = atom.packages.getPackageDirPaths();
|
|
|
|
for (let packagePath of availablePackagePaths) {
|
|
const candidate = path.join(packagePath, name);
|
|
|
|
if (fs.existsSync(candidate)) {
|
|
const realPath = await this.realpath(candidate);
|
|
if (realPath === candidate) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
realpath(path) {
|
|
return new Promise((resolve, reject) => {
|
|
fs.realpath(path, function(error, realpath) {
|
|
if (error) {
|
|
reject(error);
|
|
} else {
|
|
resolve(realpath);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
};
|