UNPKG

2.17 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const program = require('commander');
4const request = require('request');
5const fs = require('fs');
6const path = require('path');
7const { mkdir, mv, rm, pwd } = require('shelljs');
8const extract = require('extract-zip');
9const logger = require('./lib/logger');
10const validate = require('./lib/validators');
11const version = require('./package.json').version;
12
13const DEFAULT_REPO = 'https://github.com/mdyd-dev/directory-structure';
14const DEFAULT_BRANCH = 'master';
15
16const TMP_DIR = path.normalize(path.resolve(process.cwd(), '.tmp'));
17const TMP_PATH = path.normalize(path.resolve(TMP_DIR, 'directory-structure.zip'));
18
19const emptyTemp = () => rm('-rf', `${TMP_DIR}/*`);
20const createTemp = () => mkdir('-p', TMP_DIR);
21const removeTemp = () => rm('-rf', TMP_DIR);
22const repoNameFrom = () => program.url.split('/').pop();
23const dirExists = dir => fs.existsSync(path.join(process.cwd(), dir));
24const moveStructureToDestination = branch => {
25 const EXTRACTED_STRUCTURE = path.normalize(path.resolve(TMP_DIR, `${repoNameFrom()}-${branch}`, '*'));
26 return mv('-f', EXTRACTED_STRUCTURE, pwd());
27};
28
29const downloadZip = ({ url, branch }) => {
30 logger.Info(`Downloading ${branch} branch from ${url} repository`);
31 const zipfileUrl = `${url}/archive/${branch}.zip`;
32 return request(zipfileUrl).pipe(fs.createWriteStream(TMP_PATH));
33};
34
35const extractZip = ({ branch }) => {
36 extract(TMP_PATH, { dir: TMP_DIR }, error => {
37 if (error) {
38 logger.Error('Zip extraction failed. ', error);
39 }
40
41 moveStructureToDestination(branch);
42
43 logger.Info('Directory structure created in your file system.');
44
45 removeTemp();
46 });
47};
48
49const init = () => {
50 validate.url(program.url);
51 createTemp();
52 emptyTemp();
53
54 if (dirExists('marketplace_builder') || dirExists('modules')) {
55 logger.Error('Diretory structure already exists. Operation aborted.');
56 }
57
58 downloadZip(program).on('close', () => extractZip(program));
59};
60
61program
62 .version(version)
63 .option('--url <url>', 'theme github repository url', DEFAULT_REPO)
64 .option('--branch <branch>', 'branch where the theme is located', DEFAULT_BRANCH);
65
66program.parse(process.argv);
67
68init();