1 | const fs = require('fs');
|
2 | const path = require('path');
|
3 | const meta = require('user-meta');
|
4 | const parseAuthor = require('parse-author');
|
5 | const { template, packageJson } = require('mrm-core');
|
6 | const { template: smplTemplate } = require('smpltmpl');
|
7 |
|
8 | function getAuthorName(pkg) {
|
9 | const rawName = pkg.get('author.name') || pkg.get('author') || '';
|
10 | return parseAuthor(rawName).name;
|
11 | }
|
12 |
|
13 | function 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 |
|
39 | module.exports = task;
|
40 | module.exports.description = 'Adds license file';
|
41 | module.exports.getAuthorName = getAuthorName;
|
42 |
|
43 | module.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 | };
|