jelhan/croodle

View on GitHub
lib/include-api-in-build/index.js

Summary

Maintainability
A
1 hr
Test Coverage
/* eslint-env node */
/* eslint-disable no-console */
'use strict';

const { copy, ensureDir, unlink } = require('fs-extra');
const { exec } = require('child_process');

const apiPath = 'api/';
const targets = [
  'composer.json',
  'composer.lock',
  'config.default.php',
  'cron.php',
  'index.php',
  'classes/',
  'utils/',
];

module.exports = {
  name: 'include-api-in-build',

  postBuild(result) {
    let environment = this.app.env;

    // do not include app if build is for testing purposes only
    if (environment === 'test') {
      return;
    }
    let outputPath = result.directory + '/api';

    return Promise.resolve()
      .then(() => {
        return ensureDir(outputPath);
      })
      .then(() => {
        return Promise.all(
          targets.map((target) => {
            return copy(`${apiPath}/${target}`, `${outputPath}/${target}`);
          }),
        );
      })
      .then(() => {
        return new Promise((resolve, reject) => {
          exec(
            'composer install --no-dev',
            {
              cwd: outputPath,
            },
            (err) => {
              if (err) {
                reject(err);
              }

              resolve();
            },
          );
        });
      })
      .then(() => {
        return Promise.all([
          unlink(`${outputPath}/composer.json`),
          unlink(`${outputPath}/composer.lock`),
        ]);
      });
  },
};