diff --git a/LICENSE b/LICENSE
index 8f01d24..99585f8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2013-17 Lloyd Brookes <75pound@gmail.com>
+Copyright (c) 2013-18 Lloyd Brookes <75pound@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 0f112b1..7628bbd 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@ Features:
* Response mocking
* Configurable access log
* Route blacklisting
-* HTTP Conditional Request support
+* HTTP Conditional and Range request support
* Gzip response compression, HTTP Basic Authentication and much more
## Synopsis
@@ -243,4 +243,4 @@ $ npm install -g local-web-server
```
* * *
-© 2013-17 Lloyd Brookes <75pound@gmail.com>. Documented by [jsdoc-to-markdown](https://github.com/jsdoc2md/jsdoc-to-markdown).
+© 2013-18 Lloyd Brookes <75pound@gmail.com>. Documented by [jsdoc-to-markdown](https://github.com/jsdoc2md/jsdoc-to-markdown).
diff --git a/doc/api.md b/doc/api.md
new file mode 100644
index 0000000..a5633cf
--- /dev/null
+++ b/doc/api.md
@@ -0,0 +1,51 @@
+
+
+## local-web-server
+**Emits**: module:local-web-server#event:verbose
+**Example**
+```js
+const LocalWebServer = require('local-web-server')
+const localWebServer = new LocalWebServer()
+const server = localWebServer.listen({
+ port: 8050,
+ https: true,
+ directory: 'src',
+ spa: 'index.html',
+ websocket: 'src/websocket-server.js'
+})
+// secure, SPA server with listening websocket now ready on port 8050
+```
+
+* [local-web-server](#module_local-web-server)
+ * [LocalWebServer](#exp_module_local-web-server--LocalWebServer) ⏏
+ * [.listen([options])](#module_local-web-server--LocalWebServer+listen) ⇒ Server
+
+
+
+### LocalWebServer ⏏
+**Kind**: Exported class
+
+
+#### localWebServer.listen([options]) ⇒ Server
+Returns a listening HTTP/HTTPS server.
+
+**Kind**: instance method of [LocalWebServer
](#exp_module_local-web-server--LocalWebServer)
+**Params**
+
+- [options] object
- Server options
+ - [.port] number
- Port
+ - [.hostname] string
- The hostname (or IP address) to listen on. Defaults to 0.0.0.0.
+ - [.maxConnections] number
- The maximum number of concurrent connections supported by the server.
+ - [.keepAliveTimeout] number
- The period (in milliseconds) of inactivity a connection will remain open before being destroyed. Set to `0` to keep connections open indefinitely.
+ - [.configFile] string
- Config file path, defaults to 'lws.config.js'.
+ - [.https] boolean
- Enable HTTPS using a built-in key and cert registered to the domain 127.0.0.1.
+ - [.key] string
- SSL key file path. Supply along with --cert to launch a https server.
+ - [.cert] string
- SSL cert file path. Supply along with --key to launch a https server.
+ - [.pfx] string
- Path to an PFX or PKCS12 encoded private key and certificate chain. An alternative to providing --key and --cert.
+ - [.ciphers] string
- Optional cipher suite specification, replacing the default.
+ - [.secureProtocol] string
- Optional SSL method to use, default is "SSLv23_method".
+ - [.stack] Array.<string>
| Array.<Middlewares>
- Array of feature classes, or filenames of modules exporting a feature class.
+ - [.server] string
| ServerFactory
- Custom server factory, e.g. lws-http2.
+ - [.websocket] string
| Websocket
- Path to a websocket module
+ - [.moduleDir] Array.<string>
- One or more directories to search for modules.
+
diff --git a/lib/default-stack.js b/lib/default-stack.js
index b2a0dc0..9bc8aa0 100644
--- a/lib/default-stack.js
+++ b/lib/default-stack.js
@@ -10,6 +10,7 @@ module.exports = [
'lws-blacklist',
'lws-conditional-get',
'lws-mime',
+ 'lws-range',
'lws-mock-response',
'lws-spa',
'lws-static',
diff --git a/package-lock.json b/package-lock.json
index e49ef7b..10005ba 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -39,6 +39,23 @@
"json-schema-traverse": "0.3.1"
}
},
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
"ansi-escape-sequences": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
@@ -110,6 +127,12 @@
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
"async-limiter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
@@ -133,6 +156,12 @@
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
"dev": true
},
+ "babylon": {
+ "version": "7.0.0-beta.19",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
+ "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==",
+ "dev": true
+ },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -159,6 +188,12 @@
"tweetnacl": "0.14.5"
}
},
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
+ "dev": true
+ },
"boom": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
@@ -188,12 +223,50 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
+ "cache-point": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz",
+ "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "fs-then-native": "2.0.0",
+ "mkdirp2": "1.0.3"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true,
+ "optional": true
+ },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
+ "catharsis": {
+ "version": "0.8.9",
+ "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz",
+ "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
+ "dev": true,
+ "requires": {
+ "underscore-contrib": "0.3.0"
+ }
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
"cli-commands": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/cli-commands/-/cli-commands-0.3.3.tgz",
@@ -215,6 +288,27 @@
}
}
},
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -231,6 +325,16 @@
"type-is": "1.6.15"
}
},
+ "collect-all": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.3.tgz",
+ "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==",
+ "dev": true,
+ "requires": {
+ "stream-connect": "1.0.2",
+ "stream-via": "1.0.4"
+ }
+ },
"combined-stream": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
@@ -241,9 +345,9 @@
}
},
"command-line-args": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.0.tgz",
- "integrity": "sha512-jp5PY9xA7pff6TaLS5y10zRqD5Xwsk/kODoIZy+FIKyHwcKFBsMAL3OMwL88VfrpAN706WFWZaPEjDaY5u2/xA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.1.tgz",
+ "integrity": "sha512-gRJDcIjFSzMcmG/GrJlgL0wWoAxr11mVzCq32bjka0endupm9meLwvoJUKc4HDeFiEIB2X3GvNrhF5cKO4Bd4A==",
"requires": {
"argv-tools": "0.1.1",
"array-back": "2.0.0",
@@ -280,6 +384,19 @@
"array-back": "2.0.0"
}
},
+ "command-line-tool": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.8.0.tgz",
+ "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "command-line-args": "5.0.1",
+ "command-line-usage": "4.1.0",
+ "typical": "2.6.1"
+ }
+ },
"command-line-usage": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
@@ -296,6 +413,12 @@
"resolved": "https://registry.npmjs.org/common-log-format/-/common-log-format-0.1.3.tgz",
"integrity": "sha1-YAna3E7EZzca8oqNvT5M4CsWZ4I="
},
+ "common-sequence": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz",
+ "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=",
+ "dev": true
+ },
"compressible": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz",
@@ -310,6 +433,23 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
+ "config-master": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz",
+ "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=",
+ "dev": true,
+ "requires": {
+ "walk-back": "2.0.1"
+ },
+ "dependencies": {
+ "walk-back": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz",
+ "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=",
+ "dev": true
+ }
+ }
+ },
"content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
@@ -389,6 +529,13 @@
"ms": "2.0.0"
}
},
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "optional": true
+ },
"deep-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
@@ -425,6 +572,38 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
+ "dmd": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.10.tgz",
+ "integrity": "sha512-+tRZIFV9fII538XFZSoRP1abtIy55RYa4waGvtKB36LD97NRorWsYT3V3HEURmnXpA4eGIFQph1E2f+51hWrTg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "cache-point": "0.4.1",
+ "common-sequence": "1.0.2",
+ "file-set": "1.1.1",
+ "handlebars": "4.0.11",
+ "marked": "0.3.12",
+ "object-get": "2.1.0",
+ "reduce-flatten": "1.0.1",
+ "reduce-unique": "1.0.0",
+ "reduce-without": "1.0.1",
+ "test-value": "3.0.0",
+ "walk-back": "3.0.0"
+ },
+ "dependencies": {
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
"ecc-jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
@@ -450,6 +629,12 @@
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
"esprima": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
@@ -547,6 +732,12 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
+ "fs-then-native": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz",
+ "integrity": "sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=",
+ "dev": true
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -576,6 +767,24 @@
"path-is-absolute": "1.0.1"
}
},
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
+ }
+ },
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -678,6 +887,12 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
"is-generator-function": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz",
@@ -710,6 +925,15 @@
"esprima": "4.0.0"
}
},
+ "js2xmlparser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
+ "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
+ "dev": true,
+ "requires": {
+ "xmlcreate": "1.0.2"
+ }
+ },
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
@@ -717,6 +941,84 @@
"dev": true,
"optional": true
},
+ "jsdoc": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
+ "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
+ "dev": true,
+ "requires": {
+ "babylon": "7.0.0-beta.19",
+ "bluebird": "3.5.1",
+ "catharsis": "0.8.9",
+ "escape-string-regexp": "1.0.5",
+ "js2xmlparser": "3.0.0",
+ "klaw": "2.0.0",
+ "marked": "0.3.12",
+ "mkdirp": "0.5.1",
+ "requizzle": "0.2.1",
+ "strip-json-comments": "2.0.1",
+ "taffydb": "2.6.2",
+ "underscore": "1.8.3"
+ }
+ },
+ "jsdoc-api": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-4.0.1.tgz",
+ "integrity": "sha512-qCzHGQxfd9toMRjQft9E44Y40zWDPgf13pt3n+xExk8+wmVd7aueW6cTSQOHyjQG1v07INunQD8AcCAPxhZVmw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "cache-point": "0.4.1",
+ "collect-all": "1.0.3",
+ "file-set": "1.1.1",
+ "fs-then-native": "2.0.0",
+ "jsdoc": "3.5.5",
+ "object-to-spawn-args": "1.1.1",
+ "temp-path": "1.0.0",
+ "walk-back": "3.0.0"
+ }
+ },
+ "jsdoc-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-3.0.1.tgz",
+ "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "lodash.omit": "4.5.0",
+ "lodash.pick": "4.4.0",
+ "reduce-extract": "1.0.0",
+ "sort-array": "2.0.0",
+ "test-value": "3.0.0"
+ },
+ "dependencies": {
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "jsdoc-to-markdown": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-4.0.1.tgz",
+ "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "command-line-tool": "0.8.0",
+ "config-master": "3.1.0",
+ "dmd": "3.0.10",
+ "jsdoc-api": "4.0.1",
+ "jsdoc-parse": "3.0.1",
+ "walk-back": "3.0.0"
+ }
+ },
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
@@ -756,6 +1058,24 @@
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz",
"integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E="
},
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "klaw": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
+ "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
"koa": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/koa/-/koa-2.4.1.tgz",
@@ -884,6 +1204,14 @@
"morgan": "1.9.0"
}
},
+ "koa-range": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/koa-range/-/koa-range-0.3.0.tgz",
+ "integrity": "sha1-NYjjSWRzqDmhvSZNKkKx2FvX/qw=",
+ "requires": {
+ "stream-slice": "0.1.2"
+ }
+ },
"koa-rewrite-75lb": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/koa-rewrite-75lb/-/koa-rewrite-75lb-2.1.1.tgz",
@@ -942,6 +1270,13 @@
}
}
},
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true,
+ "optional": true
+ },
"lcov-parse": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
@@ -966,6 +1301,12 @@
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
},
+ "lodash.omit": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
+ "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=",
+ "dev": true
+ },
"lodash.padend": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
@@ -987,6 +1328,12 @@
"integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=",
"dev": true
},
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
"lws": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/lws/-/lws-1.1.7.tgz",
@@ -996,7 +1343,7 @@
"array-back": "2.0.0",
"byte-size": "4.0.2",
"cli-commands": "0.3.3",
- "command-line-args": "5.0.0",
+ "command-line-args": "5.0.1",
"command-line-usage": "4.1.0",
"koa": "2.4.1",
"load-module": "0.2.4",
@@ -1100,6 +1447,14 @@
"reduce-flatten": "1.0.1"
}
},
+ "lws-range": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/lws-range/-/lws-range-1.1.0.tgz",
+ "integrity": "sha512-Mpx6FdO58Z4l6DAXlATsC2zm10QvyGYElQvFd7P1xqUSTPoYG0wAxfjlpqI+Qdb2O7W4Ah21yESVnPEwae3SIw==",
+ "requires": {
+ "koa-range": "0.3.0"
+ }
+ },
"lws-request-monitor": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/lws-request-monitor/-/lws-request-monitor-0.1.5.tgz",
@@ -1139,6 +1494,12 @@
"koa-static": "4.0.2"
}
},
+ "marked": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz",
+ "integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA==",
+ "dev": true
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -1177,6 +1538,23 @@
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
"mkdirp2": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.3.tgz",
@@ -1243,6 +1621,18 @@
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
+ "object-get": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz",
+ "integrity": "sha1-ciu9tgA576R8rTxtws5RqFwCxa4=",
+ "dev": true
+ },
+ "object-to-spawn-args": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-1.1.1.tgz",
+ "integrity": "sha1-d9qIJ/Bz0BHJ4bFz+JV4FHAkZ4U=",
+ "dev": true
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -1270,6 +1660,24 @@
"resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
"integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q="
},
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.10",
+ "wordwrap": "0.0.3"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ }
+ }
+ },
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
@@ -1342,11 +1750,62 @@
}
}
},
+ "reduce-extract": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/reduce-extract/-/reduce-extract-1.0.0.tgz",
+ "integrity": "sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=",
+ "dev": true,
+ "requires": {
+ "test-value": "1.1.0"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "test-value": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz",
+ "integrity": "sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
"reduce-flatten": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
"integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc="
},
+ "reduce-unique": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-1.0.0.tgz",
+ "integrity": "sha1-flhrz4ek4ytter2Cd/rWzeyfSAM=",
+ "dev": true
+ },
+ "reduce-without": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-without/-/reduce-without-1.0.1.tgz",
+ "integrity": "sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=",
+ "dev": true,
+ "requires": {
+ "test-value": "2.1.0"
+ }
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
"req-then": {
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/req-then/-/req-then-0.6.4.tgz",
@@ -1389,6 +1848,23 @@
"uuid": "3.2.1"
}
},
+ "requizzle": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz",
+ "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
+ "dev": true,
+ "requires": {
+ "underscore": "1.6.0"
+ },
+ "dependencies": {
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+ "dev": true
+ }
+ }
+ },
"resolve-path": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.3.3.tgz",
@@ -1415,6 +1891,16 @@
}
}
},
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
@@ -1463,6 +1949,37 @@
"hoek": "4.2.0"
}
},
+ "sort-array": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-2.0.0.tgz",
+ "integrity": "sha1-OKnG2if9fRR7QuYFVPKBGHtN9HI=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "object-get": "2.1.0",
+ "typical": "2.6.1"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -1490,6 +2007,26 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
},
+ "stream-connect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz",
+ "integrity": "sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
"stream-log-stats": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/stream-log-stats/-/stream-log-stats-2.0.2.tgz",
@@ -1532,6 +2069,11 @@
"resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-0.1.2.tgz",
"integrity": "sha512-KX42xBg853m+KnwRtwCKT95ShopAbY/MNKs2dBQ0WkNeuJdqgQYRtGRbTlxdx0L6t979h3z/wMq2eMSAu7Tygw=="
},
+ "stream-slice": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz",
+ "integrity": "sha1-LcT04bk2+xPz6zmi3vGTJ5jQeks="
+ },
"stream-via": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz",
@@ -1560,6 +2102,12 @@
"integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
"dev": true
},
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
"table-layout": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
@@ -1572,6 +2120,18 @@
"wordwrapjs": "3.0.0"
}
},
+ "taffydb": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
+ "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=",
+ "dev": true
+ },
+ "temp-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz",
+ "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=",
+ "dev": true
+ },
"test-runner": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/test-runner/-/test-runner-0.5.0.tgz",
@@ -1580,7 +2140,7 @@
"requires": {
"ansi-escape-sequences": "4.0.0",
"array-back": "2.0.0",
- "command-line-args": "5.0.0",
+ "command-line-args": "5.0.1",
"command-line-usage": "4.1.0",
"file-set": "1.1.1",
"reduce-flatten": "1.0.1"
@@ -1665,11 +2225,62 @@
"resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
"integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
},
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
},
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+ "dev": true
+ },
+ "underscore-contrib": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz",
+ "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=",
+ "dev": true,
+ "requires": {
+ "underscore": "1.6.0"
+ },
+ "dependencies": {
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+ "dev": true
+ }
+ }
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -1719,6 +2330,19 @@
"resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.0.tgz",
"integrity": "sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU="
},
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true,
+ "optional": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
"wordwrapjs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
@@ -1743,6 +2367,25 @@
"safe-buffer": "5.1.1",
"ultron": "1.1.1"
}
+ },
+ "xmlcreate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
+ "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
}
}
}
diff --git a/package.json b/package.json
index d4f7afa..4020fdf 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
},
"scripts": {
"test": "test-runner test/*.js",
- "docs": "jsdoc2md -t jsdoc2md/api.hbs -p list lib/*.js > doc/api.md; echo",
+ "docs": "jsdoc2md -p list lib/*.js > doc/api.md; echo",
"cover": "istanbul cover ./node_modules/.bin/test-runner test/*.js && cat coverage/lcov.info | coveralls"
},
"repository": "https://github.com/lwsjs/local-web-server",
@@ -44,6 +44,7 @@
"lws-log": "^0.3.2",
"lws-mime": "^0.2.2",
"lws-mock-response": "^0.4.6",
+ "lws-range": "^1.1.0",
"lws-request-monitor": "^0.1.5",
"lws-rewrite": "^0.3.7",
"lws-spa": "^0.2.4",
@@ -52,6 +53,7 @@
},
"devDependencies": {
"coveralls": "^3.0.0",
+ "jsdoc-to-markdown": "^4.0.1",
"req-then": "^0.6.4",
"test-runner": "^0.5.0"
}