aboutsummaryrefslogtreecommitdiff
path: root/node_modules/resolve-path
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/resolve-path')
-rw-r--r--node_modules/resolve-path/HISTORY.md66
-rw-r--r--node_modules/resolve-path/LICENSE23
-rw-r--r--node_modules/resolve-path/README.md111
-rw-r--r--node_modules/resolve-path/index.js88
-rw-r--r--node_modules/resolve-path/node_modules/http-errors/HISTORY.md132
-rw-r--r--node_modules/resolve-path/node_modules/http-errors/LICENSE23
-rw-r--r--node_modules/resolve-path/node_modules/http-errors/README.md135
-rw-r--r--node_modules/resolve-path/node_modules/http-errors/index.js260
-rw-r--r--node_modules/resolve-path/node_modules/http-errors/package.json48
-rw-r--r--node_modules/resolve-path/package.json46
10 files changed, 932 insertions, 0 deletions
diff --git a/node_modules/resolve-path/HISTORY.md b/node_modules/resolve-path/HISTORY.md
new file mode 100644
index 00000000..ea4328aa
--- /dev/null
+++ b/node_modules/resolve-path/HISTORY.md
@@ -0,0 +1,66 @@
+1.4.0 / 2018-02-13
+==================
+
+ * Fix resolving paths with certain special characters
+ * deps: http-errors@~1.6.2
+ - Make `message` property enumerable for `HttpError`s
+ - deps: depd@1.1.1
+ - deps: setprototypeof@1.0.3
+
+1.3.3 / 2016-11-14
+==================
+
+ * deps: path-is-absolute@1.0.1
+
+1.3.2 / 2016-06-17
+==================
+
+ * deps: http-errors@~1.5.0
+ - Use `setprototypeof` module to replace `__proto__` setting
+ - deps: inherits@2.0.1
+ - deps: statuses@'>= 1.3.0 < 2'
+ - perf: enable strict mode
+
+1.3.1 / 2016-02-28
+==================
+
+ * deps: http-errors@~1.4.0
+
+1.3.0 / 2015-06-15
+==================
+
+ * Use `path-is-absolute` to better detect absolute paths
+ * perf: enable strict mode
+ * perf: skip a variable reassignment
+
+1.2.2 / 2015-02-16
+==================
+
+ * deps: http-errors@~1.3.1
+ - Construct errors using defined constructors from `createError`
+ - Fix error names that are not identifiers
+ - Set a meaningful `name` property on constructed errors
+
+1.2.1 / 2015-01-19
+==================
+
+ * Fix root path disclosure
+
+1.2.0 / 2015-01-05
+==================
+
+ * Change error to 403 Forbidden when outside root
+ * Fix argument type errors to be consistent
+ * Fix path traversal vulnerability
+ * Use `http-errors` module directly
+
+1.1.0 / 2014-12-27
+==================
+
+ * Resolve the root path argument
+ * Use `http-assert` module
+
+1.0.0 / 2014-03-23
+==================
+
+ * Initial release
diff --git a/node_modules/resolve-path/LICENSE b/node_modules/resolve-path/LICENSE
new file mode 100644
index 00000000..88e217bf
--- /dev/null
+++ b/node_modules/resolve-path/LICENSE
@@ -0,0 +1,23 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
+Copyright (c) 2015-2018 Douglas Christopher Wilson <doug@somethingdoug.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 in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/resolve-path/README.md b/node_modules/resolve-path/README.md
new file mode 100644
index 00000000..aaa8bd74
--- /dev/null
+++ b/node_modules/resolve-path/README.md
@@ -0,0 +1,111 @@
+# resolve-path
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-image]][node-url]
+[![Linux Build][travis-image]][travis-url]
+[![Windows Build][appveyor-image]][appveyor-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Resolve a relative path against a root path with validation.
+
+This module would protect against commons attacks like `GET /../file.js`
+which reaches outside the root folder.
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install resolve-path
+```
+
+## API
+
+```
+var resolvePath = require('resolve-path')
+```
+
+### resolvePath(relativePath)
+
+Resolve a relative path against `process.cwd()` (the process's current working
+directory) and return an absolute path. *This will throw* if the resulting resolution
+seems malicious. The following are malicious:
+
+ - The relative path is an absolute path
+ - The relative path contains a NULL byte
+ - The relative path resolves to a path outside of `process.cwd()`
+ - The relative path traverses above `process.cwd()` and back down
+
+### resolvePath(rootPath, relativePath)
+
+Resolve a relative path against the provided root path and return an absolute path.
+*This will throw* if the resulting resolution seems malicious. The following are
+malicious:
+
+ - The relative path is an absolute path
+ - The relative path contains a NULL byte
+ - The relative path resolves to a path outside of the root path
+ - The relative path traverses above the root and back down
+
+## Example
+
+### Safely resolve paths in a public directory
+
+```js
+var http = require('http')
+var parseUrl = require('parseurl')
+var path = require('path')
+var resolvePath = require('resolve-path')
+
+// the public directory
+var publicDir = path.join(__dirname, 'public')
+
+// the server
+var server = http.createServer(function onRequest (req, res) {
+ try {
+ // get the pathname from the URL (decoded)
+ var pathname = decodeURIComponent(parseUrl(req).pathname)
+
+ if (!pathname) {
+ res.statusCode = 400
+ res.end('path required')
+ return
+ }
+
+ // remove leading slash
+ var filename = pathname.substr(1)
+
+ // resolve the full path
+ var fullpath = resolvePath(publicDir, filename)
+
+ // echo the resolved path
+ res.statusCode = 200
+ res.end('resolved to ' + fullpath)
+ } catch (err) {
+ res.statusCode = err.status || 500
+ res.end(err.message)
+ }
+})
+
+server.listen(3000)
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/resolve-path.svg
+[npm-url]: https://npmjs.org/package/resolve-path
+[node-image]: https://img.shields.io/node/v/resolve-path.svg
+[node-url]: http://nodejs.org/download/
+[travis-image]: https://img.shields.io/travis/pillarjs/resolve-path/master.svg?label=linux
+[travis-url]: https://travis-ci.org/pillarjs/resolve-path
+[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/resolve-path/master.svg?label=windows
+[appveyor-url]: https://ci.appveyor.com/project/dougwilson/resolve-path
+[coveralls-image]: https://img.shields.io/coveralls/pillarjs/resolve-path/master.svg
+[coveralls-url]: https://coveralls.io/r/pillarjs/resolve-path?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/resolve-path.svg
+[downloads-url]: https://npmjs.org/package/resolve-path
diff --git a/node_modules/resolve-path/index.js b/node_modules/resolve-path/index.js
new file mode 100644
index 00000000..e889d9b6
--- /dev/null
+++ b/node_modules/resolve-path/index.js
@@ -0,0 +1,88 @@
+/*!
+ * resolve-path
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015-2018 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var createError = require('http-errors')
+var join = require('path').join
+var normalize = require('path').normalize
+var pathIsAbsolute = require('path-is-absolute')
+var resolve = require('path').resolve
+var sep = require('path').sep
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = resolvePath
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/
+
+/**
+ * Resolve relative path against a root path
+ *
+ * @param {string} rootPath
+ * @param {string} relativePath
+ * @return {string}
+ * @public
+ */
+
+function resolvePath (rootPath, relativePath) {
+ var path = relativePath
+ var root = rootPath
+
+ // root is optional, similar to root.resolve
+ if (arguments.length === 1) {
+ path = rootPath
+ root = process.cwd()
+ }
+
+ if (root == null) {
+ throw new TypeError('argument rootPath is required')
+ }
+
+ if (typeof root !== 'string') {
+ throw new TypeError('argument rootPath must be a string')
+ }
+
+ if (path == null) {
+ throw new TypeError('argument relativePath is required')
+ }
+
+ if (typeof path !== 'string') {
+ throw new TypeError('argument relativePath must be a string')
+ }
+
+ // containing NULL bytes is malicious
+ if (path.indexOf('\0') !== -1) {
+ throw createError(400, 'Malicious Path')
+ }
+
+ // path should never be absolute
+ if (pathIsAbsolute.posix(path) || pathIsAbsolute.win32(path)) {
+ throw createError(400, 'Malicious Path')
+ }
+
+ // path outside root
+ if (UP_PATH_REGEXP.test(normalize('.' + sep + path))) {
+ throw createError(403)
+ }
+
+ // join the relative path
+ return normalize(join(resolve(root), path))
+}
diff --git a/node_modules/resolve-path/node_modules/http-errors/HISTORY.md b/node_modules/resolve-path/node_modules/http-errors/HISTORY.md
new file mode 100644
index 00000000..cba86e2d
--- /dev/null
+++ b/node_modules/resolve-path/node_modules/http-errors/HISTORY.md
@@ -0,0 +1,132 @@
+2018-03-29 / 1.6.3
+==================
+
+ * deps: depd@~1.1.2
+ - perf: remove argument reassignment
+ * deps: setprototypeof@1.1.0
+ * deps: statuses@'>= 1.3.1 < 2'
+
+2017-08-04 / 1.6.2
+==================
+
+ * deps: depd@1.1.1
+ - Remove unnecessary `Buffer` loading
+
+2017-02-20 / 1.6.1
+==================
+
+ * deps: setprototypeof@1.0.3
+ - Fix shim for old browsers
+
+2017-02-14 / 1.6.0
+==================
+
+ * Accept custom 4xx and 5xx status codes in factory
+ * Add deprecation message to `"I'mateapot"` export
+ * Deprecate passing status code as anything except first argument in factory
+ * Deprecate using non-error status codes
+ * Make `message` property enumerable for `HttpError`s
+
+2016-11-16 / 1.5.1
+==================
+
+ * deps: inherits@2.0.3
+ - Fix issue loading in browser
+ * deps: setprototypeof@1.0.2
+ * deps: statuses@'>= 1.3.1 < 2'
+
+2016-05-18 / 1.5.0
+==================
+
+ * Support new code `421 Misdirected Request`
+ * Use `setprototypeof` module to replace `__proto__` setting
+ * deps: statuses@'>= 1.3.0 < 2'
+ - Add `421 Misdirected Request`
+ - perf: enable strict mode
+ * perf: enable strict mode
+
+2016-01-28 / 1.4.0
+==================
+
+ * Add `HttpError` export, for `err instanceof createError.HttpError`
+ * deps: inherits@2.0.1
+ * deps: statuses@'>= 1.2.1 < 2'
+ - Fix message for status 451
+ - Remove incorrect nginx status code
+
+2015-02-02 / 1.3.1
+==================
+
+ * Fix regression where status can be overwritten in `createError` `props`
+
+2015-02-01 / 1.3.0
+==================
+
+ * Construct errors using defined constructors from `createError`
+ * Fix error names that are not identifiers
+ - `createError["I'mateapot"]` is now `createError.ImATeapot`
+ * Set a meaningful `name` property on constructed errors
+
+2014-12-09 / 1.2.8
+==================
+
+ * Fix stack trace from exported function
+ * Remove `arguments.callee` usage
+
+2014-10-14 / 1.2.7
+==================
+
+ * Remove duplicate line
+
+2014-10-02 / 1.2.6
+==================
+
+ * Fix `expose` to be `true` for `ClientError` constructor
+
+2014-09-28 / 1.2.5
+==================
+
+ * deps: statuses@1
+
+2014-09-21 / 1.2.4
+==================
+
+ * Fix dependency version to work with old `npm`s
+
+2014-09-21 / 1.2.3
+==================
+
+ * deps: statuses@~1.1.0
+
+2014-09-21 / 1.2.2
+==================
+
+ * Fix publish error
+
+2014-09-21 / 1.2.1
+==================
+
+ * Support Node.js 0.6
+ * Use `inherits` instead of `util`
+
+2014-09-09 / 1.2.0
+==================
+
+ * Fix the way inheriting functions
+ * Support `expose` being provided in properties argument
+
+2014-09-08 / 1.1.0
+==================
+
+ * Default status to 500
+ * Support provided `error` to extend
+
+2014-09-08 / 1.0.1
+==================
+
+ * Fix accepting string message
+
+2014-09-08 / 1.0.0
+==================
+
+ * Initial release
diff --git a/node_modules/resolve-path/node_modules/http-errors/LICENSE b/node_modules/resolve-path/node_modules/http-errors/LICENSE
new file mode 100644
index 00000000..82af4df5
--- /dev/null
+++ b/node_modules/resolve-path/node_modules/http-errors/LICENSE
@@ -0,0 +1,23 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong me@jongleberry.com
+Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.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
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/resolve-path/node_modules/http-errors/README.md b/node_modules/resolve-path/node_modules/http-errors/README.md
new file mode 100644
index 00000000..79663d82
--- /dev/null
+++ b/node_modules/resolve-path/node_modules/http-errors/README.md
@@ -0,0 +1,135 @@
+# http-errors
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Create HTTP errors for Express, Koa, Connect, etc. with ease.
+
+## Install
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```bash
+$ npm install http-errors
+```
+
+## Example
+
+```js
+var createError = require('http-errors')
+var express = require('express')
+var app = express()
+
+app.use(function (req, res, next) {
+ if (!req.user) return next(createError(401, 'Please login to view this page.'))
+ next()
+})
+```
+
+## API
+
+This is the current API, currently extracted from Koa and subject to change.
+
+All errors inherit from JavaScript `Error` and the exported `createError.HttpError`.
+
+### Error Properties
+
+- `expose` - can be used to signal if `message` should be sent to the client,
+ defaulting to `false` when `status` >= 500
+- `headers` - can be an object of header names to values to be sent to the
+ client, defaulting to `undefined`. When defined, the key names should all
+ be lower-cased
+- `message` - the traditional error message, which should be kept short and all
+ single line
+- `status` - the status code of the error, mirroring `statusCode` for general
+ compatibility
+- `statusCode` - the status code of the error, defaulting to `500`
+
+### createError([status], [message], [properties])
+
+<!-- eslint-disable no-undef, no-unused-vars -->
+
+```js
+var err = createError(404, 'This video does not exist!')
+```
+
+- `status: 500` - the status code as a number
+- `message` - the message of the error, defaulting to node's text for that status code.
+- `properties` - custom properties to attach to the object
+
+### new createError\[code || name\](\[msg]\))
+
+<!-- eslint-disable no-undef, no-unused-vars -->
+
+```js
+var err = new createError.NotFound()
+```
+
+- `code` - the status code as a number
+- `name` - the name of the error as a "bumpy case", i.e. `NotFound` or `InternalServerError`.
+
+#### List of all constructors
+
+|Status Code|Constructor Name |
+|-----------|-----------------------------|
+|400 |BadRequest |
+|401 |Unauthorized |
+|402 |PaymentRequired |
+|403 |Forbidden |
+|404 |NotFound |
+|405 |MethodNotAllowed |
+|406 |NotAcceptable |
+|407 |ProxyAuthenticationRequired |
+|408 |RequestTimeout |
+|409 |Conflict |
+|410 |Gone |
+|411 |LengthRequired |
+|412 |PreconditionFailed |
+|413 |PayloadTooLarge |
+|414 |URITooLong |
+|415 |UnsupportedMediaType |
+|416 |RangeNotSatisfiable |
+|417 |ExpectationFailed |
+|418 |ImATeapot |
+|421 |MisdirectedRequest |
+|422 |UnprocessableEntity |
+|423 |Locked |
+|424 |FailedDependency |
+|425 |UnorderedCollection |
+|426 |UpgradeRequired |
+|428 |PreconditionRequired |
+|429 |TooManyRequests |
+|431 |RequestHeaderFieldsTooLarge |
+|451 |UnavailableForLegalReasons |
+|500 |InternalServerError |
+|501 |NotImplemented |
+|502 |BadGateway |
+|503 |ServiceUnavailable |
+|504 |GatewayTimeout |
+|505 |HTTPVersionNotSupported |
+|506 |VariantAlsoNegotiates |
+|507 |InsufficientStorage |
+|508 |LoopDetected |
+|509 |BandwidthLimitExceeded |
+|510 |NotExtended |
+|511 |NetworkAuthenticationRequired|
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/http-errors.svg
+[npm-url]: https://npmjs.org/package/http-errors
+[node-version-image]: https://img.shields.io/node/v/http-errors.svg
+[node-version-url]: https://nodejs.org/en/download/
+[travis-image]: https://img.shields.io/travis/jshttp/http-errors.svg
+[travis-url]: https://travis-ci.org/jshttp/http-errors
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/http-errors.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/http-errors
+[downloads-image]: https://img.shields.io/npm/dm/http-errors.svg
+[downloads-url]: https://npmjs.org/package/http-errors
diff --git a/node_modules/resolve-path/node_modules/http-errors/index.js b/node_modules/resolve-path/node_modules/http-errors/index.js
new file mode 100644
index 00000000..9509303e
--- /dev/null
+++ b/node_modules/resolve-path/node_modules/http-errors/index.js
@@ -0,0 +1,260 @@
+/*!
+ * http-errors
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2016 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var deprecate = require('depd')('http-errors')
+var setPrototypeOf = require('setprototypeof')
+var statuses = require('statuses')
+var inherits = require('inherits')
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = createError
+module.exports.HttpError = createHttpErrorConstructor()
+
+// Populate exports for all constructors
+populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)
+
+/**
+ * Get the code class of a status code.
+ * @private
+ */
+
+function codeClass (status) {
+ return Number(String(status).charAt(0) + '00')
+}
+
+/**
+ * Create a new HTTP Error.
+ *
+ * @returns {Error}
+ * @public
+ */
+
+function createError () {
+ // so much arity going on ~_~
+ var err
+ var msg
+ var status = 500
+ var props = {}
+ for (var i = 0; i < arguments.length; i++) {
+ var arg = arguments[i]
+ if (arg instanceof Error) {
+ err = arg
+ status = err.status || err.statusCode || status
+ continue
+ }
+ switch (typeof arg) {
+ case 'string':
+ msg = arg
+ break
+ case 'number':
+ status = arg
+ if (i !== 0) {
+ deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)')
+ }
+ break
+ case 'object':
+ props = arg
+ break
+ }
+ }
+
+ if (typeof status === 'number' && (status < 400 || status >= 600)) {
+ deprecate('non-error status code; use only 4xx or 5xx status codes')
+ }
+
+ if (typeof status !== 'number' ||
+ (!statuses[status] && (status < 400 || status >= 600))) {
+ status = 500
+ }
+
+ // constructor
+ var HttpError = createError[status] || createError[codeClass(status)]
+
+ if (!err) {
+ // create error
+ err = HttpError
+ ? new HttpError(msg)
+ : new Error(msg || statuses[status])
+ Error.captureStackTrace(err, createError)
+ }
+
+ if (!HttpError || !(err instanceof HttpError) || err.status !== status) {
+ // add properties to generic error
+ err.expose = status < 500
+ err.status = err.statusCode = status
+ }
+
+ for (var key in props) {
+ if (key !== 'status' && key !== 'statusCode') {
+ err[key] = props[key]
+ }
+ }
+
+ return err
+}
+
+/**
+ * Create HTTP error abstract base class.
+ * @private
+ */
+
+function createHttpErrorConstructor () {
+ function HttpError () {
+ throw new TypeError('cannot construct abstract class')
+ }
+
+ inherits(HttpError, Error)
+
+ return HttpError
+}
+
+/**
+ * Create a constructor for a client error.
+ * @private
+ */
+
+function createClientErrorConstructor (HttpError, name, code) {
+ var className = name.match(/Error$/) ? name : name + 'Error'
+
+ function ClientError (message) {
+ // create the error object
+ var msg = message != null ? message : statuses[code]
+ var err = new Error(msg)
+
+ // capture a stack trace to the construction point
+ Error.captureStackTrace(err, ClientError)
+
+ // adjust the [[Prototype]]
+ setPrototypeOf(err, ClientError.prototype)
+
+ // redefine the error message
+ Object.defineProperty(err, 'message', {
+ enumerable: true,
+ configurable: true,
+ value: msg,
+ writable: true
+ })
+
+ // redefine the error name
+ Object.defineProperty(err, 'name', {
+ enumerable: false,
+ configurable: true,
+ value: className,
+ writable: true
+ })
+
+ return err
+ }
+
+ inherits(ClientError, HttpError)
+
+ ClientError.prototype.status = code
+ ClientError.prototype.statusCode = code
+ ClientError.prototype.expose = true
+
+ return ClientError
+}
+
+/**
+ * Create a constructor for a server error.
+ * @private
+ */
+
+function createServerErrorConstructor (HttpError, name, code) {
+ var className = name.match(/Error$/) ? name : name + 'Error'
+
+ function ServerError (message) {
+ // create the error object
+ var msg = message != null ? message : statuses[code]
+ var err = new Error(msg)
+
+ // capture a stack trace to the construction point
+ Error.captureStackTrace(err, ServerError)
+
+ // adjust the [[Prototype]]
+ setPrototypeOf(err, ServerError.prototype)
+
+ // redefine the error message
+ Object.defineProperty(err, 'message', {
+ enumerable: true,
+ configurable: true,
+ value: msg,
+ writable: true
+ })
+
+ // redefine the error name
+ Object.defineProperty(err, 'name', {
+ enumerable: false,
+ configurable: true,
+ value: className,
+ writable: true
+ })
+
+ return err
+ }
+
+ inherits(ServerError, HttpError)
+
+ ServerError.prototype.status = code
+ ServerError.prototype.statusCode = code
+ ServerError.prototype.expose = false
+
+ return ServerError
+}
+
+/**
+ * Populate the exports object with constructors for every error class.
+ * @private
+ */
+
+function populateConstructorExports (exports, codes, HttpError) {
+ codes.forEach(function forEachCode (code) {
+ var CodeError
+ var name = toIdentifier(statuses[code])
+
+ switch (codeClass(code)) {
+ case 400:
+ CodeError = createClientErrorConstructor(HttpError, name, code)
+ break
+ case 500:
+ CodeError = createServerErrorConstructor(HttpError, name, code)
+ break
+ }
+
+ if (CodeError) {
+ // export the constructor
+ exports[code] = CodeError
+ exports[name] = CodeError
+ }
+ })
+
+ // backwards-compatibility
+ exports["I'mateapot"] = deprecate.function(exports.ImATeapot,
+ '"I\'mateapot"; use "ImATeapot" instead')
+}
+
+/**
+ * Convert a string of words to a JavaScript identifier.
+ * @private
+ */
+
+function toIdentifier (str) {
+ return str.split(' ').map(function (token) {
+ return token.slice(0, 1).toUpperCase() + token.slice(1)
+ }).join('').replace(/[^ _0-9a-z]/gi, '')
+}
diff --git a/node_modules/resolve-path/node_modules/http-errors/package.json b/node_modules/resolve-path/node_modules/http-errors/package.json
new file mode 100644
index 00000000..a8d28e4f
--- /dev/null
+++ b/node_modules/resolve-path/node_modules/http-errors/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "http-errors",
+ "description": "Create HTTP error objects",
+ "version": "1.6.3",
+ "author": "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)",
+ "contributors": [
+ "Alan Plum <me@pluma.io>",
+ "Douglas Christopher Wilson <doug@somethingdoug.com>"
+ ],
+ "license": "MIT",
+ "repository": "jshttp/http-errors",
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ },
+ "devDependencies": {
+ "eslint": "4.18.1",
+ "eslint-config-standard": "11.0.0",
+ "eslint-plugin-import": "2.9.0",
+ "eslint-plugin-markdown": "1.0.0-beta.6",
+ "eslint-plugin-node": "6.0.1",
+ "eslint-plugin-promise": "3.6.0",
+ "eslint-plugin-standard": "3.0.1",
+ "istanbul": "0.4.5",
+ "mocha": "1.21.5"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "lint": "eslint --plugin markdown --ext js,md .",
+ "test": "mocha --reporter spec --bail",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
+ },
+ "keywords": [
+ "http",
+ "error"
+ ],
+ "files": [
+ "index.js",
+ "HISTORY.md",
+ "LICENSE",
+ "README.md"
+ ]
+}
diff --git a/node_modules/resolve-path/package.json b/node_modules/resolve-path/package.json
new file mode 100644
index 00000000..1823da0f
--- /dev/null
+++ b/node_modules/resolve-path/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "resolve-path",
+ "description": "Resolve a relative path against a root path with validation",
+ "version": "1.4.0",
+ "author": "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)",
+ "contributors": [
+ "Douglas Christopher Wilson <doug@somethingdoug.com>"
+ ],
+ "license": "MIT",
+ "repository": "pillarjs/resolve-path",
+ "dependencies": {
+ "http-errors": "~1.6.2",
+ "path-is-absolute": "1.0.1"
+ },
+ "devDependencies": {
+ "eslint": "3.19.0",
+ "eslint-config-standard": "10.2.1",
+ "eslint-plugin-import": "2.8.0",
+ "eslint-plugin-markdown": "1.0.0-beta.6",
+ "eslint-plugin-node": "5.2.1",
+ "eslint-plugin-promise": "3.6.0",
+ "eslint-plugin-standard": "3.0.1",
+ "istanbul": "0.4.5",
+ "mocha": "2.5.3"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "README.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "scripts": {
+ "lint": "eslint --plugin markdown --ext js,md .",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
+ },
+ "keywords": [
+ "resolve",
+ "path",
+ "safe"
+ ]
+}