lib/utilities/directory-for-package-name.js

'use strict';

const path = require('path');

/**
 * Derive a directory name from a package name.
 * Takes scoped packages into account.
 *
 * @method directoryForPackageName
 * @param {String} packageName
 * @return {String} Derived directory name.
 */
module.exports = function directoryForPackageName(packageName) {
  let isScoped = packageName[0] === '@' && packageName.includes('/');

  if (isScoped) {
    let slashIndex = packageName.indexOf('/');
    let scopeName = packageName.substring(1, slashIndex);
    let packageNameWithoutScope = packageName.substring(slashIndex + 1);
    let pathParts = process.cwd().split(path.sep);
    let parentDirectoryContainsScopeName = pathParts.includes(scopeName);

    if (parentDirectoryContainsScopeName) {
      return packageNameWithoutScope;
    } else {
      return `${scopeName}-${packageNameWithoutScope}`;
    }
  } else {
    return packageName;
  }
};