UNPKG

1.67 kBJavaScriptView Raw
1const fs = require('fs');
2const path = require('path');
3const meta = require('user-meta');
4const parseAuthor = require('parse-author');
5const { template, packageJson } = require('mrm-core');
6const { template: smplTemplate } = require('smpltmpl');
7
8function getAuthorName(pkg) {
9 const rawName = pkg.get('author.name') || pkg.get('author') || '';
10 return parseAuthor(rawName).name;
11}
12
13function task({ license, name, email, licenseFile }) {
14 const templateFile = path.join(__dirname, `templates/${license}.md`);
15
16 if (!fs.existsSync(templateFile)) {
17 console.log(`No template for the “${license}” license found, skipping`);
18 return;
19 }
20
21 template(
22 smplTemplate(licenseFile, {
23 license,
24 }),
25 templateFile
26 )
27 .apply({
28 name,
29 email,
30 year: new Date().getFullYear(),
31 })
32 .save();
33
34 packageJson()
35 .set('license', license)
36 .save();
37}
38
39module.exports = task;
40module.exports.description = 'Adds license file';
41module.exports.getAuthorName = getAuthorName;
42
43module.exports.parameters = {
44 license: {
45 type: 'input',
46 message: 'Choose a license',
47 default: () => packageJson().get('license', 'MIT'),
48 choices: ['Apache-2.0', 'BSD-2-Clause', 'BSD-3-Clause', 'MIT', 'Unlicense'],
49 },
50 name: {
51 type: 'input',
52 message: 'Enter author name',
53 default: () => getAuthorName(packageJson()) || meta.name,
54 validate(value) {
55 return value ? true : 'Author name is required';
56 },
57 },
58 email: {
59 type: 'input',
60 message: 'Enter author email',
61 default: meta.email,
62 validate(value) {
63 return value ? true : 'Email is required';
64 },
65 },
66 licenseFile: {
67 type: 'input',
68 message: 'Enter filename for the license',
69 default: 'License.md',
70 },
71};