UNPKG

8.44 kBJavaScriptView Raw
1'use strict';
2
3var isValid = require('is-valid-app');
4
5module.exports = function(app) {
6 if (!isValid(app, 'generate-license')) return;
7
8 /**
9 * Plugins
10 */
11
12 app.use(require('generate-defaults'));
13
14 /**
15 * Generate a GNU Affero General Public License v3.0 `LICENSE`
16 * file in the current working directory.
17 *
18 * ```sh
19 * $ gen license:agpl-3.0
20 * $ gen license:agpl-3.0 --dest ./docs
21 * $ gen dest license:agpl-3.0
22 * ```
23 * @name agpl-3.0
24 * @api public
25 */
26
27 app.task('agpl-3.0', { silent: true }, function() {
28 return file(app, 'agpl-3.0');
29 });
30
31 /**
32 * Generate an Apache License 2.0 `LICENSE`
33 * file in the current working directory.
34 *
35 * ```sh
36 * $ gen license:apache-2.0
37 * $ gen license:apache-2.0 --dest ./docs
38 * $ gen dest license:apache-2.0
39 * ```
40 * @name apache-2.0
41 * @api public
42 */
43
44 app.task('apache-2.0', { silent: true }, function() {
45 return file(app, 'apache-2.0');
46 });
47
48 /**
49 * Generate an Artistic License 2.0 `LICENSE`
50 * file in the current working directory.
51 *
52 * ```sh
53 * $ gen license:artistic-2.0
54 * $ gen license:artistic-2.0 --dest ./docs
55 * $ gen dest license:artistic-2.0
56 * ```
57 * @name artistic-2.0
58 * @api public
59 */
60
61 app.task('artistic-2.0', { silent: true }, function() {
62 return file(app, 'artistic-2.0');
63 });
64
65 /**
66 * Generate a BSD 2-clause "Simplified" License `LICENSE`
67 * file in the current working directory.
68 *
69 * ```sh
70 * $ gen license:bsd-2-clause
71 * $ gen license:bsd-2-clause --dest ./docs
72 * $ gen dest license:bsd-2-clause
73 * ```
74 * @name bsd-2-clause
75 * @api public
76 */
77
78 app.task('bsd-2-clause', { silent: true }, function() {
79 return file(app, 'bsd-2-clause');
80 });
81
82 /**
83 * Generate a BSD 3-clause "New" or "Revised" License `LICENSE`
84 * file in the current working directory.
85 *
86 * ```sh
87 * $ gen license:bsd-3-clause
88 * $ gen license:bsd-3-clause --dest ./docs
89 * $ gen dest license:bsd-3-clause
90 * ```
91 * @name bsd-3-clause
92 * @api public
93 */
94
95 app.task('bsd-3-clause', { silent: true }, function() {
96 return file(app, 'bsd-3-clause');
97 });
98
99 /**
100 * Generate a Creative Commons Zero v1.0 Universal `LICENSE`
101 * file in the current working directory.
102 *
103 * ```sh
104 * $ gen license:cc0-1.0
105 * $ gen license:cc0-1.0 --dest ./docs
106 * $ gen dest license:cc0-1.0
107 * ```
108 * @name cc0-1.0
109 * @api public
110 */
111
112 app.task('cc0-1.0', { silent: true }, function() {
113 return file(app, 'cc0-1.0');
114 });
115
116 /**
117 * Generate an Eclipse Public License 1.0 `LICENSE`
118 * file in the current working directory.
119 *
120 * ```sh
121 * $ gen license:epl-1.0
122 * $ gen license:epl-1.0 --dest ./docs
123 * $ gen dest license:epl-1.0
124 * ```
125 * @name epl-1.0
126 * @api public
127 */
128
129 app.task('epl-1.0', { silent: true }, function() {
130 return file(app, 'epl-1.0');
131 });
132
133 /**
134 * Generate a GNU General Public License v2.0 `LICENSE`
135 * file in the current working directory.
136 *
137 * ```sh
138 * $ gen license:gpl-2.0
139 * $ gen license:gpl-2.0 --dest ./docs
140 * $ gen dest license:gpl-2.0
141 * ```
142 * @name gpl-2.0
143 * @api public
144 */
145
146 app.task('gpl-2.0', { silent: true }, function() {
147 return file(app, 'gpl-2.0');
148 });
149
150 /**
151 * Generate a GNU General Public License v3.0 `LICENSE`
152 * file in the current working directory.
153 *
154 * ```sh
155 * $ gen license:gpl-3.0
156 * $ gen license:gpl-3.0 --dest ./docs
157 * $ gen dest license:gpl-3.0
158 * ```
159 * @name gpl-3.0
160 * @api public
161 */
162
163 app.task('gpl-3.0', { silent: true }, function() {
164 return file(app, 'gpl-3.0');
165 });
166
167 /**
168 * Generate a ISC License `LICENSE`
169 * file in the current working directory.
170 *
171 * ```sh
172 * $ gen license:isc
173 * $ gen license:isc --dest ./docs
174 * $ gen dest license:isc
175 * ```
176 * @name isc
177 * @api public
178 */
179
180 app.task('isc', { silent: true }, function() {
181 return file(app, 'isc');
182 });
183
184 /**
185 * Generate a GNU Lesser General Public License v2.1 `LICENSE`
186 * file in the current working directory.
187 *
188 * ```sh
189 * $ gen license:lgpl-2.1
190 * $ gen license:lgpl-2.1 --dest ./docs
191 * $ gen dest license:lgpl-2.1
192 * ```
193 * @name lgpl-2.1
194 * @api public
195 */
196
197 app.task('lgpl-2.1', { silent: true }, function() {
198 return file(app, 'lgpl-2.1');
199 });
200
201 /**
202 * Generate a GNU Lesser General Public License v3.0 `LICENSE.lesser`
203 * file in the current working directory.
204 *
205 * This will also generate a GNU General Public License v3.0 `LICENSE`
206 * file in the current working directory.
207 *
208 * ```sh
209 * $ gen license:lgpl-3.0
210 * $ gen license:lgpl-3.0 --dest ./docs
211 * $ gen dest license:lgpl-3.0
212 * ```
213 * @name lgpl-3.0
214 * @api public
215 */
216
217 app.task('lgpl-3.0', ['gpl-3.0'], function() {
218 return file(app, 'lgpl-3.0');
219 });
220
221 /**
222 * Generate a MIT License `LICENSE`
223 * file in the current working directory.
224 *
225 * ```sh
226 * $ gen license:mit
227 * $ gen license:mit --dest ./docs
228 * $ gen dest license:mit
229 * ```
230 * @name mit
231 * @api public
232 */
233
234 app.task('mit', { silent: true }, function() {
235 return file(app, 'mit');
236 });
237
238 /**
239 * Generate a Mozilla Public License 2.0 `LICENSE`
240 * file in the current working directory.
241 *
242 * ```sh
243 * $ gen license:mpl-2.0
244 * $ gen license:mpl-2.0 --dest ./docs
245 * $ gen dest license:mpl-2.0
246 * ```
247 * @name mpl-2.0
248 * @api public
249 */
250
251 app.task('mpl-2.0', { silent: true }, function() {
252 return file(app, 'mpl-2.0');
253 });
254
255 /**
256 * Generate a The Unlicense `UNLICENSE`
257 * file in the current working directory.
258 *
259 * ```sh
260 * $ gen license:unlicense
261 * $ gen license:unlicense --dest ./docs
262 * $ gen dest license:unlicense
263 * ```
264 * @name unlicense
265 * @api public
266 */
267
268 app.task('unlicense', { silent: true }, function() {
269 return file(app, 'unlicense');
270 });
271
272 /**
273 * Prompts the user to choose the template to use for generating a `LICENSE`
274 * file in the current working directory. This task is also aliased as `choose-license`
275 * to provide a semantic name for API usage (e.g. `app.generate('choose-license', cb)`).
276 *
277 * ```sh
278 * $ gen license
279 * $ gen license --dest ./docs
280 * $ gen dest license
281 * # or
282 * $ gen license:choose
283 * $ gen license:choose --dest ./docs
284 * $ gen dest license:choose
285 * ```
286 * @name license
287 * @api public
288 */
289
290 app.task('choose', ['choose-license']);
291 app.task('license', ['choose-license']);
292 app.task('choose-license', { silent: true }, function(callback) {
293 app.questions.list('licenses', 'Which license do you want to write?', {
294 default: 12, // <= index of the default license
295 choices: [
296 { name: ['Apache License 2.0'], value: 'apache-2.0' },
297 { name: ['Artistic License 2.0'], value: 'artistic-2.0' },
298 { name: ['BSD 2-clause "Simplified" License'], value: 'bsd-2-clause' },
299 { name: ['BSD 3-clause "New" or "Revised" License'], value: 'bsd-3-clause' },
300 { name: ['Creative Commons Zero v1.0 Universal'], value: 'cc0-1.0' },
301 { name: ['Eclipse Public License 1.0'], value: 'epl-1.0' },
302 { name: ['GNU Affero General Public License v3.0'], value: 'agpl-3.0' },
303 { name: ['GNU General Public License v2.0'], value: 'gpl-2.0' },
304 { name: ['GNU General Public License v3.0'], value: 'gpl-3.0' },
305 { name: ['GNU Lesser General Public License v2.1'], value: 'lgpl-2.1' },
306 { name: ['GNU Lesser General Public License v3.0'], value: 'lgpl-3.0' },
307 { name: ['ISC License'], value: 'isc' },
308 { name: ['MIT License'], value: 'mit' },
309 { name: ['Mozilla Public License 2.0'], value: 'mpl-2.0' },
310 { name: ['The Unlicense'], value: 'unlicense' }
311 ]
312 });
313
314 app.ask('licenses', { save: false }, function(err, answers) {
315 if (err) return callback(err);
316 app.build(answers.licenses, callback);
317 });
318 });
319
320 /**
321 * Alias for the [license](#license) task, to allow this generator to be
322 * run with the following command:
323 *
324 * ```sh
325 * $ gen license
326 * ```
327 * @name default
328 * @api public
329 */
330
331 app.task('default', { silent: true }, ['choose-license']);
332};
333
334/**
335 * Generate a file
336 */
337
338function file(app, name) {
339 return app.src(`templates/${name}.tmpl`, { cwd: __dirname })
340 .pipe(app.renderFile('*'))
341 .pipe(app.conflicts(app.cwd))
342 .pipe(app.dest(app.cwd));
343}