1 | var path = require('path')
|
2 | var metadata = require('read-metadata')
|
3 | var exists = require('fs').existsSync
|
4 | var getGitUser = require('./git-user')
|
5 | var validateName = require('validate-npm-package-name')
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | module.exports = function options (name, dir) {
|
15 | var opts = getMetadata(dir)
|
16 |
|
17 | setDefault(opts, 'name', name)
|
18 | setValidateName(opts)
|
19 |
|
20 | var author = getGitUser()
|
21 | if (author) {
|
22 | setDefault(opts, 'author', author)
|
23 | }
|
24 |
|
25 | return opts
|
26 | }
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | function getMetadata (dir) {
|
36 | var json = path.join(dir, 'meta.json')
|
37 | var js = path.join(dir, 'meta.js')
|
38 | var opts = {}
|
39 |
|
40 | if (exists(json)) {
|
41 | opts = metadata.sync(json)
|
42 | } else if (exists(js)) {
|
43 | var req = require(path.resolve(js))
|
44 | if (req !== Object(req)) {
|
45 | throw new Error('meta.js needs to expose an object')
|
46 | }
|
47 | opts = req
|
48 | }
|
49 |
|
50 | return opts
|
51 | }
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | function setDefault (opts, key, val) {
|
62 | if (opts.schema) {
|
63 | opts.prompts = opts.schema
|
64 | delete opts.schema
|
65 | }
|
66 | var prompts = opts.prompts || (opts.prompts = {})
|
67 | if (!prompts[key] || typeof prompts[key] !== 'object') {
|
68 | prompts[key] = {
|
69 | 'type': 'string',
|
70 | 'default': val
|
71 | }
|
72 | } else {
|
73 | prompts[key]['default'] = val
|
74 | }
|
75 | }
|
76 |
|
77 | function setValidateName (opts) {
|
78 | var name = opts.prompts.name
|
79 | var customValidate = name.validate
|
80 | name.validate = function (name) {
|
81 | var its = validateName(name)
|
82 | if (!its.validForNewPackages) {
|
83 | var errors = (its.errors || []).concat(its.warnings || [])
|
84 | return 'Sorry, ' + errors.join(' and ') + '.'
|
85 | }
|
86 | if (typeof customValidate === 'function') return customValidate(name)
|
87 | return true
|
88 | }
|
89 | }
|