Compare commits

...

1 Commits
master ... wip

Author SHA1 Message Date
dig 45dd036ab8 wip 2021-09-30 14:28:32 +02:00
7 changed files with 349 additions and 0 deletions

22
esm.js.old Executable file
View File

@ -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

38
express.js Normal file
View File

@ -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 )

51
package.json Normal file
View File

@ -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"
}

8
serve-cors.js Normal file
View File

@ -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()
}

58
server-static.js Normal file
View File

@ -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 );

105
server.es.js Executable file
View File

@ -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`
}

67
server.js Normal file
View File

@ -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`