function resolveDependencies()

in src/generator.js [38:107]


function resolveDependencies(lang, config, ast) {
  const imports = ast.imports;
  const dependencies = {
    // Package AliasID : { meta, scope, package_name, client_name, client_alias }
  };
  if (!imports || !imports.length) {
    return dependencies;
  }

  const self_client_name = config.clientName
    ? config.clientName.toLowerCase()
    : config.client.name.toLowerCase();
  const libraries = config.libraries;
  const lock = readLock(config.pkgDir);
  const default_client_name = config.client.name;
  const default_model_dir = config.model.dir;

  let package_sets = [];
  let client_sets = [];
  ast.imports.forEach((item) => {
    const aliasId = item.lexeme;
    const meta = readModuleMeta(
      libraries[aliasId],
      config.pkgDir,
      lock
    );
    meta.libraries = {
      lock: lock[libraries[aliasId]],
      tag: libraries[aliasId],
      alias_id: aliasId
    };
    const scope = meta.scope;
    let package_name = meta.name;
    let client_name = default_client_name;
    let model_dir = default_model_dir;
    let lang_config = !meta[lang] ? {} : meta[lang];
    if (lang_config.package) {
      package_name = lang_config.package;
    }
    if (lang_config.clientName) {
      client_name = lang_config.clientName;
    }
    if (lang_config.modelDirName) {
      model_dir = lang_config.modelDirName;
    }
    // check package name duplication
    if (package_sets.indexOf(package_name.toLowerCase()) > 0) {
      debug.stack(`The package name (${package_name}) has been defined in ${aliasId} dara package.`);
    }
    package_sets.push(package_name.toLowerCase());

    // check client name duplication
    let client_name_lower = client_name.toLowerCase();
    let client_alias = '';
    if (client_sets.indexOf(client_name_lower) > -1 || client_name_lower === self_client_name) {
      client_alias = package_name.split('.').join('') + '->' + client_name.split('.').join('');
    } else {
      client_sets.push(client_name_lower);
    }
    dependencies[aliasId] = {
      meta,
      scope,
      package_name,
      client_name,
      client_alias,
      model_dir
    };
  });
  return dependencies;
}