60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
import { readPluginConfigFile } from './private/index.js';
|
|
import getYarnInfo from './getYarnInfo.js';
|
|
|
|
export default async function findOhifExtensionsToRemoveAfterRemovingMode(removedModeYarnInfo) {
|
|
const pluginConfig = readPluginConfigFile();
|
|
|
|
if (!pluginConfig) {
|
|
// No other modes or extensions, no action item.
|
|
return [];
|
|
}
|
|
|
|
const { modes, extensions } = pluginConfig;
|
|
|
|
const registeredExtensions = extensions.map(extension => extension.packageName);
|
|
// TODO this is not a function
|
|
const ohifExtensionsOfMode = Object.keys(removedModeYarnInfo.peerDependencies).filter(
|
|
peerDependency => registeredExtensions.includes(peerDependency)
|
|
);
|
|
|
|
const ohifExtensionsUsedInOtherModes = ohifExtensionsOfMode.map(packageName => {
|
|
return {
|
|
packageName,
|
|
used: false,
|
|
};
|
|
});
|
|
|
|
// Check if other modes use each extension used by this mode
|
|
const otherModes = modes.filter(mode => mode.packageName !== removedModeYarnInfo.name);
|
|
|
|
for (let i = 0; i < otherModes.length; i++) {
|
|
const mode = otherModes[i];
|
|
const yarnInfo = await getYarnInfo(mode.packageName);
|
|
|
|
const peerDependencies = yarnInfo.peerDependencies;
|
|
|
|
if (!peerDependencies) {
|
|
continue;
|
|
}
|
|
|
|
for (let j = 0; j < ohifExtensionsUsedInOtherModes.length; j++) {
|
|
const ohifExtension = ohifExtensionsUsedInOtherModes[j];
|
|
if (ohifExtension.used) {
|
|
// Already accounted that we can't delete this, so don't waste effort
|
|
return;
|
|
}
|
|
|
|
if (Object.keys(peerDependencies).includes(ohifExtension.packageName)) {
|
|
ohifExtension.used = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Return list of now unused extensions
|
|
const ohifExtensionsToRemove = ohifExtensionsUsedInOtherModes
|
|
.filter(ohifExtension => !ohifExtension.used)
|
|
.map(ohifExtension => ohifExtension.packageName);
|
|
|
|
return ohifExtensionsToRemove;
|
|
}
|