angular-cli/packages/@angular/cli/ember-cli/lib/tasks/create-and-step-into-directory.js

56 lines
1.4 KiB
JavaScript

'use strict';
// Creates a directory with the name directoryName in cwd and then sets cwd to
// this directory.
var Promise = require('../ext/promise');
var fs = require('fs');
var mkdir = Promise.denodeify(fs.mkdir);
var Task = require('../models/task');
var SilentError = require('silent-error');
function existsSync(path) {
try {
fs.accessSync(path);
return true;
}
catch (e) {
return false;
}
}
module.exports = Task.extend({
// Options: String directoryName, Boolean: dryRun
warnDirectoryAlreadyExists: function warnDirectoryAlreadyExists() {
var message = 'Directory \'' + this.directoryName + '\' already exists.';
return new SilentError(message);
},
run: function(options) {
var directoryName = this.directoryName = options.directoryName;
if (options.dryRun) {
return new Promise(function(resolve, reject) {
if (existsSync(directoryName)) {
return reject(this.warnDirectoryAlreadyExists());
}
resolve();
}.bind(this));
}
return mkdir(directoryName)
.catch(function(err) {
if (err.code === 'EEXIST') {
throw this.warnDirectoryAlreadyExists();
} else {
throw err;
}
}.bind(this))
.then(function() {
var cwd = process.cwd();
process.chdir(directoryName);
return { initialDirectory: cwd };
});
}
});