All files / platform/cli/src/commands/utils findOhifExtensionsToRemoveAfterRemovingMode.js

0% Statements 0/30
0% Branches 0/8
0% Functions 0/7
0% Lines 0/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60                                                                                                                       
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;
}