summaryrefslogtreecommitdiff
path: root/node_modules/express/bin
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2012-09-24 16:22:07 -0400
committerJules Laplace <jules@okfoc.us>2012-09-24 16:22:07 -0400
commit686106d544ecc3b6ffd4db2b665d3bc879a58d8c (patch)
treea5b5e50237cef70e12f0745371896e96f5f6d578 /node_modules/express/bin
ok
Diffstat (limited to 'node_modules/express/bin')
-rwxr-xr-xnode_modules/express/bin/express416
1 files changed, 416 insertions, 0 deletions
diff --git a/node_modules/express/bin/express b/node_modules/express/bin/express
new file mode 100755
index 0000000..2c902c3
--- /dev/null
+++ b/node_modules/express/bin/express
@@ -0,0 +1,416 @@
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var fs = require('fs')
+ , os = require('os')
+ , exec = require('child_process').exec
+ , mkdirp = require('mkdirp');
+
+/**
+ * Framework version.
+ */
+
+var version = '2.5.8';
+
+/**
+ * Add session support.
+ */
+
+var sessions = false;
+
+/**
+ * CSS engine to utilize.
+ */
+
+var cssEngine;
+
+/**
+ * End-of-line code.
+ */
+
+var eol = os.platform
+ ? ('win32' == os.platform() ? '\r\n' : '\n')
+ : '\n';
+
+/**
+ * Template engine to utilize.
+ */
+
+var templateEngine = 'jade';
+
+/**
+ * Usage documentation.
+ */
+
+var usage = ''
+ + '\n'
+ + ' Usage: express [options] [path]\n'
+ + '\n'
+ + ' Options:\n'
+ + ' -s, --sessions add session support\n'
+ + ' -t, --template <engine> add template <engine> support (jade|ejs). default=jade\n'
+ + ' -c, --css <engine> add stylesheet <engine> support (stylus). default=plain css\n'
+ + ' -v, --version output framework version\n'
+ + ' -h, --help output help information\n'
+ ;
+
+/**
+ * Routes index template.
+ */
+
+var index = [
+ ''
+ , '/*'
+ , ' * GET home page.'
+ , ' */'
+ , ''
+ , 'exports.index = function(req, res){'
+ , ' res.render(\'index\', { title: \'Express\' })'
+ , '};'
+].join(eol);
+
+/**
+ * Jade layout template.
+ */
+
+var jadeLayout = [
+ '!!!'
+ , 'html'
+ , ' head'
+ , ' title= title'
+ , ' link(rel=\'stylesheet\', href=\'/stylesheets/style.css\')'
+ , ' body!= body'
+].join(eol);
+
+/**
+ * Jade index template.
+ */
+
+var jadeIndex = [
+ 'h1= title'
+ , 'p Welcome to #{title}'
+].join(eol);
+
+/**
+ * EJS layout template.
+ */
+
+var ejsLayout = [
+ '<!DOCTYPE html>'
+ , '<html>'
+ , ' <head>'
+ , ' <title><%= title %></title>'
+ , ' <link rel=\'stylesheet\' href=\'/stylesheets/style.css\' />'
+ , ' </head>'
+ , ' <body>'
+ , ' <%- body %>'
+ , ' </body>'
+ , '</html>'
+].join(eol);
+
+/**
+ * EJS index template.
+ */
+
+var ejsIndex = [
+ '<h1><%= title %></h1>'
+ , '<p>Welcome to <%= title %></p>'
+ ].join(eol);
+
+/**
+ * Default css template.
+ */
+
+var css = [
+ 'body {'
+ , ' padding: 50px;'
+ , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;'
+ , '}'
+ , ''
+ , 'a {'
+ , ' color: #00B7FF;'
+ , '}'
+].join(eol);
+
+/**
+ * Default stylus template.
+ */
+
+var stylus = [
+ 'body'
+ , ' padding: 50px'
+ , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif'
+ , 'a'
+ , ' color: #00B7FF'
+].join(eol);
+
+/**
+ * App template.
+ */
+
+var app = [
+ ''
+ , '/**'
+ , ' * Module dependencies.'
+ , ' */'
+ , ''
+ , 'var express = require(\'express\')'
+ , ' , routes = require(\'./routes\');'
+ , ''
+ , 'var app = module.exports = express.createServer();'
+ , ''
+ , '// Configuration'
+ , ''
+ , 'app.configure(function(){'
+ , ' app.set(\'views\', __dirname + \'/views\');'
+ , ' app.set(\'view engine\', \':TEMPLATE\');'
+ , ' app.use(express.bodyParser());'
+ , ' app.use(express.methodOverride());{sess}{css}'
+ , ' app.use(app.router);'
+ , ' app.use(express.static(__dirname + \'/public\'));'
+ , '});'
+ , ''
+ , 'app.configure(\'development\', function(){'
+ , ' app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));'
+ , '});'
+ , ''
+ , 'app.configure(\'production\', function(){'
+ , ' app.use(express.errorHandler());'
+ , '});'
+ , ''
+ , '// Routes'
+ , ''
+ , 'app.get(\'/\', routes.index);'
+ , ''
+ , 'app.listen(3000);'
+ , 'console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);'
+ , ''
+].join(eol);
+
+// Parse arguments
+
+var args = process.argv.slice(2)
+ , path = '.';
+
+while (args.length) {
+ var arg = args.shift();
+ switch (arg) {
+ case '-h':
+ case '--help':
+ abort(usage);
+ break;
+ case '-v':
+ case '--version':
+ abort(version);
+ break;
+ case '-s':
+ case '--session':
+ case '--sessions':
+ sessions = true;
+ break;
+ case '-c':
+ case '--css':
+ args.length
+ ? (cssEngine = args.shift())
+ : abort('--css requires an argument');
+ break;
+ case '-t':
+ case '--template':
+ args.length
+ ? (templateEngine = args.shift())
+ : abort('--template requires an argument');
+ break;
+ default:
+ path = arg;
+ }
+}
+
+// Generate application
+
+(function createApplication(path) {
+ emptyDirectory(path, function(empty){
+ if (empty) {
+ createApplicationAt(path);
+ } else {
+ confirm('destination is not empty, continue? ', function(ok){
+ if (ok) {
+ process.stdin.destroy();
+ createApplicationAt(path);
+ } else {
+ abort('aborting');
+ }
+ });
+ }
+ });
+})(path);
+
+/**
+ * Create application at the given directory `path`.
+ *
+ * @param {String} path
+ */
+
+function createApplicationAt(path) {
+ console.log();
+ process.on('exit', function(){
+ console.log();
+ console.log(' dont forget to install dependencies:');
+ console.log(' $ cd %s && npm install', path);
+ console.log();
+ });
+
+ mkdir(path, function(){
+ mkdir(path + '/public');
+ mkdir(path + '/public/javascripts');
+ mkdir(path + '/public/images');
+ mkdir(path + '/public/stylesheets', function(){
+ switch (cssEngine) {
+ case 'stylus':
+ write(path + '/public/stylesheets/style.styl', stylus);
+ break;
+ default:
+ write(path + '/public/stylesheets/style.css', css);
+ }
+ });
+
+ mkdir(path + '/routes', function(){
+ write(path + '/routes/index.js', index);
+ });
+
+ mkdir(path + '/views', function(){
+ switch (templateEngine) {
+ case 'ejs':
+ write(path + '/views/layout.ejs', ejsLayout);
+ write(path + '/views/index.ejs', ejsIndex);
+ break;
+ case 'jade':
+ write(path + '/views/layout.jade', jadeLayout);
+ write(path + '/views/index.jade', jadeIndex);
+ break;
+ }
+ });
+
+ // CSS Engine support
+ switch (cssEngine) {
+ case 'stylus':
+ app = app.replace('{css}', eol + ' app.use(require(\'stylus\').middleware({ src: __dirname + \'/public\' }));');
+ break;
+ default:
+ app = app.replace('{css}', '');
+ }
+
+ // Session support
+ app = app.replace('{sess}', sessions
+ ? eol + ' app.use(express.cookieParser());' + eol + ' app.use(express.session({ secret: \'your secret here\' }));'
+ : '');
+
+ // Template support
+ app = app.replace(':TEMPLATE', templateEngine);
+
+ // package.json
+ var json = '{' + eol;
+ json += ' "name": "application-name"' + eol;
+ json += ' , "version": "0.0.1"' + eol;
+ json += ' , "private": true' + eol;
+ json += ' , "dependencies": {' + eol;
+ json += ' "express": "' + version + '"' + eol;
+ if (cssEngine) json += ' , "' + cssEngine + '": ">= 0.0.1"' + eol;
+ if (templateEngine) json += ' , "' + templateEngine + '": ">= 0.0.1"' + eol;
+ json += ' }' + eol;
+ json += '}';
+
+
+ write(path + '/package.json', json);
+ write(path + '/app.js', app);
+ });
+}
+
+/**
+ * Check if the given directory `path` is empty.
+ *
+ * @param {String} path
+ * @param {Function} fn
+ */
+
+function emptyDirectory(path, fn) {
+ fs.readdir(path, function(err, files){
+ if (err && 'ENOENT' != err.code) throw err;
+ fn(!files || !files.length);
+ });
+}
+
+/**
+ * echo str > path.
+ *
+ * @param {String} path
+ * @param {String} str
+ */
+
+function write(path, str) {
+ fs.writeFile(path, str);
+ console.log(' \x1b[36mcreate\x1b[0m : ' + path);
+}
+
+/**
+ * Prompt confirmation with the given `msg`.
+ *
+ * @param {String} msg
+ * @param {Function} fn
+ */
+
+function confirm(msg, fn) {
+ prompt(msg, function(val){
+ fn(/^ *y(es)?/i.test(val));
+ });
+}
+
+/**
+ * Prompt input with the given `msg` and callback `fn`.
+ *
+ * @param {String} msg
+ * @param {Function} fn
+ */
+
+function prompt(msg, fn) {
+ // prompt
+ if (' ' == msg[msg.length - 1]) {
+ process.stdout.write(msg);
+ } else {
+ console.log(msg);
+ }
+
+ // stdin
+ process.stdin.setEncoding('ascii');
+ process.stdin.once('data', function(data){
+ fn(data);
+ }).resume();
+}
+
+/**
+ * Mkdir -p.
+ *
+ * @param {String} path
+ * @param {Function} fn
+ */
+
+function mkdir(path, fn) {
+ mkdirp(path, 0755, function(err){
+ if (err) throw err;
+ console.log(' \033[36mcreate\033[0m : ' + path);
+ fn && fn();
+ });
+}
+
+/**
+ * Exit with the given `str`.
+ *
+ * @param {String} str
+ */
+
+function abort(str) {
+ console.error(str);
+ process.exit(1);
+}