boldr/boldr-ui

View on GitHub
internal/scripts/copy-files.js

Summary

Maintainability
A
2 hrs
Test Coverage
// @flow weak
/* eslint-disable no-console */

import path from 'path';
import fse from 'fs-extra';
import flowCopySource from 'flow-copy-source';

function copyFile(file) {
  const buildPath = path.resolve(__dirname, '../../build/', path.basename(file));
  return new Promise(resolve => {
    fse.copy(file, buildPath, err => {
      if (err) throw err;
      resolve();
    });
  }).then(() => console.log(`Copied ${file} to ${buildPath}`));
}

function createPackageFile() {
  return new Promise(resolve => {
    fse.readFile(path.resolve(__dirname, '../../package.json'), 'utf8', (err, data) => {
      if (err) {
        throw err;
      }

      resolve(data);
    });
  })
    .then(data => JSON.parse(data))
    .then(packageData => {
      const {
        author,
        version,
        description,
        keywords,
        repository,
        license,
        bugs,
        homepage,
        peerDependencies,
        dependencies,
      } = packageData;

      const minimalPackage = {
        name: '@boldr/ui',
        author,
        version,
        description,
        main: './index.js',
        module: './index.es.js',
        'jsnext:main': './index.es.js',
        keywords,
        repository,
        license,
        bugs,
        homepage,
        peerDependencies,
        dependencies,
      };

      return new Promise(resolve => {
        const buildPath = path.resolve(__dirname, '../../build/package.json');
        const data = JSON.stringify(minimalPackage, null, 2);
        fse.writeFile(buildPath, data, err => {
          if (err) throw err;
          console.log(`Created package.json in ${buildPath}`);
          resolve();
        });
      });
    });
}

const files = ['README.md', 'CHANGELOG.md', 'LICENSE'];

Promise.all(files.map(file => copyFile(file))).then(() => createPackageFile());

// Copy original implementation files for flow.
flowCopySource(['src'], 'build', { verbose: true, ignore: '**/*.test.js' });