-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnew-module.js
executable file
·129 lines (108 loc) · 4.41 KB
/
new-module.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env node
var program = require('commander');
var fs = require('graceful-fs');
var inquirer = require('inquirer');
var colors = require('colors');
var project = require('./package.json');
var config = require('./gulp/config.js');
program
.version(project.version)
.parse(process.argv);
function replaceAll(find, replace, str) {
return str.replace(new RegExp(find, 'g'), replace);
}
function camelcase(string) {
return (string || '').toLowerCase().replace(/(\b|-)\w/g, function(match) {
return match.toUpperCase().replace(/-/, '');
});
}
function lowercase(string) {
return (string || '').toLowerCase().replace(/(\b|-)\w/g, function(match) {
return match.toLowerCase().replace(/-/, '');
});
}
function header(name) {
var output = '',
line = Array(name.length + 1).join('-');
output += '// ------------------------' + line + ' //\n';
output += '// ' + camelcase(name) + ' //\n';
output += '// ------------------------' + line + ' //';
return output;
}
// Module prompt questions
var questions = [{
name: 'name',
message: 'Module name:',
validate: function(input) {
return input !== '' ? true : 'You must enter a valid name.';
}
}, {
name: 'description',
message: 'Module description:',
validate: function(input) {
return input !== '' ? true : 'You must enter a valid description.';
}
}, {
name: 'js',
type: 'confirm',
message: 'Create javascript module?',
default: true
}, {
name: 'sass',
type: 'confirm',
message: 'Create sass module?',
default: true
}];
// Prompt user for project informations
inquirer.prompt(questions).then(function (answers) {
if (answers.js) {
var jsTemplateFile = './.templates/module.js',
jsNewFile = './src/js/modules/jquery.' + answers.name + '.js';
fs.exists(jsNewFile, function(exists) {
if (exists) {
// File already exist, exit
console.log('Error: '.red + answers.name + ' module already exists in ./src/js/modules.');
} else {
// Copy template file
fs.createReadStream(jsTemplateFile).pipe(fs.createWriteStream(jsNewFile));
// Replace module name inside template file
fs.readFile(jsNewFile, 'utf8', function(error, data) {
if (error) return console.log(error);
data = replaceAll('MODULE_NAME_LOWERCASE', lowercase(answers.name), data);
data = replaceAll('MODULE_NAME_UPPERCASE', camelcase(answers.name), data);
data = replaceAll('MODULE_DESCRIPTION', answers.description, data);
fs.writeFile(jsNewFile, data, 'utf8', function(error) {
if (error) return console.log(error);
});
});
// Confirmation message
console.log('Success: '.green + answers.name + ' javascript module successfully created in ./src/js/modules.');
}
});
}
if (answers.sass) {
var sassTemplateFile = './.templates/module.scss',
sassNewFile = './src/sass/modules/_' + answers.name + '.scss';
fs.exists(sassNewFile, function(exists) {
if (exists) {
// File already exist, exit
console.log('Error: '.red + answers.name + ' module already exists in ./src/sass/modules.');
} else {
// Copy template file
fs.createReadStream(sassTemplateFile).pipe(fs.createWriteStream(sassNewFile));
// Replace module name inside template file
fs.readFile(sassNewFile, 'utf8', function(error, data) {
if (error) return console.log(error);
data = replaceAll('HEADER', header(answers.name), data);
data = replaceAll('MODULE_NAME_LOWERCASE', lowercase(answers.name), data);
data = replaceAll('MODULE_NAME_UPPERCASE', camelcase(answers.name), data);
fs.writeFile(sassNewFile, data, 'utf8', function(error) {
if (error) return console.log(error);
});
});
// Confirmation message
console.log('Success: '.green + answers.name + ' sass module successfully created in ./src/sass/modules.');
}
});
}
});