basis-stack/basis

View on GitHub
packages/build/src/packages/index.js

Summary

Maintainability
A
0 mins
Test Coverage
import { from } from 'rxjs';
import { mergeAll, toArray } from 'rxjs/operators';

import constants from '../tasks/constants';
import publish from './publish';
import link from './link';
import { logMessage, getPackages } from './utilities';
import compilePackagesFunc from './compile';

const allPackages = getPackages();

const runCmdForPackages = (packages, cmdOp, cb) => {

  from(packages.map(cmdOp))
    .pipe(mergeAll(),
          toArray())
    .subscribe(results => {

      results.forEach(r => { logMessage(r.message, r.success); });
      cb();
    }, err => {

      cb(err);
    });
};

export const linkPackages = cb => {

  runCmdForPackages(allPackages, p => link(p), cb);
};

export default ({ hasPackages, config, lint }) => {

  if (!hasPackages) {

    return [];
  }

  const compilePackages = {

    /* Compile nested basis packages */
    key: constants.taskKeys.compilePackages,
    func: () => compilePackagesFunc(config)
  };

  if (lint) {

    compilePackages.dependencies = [constants.taskKeys.lintPackages];
  }

  return [
    compilePackages, {

      /* Publish compiled packages to npm registry */
      key: constants.taskKeys.publishPackages,
      func: cb => {

        runCmdForPackages(allPackages, p => publish(p), cb);
      }
    }, {

      /* Link sub packages */
      key: constants.taskKeys.linkPackages,
      func: linkPackages
    }, {

      /* Unlink sub packages */
      key: constants.taskKeys.unlinkPackages,
      func: cb => {

        runCmdForPackages(allPackages, p => link(p, false), cb);
      }
    }
  ];
};