@ -14,14 +14,28 @@ const flatten = require('reduce-flatten')
const cli = commandLineArgs ( cliOptions . definitions )
const cli = commandLineArgs ( cliOptions . definitions )
const usage = cli . getUsage ( cliOptions . usageData )
const usage = cli . getUsage ( cliOptions . usageData )
const stored = loadConfig ( 'local-web-server' )
const stored = loadConfig ( 'local-web-server' )
const options = collectOptions ( )
let options
let isHttps = false
if ( options . misc . help ) stop ( usage , 0 )
if ( options . misc . config ) stop ( JSON . stringify ( options . server , null , ' ' ) , 0 )
try {
options = collectOptions ( )
} catch ( err ) {
stop ( [ ` [red]{Error}: ${ err . message } ` , usage ] , 1 )
return
}
validateOptions ( options )
if ( options . misc . help ) {
stop ( usage , 0 )
} else if ( options . misc . config ) {
stop ( JSON . stringify ( options . server , null , ' ' ) , 0 )
} else {
const valid = validateOptions ( options )
if ( ! valid ) {
/* gracefully end the process */
return
}
const app = localWebServer ( {
const app = localWebServer ( {
static : {
static : {
root : options . server . directory ,
root : options . server . directory ,
options : {
options : {
@ -46,15 +60,14 @@ const app = localWebServer({
rewrite : options . server . rewrite ,
rewrite : options . server . rewrite ,
verbose : options . server . verbose ,
verbose : options . server . verbose ,
mocks : options . server . mocks
mocks : options . server . mocks
} )
} )
if ( options . server . https ) {
if ( options . server . https ) {
options . server . key = path . resolve ( __dirname , '..' , 'ssl' , '127.0.0.1.key' )
options . server . key = path . resolve ( __dirname , '..' , 'ssl' , '127.0.0.1.key' )
options . server . cert = path . resolve ( __dirname , '..' , 'ssl' , '127.0.0.1.crt' )
options . server . cert = path . resolve ( __dirname , '..' , 'ssl' , '127.0.0.1.crt' )
}
}
let isHttps = false
if ( options . server . key && options . server . cert ) {
if ( options . server . key && options . server . cert ) {
const https = require ( 'https' )
const https = require ( 'https' )
const fs = require ( 'fs' )
const fs = require ( 'fs' )
isHttps = true
isHttps = true
@ -66,13 +79,14 @@ if (options.server.key && options.server.cert) {
const server = https . createServer ( serverOptions , app . callback ( ) )
const server = https . createServer ( serverOptions , app . callback ( ) )
server . listen ( options . server . port , onServerUp )
server . listen ( options . server . port , onServerUp )
} else {
} else {
app . listen ( options . server . port , onServerUp )
app . listen ( options . server . port , onServerUp )
}
}
}
function stop ( msgs , exitCode ) {
function stop ( msgs , exitCode ) {
arrayify ( msgs ) . forEach ( msg => console . error ( ansi . format ( msg ) ) )
arrayify ( msgs ) . forEach ( msg => console . error ( ansi . format ( msg ) ) )
process . exit ( exitCode )
process . exitCode = exitCode
}
}
function onServerUp ( ) {
function onServerUp ( ) {
@ -96,11 +110,7 @@ function collectOptions () {
let options = { }
let options = { }
/* parse command line args */
/* parse command line args */
try {
options = cli . parse ( )
options = cli . parse ( )
} catch ( err ) {
stop ( [ ` [red]{Error}: ${ err . message } ` , usage ] , 1 )
}
const builtIn = {
const builtIn = {
port : 8000 ,
port : 8000 ,
@ -129,10 +139,14 @@ function parseRewriteRules (rules) {
}
}
function validateOptions ( options ) {
function validateOptions ( options ) {
let valid = true
function invalid ( msg ) {
function invalid ( msg ) {
return ` [red underline]{Invalid:} [bold]{ ${ msg } } `
return ` [red underline]{Invalid:} [bold]{ ${ msg } } `
}
}
if ( ! t . isNumber ( options . server . port ) ) {
if ( ! t . isNumber ( options . server . port ) ) {
stop ( [ invalid ( ` --port must be numeric [value= ${ options . server . port } ] ` ) , usage ] , 1 )
stop ( [ invalid ( ` --port must be numeric ` ) , usage ] , 1 )
valid = false
}
}
return valid
}
}