UNPKG

4.13 kBJavaScriptView Raw
1var fs = require('fs')
2var path = require('path')
3var mkdirp = require('mkdirp')
4var txain = require('txain')
5var colors = require('colors')
6var version = require('../package.json').version
7var _ = require('underscore')
8var utils = require('./utils')
9
10module.exports = function(yargs) {
11 var argv = yargs.options({
12 'd': {
13 alias: 'directory',
14 default: process.cwd(),
15 describe: 'Directory where the new project will be created',
16 type: 'string',
17 }
18 })
19 .wrap(yargs.terminalWidth())
20 .help('help')
21 .argv
22
23 console.log('Creating project at %s', argv.directory)
24 var projectName = path.basename(argv.directory)
25
26 txain(function(callback) {
27 mkdirp(argv.directory, callback)
28 })
29 .then(function(callback) {
30 // configuration
31 var configFile = path.join(argv.directory, 'config.json')
32 var exists = fs.existsSync(configFile)
33 if (exists) return callback()
34 var data = {
35 projectName: projectName,
36 region: null,
37 api: null,
38 stage: null,
39 }
40 fs.writeFile(configFile, JSON.stringify(data, null, 2), 'utf8', callback)
41 })
42 .then(function(callback) {
43 require('./cli-region').select(callback)
44 })
45 .then(function(callback) {
46 require('./cli-api').select(callback)
47 })
48 .then(function(callback) {
49 require('./cli-stage').select(callback)
50 })
51 .then(function(callback) {
52 require('./cli-role').select(callback)
53 })
54 .then(function(callback) {
55 // directories
56 var dirs = [
57 'web/assets',
58 'web/views',
59 'web/controllers',
60 'web/libs',
61 'test',
62 ]
63 dirs = dirs.map(function(dir) {
64 return path.join(argv.directory, dir)
65 })
66 txain(dirs).each(mkdirp).end(callback)
67 })
68 .then(function(callback) {
69 // routes
70 var routesFile = path.join(argv.directory, 'web/controllers/routes.json')
71 var exists = fs.existsSync(routesFile)
72 if (exists) return callback()
73 var data = [
74 {
75 'method': 'GET',
76 'path': '/',
77 'function': 'home',
78 'handler': 'run',
79 }
80 ]
81 fs.writeFile(routesFile, JSON.stringify(data, null, 2), 'utf8', callback)
82 })
83 .then(function(callback) {
84 // home controller
85 var controllerFile = path.join(argv.directory, 'web/controllers/home.js')
86 var exists = fs.existsSync(controllerFile)
87 if (exists) return callback()
88 var code = `
89 exports.run = function(req, res, event, context) {
90 res.send('Hello world')
91 }
92 `
93 fs.writeFile(controllerFile, code, 'utf8', callback)
94 })
95 .then(function(callback) {
96 var packageJson = path.join(argv.directory, 'package.json')
97 var exists = fs.existsSync(packageJson)
98 if (exists) return callback()
99
100 var data = {
101 private: true,
102 name: projectName,
103 version: '1.0.0',
104 description: 'Node.js app made with backbeam-lambda',
105 scripts: {
106 start: 'node app',
107 test: 'NODE_ENV=test mocha --bail --reporter spec test/',
108 },
109 author: {
110 name: process.env.USER || '',
111 },
112 license: 'ISC',
113 dependencies: {
114 'aws-sdk': '2.2.3', // see http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
115 },
116 devDependencies: {
117 'mocha': '^1.21.4',
118 },
119 keywords: ['backbeam'],
120 engines: {
121 node : '0.10.36', // see http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
122 }
123 }
124 fs.writeFile(packageJson, JSON.stringify(data, null, 2), 'utf8', callback)
125 })
126 .then(function(callback) {
127 var testUtils = path.join(argv.directory, 'test', 'test-utils.js')
128 var exists = fs.existsSync(testUtils)
129 if (exists) return callback()
130
131 var code = `
132 var txain = require('txain')
133 var assert = require('assert')
134
135 var request = require('supertest')(require('../app').app)
136 exports.request = request
137 `
138 fs.writeFile(testUtils, code, 'utf8', callback)
139 })
140 .then(function(callback) {
141 console.log('Project created. Run `npm install` to install dependencies')
142 callback()
143 })
144 .end(utils.end)
145}
146
147if (module.id === require.main.id) {
148 exports.run()
149}