UNPKG

2.19 kBJavaScriptView Raw
1const path = require('path');
2const fs = require('fs-extra');
3const Handlebars = require('handlebars');
4const log = require('fancy-log');
5
6const prompt = require('prompt');
7prompt.colors = false;
8
9const taskAdd = function ({
10 demo,
11 htmlTemplate,
12 jsTemplate,
13 liveReload,
14 suffix,
15 commonsChunk
16}) {
17
18 return function (done = () => {}) {
19
20 prompt.start();
21
22 prompt.get({
23 properties: {
24 name: {
25 description: 'Enter the NAME of demo/page you want to create',
26 pattern: /^[0-9a-zA-Z\-]+$/,
27 message: 'Name must be only letters, numbers and dashes.',
28 required: true
29 }
30 }
31 }, function (err, result) {
32
33 if (!err) {
34
35 const { name } = result;
36
37 const targetPathHtml = path.resolve(demo, `${name}.html`);
38 const targetPathJS = path.resolve(demo, `${name}.js`);
39
40 if (fs.existsSync(targetPathHtml) || fs.existsSync(targetPathJS)) {
41 done(new Error(`The file ${name}.html or ${name}.js exists. You could change a name or remove the file before creating a new one.`));
42 } else {
43
44 const templateHTML = Handlebars.compile(fs.readFileSync(htmlTemplate, 'utf-8'));
45 const templateJS = Handlebars.compile(fs.readFileSync(jsTemplate, 'utf-8'));
46
47 fs.outputFileSync(targetPathHtml, templateHTML({
48 name,
49 liveReload,
50 suffix,
51 commons: commonsChunk
52 }));
53
54 fs.outputFileSync(targetPathJS, templateJS({
55 name,
56 liveReload,
57 suffix,
58 commons: commonsChunk
59 }));
60
61 log(`Add demo/page success, you need to restart dev task to see the new created demo/page.`)
62
63 done();
64 }
65
66 } else {
67 done(err);
68 }
69
70 })
71
72 }
73
74}
75
76module.exports = taskAdd;
\No newline at end of file