setSource(packageId, name, source, language, callback) {
    if (!this.ready) {
      return this.listComponents()
        .then(() => this.setSource(packageId, name, source, language, callback));
    }
    let promise;
    if (!registerLoader.setSource) {
      promise = Promise.reject(new Error('setSource not allowed'));
    } else {
      promise = new Promise((resolve, reject) => {
        registerLoader.setSource(this, packageId, name, source, language, (err) => {
          if (err) {
            reject(err);
            return;
          }
          resolve();
        });
      });
    }
    if (callback) {
      deprecated('Providing a callback to ComponentLoader.setSource is deprecated, use Promises');
      promise.then(() => {
        callback(null);
      }, callback);
    }
    return promise;
  }
@param {string} packageId
@param {string} name
@param {string} source
@param {string} language
@param {ErrorableCallback} [callback]
@returns {Promise<void>}