scripts/dispatch.js

const [ , , script, command ] = process.argv;
const { Builder } = require('./build');
const { Starter } = require('./start');
const { Packager } = require('./package');

/**
 * @namespace Dispatcher
 * @description - Dispatches script commands to various scripts.
 * @argument script - Script manager to use (e.g., build or package).
 * @argument command - Command argument describing exact script to run.
 */

switch(script) {
  case 'build':
    return buildApp();

  case 'package':
    return packageApp();

  case 'start':
    return startDeveloperMode();
}

/**
 * @description - Builds various production builds (e.g., Python, React).
 * @memberof Dispatcher
 */
function buildApp() {
  const builder = new Builder();

  switch(command) {
    case 'react':
      return builder.buildReact();

    case 'python':
      return builder.buildPython();

    case 'all':
      return builder.buildAll();
  }
};

/**
 * @description - Builds various installers (e.g., DMG, MSI).
 * @memberof Dispatcher
 */
function packageApp() {
  const packager = new Packager();

  switch(command) {
    case 'windows':
      return packager.packageWindows();

    case 'mac':
      return packager.packageMacOS();
  }
};

/**
 * @description - Starts developer mode of app.
 * Including; React, Electron, and Python/Flask.
 * @memberof Dispatcher
 */
function startDeveloperMode() {
  const start = new Starter();
  start.developerMode();
};