UNPKG

2.63 kBJavaScriptView Raw
1'use strict';
2
3const inquirer = require('inquirer');
4const fs = require('fs');
5const path = require('path');
6const spawn = require('child_process').spawn;
7
8const databases = ['SQLite', 'MySQL', 'PostgreSQL', 'MariaDB', 'MSSQL'];
9
10function run(cmd, args, fn) {
11 args = args || [];
12 var runner = spawn(cmd, args, {
13 stdio: "inherit"
14 });
15 runner.on('close', function(code) {
16 if (fn) {
17 fn(code);
18 }
19 });
20}
21
22module.exports = function() {
23 let questions = [{
24 type: 'input',
25 name: 'domain',
26 message: 'Domain:',
27 default: 'http://passport.example.com'
28 }, {
29 type: 'input',
30 name: 'logo',
31 message: 'Logo:',
32 default: 'http://example.com/icon.png'
33 }, {
34 type: 'list',
35 name: 'database',
36 message: 'Database:',
37 choices: databases
38 }, {
39 type: 'list',
40 name: 'session',
41 message: 'Session Store:',
42 choices: ['Memory', 'Redis']
43 }];
44
45 inquirer
46 .prompt(questions)
47 .then(function(options) {
48 let pkg = {
49 name: path.basename(process.cwd()),
50 version: '1.0.0',
51 dependencies: {}
52 };
53
54 if (options.session === 'Redis') {
55 pkg.dependencies['koa-redis'] = 'latest';
56 }
57
58 switch (options.database) {
59 case 'SQLite':
60 pkg.dependencies['sqlite3'] = 'latest';
61 break;
62 case 'MySQL':
63 pkg.dependencies['mysql'] = 'latest';
64 break;
65 case 'PostgreSQL':
66 pkg.dependencies['pg'] = 'latest';
67 pkg.dependencies['pg-hstore'] = 'latest';
68 break;
69 case 'MariaDB':
70 pkg.dependencies['mysql'] = 'latest';
71 break;
72 case 'MSSQL':
73 pkg.dependencies['tedious'] = 'latest';
74 break;
75 }
76
77 fs.writeFileSync('package.json', JSON.stringify(pkg, null, ' '), 'utf8');
78
79 console.log('Generate package.json done.');
80
81 let tpl = fs.readFileSync(path.join(__dirname, '_config.js'), 'utf8');
82
83 tpl = tpl
84 .replace(/__domain__/, options.domain)
85 .replace(/__logo__/, options.logo);
86
87 databases.push('Redis');
88
89 for (let db of databases) {
90 let r = new RegExp('/\\*' + db + '\\*/([\\s\\S]*?)/\\*' + db + '\\*/', 'gm');
91 if (options.database === db || options.session === db) {
92 tpl = tpl.replace(r, '$1\n');
93 } else {
94 tpl = tpl.replace(r, '');
95 }
96 }
97
98 tpl = tpl.replace(/^\s*[\r\n]/gm, '');
99
100 fs.writeFileSync('config.js', tpl, 'utf8');
101
102 console.log('Generate config.js done.');
103
104 run('npm', ['install'], function() {
105 console.log('npm install done.');
106 });
107 });
108};