1. Publish to Component Hub API
export const manifestPublisher = ({ url, interval, onComplete, onError })
  let cancel;

  return (components = []) => {
    if (cancel) {
      cancel();
    }

    cancel = scheduler({
      file: './worker/publish-components.js',
      data: {
        url,
        components,
      },
      cwd: __dirname,
      now: true,
      every: interval || 540000, // 9 min in ms
      onComplete,
      onError,
    });

    return () => cancel();
  };
};

Usage:

const publisher = manifestPublisher({ url, interval })

let cancel = publish([ manifest1, manifest2 ])

// add another manifest to publish
cancel = publish([ manifest1, manifest2, manifest3 ])

// later
cancel()

vs. a Class

export class ManifestPublisher {
  constructor ({ url, interval, onComplete, onError }) {
    this.url = url
    this.interval = interval
    this.onComplete = onComplete
    this.onError = onError
  }

  publish (components) {
    if (this.cancel) {
      this.cancel();
    }

    this.cancel = scheduler({
      file: './worker/publish-components.js',
      data: {
        url,
        components,
      },
      cwd: __dirname,
      now: true,
      every: interval || 540000, // 9 min in ms
      onComplete,
      onError,
    });
  }

  cancel () {
    this.cancel()
  }
}

Usage:

const publisher = new ManifestPublisher({ url, interval })

publisher.publish([ manifest1, manifest2 ])

// publish another manifest
publisher.publish([ manifest1, manifest2, manifest3 ])

// later
publisher.cancel()