Skip to content

Commit 107b9cf

Browse files
Add license generation
1 parent fc7f54f commit 107b9cf

File tree

7 files changed

+88
-19
lines changed

7 files changed

+88
-19
lines changed

README.md

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# vue-cli-component
22
[![Npm version](https://img.shields.io/npm/v/vue-cli-plugin-component.svg?maxAge=2592000)](https://www.npmjs.com/package/vue-cli-plugin-component)
3+
[![npm](https://img.shields.io/npm/dt/vue-cli-plugin-component.svg)](https://npmjs.com/package/vue-cli-plugin-component)
34
[![MIT License](https://img.shields.io/github/license/David-Desmaisons/vue-cli-plugin-component.svg)](https://github.com/David-Desmaisons/vue-cli-plugin-component/blob/master/LICENSE)
45
> component plugin for vue-cli
56
67
![demo](./__doc__/vue-ui.png)
78

89
```
910
project
10-
│ README.md
11+
│ README.md
12+
│ LICENSE (optional)
1113
└───src
1214
│ ├── index.js
1315
│ └───components
@@ -20,14 +22,18 @@ project
2022

2123
## Features
2224

23-
* Ajust build script to only build the component. Use serve script to serve a demo page.
24-
25-
* Automatically document the component with [vue-styleguidist](https://github.com/vue-styleguidist/vue-styleguidist) and [vuedoc.md](https://gitlab.com/vuedoc/md) .
25+
* Adjust build script to only build the component. Use serve script to serve a demo page.
2626

2727
* Create a prepublishOnly script to run the build(s) before publishing the component
2828

2929
* Update README.md with component information
3030

31+
* Optional
32+
33+
* Automatically document the component with [vue-styleguidist](https://github.com/vue-styleguidist/vue-styleguidist) and [vuedoc.md](https://gitlab.com/vuedoc/md) .
34+
35+
* Create a license file for the project
36+
3137
## Scripts
3238

3339
Use build to build the component
@@ -60,18 +66,22 @@ npm run styleguide:build
6066
```
6167

6268

63-
6469
## Configuration
6570

6671
![configuration](./__doc__/configuration.png)
6772

6873

69-
**componentName:** the name of the component.
74+
* **componentName:** the name of the component.
75+
76+
* **useVueStyleguidist:** true to install [vue-styleguidist](https://github.com/vue-styleguidist/vue-styleguidist), default: true
77+
78+
* **useVueDoc:** true to install [vuedoc.md](https://gitlab.com/vuedoc/md), default: true
7079

71-
**useVueStyleguidist:** true to install [vue-styleguidist](https://github.com/vue-styleguidist/vue-styleguidist)
80+
* **addLicense** true to add a License file to the project, default: false
7281

73-
**useVueDoc:** true to install [vuedoc.md](https://gitlab.com/vuedoc/md)
82+
* **licenseName** type of the license file to create, default: MIT
7483

84+
* **copyrightHolders** Project copy holders, used when creating the license file.
7585

7686
## Injected Commands
7787

__doc__/configuration.png

10.2 KB
Loading

generator/index.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const { renameFiles, updateFile } = require('./fileHelper')
22
const readmeUpdater = require('./readmeUpdater');
3+
const licenseList = require('spdx-license-list/full');
34

45
function buildPrePublishOnly({ useVueStyleguidist, useVueDoc, useLint }) {
56
let script = useLint ? 'npm run lint && ' : ''
@@ -12,11 +13,16 @@ function buildPrePublishOnly({ useVueStyleguidist, useVueDoc, useLint }) {
1213
}
1314
return script.trim()
1415
}
16+
17+
function replaceInLicense(licenseTextTemplate, sourceText, newText){
18+
return licenseTextTemplate.replace(new RegExp(`<${sourceText}>`), newText)
19+
.replace(new RegExp(`\\[${sourceText}\\]`), newText)
20+
}
1521

16-
module.exports = (api, { componentName, useVueStyleguidist, useVueDoc, addBadges }) => {
22+
module.exports = (api, { addBadges, addLicense, componentName, copyrightHolders, licenseName, useVueDoc, useVueStyleguidist }) => {
1723

1824
const useLint = api.hasPlugin('eslint')
19-
const context = { componentName, useVueStyleguidist, useVueDoc, addBadges, useLint }
25+
const context = { addBadges, addLicense, componentName, licenseName, useLint, useVueDoc, useVueStyleguidist }
2026

2127
api.extendPackage({
2228
name: componentName,
@@ -76,5 +82,14 @@ module.exports = (api, { componentName, useVueStyleguidist, useVueDoc, addBadges
7682
const immutableFiles = ['src/components/HelloWorld.vue', 'src/index.js']
7783
renameFiles(files, /^src\//, 'example/', (file) => immutableFiles.indexOf(file) !== -1)
7884
renameFiles(files, /\/HelloWorld\./, `/${componentName}.`)
85+
86+
if (!addLicense) {
87+
return
88+
}
89+
90+
const licenseTextTemplate = licenseList[licenseName].licenseText;
91+
const year = new Date().getFullYear()
92+
const licenseText = replaceInLicense(licenseTextTemplate, 'year', year)
93+
files['LICENSE'] = replaceInLicense(licenseText, 'copyright holders', copyrightHolders)
7994
})
8095
}

generator/readmeUpdater.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function updateScriptDescription(options) {
3333
return scriptDescription
3434
}
3535

36-
module.exports = (content, { componentName, useVueDoc, useVueStyleguidist, addBadges }) => {
36+
module.exports = (content, { addBadges, addLicense, componentName, licenseName, useVueDoc, useVueStyleguidist }) => {
3737
const hasGit = hasProjectGit (process.cwd())
3838

3939
const updateInReadMe = [
@@ -49,8 +49,13 @@ module.exports = (content, { componentName, useVueDoc, useVueStyleguidist, addBa
4949
)
5050
}
5151
updateInReadMe.push(
52-
`[![Npm version](https://img.shields.io/npm/v/$1.svg?maxAge=2592000)](https://www.npmjs.com/package/$1)`,
52+
'[![Npm version](https://img.shields.io/npm/v/$1.svg?maxAge=2592000)](https://www.npmjs.com/package/$1)',
5353
);
54+
if (hasGit && addLicense){
55+
updateInReadMe.push(
56+
`[![${licenseName} License](https://img.shields.io/github/license/${userName}/$1.svg)](https://github.com/${userName}/$1/blob/master/LICENSE)`,
57+
);
58+
}
5459
}
5560

5661
updateInReadMe.push(

package-lock.json

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-cli-plugin-component",
3-
"version": "1.5.0",
3+
"version": "1.6.3",
44
"description": "vue-cli 3 plugin to create shareable component",
55
"main": "index.js",
66
"repository": {
@@ -25,7 +25,8 @@
2525
"dependencies": {
2626
"@types/node": "^10.5.2",
2727
"@vue/cli-shared-utils": "^3.0.0-rc.5",
28-
"git-user-name": "^2.0.0"
28+
"git-user-name": "^2.0.0",
29+
"spdx-license-list": "^4.1.0"
2930
},
3031
"devDependencies": {
3132
"@types/chai": "^4.1.0",

prompts.js

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
2+
const licensesInformation = require('spdx-license-list/spdx-simple.json')
3+
const licenses = licensesInformation.map(name => ({
4+
name,
5+
value: name
6+
}));
7+
18
module.exports = [
29
{
310
type: 'input',
@@ -8,18 +15,44 @@ module.exports = [
815
type: 'confirm',
916
name: 'useVueStyleguidist',
1017
message: 'Use vue-styleguidist to generate documentation?',
11-
default: true
18+
default: true,
19+
group: 'Documentation',
1220
},
1321
{
1422
type: 'confirm',
1523
name: 'useVueDoc',
1624
message: 'Use vuedoc.md to automatically generate README API section?',
17-
default: true
25+
default: true,
26+
group: 'Documentation'
1827
},
1928
{
2029
type: 'confirm',
2130
name: 'addBadges',
2231
message: 'Add project badges to README.md?',
23-
default: true
24-
}
32+
default: true,
33+
group: 'Documentation'
34+
},
35+
{
36+
type: 'confirm',
37+
name: 'addLicense',
38+
message: 'Add license?',
39+
group: 'License',
40+
default: false
41+
},
42+
{
43+
type: 'list',
44+
name: 'licenseName',
45+
when: answer => answer.addLicense,
46+
message: 'Choose a license:',
47+
group: 'License',
48+
choices: licenses,
49+
default: 'MIT'
50+
},
51+
{
52+
type: 'input',
53+
name: 'copyrightHolders',
54+
when: answer => answer.addLicense,
55+
message: 'Enter copyright holders:',
56+
group: 'License',
57+
},
2558
]

0 commit comments

Comments
 (0)