hasDeep(name) {
    if (this.namespace.has(name)) { return { found: true, path: [this] }; }

    if (this.reexports.has(name)) {
      const reexports = this.reexports.get(name);
      const imported = reexports.getImport();

      // if import is ignored, return explicit 'null'
      if (imported == null) { return { found: true, path: [this] }; }

      // safeguard against cycles, only if name matches
      if (imported.path === this.path && reexports.local === name) {
        return { found: false, path: [this] };
      }

      const deep = imported.hasDeep(reexports.local);
      deep.path.unshift(this);

      return deep;
    }

    // default exports must be explicitly re-exported (#328)
    if (name !== 'default') {
      for (const dep of this.dependencies) {
        const innerMap = dep();
        if (innerMap == null) { return { found: true, path: [this] }; }
        // todo: report as unresolved?
        if (!innerMap) { continue; }

        // safeguard against cycles
        if (innerMap.path === this.path) { continue; }

        const innerValue = innerMap.hasDeep(name);
        if (innerValue.found) {
          innerValue.path.unshift(this);
          return innerValue;
        }
      }
    }

    return { found: false, path: [this] };
  }
ensure that imported name fully resolves.
@param  {string} name
@return {{ found: boolean, path: ExportMap[] }}