apogeu/apogeu

View on GitHub
src/downloadSource.js

Summary

Maintainability
A
35 mins
Test Coverage
const debug = require('debug')('apogeu:download');
const path = require('path');
const fs = require('fs');
const request = require('request');
const unzip = require('unzip');
const createDir = require('./createDir');

module.exports = (projectFolder, api = false) => new Promise((resolve, reject) => {
  debug('downloading sources');

  request('https://github.com/apogeu/apogeu-structure/archive/master.zip')
    .pipe(unzip.Parse())
    .on('entry', (entry) => {
      if (entry.type === 'Directory') return entry.autodrain();

      const filePath = path.join(projectFolder, entry.path.replace('apogeu-structure-master/', ''));
      const isView = filePath.split('/').map(val => ['views', 'assets', 'public'].includes(val)).includes(true);
      if (api && isView) return;
      createDir(path.dirname(filePath));
      entry
        .pipe(fs.createWriteStream(filePath))
        .on('error', reject);
    })
    .on('close', resolve)
    .on('error', reject);
});