500tech/angular-kick

View on GitHub
lib/commands/new.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

const path    = require('path');
const fs      = require('fs-extra');
const copy    = require('cpr');
const ROOT    = path.resolve(__dirname, '../..');
const replace = require('replace');
const prompt  = require('readline-sync').question;
const Logger  = require('../logger');
const Utils   = require('../utils');
const FSUtils = require('../fs-utils');
const message = require('../messages');
const Format  = require('../format');
const setup   = require('../commands/setup');

module.exports = function () {
  let appName = Format.toConstName(process.argv[3]);
  let noSetup = (process.argv[4] || '').toLowerCase();

  noSetup = (noSetup === '--no-setup' || noSetup === '-ns');
  appName = Utils.ensureName('application', appName);

  const appFolderName = Format.toFolderName(appName);

  if (FSUtils.exists(appFolderName)) {
    Logger.log(message.new.alreadyExists(appName));

    const answer = prompt(`${message.new.overrideQuestion} ${message.yesNo}`);

    switch (answer.toLowerCase()) {
      case 'yes':
      case 'y':
        fs.removeSync(Format.toFolderName(appName));
        break;
      default:
        return Logger.warn(message.new.didNotOverride);
    }
  }

  Logger.log('Creating new application: '.white + appName.white);

  copy(path.join(ROOT, 'templates', 'angular' ,'app'), appFolderName, () => {
    Logger.directoryTree(appFolderName);

    // Correctly handle dot-files
    ['gitignore', 'npmrc', 'eslintrc', 'eslintignore'].forEach((filename) => {
      let filePath = path.join(appFolderName, filename);
      fs.renameSync(filePath, filePath.replace(filename, `.${filename}`));
    });

    replace({
      regex: "%APP_NAME%",
      replacement: appName,
      paths: [appFolderName],
      recursive: true,
      silent: true
    });

    Logger.blankLine();

    if (noSetup) {
      Logger.done();
      return;
    }

    process.chdir(appFolderName);
    setup();
  });
};