diff --git a/README.md b/README.md index c0bee08..33ce800 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ For the examples below, we assume we're in a project directory looking like this └── package.json ``` -All paths/routes are specified using [express syntax](http://expressjs.com/guide/routing.html#route-paths). +All paths/routes are specified using [express syntax](http://expressjs.com/guide/routing.html#route-paths). To run the example projects linked below, clone the project, move into the example directory specified, run `ws`. ### Static site @@ -30,6 +30,8 @@ $ ws serving at http://localhost:8000 ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/simple). + ### Single Page Application You're building a web app with client-side routing, so mark `index.html` as the SPA. @@ -41,6 +43,8 @@ By default, typical SPA urls (e.g. `/user/1`, `/login`) would return `404 Not Fo *If a static file at the requested path exists (e.g. `/css/style.css`) then serve it, if it does not (e.g. `/login`) then serve the specified SPA and handle the route client-side.* +[Example](https://github.com/75lb/local-web-server/tree/master/example/spa). + ### Access Control By default, access to all files is allowed (including dot files). Use `--forbid` to establish a blacklist: @@ -49,6 +53,8 @@ $ ws --forbid '*.json' '*.yml' serving at http://localhost:8000 ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/forbid). + ### URL rewriting Your application requested `/css/style.css` but it's stored at `/build/css/style.css`. To avoid a 404 you need a rewrite rule: @@ -86,6 +92,8 @@ Map local requests for repo data to the Github API: $ ws --rewrite '/:user/repos/:name -> https://api.github.com/repos/:user/:name' ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/rewrite). + ### Stored config Use the same port and blacklist every time? Persist it to `package.json`: @@ -160,6 +168,8 @@ You can set additional mime-type/extension mappings, or override the defaults by } ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/mime-override). + #### Log Visualisation Instructions for how to visualise log output using goaccess, logstalgia or gltail [here](https://github.com/75lb/local-web-server/blob/master/doc/visualisation.md). @@ -210,6 +220,11 @@ serving at http://localhost:8100 ## API Reference + +* [local-web-server](#module_local-web-server) + * [localWebServer([options])](#exp_module_local-web-server--localWebServer) ⏏ + * [~rewriteRule](#module_local-web-server--localWebServer..rewriteRule) + ### localWebServer([options]) ⏏ Returns a Koa application @@ -217,19 +232,49 @@ Returns a Koa application **Kind**: Exported function **Params** - [options] object - options - - [.static] object - koajs/static config + - [.static] object - koa-static config - [.root] string - root directory - - [.options] string - options + - [.options] string - [options](https://github.com/koajs/static#options) - [.serveIndex] object - koa-serve-index config - [.path] string - root directory - - [.options] string - options - - [.forbid] Array.<string> - a list of forbidden routes. + - [.options] string - [options](https://github.com/expressjs/serve-index#options) + - [.forbid] Array.<string> - A list of forbidden routes, each route being an [express route-path](http://expressjs.com/guide/routing.html#route-paths). + - [.spa] string - specify an SPA file to catch requests for everything but static assets. + - [.log] object - [morgan](https://github.com/expressjs/morgan) config + - [.format] string - [log format](https://github.com/expressjs/morgan#predefined-formats) + - [.options] object - [options](https://github.com/expressjs/morgan#options) + - [.compress] boolean - Serve gzip-compressed resources, where applicable + - [.mime] object - A list of mime-type overrides, passed directly to [mime.define()](https://github.com/broofa/node-mime#mimedefine) + - [.rewrite] [Array.<rewriteRule>](#module_local-web-server--localWebServer..rewriteRule) - One or more rewrite rules + - [.verbose] boolean - Print detailed output, useful for debugging **Example** ```js const localWebServer = require('local-web-server') localWebServer().listen(8000) ``` + +#### localWebServer~rewriteRule +The `from` and `to` routes are specified using [express route-paths](http://expressjs.com/guide/routing.html#route-paths) + +**Kind**: inner typedef of [localWebServer](#exp_module_local-web-server--localWebServer) +**Properties** + +| Name | Type | Description | +| --- | --- | --- | +| from | string | request route | +| to | string | target route | + +**Example** +```json +{ + "rewrite": [ + { "from": "/css/*", "to": "/build/styles/$1" }, + { "from": "/npm/*", "to": "http://registry.npmjs.org/$1" }, + { "from": "/:user/repos/:name", "to": "https://api.github.com/repos/:user/:name" } + ] +} +``` * * * diff --git a/jsdoc2md/README.hbs b/jsdoc2md/README.hbs index cb4b35a..6d954d2 100644 --- a/jsdoc2md/README.hbs +++ b/jsdoc2md/README.hbs @@ -20,7 +20,7 @@ For the examples below, we assume we're in a project directory looking like this └── package.json ``` -All paths/routes are specified using [express syntax](http://expressjs.com/guide/routing.html#route-paths). +All paths/routes are specified using [express syntax](http://expressjs.com/guide/routing.html#route-paths). To run the example projects linked below, clone the project, move into the example directory specified, run `ws`. ### Static site @@ -30,6 +30,8 @@ $ ws serving at http://localhost:8000 ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/simple). + ### Single Page Application You're building a web app with client-side routing, so mark `index.html` as the SPA. @@ -41,6 +43,8 @@ By default, typical SPA urls (e.g. `/user/1`, `/login`) would return `404 Not Fo *If a static file at the requested path exists (e.g. `/css/style.css`) then serve it, if it does not (e.g. `/login`) then serve the specified SPA and handle the route client-side.* +[Example](https://github.com/75lb/local-web-server/tree/master/example/spa). + ### Access Control By default, access to all files is allowed (including dot files). Use `--forbid` to establish a blacklist: @@ -49,6 +53,8 @@ $ ws --forbid '*.json' '*.yml' serving at http://localhost:8000 ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/forbid). + ### URL rewriting Your application requested `/css/style.css` but it's stored at `/build/css/style.css`. To avoid a 404 you need a rewrite rule: @@ -86,6 +92,8 @@ Map local requests for repo data to the Github API: $ ws --rewrite '/:user/repos/:name -> https://api.github.com/repos/:user/:name' ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/rewrite). + ### Stored config Use the same port and blacklist every time? Persist it to `package.json`: @@ -160,6 +168,8 @@ You can set additional mime-type/extension mappings, or override the defaults by } ``` +[Example](https://github.com/75lb/local-web-server/tree/master/example/mime-override). + #### Log Visualisation Instructions for how to visualise log output using goaccess, logstalgia or gltail [here](https://github.com/75lb/local-web-server/blob/master/doc/visualisation.md). diff --git a/lib/cli-options.js b/lib/cli-options.js index c070500..b44e40e 100644 --- a/lib/cli-options.js +++ b/lib/cli-options.js @@ -14,7 +14,7 @@ module.exports = { }, { name: 'compress', alias: 'c', type: Boolean, - description: 'Enable gzip compression, reduces bandwidth.', group: 'server' + description: 'Serve gzip-compressed resources, where applicable', group: 'server' }, { name: 'forbid', alias: 'b', type: String, multiple: true, typeLabel: '[underline]{path} ...', diff --git a/lib/local-web-server.js b/lib/local-web-server.js index 6f79222..f23a247 100644 --- a/lib/local-web-server.js +++ b/lib/local-web-server.js @@ -17,13 +17,21 @@ module.exports = localWebServer * Returns a Koa application * * @param [options] {object} - options - * @param [options.static] {object} - koajs/static config + * @param [options.static] {object} - koa-static config * @param [options.static.root] {string} - root directory - * @param [options.static.options] {string} - options + * @param [options.static.options] {string} - [options](https://github.com/koajs/static#options) * @param [options.serveIndex] {object} - koa-serve-index config * @param [options.serveIndex.path] {string} - root directory - * @param [options.serveIndex.options] {string} - options - * @param [options.forbid] {string[]} - a list of forbidden routes. + * @param [options.serveIndex.options] {string} - [options](https://github.com/expressjs/serve-index#options) + * @param [options.forbid] {string[]} - A list of forbidden routes, each route being an [express route-path](http://expressjs.com/guide/routing.html#route-paths). + * @param [options.spa] {string} - specify an SPA file to catch requests for everything but static assets. + * @param [options.log] {object} - [morgan](https://github.com/expressjs/morgan) config + * @param [options.log.format] {string} - [log format](https://github.com/expressjs/morgan#predefined-formats) + * @param [options.log.options] {object} - [options](https://github.com/expressjs/morgan#options) + * @param [options.compress] {boolean} - Serve gzip-compressed resources, where applicable + * @param [options.mime] {object} - A list of mime-type overrides, passed directly to [mime.define()](https://github.com/broofa/node-mime#mimedefine) + * @param [options.rewrite] {module:local-web-server~rewriteRule[]} - One or more rewrite rules + * @param [options.verbose] {boolean} - Print detailed output, useful for debugging * * @alias module:local-web-server * @example @@ -213,3 +221,22 @@ function blacklist (forbid) { process.on('unhandledRejection', (reason, p) => { throw reason }) + +/** + * The `from` and `to` routes are specified using [express route-paths](http://expressjs.com/guide/routing.html#route-paths) + * + * @example + * ```json + * { + * "rewrite": [ + * { "from": "/css/*", "to": "/build/styles/$1" }, + * { "from": "/npm/*", "to": "http://registry.npmjs.org/$1" }, + * { "from": "/:user/repos/:name", "to": "https://api.github.com/repos/:user/:name" } + * ] + * } + * ``` + * + * @typedef rewriteRule + * @property from {string} - request route + * @property to {string} - target route + */