forked from hughsk/module-generator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
executable file
·117 lines (99 loc) · 2.98 KB
/
index.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
#!/usr/bin/env node
var prompt = require('inquirer').prompt
var readdirp = require('readdirp')
var conf = require('npmconf')
var xtend = require('xtend')
var dotty = require('dotty')
var path = require('path')
var fs = require('fs')
var target = process.cwd()
getParams(function(err, params) {
if (err) throw err
readdirp({
root: path.join(__dirname, 'templates')
}).on('data', function(file) {
var dest = path.resolve(target, file.path)
if (fs.existsSync(dest)) {
return console.log('ignoring: ' + file.path)
}
fs.readFile(file.fullPath, 'utf8', function(err, content) {
if (err) throw err
content = render(content, params)
if (file.name.match(/\.json$/g)) {
content = JSON.stringify(JSON.parse(content), null, 2)
}
fs.writeFile(dest, content)
})
})
})
function render(template, params) {
return template.replace(/\{\{([^}]+)}}/g, function(_, name) {
return dotty.get(params, name)
})
}
function getParams(done) {
conf.load({}, function(err, config) {
if (err) return done(err)
var data = {
user: {
name: config.get('init.author.name')
, site: config.get('init.author.url')
, email: config.get('init.author.email')
, github: config.get('init.author.github')
, username: config.get('username')
}
}
if (!data.user.username) return bail('npm login')
if (!data.user.name) return bail('npm config set init.author.name "Your Name"')
if (!data.user.site) return bail('npm config set init.author.url "http://example.com"')
if (!data.user.email) return bail('npm config set init.author.email "[email protected]"')
if (!data.user.github) return bail('npm config set init.author.github "your-github-handle"')
prompt([
{
'name': 'name'
, 'message': 'Module name'
, 'default': path.basename(target)
},
{
'name': 'description'
, 'message': 'Module description'
},
{
'name': 'tags'
, 'message': 'Module tags:'
},
{
'name': 'stability'
, 'type': 'list'
, 'message': 'Module stability:'
, 'default': 'experimental'
, 'choices': [
'deprecated'
, 'experimental'
, 'unstable'
, 'stable'
, 'frozen'
, 'locked'
]
}
], function(results) {
if (err) return done(err)
results.name = dequote(results.name)
results.description = dequote(results.description)
results.tags = JSON.stringify(results.tags.split(',').map(function(str) {
return dequote(str).trim()
}).filter(Boolean), null, 2)
done(null, xtend(results, data))
})
})
}
function bail(cmd) {
console.log('')
console.log('Missing configuration option, please run the following using your own value:')
console.log('')
console.log(' > ' + cmd)
console.log('')
}
function dequote(str) {
return str.replace(/\"+/g, '\\"')
}