diff --git a/esm.js.old b/esm.js.old new file mode 100755 index 0000000..48eaf34 --- /dev/null +++ b/esm.js.old @@ -0,0 +1,22 @@ +#! /usr/bin/env node + +const flags = require('minimist')( process.argv.slice(2) ) +const params = flags._ +delete flags._ +const moduleStr = params.shift() +const [ esmodule, exported ] = (moduleStr || '').split(':') +const isCli = process.cwd() == __dirname + +flags.verbose || flags.v && console.log( params, flags, esmodule || require('./package.json').module, exported, __dirname, isCli ) + +module.exports = +require('esm')( module, { await: true } ) +( `./${isCli && esmodule ? esmodule : require('./package.json').module}` ) + +let toCall = module.exports[ exported || 'default' ] +let returned = typeof toCall == 'function' ? toCall( flags, ...params ) : toCall +returned instanceof Promise + ? returned.then( ret=> console.log(ret), e=>console.error(e) ) + : console.log( returned ) + +// module.exports = mod diff --git a/express.js b/express.js new file mode 100644 index 0000000..1f99acb --- /dev/null +++ b/express.js @@ -0,0 +1,38 @@ +var args = require('minimist')( process.argv.slice(2) ), + express = require('express'), + morgan = require('morgan'), +// bodyParser = require('body-parser'), + static = require('serve-static'), + index = require('serve-index'), + port = args.p || args.port || 80, + app = express() + +console.log( args ) + +//CORS middleware +var allowCrossDomain = function(req, res, next) { + res.header('Access-Control-Allow-Origin', '*'); + res.header('Access-Control-Allow-Methods', 'GET'); + res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); + next(); +} + +app.use( allowCrossDomain ) +//app.engine('html', ejs.renderFile); +//app.set('views', __dirname + '/views'); + +//app.use( bodyParser ) +//app.use(express.cookieParser()); +//app.use(express.methodOverride()); +app.use( morgan('combined') ) +//app.use(express.session({ secret: 'c0ns0l3F0r3v3r' })); +//app.use(passport.initialize()); +//app.use(passport.session()); +//app.use( app.router ) +app.use( static(__dirname + '/' + args._[0]), index(__dirname + '/' + args._[0], {'icons': true}) ) + + +app.listen( port ); + +console.log( "Started static web server: " + args._[0] ) +console.log( "Server listening on Port: "+port ) diff --git a/package.json b/package.json new file mode 100644 index 0000000..7889a40 --- /dev/null +++ b/package.json @@ -0,0 +1,51 @@ +{ + "name": "express-cli", + "version": "0.1.0", + "description": "Command line tool to launch express servers with ease", + "engines": { + "node": ">=6" + }, + "bin": { + "express": "./server.js" + }, + "preferGlobal": true, + "main": "esm", + "module": "server", + "dependencies": { + "body-parser": "^1.18.2", + "colors": "^1.2.3", + "esm": "^3.0.84", + "express": "^4.16.3", + "minimist": "^1.2.0", + "morgan": "^1.9.1", + "serve-index": "^1.9.1", + "serve-static": "^1.13.2", + "tagol": "^1.0.0" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start-es": "esm server", + "start": "node server.js" + }, + "bugs": { + "url": "https://git.p2p.legal/dig/esm-cli/issues" + }, + "homepage": "https://git.p2p.legal/dig/express-cli", + "repository": { + "type": "git", + "url": "git+https://git.p2p.legal/dig/express-cli.git" + }, + "keywords": [ + "express", + "server", + "http", + "cli", + "commandline" + ], + "author": { + "name": "Thomas Di Grégorio", + "email": "dig@p2p.legal" + }, + "license": "GPL-3.0" +} diff --git a/serve-cors.js b/serve-cors.js new file mode 100644 index 0000000..4fcee56 --- /dev/null +++ b/serve-cors.js @@ -0,0 +1,8 @@ +//CORS middleware +export default (req, res, next)=> { + res.header('Access-Control-Allow-Origin', '*') + res.header('Access-Control-Allow-Methods', 'GET') + res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept") + next() +} + diff --git a/server-static.js b/server-static.js new file mode 100644 index 0000000..53f9704 --- /dev/null +++ b/server-static.js @@ -0,0 +1,58 @@ +var args = require('minimist')( process.argv.slice(2) ), + http = require('http'), + express = require('express'), + port = args.p || args.port || 80, + app = express(); + +console.log( args ); + +//CORS middleware +var allowCrossDomain = function(req, res, next) { + res.header('Access-Control-Allow-Origin', '*'); + res.header('Access-Control-Allow-Methods', 'GET'); + res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); + next(); +} + +app.use( allowCrossDomain ); +//app.engine('html', ejs.renderFile); +//app.set('views', __dirname + '/views'); +//app.use(express.static(__dirname + '/devingfx.com')); + +//express.logger.format('customLog', utils.customLog); +//app.use( allowCrossDomain ); +app.use(express.bodyParser()); +app.use(express.cookieParser()); +app.use(express.methodOverride()); +app.use(express.logger()); +app.use(express.session({ secret: 'c0ns0l3F0r3v3r' })); +//app.use( allowCrossDomain ); +//app.use(passport.initialize()); +//app.use(passport.session()); +app.use(app.router); +app.use( express.static(__dirname + '/' + args._[0]) ); + +//app.options('portfolio.json', allowCrossDomain ); + + + + + + +app.configure("development", function() { + app.use(express.errorHandler({ + dumpExceptions: true, + showStack: true + })); +}); + +app.configure("production", function() { + app.use(express.errorHandler()); +}); + +app.listen( port ); + +console.log( "Started static web server: " + args._[0] ); +console.log( "Server listening on Port: "+port ); + + diff --git a/server.es.js b/server.es.js new file mode 100755 index 0000000..c46a7f0 --- /dev/null +++ b/server.es.js @@ -0,0 +1,105 @@ +#!/usr/bin/env esm + +import 'tagol' +import 'colors' +//import minimist from 'minimist' +import express from 'express' +global.express = express +import morgan from 'morgan' +import serveCors from './serve-cors' +//import sstatic from 'serve-static' +import serveIndex from 'serve-index' +import { resolve } from 'path' + +export default async function({ + 0: folder = '.' +, h, help = h +, p, port = p || 80 +, s, statik = s +, i, index = statik && ( i || true ) +, c, cors = c +, r, routes = r +, v, verbose = v +}) +{ + +log.verbose = (ss,...pp)=> verbose && log( ss,...pp ) + +var args = { + help +, port +, statik +, index +, cors +, routes +, folder +} + +/* +console.log(args) +return; +//*/ + + +help && log `Usage: express [options] path +Options: + -h, --help Show this help + -p, --port Set the port to listen (default: 80) + -s, --static=[folder] Serve static content. If true the folder used + is '.' otherwise the given folder is used. + -i, --index Generate index when a folder is requested + -c, --cors + -r, --routes=[path] Loads an express router module + -v, --verbose Show additional informations +` +help && process.exit() + + +process.cwd( folder ) + +log.verbose `${args}o +__dirname = ${__dirname}s +process.cwd() = ${process.cwd()}s +resolve(process.cwd(),folder) = ${resolve(process.cwd(),folder)}s +` + + + +const resolved = { + static: resolve( folder, typeof statik == 'undefined' || statik === true ? '.' : statik ), + routes: resolve( folder, typeof routes == 'undefined' || routes === true ? 'routes.js' : routes ), + }, + app = express() + + +//app.engine('html', ejs.renderFile); +//app.set('views', __dirname + '/views'); + +//app.use( bodyParser ) +//app.use(express.cookieParser()); +//app.use(express.methodOverride()); +app.use( morgan('combined') ) +//app.use(express.session({ secret: 'c0ns0l3F0r3v3r' })); +//app.use(passport.initialize()); +//app.use(passport.session()); +//app.use( app.router ) + + + +cors && app.use( serveCors ) +cors && log `using ${'CORS'.cyan}s` + +statik && app.use( express.static(resolved.static), index && serveIndex(resolved.static, {'icons': true, view: 'details'}) ) +statik && log `Started static web server: +${resolved.static.cyan}s` +index && log `generating ${'index'.cyan}s pages from folders` + +//console.log( (await import(resolved.routes)).default ) +routes && app.use( '/', (await import(resolved.routes)).default ) +routes && log `Routes file loaded: ${resolved.routes.cyan}s` + +app.listen( port ) +log `Server listening on Port: ${(''+port).yellow}s` + + +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..90b2979 --- /dev/null +++ b/server.js @@ -0,0 +1,67 @@ +import 'log' +import 'colors' +import minimist from 'minimist' +import express from 'express' +global.express = express +import morgan from 'morgan' +import serveCors from './serve-cors' +//import sstatic from 'serve-static' +import serveIndex from 'serve-index' +import { resolve } from 'path' + +const args = minimist( process.argv.slice(2) ), + help = args.help || args.h, + port = args.port || args.p || 80, + statik = args.static || args.s, + index = statik && ( args.index || args.i || true ), + cors = args.cors || args.c, + routes = args.routes || args.r, + folder = args._[0] || '' + +help && log `Usage: express [options] path +Options: + -h, --help Show this help + -p, --port Set the port to listen (default: 80) + -s, --static=[folder] Serve static content. If true the folder used + is '.' otherwise the given folder is used. + -i, --index Generate index when a folder is requested + -c, --cors + -r, --routes=[path] Loads an express router module +` +help && process.exit() + +process.cwd( folder ) + +console.log( args, __dirname, process.cwd(), resolve(process.cwd(),folder) ) + + + +const resolved = { + static: resolve( folder, typeof statik == 'boolean' ? '.' : statik ), + routes: resolve( folder, typeof routes == 'boolean' ? 'routes.js' : routes ), + }, + app = express() + +cors && app.use( serveCors ) +//app.engine('html', ejs.renderFile); +//app.set('views', __dirname + '/views'); + +//app.use( bodyParser ) +//app.use(express.cookieParser()); +//app.use(express.methodOverride()); +app.use( morgan('combined') ) +//app.use(express.session({ secret: 'c0ns0l3F0r3v3r' })); +//app.use(passport.initialize()); +//app.use(passport.session()); +//app.use( app.router ) + +//console.log( (await import(resolved.routes)).default ) +routes && app.use( '/', (await import(resolved.routes)).default ) + +statik && app.use( express.static(resolved.static), index && serveIndex(resolved.static, {'icons': true, view: 'details'}) ) + +app.listen( port ) + +statik && log `Started static web server: ${resolved.static.cyan}s` +routes && log `Routes file loaded: ${resolved.routes.cyan}s` +log `Server listening on Port: ${(''+port).yellow}s`