load(name, meta, cb) {
    let metadata = meta;
    let callback = cb;
    if (typeof meta === 'function') {
      callback = meta;
      metadata = cb;
    }
    if (!this.ready) {
      return this.listComponents()
        .then(() => this.load(name, meta, cb));
    }

    const promise = new Promise((resolve, reject) => {
      if (!this.components) {
        reject(new Error(`Component ${name} not available with base ${this.baseDir}`));
        return;
      }
      let component = this.components[name];
      if (!component) {
        // Try an alias
        const keys = Object.keys(this.components);
        for (let i = 0; i < keys.length; i += 1) {
          const componentName = keys[i];
          if (componentName.split('/')[1] === name) {
            component = this.components[componentName];
            break;
          }
        }
        if (!component) {
          // Failure to load
          reject(new Error(`Component ${name} not available with base ${this.baseDir}`));
          return;
        }
      }
      resolve(component);
    })
      .then((component) => {
        if (this.isGraph(component)) {
          return this.loadGraph(name, component, metadata);
        }

        return this.createComponent(name, component, metadata)
          .then((instance) => {
            if (!instance) {
              return Promise.reject(new Error(`Component ${name} could not be loaded.`));
            }
            const inst = instance;
            if (name === 'Graph') {
              inst.baseDir = this.baseDir;
            }
            if (typeof name === 'string') {
              inst.componentName = name;
            }

            if (inst.isLegacy()) {
              deprecated(`Component ${name} uses legacy NoFlo APIs. Please port to Process API`);
            }

            this.setIcon(name, inst);
            return inst;
          });
      });
    if (callback) {
      deprecated('Providing a callback to ComponentLoader.load is deprecated, use Promises');
      promise.then((instance) => {
        callback(null, instance);
      }, callback);
    }
    return promise;
  }
@param {string} name - Component name
@param {import("fbp-graph/lib/Types").GraphNodeMetadata} meta - Node metadata
@param {any} [cb] - Legacy callback
@returns {Promise<import("./Component").Component>}