From 9679d1ef02cdf940ce303f6460d680403c8efbe0 Mon Sep 17 00:00:00 2001 From: gl3127 Date: Sun, 13 Jun 2021 22:53:36 -0500 Subject: [PATCH 1/6] initial --- server/config/keys.js | 14 +- server/node_modules/accepts/HISTORY.md | 24 + server/node_modules/accepts/README.md | 37 +- server/node_modules/accepts/index.js | 29 +- server/node_modules/accepts/package.json | 43 +- .../node_modules/array-flatten/package.json | 2 +- .../content-disposition/HISTORY.md | 5 + .../node_modules/content-disposition/LICENSE | 2 +- .../content-disposition/README.md | 23 +- .../node_modules/content-disposition/index.js | 47 +- .../content-disposition/package.json | 51 +- server/node_modules/content-type/HISTORY.md | 10 + server/node_modules/content-type/index.js | 116 +- server/node_modules/content-type/package.json | 32 +- .../cookie-signature/package.json | 2 +- server/node_modules/cookie/HISTORY.md | 5 + server/node_modules/cookie/README.md | 109 +- server/node_modules/cookie/index.js | 3 + server/node_modules/cookie/package.json | 35 +- server/node_modules/debug/package.json | 18 +- server/node_modules/depd/package.json | 27 +- server/node_modules/destroy/package.json | 2 +- server/node_modules/ee-first/package.json | 2 +- server/node_modules/encodeurl/HISTORY.md | 5 + server/node_modules/encodeurl/README.md | 4 + server/node_modules/encodeurl/index.js | 2 +- server/node_modules/encodeurl/package.json | 36 +- server/node_modules/escape-html/package.json | 2 +- server/node_modules/etag/HISTORY.md | 5 + server/node_modules/etag/README.md | 66 +- server/node_modules/etag/index.js | 3 +- server/node_modules/etag/package.json | 39 +- server/node_modules/express/History.md | 225 +- server/node_modules/express/Readme.md | 32 +- .../node_modules/express/lib/application.js | 4 +- server/node_modules/express/lib/express.js | 15 +- .../express/lib/middleware/query.js | 3 +- server/node_modules/express/lib/request.js | 12 +- server/node_modules/express/lib/response.js | 108 +- .../node_modules/express/lib/router/index.js | 6 +- .../node_modules/express/lib/router/route.js | 4 +- server/node_modules/express/lib/utils.js | 37 +- server/node_modules/express/lib/view.js | 11 +- server/node_modules/express/package.json | 102 +- server/node_modules/finalhandler/HISTORY.md | 37 + server/node_modules/finalhandler/README.md | 6 +- server/node_modules/finalhandler/index.js | 51 +- server/node_modules/finalhandler/package.json | 56 +- server/node_modules/forwarded/HISTORY.md | 17 + server/node_modules/forwarded/LICENSE | 2 +- server/node_modules/forwarded/README.md | 22 +- server/node_modules/forwarded/index.js | 73 +- server/node_modules/forwarded/package.json | 44 +- server/node_modules/fresh/HISTORY.md | 12 + server/node_modules/fresh/README.md | 6 + server/node_modules/fresh/index.js | 78 +- server/node_modules/fresh/package.json | 38 +- server/node_modules/http-errors/HISTORY.md | 31 + server/node_modules/http-errors/README.md | 54 +- server/node_modules/http-errors/index.js | 28 +- server/node_modules/http-errors/package.json | 49 +- server/node_modules/inherits/package.json | 5 +- server/node_modules/ipaddr.js/.npmignore | 2 - server/node_modules/ipaddr.js/.travis.yml | 10 - server/node_modules/ipaddr.js/Cakefile | 18 - server/node_modules/ipaddr.js/LICENSE | 4 +- server/node_modules/ipaddr.js/README.md | 32 +- server/node_modules/ipaddr.js/bower.json | 29 - server/node_modules/ipaddr.js/ipaddr.min.js | 2 +- server/node_modules/ipaddr.js/lib/ipaddr.js | 400 +- server/node_modules/ipaddr.js/package.json | 36 +- .../node_modules/ipaddr.js/src/ipaddr.coffee | 460 --- .../ipaddr.js/test/ipaddr.test.coffee | 346 -- server/node_modules/media-typer/package.json | 2 +- .../merge-descriptors/package.json | 2 +- server/node_modules/methods/package.json | 2 +- server/node_modules/mime-db/HISTORY.md | 284 +- server/node_modules/mime-db/README.md | 52 +- server/node_modules/mime-db/db.json | 2500 ++++++++++--- server/node_modules/mime-db/package.json | 54 +- server/node_modules/mime-types/HISTORY.md | 148 + server/node_modules/mime-types/README.md | 45 +- server/node_modules/mime-types/index.js | 10 +- server/node_modules/mime-types/package.json | 43 +- server/node_modules/mime/package.json | 15 +- server/node_modules/ms/package.json | 19 +- server/node_modules/negotiator/HISTORY.md | 5 + server/node_modules/negotiator/lib/charset.js | 4 +- .../node_modules/negotiator/lib/encoding.js | 4 +- .../node_modules/negotiator/lib/language.js | 14 +- server/node_modules/negotiator/package.json | 33 +- server/node_modules/on-finished/package.json | 3 +- server/node_modules/parseurl/HISTORY.md | 11 + server/node_modules/parseurl/LICENSE | 2 +- server/node_modules/parseurl/README.md | 99 +- server/node_modules/parseurl/index.js | 102 +- server/node_modules/parseurl/package.json | 45 +- .../node_modules/path-to-regexp/package.json | 2 +- server/node_modules/proxy-addr/HISTORY.md | 52 + server/node_modules/proxy-addr/README.md | 33 +- server/node_modules/proxy-addr/index.js | 194 +- server/node_modules/proxy-addr/package.json | 47 +- server/node_modules/qs/.eslintrc | 11 +- server/node_modules/qs/.jscs.json | 176 - server/node_modules/qs/CHANGELOG.md | 81 + server/node_modules/qs/README.md | 218 +- server/node_modules/qs/dist/qs.js | 491 ++- server/node_modules/qs/lib/parse.js | 169 +- server/node_modules/qs/lib/stringify.js | 164 +- server/node_modules/qs/lib/utils.js | 160 +- server/node_modules/qs/package.json | 52 +- server/node_modules/qs/test/.eslintrc | 6 + server/node_modules/qs/test/parse.js | 167 +- server/node_modules/qs/test/stringify.js | 128 +- server/node_modules/qs/test/utils.js | 114 + server/node_modules/range-parser/HISTORY.md | 5 + server/node_modules/range-parser/README.md | 33 +- server/node_modules/range-parser/index.js | 4 + server/node_modules/range-parser/package.json | 44 +- server/node_modules/send/HISTORY.md | 85 + server/node_modules/send/README.md | 78 +- server/node_modules/send/index.js | 113 +- server/node_modules/send/package.json | 58 +- server/node_modules/serve-static/HISTORY.md | 74 + server/node_modules/serve-static/README.md | 38 +- server/node_modules/serve-static/index.js | 9 +- server/node_modules/serve-static/package.json | 50 +- server/node_modules/setprototypeof/README.md | 24 +- server/node_modules/setprototypeof/index.js | 24 +- .../node_modules/setprototypeof/package.json | 36 +- server/node_modules/statuses/HISTORY.md | 10 + server/node_modules/statuses/LICENSE | 4 +- server/node_modules/statuses/README.md | 62 +- server/node_modules/statuses/codes.json | 3 +- server/node_modules/statuses/index.js | 3 + server/node_modules/statuses/package.json | 40 +- server/node_modules/type-is/HISTORY.md | 41 + server/node_modules/type-is/README.md | 94 +- server/node_modules/type-is/index.js | 4 + server/node_modules/type-is/package.json | 45 +- server/node_modules/unpipe/package.json | 17 +- server/node_modules/utils-merge/.travis.yml | 6 - server/node_modules/utils-merge/LICENSE | 4 +- server/node_modules/utils-merge/README.md | 26 +- server/node_modules/utils-merge/package.json | 29 +- server/node_modules/vary/HISTORY.md | 5 + server/node_modules/vary/index.js | 34 +- server/node_modules/vary/package.json | 35 +- server/package-lock.json | 3277 +++++++++-------- server/package.json | 23 +- 150 files changed, 8414 insertions(+), 5093 deletions(-) delete mode 100644 server/node_modules/ipaddr.js/.npmignore delete mode 100644 server/node_modules/ipaddr.js/.travis.yml delete mode 100644 server/node_modules/ipaddr.js/Cakefile delete mode 100644 server/node_modules/ipaddr.js/bower.json delete mode 100644 server/node_modules/ipaddr.js/src/ipaddr.coffee delete mode 100644 server/node_modules/ipaddr.js/test/ipaddr.test.coffee delete mode 100644 server/node_modules/qs/.jscs.json delete mode 100644 server/node_modules/utils-merge/.travis.yml diff --git a/server/config/keys.js b/server/config/keys.js index 9d65a21..04cde3b 100644 --- a/server/config/keys.js +++ b/server/config/keys.js @@ -1,8 +1,6 @@ -// keys.js - figure out what set of credentials to return -if (process.env.NODE_ENV === 'production') { - // we are in production - return the prod set of keys - module.exports = require('./prod'); -} else { - // we are in development - return the dev keys!!! - module.exports = require('./dev'); -} +module.exports = { + googleClientID: '548271082756-krvo7o9n25mpfd71e3k2g7rahlk7olo4.apps.googleusercontent.com', + googleClientSecret: 'LNtorf92cZqqVtxAniyo2PLT', + mongoURI: 'mongodb+srv://ffjabbari:15pishyy@emaily-dev.x7ckf.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', + cookieKey: 'fredman' +}; \ No newline at end of file diff --git a/server/node_modules/accepts/HISTORY.md b/server/node_modules/accepts/HISTORY.md index 0477ed7..0bf0417 100644 --- a/server/node_modules/accepts/HISTORY.md +++ b/server/node_modules/accepts/HISTORY.md @@ -1,3 +1,27 @@ +1.3.7 / 2019-04-29 +================== + + * deps: negotiator@0.6.2 + - Fix sorting charset, encoding, and language with extra parameters + +1.3.6 / 2019-04-28 +================== + + * deps: mime-types@~2.1.24 + - deps: mime-db@~1.40.0 + +1.3.5 / 2018-02-28 +================== + + * deps: mime-types@~2.1.18 + - deps: mime-db@~1.33.0 + +1.3.4 / 2017-08-22 +================== + + * deps: mime-types@~2.1.16 + - deps: mime-db@~1.29.0 + 1.3.3 / 2016-05-02 ================== diff --git a/server/node_modules/accepts/README.md b/server/node_modules/accepts/README.md index ae36676..66a2f54 100644 --- a/server/node_modules/accepts/README.md +++ b/server/node_modules/accepts/README.md @@ -1,28 +1,36 @@ # accepts -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] [![Node.js Version][node-version-image]][node-version-url] [![Build Status][travis-image]][travis-url] [![Test Coverage][coveralls-image]][coveralls-url] -Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). Extracted from [koa](https://www.npmjs.com/package/koa) for general use. +Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). +Extracted from [koa](https://www.npmjs.com/package/koa) for general use. In addition to negotiator, it allows: -- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`. +- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` + as well as `('text/html', 'application/json')`. - Allows type shorthands such as `json`. - Returns `false` when no types match - Treats non-existent headers as `*` ## 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 accepts +$ npm install accepts ``` ## API + + ```js var accepts = require('accepts') ``` @@ -88,11 +96,11 @@ server. var accepts = require('accepts') var http = require('http') -function app(req, res) { +function app (req, res) { var accept = accepts(req) // the order of this list is significant; should be server preferred order - switch(accept.type(['json', 'html'])) { + switch (accept.type(['json', 'html'])) { case 'json': res.setHeader('Content-Type', 'application/json') res.write('{"hello":"world!"}') @@ -123,13 +131,12 @@ curl -I -H'Accept: text/html' http://localhost:3000/ [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/accepts.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master +[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master +[node-version-image]: https://badgen.net/npm/node/accepts +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/accepts [npm-url]: https://npmjs.org/package/accepts -[node-version-image]: https://img.shields.io/node/v/accepts.svg -[node-version-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg +[npm-version-image]: https://badgen.net/npm/v/accepts +[travis-image]: https://badgen.net/travis/jshttp/accepts/master [travis-url]: https://travis-ci.org/jshttp/accepts -[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/accepts -[downloads-image]: https://img.shields.io/npm/dm/accepts.svg -[downloads-url]: https://npmjs.org/package/accepts diff --git a/server/node_modules/accepts/index.js b/server/node_modules/accepts/index.js index e80192a..e9b2f63 100644 --- a/server/node_modules/accepts/index.js +++ b/server/node_modules/accepts/index.js @@ -29,9 +29,10 @@ module.exports = Accepts * @public */ -function Accepts(req) { - if (!(this instanceof Accepts)) +function Accepts (req) { + if (!(this instanceof Accepts)) { return new Accepts(req) + } this.headers = req.headers this.negotiator = new Negotiator(req) @@ -95,12 +96,18 @@ Accepts.prototype.types = function (types_) { return this.negotiator.mediaTypes() } - if (!this.headers.accept) return types[0]; - var mimes = types.map(extToMime); - var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)); - var first = accepts[0]; - if (!first) return false; - return types[mimes.indexOf(first)]; + // no accept header, return first given type + if (!this.headers.accept) { + return types[0] + } + + var mimes = types.map(extToMime) + var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)) + var first = accepts[0] + + return first + ? types[mimes.indexOf(first)] + : false } /** @@ -212,7 +219,7 @@ Accepts.prototype.languages = function (languages_) { * @private */ -function extToMime(type) { +function extToMime (type) { return type.indexOf('/') === -1 ? mime.lookup(type) : type @@ -226,6 +233,6 @@ function extToMime(type) { * @private */ -function validMime(type) { - return typeof type === 'string'; +function validMime (type) { + return typeof type === 'string' } diff --git a/server/node_modules/accepts/package.json b/server/node_modules/accepts/package.json index 2c3d1bd..7c3371c 100644 --- a/server/node_modules/accepts/package.json +++ b/server/node_modules/accepts/package.json @@ -1,27 +1,27 @@ { - "_from": "accepts@~1.3.3", - "_id": "accepts@1.3.3", + "_from": "accepts@~1.3.7", + "_id": "accepts@1.3.7", "_inBundle": false, - "_integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "_location": "/accepts", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "accepts@~1.3.3", + "raw": "accepts@~1.3.7", "name": "accepts", "escapedName": "accepts", - "rawSpec": "~1.3.3", + "rawSpec": "~1.3.7", "saveSpec": null, - "fetchSpec": "~1.3.3" + "fetchSpec": "~1.3.7" }, "_requiredBy": [ "/express" ], - "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "_shasum": "c3ca7434938648c3e0d9c1e328dd68b622c284ca", - "_spec": "accepts@~1.3.3", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "_shasum": "531bc726517a3b2b41f850021c6cc15eaab507cd", + "_spec": "accepts@~1.3.7", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "bugs": { "url": "https://github.com/jshttp/accepts/issues" }, @@ -38,14 +38,22 @@ } ], "dependencies": { - "mime-types": "~2.1.11", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" }, "deprecated": false, "description": "Higher-level content negotiation", "devDependencies": { - "istanbul": "0.4.3", - "mocha": "~1.21.5" + "deep-equal": "1.0.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" }, "engines": { "node": ">= 0.6" @@ -69,9 +77,10 @@ "url": "git+https://github.com/jshttp/accepts.git" }, "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" }, - "version": "1.3.3" + "version": "1.3.7" } diff --git a/server/node_modules/array-flatten/package.json b/server/node_modules/array-flatten/package.json index 401862e..45bb4f6 100644 --- a/server/node_modules/array-flatten/package.json +++ b/server/node_modules/array-flatten/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "_shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2", "_spec": "array-flatten@1.1.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Blake Embrey", "email": "hello@blakeembrey.com", diff --git a/server/node_modules/content-disposition/HISTORY.md b/server/node_modules/content-disposition/HISTORY.md index 53849b6..63a3d08 100644 --- a/server/node_modules/content-disposition/HISTORY.md +++ b/server/node_modules/content-disposition/HISTORY.md @@ -1,3 +1,8 @@ +0.5.3 / 2018-12-17 +================== + + * Use `safe-buffer` for improved Buffer API + 0.5.2 / 2016-12-08 ================== diff --git a/server/node_modules/content-disposition/LICENSE b/server/node_modules/content-disposition/LICENSE index b7dce6c..84441fb 100644 --- a/server/node_modules/content-disposition/LICENSE +++ b/server/node_modules/content-disposition/LICENSE @@ -1,6 +1,6 @@ (The MIT License) -Copyright (c) 2014 Douglas Christopher Wilson +Copyright (c) 2014-2017 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/server/node_modules/content-disposition/README.md b/server/node_modules/content-disposition/README.md index 992d19a..eebef13 100644 --- a/server/node_modules/content-disposition/README.md +++ b/server/node_modules/content-disposition/README.md @@ -16,6 +16,8 @@ $ npm install content-disposition ## API + + ```js var contentDisposition = require('content-disposition') ``` @@ -26,6 +28,8 @@ Create an attachment `Content-Disposition` header value using the given file nam if supplied. The `filename` is optional and if no file name is desired, but you want to specify `options`, set `filename` to `undefined`. + + ```js res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf')) ``` @@ -66,8 +70,10 @@ it). The type is normalized to lower-case. ### contentDisposition.parse(string) + + ```js -var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'); +var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt') ``` Parse a `Content-Disposition` header string. This automatically handles extended @@ -88,12 +94,13 @@ are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF- ```js var contentDisposition = require('content-disposition') var destroy = require('destroy') +var fs = require('fs') var http = require('http') var onFinished = require('on-finished') var filePath = '/path/to/public/plans.pdf' -http.createServer(function onRequest(req, res) { +http.createServer(function onRequest (req, res) { // set headers res.setHeader('Content-Type', 'application/pdf') res.setHeader('Content-Disposition', contentDisposition(filePath)) @@ -101,7 +108,7 @@ http.createServer(function onRequest(req, res) { // send file var stream = fs.createReadStream(filePath) stream.pipe(res) - onFinished(res, function (err) { + onFinished(res, function () { destroy(stream) }) }) @@ -129,13 +136,13 @@ $ npm test [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/content-disposition.svg?style=flat +[npm-image]: https://img.shields.io/npm/v/content-disposition.svg [npm-url]: https://npmjs.org/package/content-disposition -[node-version-image]: https://img.shields.io/node/v/content-disposition.svg?style=flat +[node-version-image]: https://img.shields.io/node/v/content-disposition.svg [node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/content-disposition.svg?style=flat +[travis-image]: https://img.shields.io/travis/jshttp/content-disposition.svg [travis-url]: https://travis-ci.org/jshttp/content-disposition -[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg?style=flat +[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg [coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master -[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg?style=flat +[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg [downloads-url]: https://npmjs.org/package/content-disposition diff --git a/server/node_modules/content-disposition/index.js b/server/node_modules/content-disposition/index.js index 88a0d0a..3092a4d 100644 --- a/server/node_modules/content-disposition/index.js +++ b/server/node_modules/content-disposition/index.js @@ -1,6 +1,6 @@ /*! * content-disposition - * Copyright(c) 2014 Douglas Christopher Wilson + * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ @@ -8,6 +8,7 @@ /** * Module exports. + * @public */ module.exports = contentDisposition @@ -15,18 +16,22 @@ module.exports.parse = parse /** * Module dependencies. + * @private */ var basename = require('path').basename +var Buffer = require('safe-buffer').Buffer /** * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%") + * @private */ var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex /** * RegExp to match percent encoding escape. + * @private */ var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/ @@ -34,6 +39,7 @@ var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g /** * RegExp to match non-latin1 characters. + * @private */ var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g @@ -43,12 +49,14 @@ var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g * * quoted-pair = "\" CHAR * CHAR = + * @private */ -var QESC_REGEXP = /\\([\u0000-\u007f])/g +var QESC_REGEXP = /\\([\u0000-\u007f])/g // eslint-disable-line no-control-regex /** * RegExp to match chars that must be quoted-pair in RFC 2616 + * @private */ var QUOTE_REGEXP = /([\\"])/g @@ -75,6 +83,7 @@ var QUOTE_REGEXP = /([\\"])/g * HT = * CTL = * OCTET = + * @private */ var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex @@ -100,6 +109,7 @@ var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/ * attr-char = ALPHA / DIGIT * / "!" / "#" / "$" / "&" / "+" / "-" / "." * / "^" / "_" / "`" / "|" / "~" + * @private */ var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/ @@ -115,6 +125,7 @@ var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za- * disp-ext-parm = token "=" value * | ext-token "=" ext-value * ext-token = + * @private */ var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex @@ -127,7 +138,7 @@ var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ * @param {string} [options.type=attachment] * @param {string|boolean} [options.fallback=true] * @return {string} - * @api public + * @public */ function contentDisposition (filename, options) { @@ -149,7 +160,7 @@ function contentDisposition (filename, options) { * @param {string} [filename] * @param {string|boolean} [fallback=true] * @return {object} - * @api private + * @private */ function createparams (filename, fallback) { @@ -210,7 +221,7 @@ function createparams (filename, fallback) { * @param {string} obj.type * @param {object} [obj.parameters] * @return {string} - * @api private + * @private */ function format (obj) { @@ -248,7 +259,7 @@ function format (obj) { * * @param {string} str * @return {string} - * @api private + * @private */ function decodefield (str) { @@ -270,7 +281,7 @@ function decodefield (str) { value = getlatin1(binary) break case 'utf-8': - value = new Buffer(binary, 'binary').toString('utf8') + value = Buffer.from(binary, 'binary').toString('utf8') break default: throw new TypeError('unsupported charset in extended field') @@ -284,7 +295,7 @@ function decodefield (str) { * * @param {string} val * @return {string} - * @api private + * @private */ function getlatin1 (val) { @@ -297,7 +308,7 @@ function getlatin1 (val) { * * @param {string} string * @return {object} - * @api private + * @public */ function parse (string) { @@ -378,7 +389,7 @@ function parse (string) { * @param {string} str * @param {string} hex * @return {string} - * @api private + * @private */ function pdecode (str, hex) { @@ -390,17 +401,14 @@ function pdecode (str, hex) { * * @param {string} char * @return {string} - * @api private + * @private */ function pencode (char) { - var hex = String(char) + return '%' + String(char) .charCodeAt(0) .toString(16) .toUpperCase() - return hex.length === 1 - ? '%0' + hex - : '%' + hex } /** @@ -408,7 +416,7 @@ function pencode (char) { * * @param {string} val * @return {string} - * @api private + * @private */ function qstring (val) { @@ -422,7 +430,7 @@ function qstring (val) { * * @param {string} val * @return {string} - * @api private + * @private */ function ustring (val) { @@ -437,6 +445,11 @@ function ustring (val) { /** * Class for parsed Content-Disposition header for v8 optimization + * + * @public + * @param {string} type + * @param {object} parameters + * @constructor */ function ContentDisposition (type, parameters) { diff --git a/server/node_modules/content-disposition/package.json b/server/node_modules/content-disposition/package.json index d8bc195..8b0ec93 100644 --- a/server/node_modules/content-disposition/package.json +++ b/server/node_modules/content-disposition/package.json @@ -1,46 +1,51 @@ { - "_from": "content-disposition@0.5.2", - "_id": "content-disposition@0.5.2", + "_from": "content-disposition@0.5.3", + "_id": "content-disposition@0.5.3", "_inBundle": false, - "_integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "_integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "_location": "/content-disposition", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "content-disposition@0.5.2", + "raw": "content-disposition@0.5.3", "name": "content-disposition", "escapedName": "content-disposition", - "rawSpec": "0.5.2", + "rawSpec": "0.5.3", "saveSpec": null, - "fetchSpec": "0.5.2" + "fetchSpec": "0.5.3" }, "_requiredBy": [ "/express" ], - "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "_shasum": "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4", - "_spec": "content-disposition@0.5.2", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "_shasum": "e130caf7e7279087c5616c2007d0485698984fbd", + "_spec": "content-disposition@0.5.3", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, "bugs": { "url": "https://github.com/jshttp/content-disposition/issues" }, "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], + "dependencies": { + "safe-buffer": "5.1.2" + }, "deprecated": false, "description": "Create and parse Content-Disposition header", "devDependencies": { - "eslint": "3.11.1", - "eslint-config-standard": "6.2.1", - "eslint-plugin-promise": "3.3.0", - "eslint-plugin-standard": "2.0.1", + "deep-equal": "1.0.1", + "eslint": "5.10.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-markdown": "1.0.0-rc.1", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", "istanbul": "0.4.5", - "mocha": "1.21.5" + "mocha": "5.2.0" }, "engines": { "node": ">= 0.6" @@ -65,10 +70,10 @@ "url": "git+https://github.com/jshttp/content-disposition.git" }, "scripts": { - "lint": "eslint .", + "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --bail --check-leaks test/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" }, - "version": "0.5.2" + "version": "0.5.3" } diff --git a/server/node_modules/content-type/HISTORY.md b/server/node_modules/content-type/HISTORY.md index 01652ff..8f5cb70 100644 --- a/server/node_modules/content-type/HISTORY.md +++ b/server/node_modules/content-type/HISTORY.md @@ -1,3 +1,13 @@ +1.0.4 / 2017-09-11 +================== + + * perf: skip parameter parsing when no parameters + +1.0.3 / 2017-09-10 +================== + + * perf: remove argument reassignment + 1.0.2 / 2016-05-09 ================== diff --git a/server/node_modules/content-type/index.js b/server/node_modules/content-type/index.js index 61ba6b5..6ce03f2 100644 --- a/server/node_modules/content-type/index.js +++ b/server/node_modules/content-type/index.js @@ -20,9 +20,9 @@ * obs-text = %x80-FF * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) */ -var paramRegExp = /; *([!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+) */g -var textRegExp = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ -var tokenRegExp = /^[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+$/ +var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g +var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ +var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ /** * RegExp to match quoted-pair in RFC 7230 sec 3.2.6 @@ -30,21 +30,21 @@ var tokenRegExp = /^[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+$/ * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) * obs-text = %x80-FF */ -var qescRegExp = /\\([\u000b\u0020-\u00ff])/g +var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g /** * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6 */ -var quoteRegExp = /([\\"])/g +var QUOTE_REGEXP = /([\\"])/g /** - * RegExp to match type in RFC 6838 + * RegExp to match type in RFC 7231 sec 3.1.1.1 * * media-type = type "/" subtype * type = token * subtype = token */ -var typeRegExp = /^[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+\/[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+$/ +var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ /** * Module exports. @@ -62,7 +62,7 @@ exports.parse = parse * @public */ -function format(obj) { +function format (obj) { if (!obj || typeof obj !== 'object') { throw new TypeError('argument obj is required') } @@ -70,7 +70,7 @@ function format(obj) { var parameters = obj.parameters var type = obj.type - if (!type || !typeRegExp.test(type)) { + if (!type || !TYPE_REGEXP.test(type)) { throw new TypeError('invalid type') } @@ -84,7 +84,7 @@ function format(obj) { for (var i = 0; i < params.length; i++) { param = params[i] - if (!tokenRegExp.test(param)) { + if (!TOKEN_REGEXP.test(param)) { throw new TypeError('invalid parameter name') } @@ -103,61 +103,61 @@ function format(obj) { * @public */ -function parse(string) { +function parse (string) { if (!string) { throw new TypeError('argument string is required') } - if (typeof string === 'object') { - // support req/res-like objects as argument - string = getcontenttype(string) + // support req/res-like objects as argument + var header = typeof string === 'object' + ? getcontenttype(string) + : string - if (typeof string !== 'string') { - throw new TypeError('content-type header is missing from object'); - } - } - - if (typeof string !== 'string') { + if (typeof header !== 'string') { throw new TypeError('argument string is required to be a string') } - var index = string.indexOf(';') + var index = header.indexOf(';') var type = index !== -1 - ? string.substr(0, index).trim() - : string.trim() + ? header.substr(0, index).trim() + : header.trim() - if (!typeRegExp.test(type)) { + if (!TYPE_REGEXP.test(type)) { throw new TypeError('invalid media type') } - var key - var match var obj = new ContentType(type.toLowerCase()) - var value - paramRegExp.lastIndex = index + // parse parameters + if (index !== -1) { + var key + var match + var value - while (match = paramRegExp.exec(string)) { - if (match.index !== index) { - throw new TypeError('invalid parameter format') - } + PARAM_REGEXP.lastIndex = index - index += match[0].length - key = match[1].toLowerCase() - value = match[2] + while ((match = PARAM_REGEXP.exec(header))) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } - if (value[0] === '"') { - // remove quotes and escapes - value = value - .substr(1, value.length - 2) - .replace(qescRegExp, '$1') - } + index += match[0].length + key = match[1].toLowerCase() + value = match[2] - obj.parameters[key] = value - } + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(QESC_REGEXP, '$1') + } - if (index !== -1 && index !== string.length) { - throw new TypeError('invalid parameter format') + obj.parameters[key] = value + } + + if (index !== header.length) { + throw new TypeError('invalid parameter format') + } } return obj @@ -171,16 +171,22 @@ function parse(string) { * @private */ -function getcontenttype(obj) { +function getcontenttype (obj) { + var header + if (typeof obj.getHeader === 'function') { // res-like - return obj.getHeader('content-type') + header = obj.getHeader('content-type') + } else if (typeof obj.headers === 'object') { + // req-like + header = obj.headers && obj.headers['content-type'] } - if (typeof obj.headers === 'object') { - // req-like - return obj.headers && obj.headers['content-type'] + if (typeof header !== 'string') { + throw new TypeError('content-type header is missing from object') } + + return header } /** @@ -191,26 +197,26 @@ function getcontenttype(obj) { * @private */ -function qstring(val) { +function qstring (val) { var str = String(val) // no need to quote tokens - if (tokenRegExp.test(str)) { + if (TOKEN_REGEXP.test(str)) { return str } - if (str.length > 0 && !textRegExp.test(str)) { + if (str.length > 0 && !TEXT_REGEXP.test(str)) { throw new TypeError('invalid parameter value') } - return '"' + str.replace(quoteRegExp, '\\$1') + '"' + return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' } /** * Class to represent a content type. * @private */ -function ContentType(type) { +function ContentType (type) { this.parameters = Object.create(null) this.type = type } diff --git a/server/node_modules/content-type/package.json b/server/node_modules/content-type/package.json index ca64cdb..6e97c1c 100644 --- a/server/node_modules/content-type/package.json +++ b/server/node_modules/content-type/package.json @@ -1,27 +1,28 @@ { - "_from": "content-type@~1.0.2", - "_id": "content-type@1.0.2", + "_from": "content-type@~1.0.4", + "_id": "content-type@1.0.4", "_inBundle": false, - "_integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "_integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "_location": "/content-type", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "content-type@~1.0.2", + "raw": "content-type@~1.0.4", "name": "content-type", "escapedName": "content-type", - "rawSpec": "~1.0.2", + "rawSpec": "~1.0.4", "saveSpec": null, - "fetchSpec": "~1.0.2" + "fetchSpec": "~1.0.4" }, "_requiredBy": [ + "/body-parser", "/express" ], - "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "_shasum": "b7d113aee7a8dd27bd21133c4dc2529df1721eed", - "_spec": "content-type@~1.0.2", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "_shasum": "e138cc75e040c727b1966fe5e5f8c9aee256fe3b", + "_spec": "content-type@~1.0.4", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/body-parser", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" @@ -33,7 +34,13 @@ "deprecated": false, "description": "Create and parse HTTP Content-Type header", "devDependencies": { - "istanbul": "0.4.3", + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.7.0", + "eslint-plugin-node": "5.1.1", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-standard": "3.0.1", + "istanbul": "0.4.5", "mocha": "~1.21.5" }, "engines": { @@ -60,9 +67,10 @@ "url": "git+https://github.com/jshttp/content-type.git" }, "scripts": { + "lint": "eslint .", "test": "mocha --reporter spec --check-leaks --bail 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/" }, - "version": "1.0.2" + "version": "1.0.4" } diff --git a/server/node_modules/cookie-signature/package.json b/server/node_modules/cookie-signature/package.json index f41703b..5ae0870 100644 --- a/server/node_modules/cookie-signature/package.json +++ b/server/node_modules/cookie-signature/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "_shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c", "_spec": "cookie-signature@1.0.6", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "TJ Holowaychuk", "email": "tj@learnboost.com" diff --git a/server/node_modules/cookie/HISTORY.md b/server/node_modules/cookie/HISTORY.md index 5bd6485..da2bf24 100644 --- a/server/node_modules/cookie/HISTORY.md +++ b/server/node_modules/cookie/HISTORY.md @@ -1,3 +1,8 @@ +0.4.0 / 2019-05-15 +================== + + * Add `SameSite=None` support + 0.3.1 / 2016-05-26 ================== diff --git a/server/node_modules/cookie/README.md b/server/node_modules/cookie/README.md index db0d078..857fb77 100644 --- a/server/node_modules/cookie/README.md +++ b/server/node_modules/cookie/README.md @@ -1,7 +1,7 @@ # cookie -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] [![Node.js Version][node-version-image]][node-version-url] [![Build Status][travis-image]][travis-url] [![Test Coverage][coveralls-image]][coveralls-url] @@ -64,7 +64,7 @@ var setCookie = cookie.serialize('foo', 'bar'); ##### domain -Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6266-5.2.3]. By default, no +Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6265-5.2.3]. By default, no domain is set, and most clients will consider the cookie to apply to only the current domain. ##### encode @@ -73,22 +73,22 @@ Specifies a function that will be used to encode a cookie's value. Since value o has a limited character set (and must be a simple string), this function can be used to encode a value into a string suited for a cookie's value. -The default function is the global `ecodeURIComponent`, which will encode a JavaScript string +The default function is the global `encodeURIComponent`, which will encode a JavaScript string into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range. ##### expires -Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6266-5.2.1]. +Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6265-5.2.1]. By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and will delete it on a condition like exiting a web browser application. -**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and -`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this, +**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and +`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this, so if both are set, they should point to the same date and time. ##### httpOnly -Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6266-5.2.6]. When truthy, +Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6265-5.2.6]. When truthy, the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set. **note** be careful when setting this to `true`, as compliant clients will not allow client-side @@ -96,38 +96,37 @@ JavaScript to see the cookie in `document.cookie`. ##### maxAge -Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6266-5.2.2]. +Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6265-5.2.2]. The given number will be converted to an integer by rounding down. By default, no maximum age is set. -**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and -`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this, +**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and +`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this, so if both are set, they should point to the same date and time. ##### path -Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6266-5.2.4]. By default, the path -is considered the ["default path"][rfc-6266-5.1.4]. By default, no maximum age is set, and most -clients will consider this a "non-persistent cookie" and will delete it on a condition like exiting -a web browser application. +Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path +is considered the ["default path"][rfc-6265-5.1.4]. ##### sameSite -Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][draft-west-first-party-cookies-07]. +Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-03-4.1.2.7]. - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement. - `false` will not set the `SameSite` attribute. - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement. + - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie. - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement. -More information about the different enforcement levels can be found in the specification -https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-4.1.1 +More information about the different enforcement levels can be found in +[the specification][rfc-6265bis-03-4.1.2.7]. **note** This is an attribute that has not yet been fully standardized, and may change in the future. This also means many clients may ignore this attribute until they understand it. ##### secure -Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6266-5.2.5]. When truthy, +Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6265-5.2.5]. When truthy, the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set. **note** be careful when setting this to `true`, as compliant clients will not send the cookie back to @@ -178,7 +177,7 @@ function onRequest(req, res) { res.write('
'); res.write(' '); - res.end(''); } http.createServer(onRequest).listen(3000); @@ -190,31 +189,65 @@ http.createServer(onRequest).listen(3000); $ npm test ``` +## Benchmark + +``` +$ npm run bench + +> cookie@0.3.1 bench cookie +> node benchmark/index.js + + http_parser@2.8.0 + node@6.14.2 + v8@5.1.281.111 + uv@1.16.1 + zlib@1.2.11 + ares@1.10.1-DEV + icu@58.2 + modules@48 + napi@3 + openssl@1.0.2o + +> node benchmark/parse.js + + cookie.parse + + 6 tests completed. + + simple x 1,200,691 ops/sec ±1.12% (189 runs sampled) + decode x 1,012,994 ops/sec ±0.97% (186 runs sampled) + unquote x 1,074,174 ops/sec ±2.43% (186 runs sampled) + duplicates x 438,424 ops/sec ±2.17% (184 runs sampled) + 10 cookies x 147,154 ops/sec ±1.01% (186 runs sampled) + 100 cookies x 14,274 ops/sec ±1.07% (187 runs sampled) +``` + ## References -- [RFC 6266: HTTP State Management Mechanism][rfc-6266] -- [Same-site Cookies][draft-west-first-party-cookies-07] +- [RFC 6265: HTTP State Management Mechanism][rfc-6265] +- [Same-site Cookies][rfc-6265bis-03-4.1.2.7] -[draft-west-first-party-cookies-07]: https://tools.ietf.org/html/draft-west-first-party-cookies-07 -[rfc-6266]: https://tools.ietf.org/html/rfc6266 -[rfc-6266-5.1.4]: https://tools.ietf.org/html/rfc6266#section-5.1.4 -[rfc-6266-5.2.1]: https://tools.ietf.org/html/rfc6266#section-5.2.1 -[rfc-6266-5.2.2]: https://tools.ietf.org/html/rfc6266#section-5.2.2 -[rfc-6266-5.2.3]: https://tools.ietf.org/html/rfc6266#section-5.2.3 -[rfc-6266-5.2.4]: https://tools.ietf.org/html/rfc6266#section-5.2.4 -[rfc-6266-5.3]: https://tools.ietf.org/html/rfc6266#section-5.3 +[rfc-6265bis-03-4.1.2.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7 +[rfc-6265]: https://tools.ietf.org/html/rfc6265 +[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4 +[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1 +[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2 +[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3 +[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4 +[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5 +[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6 +[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3 ## License [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/cookie.svg -[npm-url]: https://npmjs.org/package/cookie -[node-version-image]: https://img.shields.io/node/v/cookie.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master +[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master +[node-version-image]: https://badgen.net/npm/node/cookie [node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/cookie/master.svg +[npm-downloads-image]: https://badgen.net/npm/dm/cookie +[npm-url]: https://npmjs.org/package/cookie +[npm-version-image]: https://badgen.net/npm/v/cookie +[travis-image]: https://badgen.net/travis/jshttp/cookie/master [travis-url]: https://travis-ci.org/jshttp/cookie -[coveralls-image]: https://img.shields.io/coveralls/jshttp/cookie/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master -[downloads-image]: https://img.shields.io/npm/dm/cookie.svg -[downloads-url]: https://npmjs.org/package/cookie diff --git a/server/node_modules/cookie/index.js b/server/node_modules/cookie/index.js index ab2e467..16f56c0 100644 --- a/server/node_modules/cookie/index.js +++ b/server/node_modules/cookie/index.js @@ -170,6 +170,9 @@ function serialize(name, val, options) { case 'strict': str += '; SameSite=Strict'; break; + case 'none': + str += '; SameSite=None'; + break; default: throw new TypeError('option sameSite is invalid'); } diff --git a/server/node_modules/cookie/package.json b/server/node_modules/cookie/package.json index 33625c7..c747485 100644 --- a/server/node_modules/cookie/package.json +++ b/server/node_modules/cookie/package.json @@ -1,27 +1,27 @@ { - "_from": "cookie@0.3.1", - "_id": "cookie@0.3.1", + "_from": "cookie@0.4.0", + "_id": "cookie@0.4.0", "_inBundle": false, - "_integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "_integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "_location": "/cookie", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "cookie@0.3.1", + "raw": "cookie@0.4.0", "name": "cookie", "escapedName": "cookie", - "rawSpec": "0.3.1", + "rawSpec": "0.4.0", "saveSpec": null, - "fetchSpec": "0.3.1" + "fetchSpec": "0.4.0" }, "_requiredBy": [ "/express" ], - "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "_shasum": "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb", - "_spec": "cookie@0.3.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "_shasum": "beb437e7022b3b6d49019d088665303ebe9c14ba", + "_spec": "cookie@0.4.0", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Roman Shtylman", "email": "shtylman@gmail.com" @@ -39,8 +39,12 @@ "deprecated": false, "description": "HTTP server cookie parsing and serialization", "devDependencies": { - "istanbul": "0.4.3", - "mocha": "1.21.5" + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "5.16.0", + "eslint-plugin-markdown": "1.0.0", + "istanbul": "0.4.5", + "mocha": "6.1.4" }, "engines": { "node": ">= 0.6" @@ -63,9 +67,12 @@ "url": "git+https://github.com/jshttp/cookie.git" }, "scripts": { + "bench": "node benchmark/index.js", + "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/" + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "version": "node scripts/version-history.js && git add HISTORY.md" }, - "version": "0.3.1" + "version": "0.4.0" } diff --git a/server/node_modules/debug/package.json b/server/node_modules/debug/package.json index 0e2bcce..00061a9 100644 --- a/server/node_modules/debug/package.json +++ b/server/node_modules/debug/package.json @@ -1,4 +1,10 @@ { + "_args": [ + [ + "debug@2.6.7", + "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server" + ] + ], "_from": "debug@2.6.7", "_id": "debug@2.6.7", "_inBundle": false, @@ -16,14 +22,12 @@ "fetchSpec": "2.6.7" }, "_requiredBy": [ - "/express", - "/finalhandler", - "/send" + "/sendgrid", + "/undefsafe" ], "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "_shasum": "92bad1f6d05bbb6bba22cca88bcd0ec894c2861e", - "_spec": "debug@2.6.7", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_spec": "2.6.7", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" @@ -32,7 +36,6 @@ "bugs": { "url": "https://github.com/visionmedia/debug/issues" }, - "bundleDependencies": false, "component": { "scripts": { "debug/index.js": "browser.js", @@ -53,7 +56,6 @@ "dependencies": { "ms": "2.0.0" }, - "deprecated": false, "description": "small debugging utility", "devDependencies": { "browserify": "9.0.3", diff --git a/server/node_modules/depd/package.json b/server/node_modules/depd/package.json index e6e0eea..fc367c8 100644 --- a/server/node_modules/depd/package.json +++ b/server/node_modules/depd/package.json @@ -1,29 +1,32 @@ { - "_from": "depd@~1.1.0", + "_args": [ + [ + "depd@1.1.0", + "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server" + ] + ], + "_from": "depd@1.1.0", "_id": "depd@1.1.0", "_inBundle": false, "_integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", "_location": "/depd", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "depd@~1.1.0", + "raw": "depd@1.1.0", "name": "depd", "escapedName": "depd", - "rawSpec": "~1.1.0", + "rawSpec": "1.1.0", "saveSpec": null, - "fetchSpec": "~1.1.0" + "fetchSpec": "1.1.0" }, "_requiredBy": [ - "/express", - "/http-errors", - "/send" + "/cookies" ], "_resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "_shasum": "e1bd82c6aab6ced965b97b88b17ed3e528ca18c3", - "_spec": "depd@~1.1.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_spec": "1.1.0", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" @@ -32,8 +35,6 @@ "bugs": { "url": "https://github.com/dougwilson/nodejs-depd/issues" }, - "bundleDependencies": false, - "deprecated": false, "description": "Deprecate all the things", "devDependencies": { "beautify-benchmark": "0.2.4", diff --git a/server/node_modules/destroy/package.json b/server/node_modules/destroy/package.json index bfe87a5..83e2a67 100644 --- a/server/node_modules/destroy/package.json +++ b/server/node_modules/destroy/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "_shasum": "978857442c44749e4206613e37946205826abd80", "_spec": "destroy@~1.0.4", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/send", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/send", "author": { "name": "Jonathan Ong", "email": "me@jongleberry.com", diff --git a/server/node_modules/ee-first/package.json b/server/node_modules/ee-first/package.json index cdb39d2..de81345 100644 --- a/server/node_modules/ee-first/package.json +++ b/server/node_modules/ee-first/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "_shasum": "590c61156b0ae2f4f0255732a158b266bc56b21d", "_spec": "ee-first@1.1.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/on-finished", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/on-finished", "author": { "name": "Jonathan Ong", "email": "me@jongleberry.com", diff --git a/server/node_modules/encodeurl/HISTORY.md b/server/node_modules/encodeurl/HISTORY.md index 06d34a5..41313b2 100644 --- a/server/node_modules/encodeurl/HISTORY.md +++ b/server/node_modules/encodeurl/HISTORY.md @@ -1,3 +1,8 @@ +1.0.2 / 2018-01-21 +================== + + * Fix encoding `%` as last character + 1.0.1 / 2016-06-09 ================== diff --git a/server/node_modules/encodeurl/README.md b/server/node_modules/encodeurl/README.md index b086133..127c5a0 100644 --- a/server/node_modules/encodeurl/README.md +++ b/server/node_modules/encodeurl/README.md @@ -10,6 +10,10 @@ Encode a URL to a percent-encoded form, excluding already-encoded sequences ## 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 encodeurl ``` diff --git a/server/node_modules/encodeurl/index.js b/server/node_modules/encodeurl/index.js index ae77cc9..fc4906c 100644 --- a/server/node_modules/encodeurl/index.js +++ b/server/node_modules/encodeurl/index.js @@ -19,7 +19,7 @@ module.exports = encodeUrl * @private */ -var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]))+/g +var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g /** * RegExp to match unmatched surrogate pair. diff --git a/server/node_modules/encodeurl/package.json b/server/node_modules/encodeurl/package.json index c155114..8a2259b 100644 --- a/server/node_modules/encodeurl/package.json +++ b/server/node_modules/encodeurl/package.json @@ -1,19 +1,19 @@ { - "_from": "encodeurl@~1.0.1", - "_id": "encodeurl@1.0.1", + "_from": "encodeurl@~1.0.2", + "_id": "encodeurl@1.0.2", "_inBundle": false, - "_integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "_integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "_location": "/encodeurl", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "encodeurl@~1.0.1", + "raw": "encodeurl@~1.0.2", "name": "encodeurl", "escapedName": "encodeurl", - "rawSpec": "~1.0.1", + "rawSpec": "~1.0.2", "saveSpec": null, - "fetchSpec": "~1.0.1" + "fetchSpec": "~1.0.2" }, "_requiredBy": [ "/express", @@ -21,10 +21,10 @@ "/send", "/serve-static" ], - "_resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "_shasum": "79e3d58655346909fe6f0f45a5de68103b294d20", - "_spec": "encodeurl@~1.0.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "_shasum": "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59", + "_spec": "encodeurl@~1.0.2", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "bugs": { "url": "https://github.com/pillarjs/encodeurl/issues" }, @@ -38,11 +38,13 @@ "deprecated": false, "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences", "devDependencies": { - "eslint": "2.11.1", - "eslint-config-standard": "5.3.1", - "eslint-plugin-promise": "1.3.2", - "eslint-plugin-standard": "1.3.2", - "istanbul": "0.4.3", + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.8.0", + "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" }, "engines": { @@ -67,10 +69,10 @@ "url": "git+https://github.com/pillarjs/encodeurl.git" }, "scripts": { - "lint": "eslint **/*.js", + "lint": "eslint .", "test": "mocha --reporter spec --bail --check-leaks test/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" }, - "version": "1.0.1" + "version": "1.0.2" } diff --git a/server/node_modules/escape-html/package.json b/server/node_modules/escape-html/package.json index 0e45465..f56200b 100644 --- a/server/node_modules/escape-html/package.json +++ b/server/node_modules/escape-html/package.json @@ -24,7 +24,7 @@ "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "_shasum": "0258eae4d3d0c0974de1c169188ef0051d1d1988", "_spec": "escape-html@~1.0.3", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "bugs": { "url": "https://github.com/component/escape-html/issues" }, diff --git a/server/node_modules/etag/HISTORY.md b/server/node_modules/etag/HISTORY.md index 136da8c..222b293 100644 --- a/server/node_modules/etag/HISTORY.md +++ b/server/node_modules/etag/HISTORY.md @@ -1,3 +1,8 @@ +1.8.1 / 2017-09-12 +================== + + * perf: replace regular expression with substring + 1.8.0 / 2017-02-18 ================== diff --git a/server/node_modules/etag/README.md b/server/node_modules/etag/README.md index 9963a5f..09c2169 100644 --- a/server/node_modules/etag/README.md +++ b/server/node_modules/etag/README.md @@ -23,7 +23,7 @@ $ npm install etag ## API - + ```js var etag = require('etag') @@ -36,7 +36,7 @@ body of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By default, a strong ETag is generated except for `fs.Stats`, which will generate a weak ETag (this can be overwritten by `options.weak`). - + ```js res.setHeader('ETag', etag(body)) @@ -63,18 +63,18 @@ $ npm test ```bash $ npm run-script bench -> etag@1.8.0 bench nodejs-etag +> etag@1.8.1 bench nodejs-etag > node benchmark/index.js http_parser@2.7.0 - node@6.9.1 - v8@5.1.281.84 - uv@1.9.1 - zlib@1.2.8 + node@6.11.1 + v8@5.1.281.103 + uv@1.11.0 + zlib@1.2.11 ares@1.10.1-DEV - icu@57.1 + icu@58.2 modules@48 - openssl@1.0.2j + openssl@1.0.2k > node benchmark/body0-100b.js @@ -82,10 +82,10 @@ $ npm run-script bench 4 tests completed. -* buffer - strong x 498,600 ops/sec ±0.82% (191 runs sampled) -* buffer - weak x 496,249 ops/sec ±0.59% (179 runs sampled) - string - strong x 466,298 ops/sec ±0.88% (186 runs sampled) - string - weak x 464,298 ops/sec ±0.84% (184 runs sampled) + buffer - strong x 258,647 ops/sec ±1.07% (180 runs sampled) + buffer - weak x 263,812 ops/sec ±0.61% (184 runs sampled) + string - strong x 259,955 ops/sec ±1.19% (185 runs sampled) + string - weak x 264,356 ops/sec ±1.09% (184 runs sampled) > node benchmark/body1-1kb.js @@ -93,10 +93,10 @@ $ npm run-script bench 4 tests completed. -* buffer - strong x 346,535 ops/sec ±0.32% (189 runs sampled) -* buffer - weak x 344,958 ops/sec ±0.52% (185 runs sampled) - string - strong x 259,672 ops/sec ±0.82% (191 runs sampled) - string - weak x 260,931 ops/sec ±0.76% (190 runs sampled) + buffer - strong x 189,018 ops/sec ±1.12% (182 runs sampled) + buffer - weak x 190,586 ops/sec ±0.81% (186 runs sampled) + string - strong x 144,272 ops/sec ±0.96% (188 runs sampled) + string - weak x 145,380 ops/sec ±1.43% (187 runs sampled) > node benchmark/body2-5kb.js @@ -104,10 +104,10 @@ $ npm run-script bench 4 tests completed. -* buffer - strong x 136,510 ops/sec ±0.62% (189 runs sampled) -* buffer - weak x 136,604 ops/sec ±0.51% (191 runs sampled) - string - strong x 80,903 ops/sec ±0.84% (192 runs sampled) - string - weak x 82,785 ops/sec ±0.50% (193 runs sampled) + buffer - strong x 92,435 ops/sec ±0.42% (188 runs sampled) + buffer - weak x 92,373 ops/sec ±0.58% (189 runs sampled) + string - strong x 48,850 ops/sec ±0.56% (186 runs sampled) + string - weak x 49,380 ops/sec ±0.56% (190 runs sampled) > node benchmark/body3-10kb.js @@ -115,10 +115,10 @@ $ npm run-script bench 4 tests completed. -* buffer - strong x 78,650 ops/sec ±0.31% (193 runs sampled) -* buffer - weak x 78,685 ops/sec ±0.41% (193 runs sampled) - string - strong x 43,999 ops/sec ±0.43% (193 runs sampled) - string - weak x 44,081 ops/sec ±0.45% (192 runs sampled) + buffer - strong x 55,989 ops/sec ±0.93% (188 runs sampled) + buffer - weak x 56,148 ops/sec ±0.55% (190 runs sampled) + string - strong x 27,345 ops/sec ±0.43% (188 runs sampled) + string - weak x 27,496 ops/sec ±0.45% (190 runs sampled) > node benchmark/body4-100kb.js @@ -126,10 +126,10 @@ $ npm run-script bench 4 tests completed. - buffer - strong x 8,860 ops/sec ±0.66% (191 runs sampled) -* buffer - weak x 9,030 ops/sec ±0.26% (193 runs sampled) - string - strong x 4,838 ops/sec ±0.16% (194 runs sampled) - string - weak x 4,800 ops/sec ±0.52% (192 runs sampled) + buffer - strong x 7,083 ops/sec ±0.22% (190 runs sampled) + buffer - weak x 7,115 ops/sec ±0.26% (191 runs sampled) + string - strong x 3,068 ops/sec ±0.34% (190 runs sampled) + string - weak x 3,096 ops/sec ±0.35% (190 runs sampled) > node benchmark/stats.js @@ -137,10 +137,10 @@ $ npm run-script bench 4 tests completed. -* real - strong x 1,468,073 ops/sec ±0.32% (191 runs sampled) -* real - weak x 1,446,852 ops/sec ±0.64% (190 runs sampled) - fake - strong x 635,707 ops/sec ±0.33% (194 runs sampled) - fake - weak x 627,708 ops/sec ±0.36% (192 runs sampled) + real - strong x 871,642 ops/sec ±0.34% (189 runs sampled) + real - weak x 867,613 ops/sec ±0.39% (190 runs sampled) + fake - strong x 401,051 ops/sec ±0.40% (189 runs sampled) + fake - weak x 400,100 ops/sec ±0.47% (188 runs sampled) ``` ## License diff --git a/server/node_modules/etag/index.js b/server/node_modules/etag/index.js index 607f148..2a585c9 100644 --- a/server/node_modules/etag/index.js +++ b/server/node_modules/etag/index.js @@ -26,7 +26,6 @@ var Stats = require('fs').Stats * @private */ -var base64PadCharRegExp = /=+$/ var toString = Object.prototype.toString /** @@ -48,7 +47,7 @@ function entitytag (entity) { .createHash('sha1') .update(entity, 'utf8') .digest('base64') - .replace(base64PadCharRegExp, '') + .substring(0, 27) // compute length of entity var len = typeof entity === 'string' diff --git a/server/node_modules/etag/package.json b/server/node_modules/etag/package.json index e5f6fdc..1422125 100644 --- a/server/node_modules/etag/package.json +++ b/server/node_modules/etag/package.json @@ -1,28 +1,28 @@ { - "_from": "etag@~1.8.0", - "_id": "etag@1.8.0", + "_from": "etag@~1.8.1", + "_id": "etag@1.8.1", "_inBundle": false, - "_integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", + "_integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "_location": "/etag", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "etag@~1.8.0", + "raw": "etag@~1.8.1", "name": "etag", "escapedName": "etag", - "rawSpec": "~1.8.0", + "rawSpec": "~1.8.1", "saveSpec": null, - "fetchSpec": "~1.8.0" + "fetchSpec": "~1.8.1" }, "_requiredBy": [ "/express", "/send" ], - "_resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", - "_shasum": "6f631aef336d6c46362b51764044ce216be3c051", - "_spec": "etag@~1.8.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "_shasum": "41ae2eeb65efa62268aebfea83ac7d79299b0887", + "_spec": "etag@~1.8.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "bugs": { "url": "https://github.com/jshttp/etag/issues" }, @@ -41,15 +41,18 @@ "description": "Create simple HTTP ETags", "devDependencies": { "beautify-benchmark": "0.2.4", - "benchmark": "2.1.3", - "eslint": "3.15.0", - "eslint-config-standard": "6.2.1", - "eslint-plugin-markdown": "1.0.0-beta.3", - "eslint-plugin-promise": "3.4.2", - "eslint-plugin-standard": "2.0.1", + "benchmark": "2.1.4", + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.7.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "5.1.1", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-standard": "3.0.1", "istanbul": "0.4.5", "mocha": "1.21.5", - "seedrandom": "2.4.2" + "safe-buffer": "5.1.1", + "seedrandom": "2.4.3" }, "engines": { "node": ">= 0.6" @@ -79,5 +82,5 @@ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" }, - "version": "1.8.0" + "version": "1.8.1" } diff --git a/server/node_modules/express/History.md b/server/node_modules/express/History.md index 83b439c..6e62a6d 100644 --- a/server/node_modules/express/History.md +++ b/server/node_modules/express/History.md @@ -1,3 +1,210 @@ +4.17.1 / 2019-05-25 +=================== + + * Revert "Improve error message for `null`/`undefined` to `res.status`" + +4.17.0 / 2019-05-16 +=================== + + * Add `express.raw` to parse bodies into `Buffer` + * Add `express.text` to parse bodies into string + * Improve error message for non-strings to `res.sendFile` + * Improve error message for `null`/`undefined` to `res.status` + * Support multiple hosts in `X-Forwarded-Host` + * deps: accepts@~1.3.7 + * deps: body-parser@1.19.0 + - Add encoding MIK + - Add petabyte (`pb`) support + - Fix parsing array brackets after index + - deps: bytes@3.1.0 + - deps: http-errors@1.7.2 + - deps: iconv-lite@0.4.24 + - deps: qs@6.7.0 + - deps: raw-body@2.4.0 + - deps: type-is@~1.6.17 + * deps: content-disposition@0.5.3 + * deps: cookie@0.4.0 + - Add `SameSite=None` support + * deps: finalhandler@~1.1.2 + - Set stricter `Content-Security-Policy` header + - deps: parseurl@~1.3.3 + - deps: statuses@~1.5.0 + * deps: parseurl@~1.3.3 + * deps: proxy-addr@~2.0.5 + - deps: ipaddr.js@1.9.0 + * deps: qs@6.7.0 + - Fix parsing array brackets after index + * deps: range-parser@~1.2.1 + * deps: send@0.17.1 + - Set stricter CSP header in redirect & error responses + - deps: http-errors@~1.7.2 + - deps: mime@1.6.0 + - deps: ms@2.1.1 + - deps: range-parser@~1.2.1 + - deps: statuses@~1.5.0 + - perf: remove redundant `path.normalize` call + * deps: serve-static@1.14.1 + - Set stricter CSP header in redirect response + - deps: parseurl@~1.3.3 + - deps: send@0.17.1 + * deps: setprototypeof@1.1.1 + * deps: statuses@~1.5.0 + - Add `103 Early Hints` + * deps: type-is@~1.6.18 + - deps: mime-types@~2.1.24 + - perf: prevent internal `throw` on invalid type + +4.16.4 / 2018-10-10 +=================== + + * Fix issue where `"Request aborted"` may be logged in `res.sendfile` + * Fix JSDoc for `Router` constructor + * deps: body-parser@1.18.3 + - Fix deprecation warnings on Node.js 10+ + - Fix stack trace for strict json parse error + - deps: depd@~1.1.2 + - deps: http-errors@~1.6.3 + - deps: iconv-lite@0.4.23 + - deps: qs@6.5.2 + - deps: raw-body@2.3.3 + - deps: type-is@~1.6.16 + * deps: proxy-addr@~2.0.4 + - deps: ipaddr.js@1.8.0 + * deps: qs@6.5.2 + * deps: safe-buffer@5.1.2 + +4.16.3 / 2018-03-12 +=================== + + * deps: accepts@~1.3.5 + - deps: mime-types@~2.1.18 + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: encodeurl@~1.0.2 + - Fix encoding `%` as last character + * deps: finalhandler@1.1.1 + - Fix 404 output for bad / missing pathnames + - deps: encodeurl@~1.0.2 + - deps: statuses@~1.4.0 + * deps: proxy-addr@~2.0.3 + - deps: ipaddr.js@1.6.0 + * deps: send@0.16.2 + - Fix incorrect end tag in default error & redirects + - deps: depd@~1.1.2 + - deps: encodeurl@~1.0.2 + - deps: statuses@~1.4.0 + * deps: serve-static@1.13.2 + - Fix incorrect end tag in redirects + - deps: encodeurl@~1.0.2 + - deps: send@0.16.2 + * deps: statuses@~1.4.0 + * deps: type-is@~1.6.16 + - deps: mime-types@~2.1.18 + +4.16.2 / 2017-10-09 +=================== + + * Fix `TypeError` in `res.send` when given `Buffer` and `ETag` header set + * perf: skip parsing of entire `X-Forwarded-Proto` header + +4.16.1 / 2017-09-29 +=================== + + * deps: send@0.16.1 + * deps: serve-static@1.13.1 + - Fix regression when `root` is incorrectly set to a file + - deps: send@0.16.1 + +4.16.0 / 2017-09-28 +=================== + + * Add `"json escape"` setting for `res.json` and `res.jsonp` + * Add `express.json` and `express.urlencoded` to parse bodies + * Add `options` argument to `res.download` + * Improve error message when autoloading invalid view engine + * Improve error messages when non-function provided as middleware + * Skip `Buffer` encoding when not generating ETag for small response + * Use `safe-buffer` for improved Buffer API + * deps: accepts@~1.3.4 + - deps: mime-types@~2.1.16 + * deps: content-type@~1.0.4 + - perf: remove argument reassignment + - perf: skip parameter parsing when no parameters + * deps: etag@~1.8.1 + - perf: replace regular expression with substring + * deps: finalhandler@1.1.0 + - Use `res.headersSent` when available + * deps: parseurl@~1.3.2 + - perf: reduce overhead for full URLs + - perf: unroll the "fast-path" `RegExp` + * deps: proxy-addr@~2.0.2 + - Fix trimming leading / trailing OWS in `X-Forwarded-For` + - deps: forwarded@~0.1.2 + - deps: ipaddr.js@1.5.2 + - perf: reduce overhead when no `X-Forwarded-For` header + * deps: qs@6.5.1 + - Fix parsing & compacting very deep objects + * deps: send@0.16.0 + - Add 70 new types for file extensions + - Add `immutable` option + - Fix missing `` in default error & redirects + - Set charset as "UTF-8" for .js and .json + - Use instance methods on steam to check for listeners + - deps: mime@1.4.1 + - perf: improve path validation speed + * deps: serve-static@1.13.0 + - Add 70 new types for file extensions + - Add `immutable` option + - Set charset as "UTF-8" for .js and .json + - deps: send@0.16.0 + * deps: setprototypeof@1.1.0 + * deps: utils-merge@1.0.1 + * deps: vary@~1.1.2 + - perf: improve header token parsing speed + * perf: re-use options object when generating ETags + * perf: remove dead `.charset` set in `res.jsonp` + +4.15.5 / 2017-09-24 +=================== + + * deps: debug@2.6.9 + * deps: finalhandler@~1.0.6 + - deps: debug@2.6.9 + - deps: parseurl@~1.3.2 + * deps: fresh@0.5.2 + - Fix handling of modified headers with invalid dates + - perf: improve ETag match loop + - perf: improve `If-None-Match` token parsing + * deps: send@0.15.6 + - Fix handling of modified headers with invalid dates + - deps: debug@2.6.9 + - deps: etag@~1.8.1 + - deps: fresh@0.5.2 + - perf: improve `If-Match` token parsing + * deps: serve-static@1.12.6 + - deps: parseurl@~1.3.2 + - deps: send@0.15.6 + - perf: improve slash collapsing + +4.15.4 / 2017-08-06 +=================== + + * deps: debug@2.6.8 + * deps: depd@~1.1.1 + - Remove unnecessary `Buffer` loading + * deps: finalhandler@~1.0.4 + - deps: debug@2.6.8 + * deps: proxy-addr@~1.1.5 + - Fix array argument being altered + - deps: ipaddr.js@1.4.0 + * deps: qs@6.5.0 + * deps: send@0.15.4 + - deps: debug@2.6.8 + - deps: depd@~1.1.1 + - deps: http-errors@~1.6.2 + * deps: serve-static@1.12.4 + - deps: send@0.15.4 + 4.15.3 / 2017-05-16 =================== @@ -143,7 +350,7 @@ - Fix including type extensions in parameters in `Accept` parsing - Fix parsing `Accept` parameters with quoted equals - Fix parsing `Accept` parameters with quoted semicolons - - Many performance improvments + - Many performance improvements - deps: mime-types@~2.1.11 - deps: negotiator@0.6.1 * deps: content-type@~1.0.2 @@ -158,7 +365,7 @@ - perf: enable strict mode - perf: hoist regular expression - perf: use for loop in parse - - perf: use string concatination for serialization + - perf: use string concatenation for serialization * deps: finalhandler@0.5.0 - Change invalid or non-numeric status code to 500 - Overwrite status message to match set status code @@ -168,7 +375,7 @@ * deps: proxy-addr@~1.1.2 - Fix accepting various invalid netmasks - Fix IPv6-mapped IPv4 validation edge cases - - IPv4 netmasks must be contingous + - IPv4 netmasks must be contiguous - IPv6 addresses cannot be used as a netmask - deps: ipaddr.js@1.1.1 * deps: qs@6.2.0 @@ -946,13 +1153,13 @@ - deps: negotiator@0.4.6 * deps: debug@1.0.2 * deps: send@0.4.3 - - Do not throw un-catchable error on file open race condition + - Do not throw uncatchable error on file open race condition - Use `escape-html` for HTML escaping - deps: debug@1.0.2 - deps: finished@1.2.2 - deps: fresh@0.2.2 * deps: serve-static@1.2.3 - - Do not throw un-catchable error on file open race condition + - Do not throw uncatchable error on file open race condition - deps: send@0.4.3 4.4.2 / 2014-06-09 @@ -1832,7 +2039,7 @@ - deps: serve-static@1.2.3 * deps: debug@1.0.2 * deps: send@0.4.3 - - Do not throw un-catchable error on file open race condition + - Do not throw uncatchable error on file open race condition - Use `escape-html` for HTML escaping - deps: debug@1.0.2 - deps: finished@1.2.2 @@ -3017,7 +3224,7 @@ Shaw] * Updated haml submodule * Changed ETag; removed inode, modified time only * Fixed LF to CRLF for setting multiple cookies - * Fixed cookie complation; values are now urlencoded + * Fixed cookie compilation; values are now urlencoded * Fixed cookies parsing; accepts quoted values and url escaped cookies 0.11.0 / 2010-05-06 @@ -3212,7 +3419,7 @@ Shaw] * Added "plot" format option for Profiler (for gnuplot processing) * Added request number to Profiler plugin - * Fixed binary encoding for multi-part file uploads, was previously defaulting to UTF8 + * Fixed binary encoding for multipart file uploads, was previously defaulting to UTF8 * Fixed issue with routes not firing when not files are present. Closes #184 * Fixed process.Promise -> events.Promise @@ -3258,7 +3465,7 @@ Shaw] * Updated sample chat app to show messages on load * Updated libxmljs parseString -> parseHtmlString * Fixed `make init` to work with older versions of git - * Fixed specs can now run independent specs for those who cant build deps. Closes #127 + * Fixed specs can now run independent specs for those who can't build deps. Closes #127 * Fixed issues introduced by the node url module changes. Closes 126. * Fixed two assertions failing due to Collection#keys() returning strings * Fixed faulty Collection#toArray() spec due to keys() returning strings diff --git a/server/node_modules/express/Readme.md b/server/node_modules/express/Readme.md index 786756a..1f91297 100644 --- a/server/node_modules/express/Readme.md +++ b/server/node_modules/express/Readme.md @@ -9,8 +9,8 @@ [![Test Coverage][coveralls-image]][coveralls-url] ```js -var express = require('express') -var app = express() +const express = require('express') +const app = express() app.get('/', function (req, res) { res.send('Hello World') @@ -21,10 +21,22 @@ app.listen(3000) ## Installation +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). + +Before installing, [download and install Node.js](https://nodejs.org/en/download/). +Node.js 0.10 or higher is required. + +Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + ```bash $ npm install express ``` +Follow [our installing guide](http://expressjs.com/en/starter/installing.html) +for more information. + ## Features * Robust routing @@ -39,7 +51,7 @@ $ npm install express * [Website and Documentation](http://expressjs.com/) - [[website repo](https://github.com/expressjs/expressjs.com)] * [#express](https://webchat.freenode.net/?channels=express) on freenode IRC - * [Github Organization](https://github.com/expressjs) for Official Middleware & Modules + * [GitHub Organization](https://github.com/expressjs) for Official Middleware & Modules * Visit the [Wiki](https://github.com/expressjs/express/wiki) * [Google Group](https://groups.google.com/group/express-js) for discussion * [Gitter](https://gitter.im/expressjs/express) for support and discussion @@ -78,6 +90,8 @@ $ npm install $ npm start ``` + View the website at: http://localhost:3000 + ## Philosophy The Express philosophy is to provide small, robust tooling for HTTP servers, making @@ -113,11 +127,15 @@ $ npm install $ npm test ``` +## Contributing + +[Contributing Guide](Contributing.md) + ## People -The original author of Express is [TJ Holowaychuk](https://github.com/tj) [![TJ's Gratipay][gratipay-image-visionmedia]][gratipay-url-visionmedia] +The original author of Express is [TJ Holowaychuk](https://github.com/tj) -The current lead maintainer is [Douglas Christopher Wilson](https://github.com/dougwilson) [![Doug's Gratipay][gratipay-image-dougwilson]][gratipay-url-dougwilson] +The current lead maintainer is [Douglas Christopher Wilson](https://github.com/dougwilson) [List of all contributors](https://github.com/expressjs/express/graphs/contributors) @@ -135,7 +153,3 @@ The current lead maintainer is [Douglas Christopher Wilson](https://github.com/d [appveyor-url]: https://ci.appveyor.com/project/dougwilson/express [coveralls-image]: https://img.shields.io/coveralls/expressjs/express/master.svg [coveralls-url]: https://coveralls.io/r/expressjs/express?branch=master -[gratipay-image-visionmedia]: https://img.shields.io/gratipay/visionmedia.svg -[gratipay-url-visionmedia]: https://gratipay.com/visionmedia/ -[gratipay-image-dougwilson]: https://img.shields.io/gratipay/dougwilson.svg -[gratipay-url-dougwilson]: https://gratipay.com/dougwilson/ diff --git a/server/node_modules/express/lib/application.js b/server/node_modules/express/lib/application.js index 1abe8d0..91f77d2 100644 --- a/server/node_modules/express/lib/application.js +++ b/server/node_modules/express/lib/application.js @@ -207,7 +207,7 @@ app.use = function use(fn) { var fns = flatten(slice.call(arguments, offset)); if (fns.length === 0) { - throw new TypeError('app.use() requires middleware functions'); + throw new TypeError('app.use() requires a middleware function') } // setup router @@ -338,7 +338,7 @@ app.param = function param(name, fn) { * Assign `setting` to `val`, or return `setting`'s value. * * app.set('foo', 'bar'); - * app.get('foo'); + * app.set('foo'); * // => "bar" * * Mounted servers inherit their parent server's settings. diff --git a/server/node_modules/express/lib/express.js b/server/node_modules/express/lib/express.js index 187e4e2..d188a16 100644 --- a/server/node_modules/express/lib/express.js +++ b/server/node_modules/express/lib/express.js @@ -12,6 +12,7 @@ * Module dependencies. */ +var bodyParser = require('body-parser') var EventEmitter = require('events').EventEmitter; var mixin = require('merge-descriptors'); var proto = require('./application'); @@ -74,16 +75,18 @@ exports.Router = Router; * Expose middleware */ +exports.json = bodyParser.json exports.query = require('./middleware/query'); +exports.raw = bodyParser.raw exports.static = require('serve-static'); +exports.text = bodyParser.text +exports.urlencoded = bodyParser.urlencoded /** * Replace removed middleware with an appropriate error message. */ -[ - 'json', - 'urlencoded', +var removedMiddlewares = [ 'bodyParser', 'compress', 'cookieSession', @@ -100,8 +103,10 @@ exports.static = require('serve-static'); 'directory', 'limit', 'multipart', - 'staticCache', -].forEach(function (name) { + 'staticCache' +] + +removedMiddlewares.forEach(function (name) { Object.defineProperty(exports, name, { get: function () { throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.'); diff --git a/server/node_modules/express/lib/middleware/query.js b/server/node_modules/express/lib/middleware/query.js index 5f76f84..7e91669 100644 --- a/server/node_modules/express/lib/middleware/query.js +++ b/server/node_modules/express/lib/middleware/query.js @@ -12,6 +12,7 @@ * Module dependencies. */ +var merge = require('utils-merge') var parseUrl = require('parseurl'); var qs = require('qs'); @@ -22,7 +23,7 @@ var qs = require('qs'); */ module.exports = function query(options) { - var opts = Object.create(options || null); + var opts = merge({}, options) var queryparse = qs.parse; if (typeof options === 'function') { diff --git a/server/node_modules/express/lib/request.js b/server/node_modules/express/lib/request.js index 3432e67..a9400ef 100644 --- a/server/node_modules/express/lib/request.js +++ b/server/node_modules/express/lib/request.js @@ -315,8 +315,12 @@ defineGetter(req, 'protocol', function protocol(){ // Note: X-Forwarded-Proto is normally only ever a // single value, but this is to be safe. - proto = this.get('X-Forwarded-Proto') || proto; - return proto.split(/\s*,\s*/)[0]; + var header = this.get('X-Forwarded-Proto') || proto + var index = header.indexOf(',') + + return index !== -1 + ? header.substring(0, index).trim() + : header.trim() }); /** @@ -426,6 +430,10 @@ defineGetter(req, 'hostname', function hostname(){ if (!host || !trust(this.connection.remoteAddress, 0)) { host = this.get('Host'); + } else if (host.indexOf(',') !== -1) { + // Note: X-Forwarded-Host is normally only ever a + // single value, but this is to be safe. + host = host.substring(0, host.indexOf(',')).trimRight() } if (!host) return; diff --git a/server/node_modules/express/lib/response.js b/server/node_modules/express/lib/response.js index b852a60..c9f08cd 100644 --- a/server/node_modules/express/lib/response.js +++ b/server/node_modules/express/lib/response.js @@ -12,6 +12,7 @@ * @private */ +var Buffer = require('safe-buffer').Buffer var contentDisposition = require('content-disposition'); var deprecate = require('depd')('express'); var encodeUrl = require('encodeurl'); @@ -95,7 +96,7 @@ res.links = function(links){ * * Examples: * - * res.send(new Buffer('wahoo')); + * res.send(Buffer.from('wahoo')); * res.send({ some: 'json' }); * res.send('

some html

'); * @@ -106,7 +107,6 @@ res.links = function(links){ res.send = function send(body) { var chunk = body; var encoding; - var len; var req = this.req; var type; @@ -171,23 +171,33 @@ res.send = function send(body) { } } + // determine if ETag should be generated + var etagFn = app.get('etag fn') + var generateETag = !this.get('ETag') && typeof etagFn === 'function' + // populate Content-Length + var len if (chunk !== undefined) { - if (!Buffer.isBuffer(chunk)) { - // convert chunk to Buffer; saves later double conversions - chunk = new Buffer(chunk, encoding); + if (Buffer.isBuffer(chunk)) { + // get length of Buffer + len = chunk.length + } else if (!generateETag && chunk.length < 1000) { + // just calculate length when no ETag + small chunk + len = Buffer.byteLength(chunk, encoding) + } else { + // convert chunk to Buffer and calculate + chunk = Buffer.from(chunk, encoding) encoding = undefined; + len = chunk.length } - len = chunk.length; this.set('Content-Length', len); } // populate ETag var etag; - var generateETag = len !== undefined && app.get('etag fn'); - if (typeof generateETag === 'function' && !this.get('ETag')) { - if ((etag = generateETag(chunk, encoding))) { + if (generateETag && len !== undefined) { + if ((etag = etagFn(chunk, encoding))) { this.set('ETag', etag); } } @@ -244,9 +254,10 @@ res.json = function json(obj) { // settings var app = this.app; + var escape = app.get('json escape') var replacer = app.get('json replacer'); var spaces = app.get('json spaces'); - var body = stringify(val, replacer, spaces); + var body = stringify(val, replacer, spaces, escape) // content-type if (!this.get('Content-Type')) { @@ -286,9 +297,10 @@ res.jsonp = function jsonp(obj) { // settings var app = this.app; + var escape = app.get('json escape') var replacer = app.get('json replacer'); var spaces = app.get('json spaces'); - var body = stringify(val, replacer, spaces); + var body = stringify(val, replacer, spaces, escape) var callback = this.req.query[app.get('jsonp callback name')]; // content-type @@ -304,7 +316,6 @@ res.jsonp = function jsonp(obj) { // jsonp if (typeof callback === 'string' && callback.length !== 0) { - this.charset = 'utf-8'; this.set('X-Content-Type-Options', 'nosniff'); this.set('Content-Type', 'text/javascript'); @@ -400,6 +411,10 @@ res.sendFile = function sendFile(path, options, callback) { throw new TypeError('path argument is required to res.sendFile'); } + if (typeof path !== 'string') { + throw new TypeError('path must be a string to res.sendFile') + } + // support function as second arg if (typeof options === 'function') { done = options; @@ -489,7 +504,7 @@ res.sendfile = function (path, options, callback) { if (err && err.code === 'EISDIR') return next(); // next() all but write errors - if (err && err.code !== 'ECONNABORT' && err.syscall !== 'write') { + if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') { next(err); } }); @@ -506,19 +521,29 @@ res.sendfile = deprecate.function(res.sendfile, * when the data transfer is complete, or when an error has * ocurred. Be sure to check `res.headersSent` if you plan to respond. * - * This method uses `res.sendfile()`. + * Optionally providing an `options` object to use with `res.sendFile()`. + * This function will set the `Content-Disposition` header, overriding + * any `Content-Disposition` header passed as header options in order + * to set the attachment and filename. + * + * This method uses `res.sendFile()`. * * @public */ -res.download = function download(path, filename, callback) { +res.download = function download (path, filename, options, callback) { var done = callback; var name = filename; + var opts = options || null - // support function as second arg + // support function as second or third arg if (typeof filename === 'function') { done = filename; name = null; + opts = null + } else if (typeof options === 'function') { + done = options + opts = null } // set Content-Disposition when file is sent @@ -526,10 +551,26 @@ res.download = function download(path, filename, callback) { 'Content-Disposition': contentDisposition(name || path) }; + // merge user-provided headers + if (opts && opts.headers) { + var keys = Object.keys(opts.headers) + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + if (key.toLowerCase() !== 'content-disposition') { + headers[key] = opts.headers[key] + } + } + } + + // merge user-provided options + opts = Object.create(opts) + opts.headers = headers + // Resolve the full path for sendFile var fullPath = resolve(path); - return this.sendFile(fullPath, { headers: headers }, done); + // send file + return this.sendFile(fullPath, opts, done) }; /** @@ -777,7 +818,7 @@ res.clearCookie = function clearCookie(name, options) { * // "Remember Me" for 15 minutes * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); * - * // save as above + * // same as above * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) * * @param {String} name @@ -1063,14 +1104,39 @@ function sendfile(res, file, options, callback) { } /** - * Stringify JSON, like JSON.stringify, but v8 optimized. + * Stringify JSON, like JSON.stringify, but v8 optimized, with the + * ability to escape characters that can trigger HTML sniffing. + * + * @param {*} value + * @param {function} replaces + * @param {number} spaces + * @param {boolean} escape + * @returns {string} * @private */ -function stringify(value, replacer, spaces) { +function stringify (value, replacer, spaces, escape) { // v8 checks arguments.length for optimizing simple call // https://bugs.chromium.org/p/v8/issues/detail?id=4730 - return replacer || spaces + var json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value); + + if (escape) { + json = json.replace(/[<>&]/g, function (c) { + switch (c.charCodeAt(0)) { + case 0x3c: + return '\\u003c' + case 0x3e: + return '\\u003e' + case 0x26: + return '\\u0026' + /* istanbul ignore next: unreachable default */ + default: + return c + } + }) + } + + return json } diff --git a/server/node_modules/express/lib/router/index.js b/server/node_modules/express/lib/router/index.js index 51db4c2..69e6d38 100644 --- a/server/node_modules/express/lib/router/index.js +++ b/server/node_modules/express/lib/router/index.js @@ -35,7 +35,7 @@ var toString = Object.prototype.toString; /** * Initialize a new `Router` with the given `options`. * - * @param {Object} options + * @param {Object} [options] * @return {Router} which is an callable function * @public */ @@ -448,14 +448,14 @@ proto.use = function use(fn) { var callbacks = flatten(slice.call(arguments, offset)); if (callbacks.length === 0) { - throw new TypeError('Router.use() requires middleware functions'); + throw new TypeError('Router.use() requires a middleware function') } for (var i = 0; i < callbacks.length; i++) { var fn = callbacks[i]; if (typeof fn !== 'function') { - throw new TypeError('Router.use() requires middleware function but got a ' + gettype(fn)); + throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn)) } // add the middleware diff --git a/server/node_modules/express/lib/router/route.js b/server/node_modules/express/lib/router/route.js index ea82ed2..178df0d 100644 --- a/server/node_modules/express/lib/router/route.js +++ b/server/node_modules/express/lib/router/route.js @@ -175,7 +175,7 @@ Route.prototype.all = function all() { if (typeof handle !== 'function') { var type = toString.call(handle); - var msg = 'Route.all() requires callback functions but got a ' + type; + var msg = 'Route.all() requires a callback function but got a ' + type throw new TypeError(msg); } @@ -198,7 +198,7 @@ methods.forEach(function(method){ if (typeof handle !== 'function') { var type = toString.call(handle); - var msg = 'Route.' + method + '() requires callback functions but got a ' + type; + var msg = 'Route.' + method + '() requires a callback function but got a ' + type throw new Error(msg); } diff --git a/server/node_modules/express/lib/utils.js b/server/node_modules/express/lib/utils.js index f418c58..bd81ac7 100644 --- a/server/node_modules/express/lib/utils.js +++ b/server/node_modules/express/lib/utils.js @@ -12,12 +12,12 @@ * @api private */ +var Buffer = require('safe-buffer').Buffer var contentDisposition = require('content-disposition'); var contentType = require('content-type'); var deprecate = require('depd')('express'); var flatten = require('array-flatten'); var mime = require('send').mime; -var basename = require('path').basename; var etag = require('etag'); var proxyaddr = require('proxy-addr'); var qs = require('qs'); @@ -32,13 +32,7 @@ var querystring = require('querystring'); * @api private */ -exports.etag = function (body, encoding) { - var buf = !Buffer.isBuffer(body) - ? new Buffer(body, encoding) - : body; - - return etag(buf, {weak: false}); -}; +exports.etag = createETagGenerator({ weak: false }) /** * Return weak ETag for `body`. @@ -49,13 +43,7 @@ exports.etag = function (body, encoding) { * @api private */ -exports.wetag = function wetag(body, encoding){ - var buf = !Buffer.isBuffer(body) - ? new Buffer(body, encoding) - : body; - - return etag(buf, {weak: true}); -}; +exports.wetag = createETagGenerator({ weak: true }) /** * Check if `path` looks absolute. @@ -274,6 +262,25 @@ exports.setCharset = function setCharset(type, charset) { return contentType.format(parsed); }; +/** + * Create an ETag generator function, generating ETags with + * the given options. + * + * @param {object} options + * @return {function} + * @private + */ + +function createETagGenerator (options) { + return function generateETag (body, encoding) { + var buf = !Buffer.isBuffer(body) + ? Buffer.from(body, encoding) + : body + + return etag(buf, options) + } +} + /** * Parse an extended query string with qs. * diff --git a/server/node_modules/express/lib/view.js b/server/node_modules/express/lib/view.js index 1728725..cf101ca 100644 --- a/server/node_modules/express/lib/view.js +++ b/server/node_modules/express/lib/view.js @@ -16,7 +16,6 @@ var debug = require('debug')('express:view'); var path = require('path'); var fs = require('fs'); -var utils = require('./utils'); /** * Module variables. @@ -77,7 +76,15 @@ function View(name, options) { // load engine var mod = this.ext.substr(1) debug('require "%s"', mod) - opts.engines[this.ext] = require(mod).__express + + // default engine export + var fn = require(mod).__express + + if (typeof fn !== 'function') { + throw new Error('Module "' + mod + '" does not provide a view engine.') + } + + opts.engines[this.ext] = fn } // store loaded engine diff --git a/server/node_modules/express/package.json b/server/node_modules/express/package.json index 2bf6938..d109087 100644 --- a/server/node_modules/express/package.json +++ b/server/node_modules/express/package.json @@ -1,28 +1,29 @@ { - "_from": "express", - "_id": "express@4.15.3", + "_from": "express@^4.17.1", + "_id": "express@4.17.1", "_inBundle": false, - "_integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", + "_integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "_location": "/express", - "_phantomChildren": {}, + "_phantomChildren": { + "ms": "2.0.0" + }, "_requested": { - "type": "tag", + "type": "range", "registry": true, - "raw": "express", + "raw": "express@^4.17.1", "name": "express", "escapedName": "express", - "rawSpec": "", + "rawSpec": "^4.17.1", "saveSpec": null, - "fetchSpec": "latest" + "fetchSpec": "^4.17.1" }, "_requiredBy": [ - "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", - "_shasum": "bab65d0f03aa80c358408972fc700f916944b662", - "_spec": "express", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server", + "_resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "_shasum": "4491fc38605cf51f8629d39c2b5d026f98a4c134", + "_spec": "express@^4.17.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" @@ -62,55 +63,57 @@ } ], "dependencies": { - "accepts": "~1.3.3", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "content-disposition": "0.5.2", - "content-type": "~1.0.2", - "cookie": "0.3.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "debug": "2.6.7", - "depd": "~1.1.0", - "encodeurl": "~1.0.1", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.8.0", - "finalhandler": "~1.0.3", - "fresh": "0.5.0", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~1.1.4", - "qs": "6.4.0", - "range-parser": "~1.2.0", - "send": "0.15.3", - "serve-static": "1.12.3", - "setprototypeof": "1.0.3", - "statuses": "~1.3.1", - "type-is": "~1.6.15", - "utils-merge": "1.0.0", - "vary": "~1.1.1" + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "deprecated": false, "description": "Fast, unopinionated, minimalist web framework", "devDependencies": { "after": "0.8.2", - "body-parser": "1.17.1", - "connect-redis": "~2.4.1", - "cookie-parser": "~1.4.3", - "cookie-session": "~1.2.0", - "ejs": "2.5.6", - "express-session": "1.15.2", - "hbs": "4.0.1", + "connect-redis": "3.4.1", + "cookie-parser": "~1.4.4", + "cookie-session": "1.3.3", + "ejs": "2.6.1", + "eslint": "2.13.1", + "express-session": "1.16.1", + "hbs": "4.0.4", "istanbul": "0.4.5", - "marked": "0.3.6", - "method-override": "2.3.8", - "mocha": "3.4.1", - "morgan": "1.8.1", - "multiparty": "4.1.3", + "marked": "0.6.2", + "method-override": "3.0.0", + "mocha": "5.2.0", + "morgan": "1.9.1", + "multiparty": "4.2.1", "pbkdf2-password": "1.2.1", - "should": "11.2.1", - "supertest": "1.2.0", + "should": "13.2.3", + "supertest": "3.3.0", "vhost": "~3.0.2" }, "engines": { @@ -142,10 +145,11 @@ "url": "git+https://github.com/expressjs/express.git" }, "scripts": { + "lint": "eslint .", "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/", "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/" }, - "version": "4.15.3" + "version": "4.17.1" } diff --git a/server/node_modules/finalhandler/HISTORY.md b/server/node_modules/finalhandler/HISTORY.md index b1ff016..920c35e 100644 --- a/server/node_modules/finalhandler/HISTORY.md +++ b/server/node_modules/finalhandler/HISTORY.md @@ -1,3 +1,40 @@ +1.1.2 / 2019-05-09 +================== + + * Set stricter `Content-Security-Policy` header + * deps: parseurl@~1.3.3 + * deps: statuses@~1.5.0 + +1.1.1 / 2018-03-06 +================== + + * Fix 404 output for bad / missing pathnames + * deps: encodeurl@~1.0.2 + - Fix encoding `%` as last character + * deps: statuses@~1.4.0 + +1.1.0 / 2017-09-24 +================== + + * Use `res.headersSent` when available + +1.0.6 / 2017-09-22 +================== + + * deps: debug@2.6.9 + +1.0.5 / 2017-09-15 +================== + + * deps: parseurl@~1.3.2 + - perf: reduce overhead for full URLs + - perf: unroll the "fast-path" `RegExp` + +1.0.4 / 2017-08-03 +================== + + * deps: debug@2.6.8 + 1.0.3 / 2017-05-16 ================== diff --git a/server/node_modules/finalhandler/README.md b/server/node_modules/finalhandler/README.md index 84c3d2a..96327f0 100644 --- a/server/node_modules/finalhandler/README.md +++ b/server/node_modules/finalhandler/README.md @@ -20,7 +20,9 @@ $ npm install finalhandler ## API -``` + + +```js var finalhandler = require('finalhandler') ``` @@ -114,7 +116,7 @@ var fs = require('fs') var http = require('http') var server = http.createServer(function (req, res) { - var done = finalhandler(req, res, {onerror: logerror}) + var done = finalhandler(req, res, { onerror: logerror }) fs.readFile('index.html', function (err, buf) { if (err) return done(err) diff --git a/server/node_modules/finalhandler/index.js b/server/node_modules/finalhandler/index.js index 87974ca..5673507 100644 --- a/server/node_modules/finalhandler/index.js +++ b/server/node_modules/finalhandler/index.js @@ -89,7 +89,7 @@ function finalhandler (req, res, options) { var status // ignore 404 on in-flight response - if (!err && res._header) { + if (!err && headersSent(res)) { debug('cannot 404 after headers sent') return } @@ -99,14 +99,12 @@ function finalhandler (req, res, options) { // respect status code from error status = getErrorStatusCode(err) - // respect headers from error - if (status !== undefined) { - headers = getErrorHeaders(err) - } - - // fallback to status code on response if (status === undefined) { + // fallback to status code on response status = getResponseStatusCode(res) + } else { + // respect headers from error + headers = getErrorHeaders(err) } // get error message @@ -114,7 +112,7 @@ function finalhandler (req, res, options) { } else { // not found status = 404 - msg = 'Cannot ' + req.method + ' ' + encodeUrl(parseUrl.original(req).pathname) + msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req)) } debug('default %s', status) @@ -125,7 +123,7 @@ function finalhandler (req, res, options) { } // cannot actually respond - if (res._header) { + if (headersSent(res)) { debug('cannot %d after headers sent', status) req.socket.destroy() return @@ -208,6 +206,25 @@ function getErrorStatusCode (err) { return undefined } +/** + * Get resource name for the request. + * + * This is typically just the original pathname of the request + * but will fallback to "resource" is that cannot be determined. + * + * @param {IncomingMessage} req + * @return {string} + * @private + */ + +function getResourceName (req) { + try { + return parseUrl.original(req).pathname + } catch (e) { + return 'resource' + } +} + /** * Get status code from response. * @@ -227,6 +244,20 @@ function getResponseStatusCode (res) { return status } +/** + * Determine if the response headers have been sent. + * + * @param {object} res + * @returns {boolean} + * @private + */ + +function headersSent (res) { + return typeof res.headersSent !== 'boolean' + ? Boolean(res._header) + : res.headersSent +} + /** * Send response. * @@ -251,7 +282,7 @@ function send (req, res, status, headers, message) { setHeaders(res, headers) // security headers - res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('Content-Security-Policy', "default-src 'none'") res.setHeader('X-Content-Type-Options', 'nosniff') // standard headers diff --git a/server/node_modules/finalhandler/package.json b/server/node_modules/finalhandler/package.json index ba61cd7..837dbc5 100644 --- a/server/node_modules/finalhandler/package.json +++ b/server/node_modules/finalhandler/package.json @@ -1,27 +1,29 @@ { - "_from": "finalhandler@~1.0.3", - "_id": "finalhandler@1.0.3", + "_from": "finalhandler@~1.1.2", + "_id": "finalhandler@1.1.2", "_inBundle": false, - "_integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", + "_integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "_location": "/finalhandler", - "_phantomChildren": {}, + "_phantomChildren": { + "ms": "2.0.0" + }, "_requested": { "type": "range", "registry": true, - "raw": "finalhandler@~1.0.3", + "raw": "finalhandler@~1.1.2", "name": "finalhandler", "escapedName": "finalhandler", - "rawSpec": "~1.0.3", + "rawSpec": "~1.1.2", "saveSpec": null, - "fetchSpec": "~1.0.3" + "fetchSpec": "~1.1.2" }, "_requiredBy": [ "/express" ], - "_resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", - "_shasum": "ef47e77950e999780e86022a560e3217e0d0cc89", - "_spec": "finalhandler@~1.0.3", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "_shasum": "b7e7d000ffd11938d0fdb053506f6ebabe9f587d", + "_spec": "finalhandler@~1.1.2", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" @@ -31,29 +33,29 @@ }, "bundleDependencies": false, "dependencies": { - "debug": "2.6.7", - "encodeurl": "~1.0.1", + "debug": "2.6.9", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.1", - "statuses": "~1.3.1", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "deprecated": false, "description": "Node.js final http responder", "devDependencies": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.2.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "4.2.2", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", "istanbul": "0.4.5", - "mocha": "2.5.3", - "readable-stream": "2.2.9", - "safe-buffer": "5.0.1", - "supertest": "1.1.0" + "mocha": "6.1.4", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "supertest": "4.0.2" }, "engines": { "node": ">= 0.8" @@ -76,5 +78,5 @@ "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/" }, - "version": "1.0.3" + "version": "1.1.2" } diff --git a/server/node_modules/forwarded/HISTORY.md b/server/node_modules/forwarded/HISTORY.md index 97fa1d1..381e6aa 100644 --- a/server/node_modules/forwarded/HISTORY.md +++ b/server/node_modules/forwarded/HISTORY.md @@ -1,3 +1,20 @@ +0.2.0 / 2021-05-31 +================== + + * Use `req.socket` over deprecated `req.connection` + +0.1.2 / 2017-09-14 +================== + + * perf: improve header parsing + * perf: reduce overhead when no `X-Forwarded-For` header + +0.1.1 / 2017-09-10 +================== + + * Fix trimming leading / trailing OWS + * perf: hoist regular expression + 0.1.0 / 2014-09-21 ================== diff --git a/server/node_modules/forwarded/LICENSE b/server/node_modules/forwarded/LICENSE index b7dce6c..84441fb 100644 --- a/server/node_modules/forwarded/LICENSE +++ b/server/node_modules/forwarded/LICENSE @@ -1,6 +1,6 @@ (The MIT License) -Copyright (c) 2014 Douglas Christopher Wilson +Copyright (c) 2014-2017 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/server/node_modules/forwarded/README.md b/server/node_modules/forwarded/README.md index 2b4988f..fdd220b 100644 --- a/server/node_modules/forwarded/README.md +++ b/server/node_modules/forwarded/README.md @@ -3,13 +3,17 @@ [![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] +[![Build Status][ci-image]][ci-url] [![Test Coverage][coveralls-image]][coveralls-url] Parse HTTP X-Forwarded-For header ## 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 forwarded ``` @@ -27,7 +31,7 @@ var addresses = forwarded(req) ``` Parse the `X-Forwarded-For` header from the request. Returns an array -of the addresses, including the socket address for the `req`. In reverse +of the addresses, including the socket address for the `req`, in reverse order (i.e. index `0` is the socket address and the last index is the furthest address, typically the end-user). @@ -41,13 +45,13 @@ $ npm test [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/forwarded.svg?style=flat +[ci-image]: https://badgen.net/github/checks/jshttp/forwarded/master?label=ci +[ci-url]: https://github.com/jshttp/forwarded/actions?query=workflow%3Aci +[npm-image]: https://img.shields.io/npm/v/forwarded.svg [npm-url]: https://npmjs.org/package/forwarded -[node-version-image]: https://img.shields.io/node/v/forwarded.svg?style=flat -[node-version-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/jshttp/forwarded.svg?style=flat -[travis-url]: https://travis-ci.org/jshttp/forwarded -[coveralls-image]: https://img.shields.io/coveralls/jshttp/forwarded.svg?style=flat +[node-version-image]: https://img.shields.io/node/v/forwarded.svg +[node-version-url]: https://nodejs.org/en/download/ +[coveralls-image]: https://img.shields.io/coveralls/jshttp/forwarded/master.svg [coveralls-url]: https://coveralls.io/r/jshttp/forwarded?branch=master -[downloads-image]: https://img.shields.io/npm/dm/forwarded.svg?style=flat +[downloads-image]: https://img.shields.io/npm/dm/forwarded.svg [downloads-url]: https://npmjs.org/package/forwarded diff --git a/server/node_modules/forwarded/index.js b/server/node_modules/forwarded/index.js index 2f5c340..b2b6bdd 100644 --- a/server/node_modules/forwarded/index.js +++ b/server/node_modules/forwarded/index.js @@ -1,11 +1,14 @@ /*! * forwarded - * Copyright(c) 2014 Douglas Christopher Wilson + * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ +'use strict' + /** * Module exports. + * @public */ module.exports = forwarded @@ -13,23 +16,75 @@ module.exports = forwarded /** * Get all addresses in the request, using the `X-Forwarded-For` header. * - * @param {Object} req - * @api public + * @param {object} req + * @return {array} + * @public */ -function forwarded(req) { +function forwarded (req) { if (!req) { throw new TypeError('argument req is required') } // simple header parsing - var proxyAddrs = (req.headers['x-forwarded-for'] || '') - .split(/ *, */) - .filter(Boolean) - .reverse() - var socketAddr = req.connection.remoteAddress + var proxyAddrs = parse(req.headers['x-forwarded-for'] || '') + var socketAddr = getSocketAddr(req) var addrs = [socketAddr].concat(proxyAddrs) // return all addresses return addrs } + +/** + * Get the socket address for a request. + * + * @param {object} req + * @return {string} + * @private + */ + +function getSocketAddr (req) { + return req.socket + ? req.socket.remoteAddress + : req.connection.remoteAddress +} + +/** + * Parse the X-Forwarded-For header. + * + * @param {string} header + * @private + */ + +function parse (header) { + var end = header.length + var list = [] + var start = header.length + + // gather addresses, backwards + for (var i = header.length - 1; i >= 0; i--) { + switch (header.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + } + break + case 0x2c: /* , */ + if (start !== end) { + list.push(header.substring(start, end)) + } + start = end = i + break + default: + start = i + break + } + } + + // final address + if (start !== end) { + list.push(header.substring(start, end)) + } + + return list +} diff --git a/server/node_modules/forwarded/package.json b/server/node_modules/forwarded/package.json index 36d6d05..e345e65 100644 --- a/server/node_modules/forwarded/package.json +++ b/server/node_modules/forwarded/package.json @@ -1,27 +1,27 @@ { - "_from": "forwarded@~0.1.0", - "_id": "forwarded@0.1.0", + "_from": "forwarded@0.2.0", + "_id": "forwarded@0.2.0", "_inBundle": false, - "_integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=", + "_integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "_location": "/forwarded", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "forwarded@~0.1.0", + "raw": "forwarded@0.2.0", "name": "forwarded", "escapedName": "forwarded", - "rawSpec": "~0.1.0", + "rawSpec": "0.2.0", "saveSpec": null, - "fetchSpec": "~0.1.0" + "fetchSpec": "0.2.0" }, "_requiredBy": [ "/proxy-addr" ], - "_resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", - "_shasum": "19ef9874c4ae1c297bcf078fde63a09b66a84363", - "_spec": "forwarded@~0.1.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/proxy-addr", + "_resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "_shasum": "2269936428aad4c15c7ebe9779a84bf0b2a81811", + "_spec": "forwarded@0.2.0", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/proxy-addr", "bugs": { "url": "https://github.com/jshttp/forwarded/issues" }, @@ -35,8 +35,17 @@ "deprecated": false, "description": "Parse HTTP X-Forwarded-For header", "devDependencies": { - "istanbul": "0.3.2", - "mocha": "~1.21.4" + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "deep-equal": "1.0.1", + "eslint": "7.27.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.23.4", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "4.3.1", + "eslint-plugin-standard": "4.1.0", + "mocha": "8.4.0", + "nyc": "15.1.0" }, "engines": { "node": ">= 0.6" @@ -60,9 +69,12 @@ "url": "git+https://github.com/jshttp/forwarded.git" }, "scripts": { + "bench": "node benchmark/index.js", + "lint": "eslint .", "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "version": "node scripts/version-history.js && git add HISTORY.md" }, - "version": "0.1.0" + "version": "0.2.0" } diff --git a/server/node_modules/fresh/HISTORY.md b/server/node_modules/fresh/HISTORY.md index edd6c05..4586996 100644 --- a/server/node_modules/fresh/HISTORY.md +++ b/server/node_modules/fresh/HISTORY.md @@ -1,3 +1,15 @@ +0.5.2 / 2017-09-13 +================== + + * Fix regression matching multiple ETags in `If-None-Match` + * perf: improve `If-None-Match` token parsing + +0.5.1 / 2017-09-11 +================== + + * Fix handling of modified headers with invalid dates + * perf: improve ETag match loop + 0.5.0 / 2017-02-21 ================== diff --git a/server/node_modules/fresh/README.md b/server/node_modules/fresh/README.md index d2b63e5..1c1c680 100644 --- a/server/node_modules/fresh/README.md +++ b/server/node_modules/fresh/README.md @@ -20,6 +20,8 @@ $ npm install fresh ## API + + ```js var fresh = require('fresh') ``` @@ -55,6 +57,8 @@ links to further reading on this Safari bug. ### API usage + + ```js var reqHeaders = { 'if-none-match': '"foo"' } var resHeaders = { 'etag': '"bar"' } @@ -85,6 +89,8 @@ var server = http.createServer(function (req, res) { } // send the resource + res.statusCode = 200 + res.end('hello, world!') }) function isFresh (req, res) { diff --git a/server/node_modules/fresh/index.js b/server/node_modules/fresh/index.js index bd9812e..d154f5a 100644 --- a/server/node_modules/fresh/index.js +++ b/server/node_modules/fresh/index.js @@ -14,13 +14,6 @@ var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/ -/** - * Simple expression to split token list. - * @private - */ - -var TOKEN_LIST_REGEXP = / *, */ - /** * Module exports. * @public @@ -58,9 +51,20 @@ function fresh (reqHeaders, resHeaders) { // if-none-match if (noneMatch && noneMatch !== '*') { var etag = resHeaders['etag'] - var etagStale = !etag || noneMatch.split(TOKEN_LIST_REGEXP).every(function (match) { - return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag - }) + + if (!etag) { + return false + } + + var etagStale = true + var matches = parseTokenList(noneMatch) + for (var i = 0; i < matches.length; i++) { + var match = matches[i] + if (match === etag || match === 'W/' + etag || 'W/' + match === etag) { + etagStale = false + break + } + } if (etagStale) { return false @@ -70,7 +74,7 @@ function fresh (reqHeaders, resHeaders) { // if-modified-since if (modifiedSince) { var lastModified = resHeaders['last-modified'] - var modifiedStale = !lastModified || Date.parse(lastModified) > Date.parse(modifiedSince) + var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince)) if (modifiedStale) { return false @@ -79,3 +83,55 @@ function fresh (reqHeaders, resHeaders) { return true } + +/** + * Parse an HTTP Date into a number. + * + * @param {string} date + * @private + */ + +function parseHttpDate (date) { + var timestamp = date && Date.parse(date) + + // istanbul ignore next: guard against date.js Date.parse patching + return typeof timestamp === 'number' + ? timestamp + : NaN +} + +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ + +function parseTokenList (str) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(str.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(str.substring(start, end)) + + return list +} diff --git a/server/node_modules/fresh/package.json b/server/node_modules/fresh/package.json index accbf85..ee8047b 100644 --- a/server/node_modules/fresh/package.json +++ b/server/node_modules/fresh/package.json @@ -1,28 +1,28 @@ { - "_from": "fresh@0.5.0", - "_id": "fresh@0.5.0", + "_from": "fresh@0.5.2", + "_id": "fresh@0.5.2", "_inBundle": false, - "_integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", + "_integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "_location": "/fresh", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "fresh@0.5.0", + "raw": "fresh@0.5.2", "name": "fresh", "escapedName": "fresh", - "rawSpec": "0.5.0", + "rawSpec": "0.5.2", "saveSpec": null, - "fetchSpec": "0.5.0" + "fetchSpec": "0.5.2" }, "_requiredBy": [ "/express", "/send" ], - "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", - "_shasum": "f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e", - "_spec": "fresh@0.5.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "_shasum": "3d8cadd90d976569fa835ab1f8e4b23a105605a7", + "_spec": "fresh@0.5.2", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca", @@ -46,10 +46,15 @@ "deprecated": false, "description": "HTTP response freshness testing", "devDependencies": { - "eslint": "3.16.0", - "eslint-config-standard": "6.2.1", - "eslint-plugin-promise": "3.4.2", - "eslint-plugin-standard": "2.0.1", + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.7.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "5.1.1", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-standard": "3.0.1", "istanbul": "0.4.5", "mocha": "1.21.5" }, @@ -75,10 +80,11 @@ "url": "git+https://github.com/jshttp/fresh.git" }, "scripts": { - "lint": "eslint .", + "bench": "node benchmark/index.js", + "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --bail --check-leaks test/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" }, - "version": "0.5.0" + "version": "0.5.2" } diff --git a/server/node_modules/http-errors/HISTORY.md b/server/node_modules/http-errors/HISTORY.md index 94b6b29..efc2d4c 100644 --- a/server/node_modules/http-errors/HISTORY.md +++ b/server/node_modules/http-errors/HISTORY.md @@ -1,3 +1,34 @@ +2019-02-18 / 1.7.2 +================== + + * deps: setprototypeof@1.1.1 + +2018-09-08 / 1.7.1 +================== + + * Fix error creating objects in some environments + +2018-07-30 / 1.7.0 +================== + + * Set constructor name when possible + * Use `toidentifier` module to make class names + * deps: statuses@'>= 1.5.0 < 2' + +2018-03-29 / 1.6.3 +================== + + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: setprototypeof@1.1.0 + * deps: statuses@'>= 1.4.0 < 2' + +2017-08-04 / 1.6.2 +================== + + * deps: depd@1.1.1 + - Remove unnecessary `Buffer` loading + 2017-02-20 / 1.6.1 ================== diff --git a/server/node_modules/http-errors/README.md b/server/node_modules/http-errors/README.md index 79663d8..3b25481 100644 --- a/server/node_modules/http-errors/README.md +++ b/server/node_modules/http-errors/README.md @@ -1,8 +1,8 @@ # http-errors -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][node-url] +[![Node.js Version][node-image]][node-url] [![Build Status][travis-image]][travis-url] [![Test Coverage][coveralls-image]][coveralls-url] @@ -35,8 +35,6 @@ app.use(function (req, res, next) { 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, @@ -52,6 +50,9 @@ All errors inherit from JavaScript `Error` and the exported `createError.HttpErr ### createError([status], [message], [properties]) +Create a new error object with the given message `msg`. +The error object inherits from `createError.HttpError`. + ```js @@ -62,8 +63,36 @@ var err = createError(404, 'This video does not exist!') - `message` - the message of the error, defaulting to node's text for that status code. - `properties` - custom properties to attach to the object +### createError([status], [error], [properties]) + +Extend the given `error` object with `createError.HttpError` +properties. This will not alter the inheritance of the given +`error` object, and the modified `error` object is the +return value. + + + +```js +fs.readFile('foo.txt', function (err, buf) { + if (err) { + if (err.code === 'ENOENT') { + var httpError = createError(404, err, { expose: false }) + } else { + var httpError = createError(500, err) + } + } +}) +``` + +- `status` - the status code as a number +- `error` - the error object to extend +- `properties` - custom properties to attach to the object + ### new createError\[code || name\](\[msg]\)) +Create a new error object with the given message `msg`. +The error object inherits from `createError.HttpError`. + ```js @@ -123,13 +152,12 @@ var err = new createError.NotFound() [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/http-errors.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/http-errors/master +[coveralls-url]: https://coveralls.io/r/jshttp/http-errors?branch=master +[node-image]: https://badgen.net/npm/node/http-errors +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/http-errors [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 +[npm-version-image]: https://badgen.net/npm/v/http-errors +[travis-image]: https://badgen.net/travis/jshttp/http-errors/master [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/server/node_modules/http-errors/index.js b/server/node_modules/http-errors/index.js index 9509303..10ca4ad 100644 --- a/server/node_modules/http-errors/index.js +++ b/server/node_modules/http-errors/index.js @@ -16,6 +16,7 @@ var deprecate = require('depd')('http-errors') var setPrototypeOf = require('setprototypeof') var statuses = require('statuses') var inherits = require('inherits') +var toIdentifier = require('toidentifier') /** * Module exports. @@ -162,6 +163,7 @@ function createClientErrorConstructor (HttpError, name, code) { } inherits(ClientError, HttpError) + nameFunc(ClientError, className) ClientError.prototype.status = code ClientError.prototype.statusCode = code @@ -209,6 +211,7 @@ function createServerErrorConstructor (HttpError, name, code) { } inherits(ServerError, HttpError) + nameFunc(ServerError, className) ServerError.prototype.status = code ServerError.prototype.statusCode = code @@ -217,6 +220,20 @@ function createServerErrorConstructor (HttpError, name, code) { return ServerError } +/** + * Set the name of a function, if possible. + * @private + */ + +function nameFunc (func, name) { + var desc = Object.getOwnPropertyDescriptor(func, 'name') + + if (desc && desc.configurable) { + desc.value = name + Object.defineProperty(func, 'name', desc) + } +} + /** * Populate the exports object with constructors for every error class. * @private @@ -247,14 +264,3 @@ function populateConstructorExports (exports, codes, HttpError) { 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/server/node_modules/http-errors/package.json b/server/node_modules/http-errors/package.json index f0e2a30..95b17bd 100644 --- a/server/node_modules/http-errors/package.json +++ b/server/node_modules/http-errors/package.json @@ -1,27 +1,29 @@ { - "_from": "http-errors@~1.6.1", - "_id": "http-errors@1.6.1", + "_from": "http-errors@1.7.2", + "_id": "http-errors@1.7.2", "_inBundle": false, - "_integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", + "_integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "_location": "/http-errors", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "http-errors@~1.6.1", + "raw": "http-errors@1.7.2", "name": "http-errors", "escapedName": "http-errors", - "rawSpec": "~1.6.1", + "rawSpec": "1.7.2", "saveSpec": null, - "fetchSpec": "~1.6.1" + "fetchSpec": "1.7.2" }, "_requiredBy": [ + "/body-parser", + "/raw-body", "/send" ], - "_resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "_shasum": "5f8b8ed98aca545656bf572997387f904a722257", - "_spec": "http-errors@~1.6.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/send", + "_resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "_shasum": "4f5029cf13239f31036e5b2e55292bcfbcc85c8f", + "_spec": "http-errors@1.7.2", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/body-parser", "author": { "name": "Jonathan Ong", "email": "me@jongleberry.com", @@ -42,21 +44,24 @@ } ], "dependencies": { - "depd": "1.1.0", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "deprecated": false, "description": "Create HTTP error objects", "devDependencies": { - "eslint": "3.16.0", - "eslint-config-standard": "6.2.1", - "eslint-plugin-markdown": "1.0.0-beta.3", - "eslint-plugin-promise": "3.4.2", - "eslint-plugin-standard": "2.0.1", + "eslint": "5.13.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", "istanbul": "0.4.5", - "mocha": "1.21.5" + "mocha": "5.2.0" }, "engines": { "node": ">= 0.6" @@ -79,10 +84,10 @@ "url": "git+https://github.com/jshttp/http-errors.git" }, "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", + "lint": "eslint --plugin markdown --ext js,md . && node ./scripts/lint-readme-list.js", "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" }, - "version": "1.6.1" + "version": "1.7.2" } diff --git a/server/node_modules/inherits/package.json b/server/node_modules/inherits/package.json index 811e539..7f36f8a 100644 --- a/server/node_modules/inherits/package.json +++ b/server/node_modules/inherits/package.json @@ -16,12 +16,13 @@ "fetchSpec": "2.0.3" }, "_requiredBy": [ - "/http-errors" + "/http-errors", + "/readable-stream" ], "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "_shasum": "633c2c83e3da42a502f52466022480f4208261de", "_spec": "inherits@2.0.3", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/http-errors", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/http-errors", "browser": "./inherits_browser.js", "bugs": { "url": "https://github.com/isaacs/inherits/issues" diff --git a/server/node_modules/ipaddr.js/.npmignore b/server/node_modules/ipaddr.js/.npmignore deleted file mode 100644 index 7a1537b..0000000 --- a/server/node_modules/ipaddr.js/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea -node_modules diff --git a/server/node_modules/ipaddr.js/.travis.yml b/server/node_modules/ipaddr.js/.travis.yml deleted file mode 100644 index aa3d14a..0000000 --- a/server/node_modules/ipaddr.js/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: node_js - -node_js: - - "0.10" - - "0.11" - - "0.12" - - "4.0" - - "4.1" - - "4.2" - - "5" diff --git a/server/node_modules/ipaddr.js/Cakefile b/server/node_modules/ipaddr.js/Cakefile deleted file mode 100644 index 7fd355a..0000000 --- a/server/node_modules/ipaddr.js/Cakefile +++ /dev/null @@ -1,18 +0,0 @@ -fs = require 'fs' -CoffeeScript = require 'coffee-script' -nodeunit = require 'nodeunit' -UglifyJS = require 'uglify-js' - -task 'build', 'build the JavaScript files from CoffeeScript source', build = (cb) -> - source = fs.readFileSync 'src/ipaddr.coffee' - fs.writeFileSync 'lib/ipaddr.js', CoffeeScript.compile source.toString() - - invoke 'test' - invoke 'compress' - -task 'test', 'run the bundled tests', (cb) -> - nodeunit.reporters.default.run ['test'] - -task 'compress', 'uglify the resulting javascript', (cb) -> - result = UglifyJS.minify('lib/ipaddr.js') - fs.writeFileSync('ipaddr.min.js', result.code) diff --git a/server/node_modules/ipaddr.js/LICENSE b/server/node_modules/ipaddr.js/LICENSE index 3493f0d..f6b37b5 100644 --- a/server/node_modules/ipaddr.js/LICENSE +++ b/server/node_modules/ipaddr.js/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2011 Peter Zotov +Copyright (C) 2011-2017 whitequark Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -16,4 +16,4 @@ 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. \ No newline at end of file +THE SOFTWARE. diff --git a/server/node_modules/ipaddr.js/README.md b/server/node_modules/ipaddr.js/README.md index 1d2b42d..f57725b 100644 --- a/server/node_modules/ipaddr.js/README.md +++ b/server/node_modules/ipaddr.js/README.md @@ -43,7 +43,7 @@ or throws an `Error` if the passed string is not a valid representation of an IP address. The `ipaddr.process` method works just like the `ipaddr.parse` one, but it -automatically converts IPv4-mapped IPv6 addresses to their IPv4 couterparts +automatically converts IPv4-mapped IPv6 addresses to their IPv4 counterparts before returning. It is useful when you have a Node.js instance listening on an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its equivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4 @@ -97,8 +97,7 @@ in the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `"unica (the default one) and `"reserved"`. You can match against your own range list by using -`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with both -IPv6 and IPv4 addresses, and accepts a name-to-subnet map as the range list. For example: +`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with a mix of IPv6 or IPv4 addresses, and accepts a name-to-subnet map as the range list. For example: ```js var rangeList = { @@ -108,7 +107,7 @@ var rangeList = { [ ipaddr.parse('2001:5c0::'), 32 ] // freenet6 ] }; -ipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => "he.net" +ipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => "tunnelProviders" ``` The addresses can be converted to their byte representation with `toByteArray()`. @@ -155,6 +154,13 @@ var addr = ipaddr.parse("2001:db8:10::1234:DEAD"); addr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead] ``` +A IPv6 zone index can be accessed via `addr.zoneId`: + +```js +var addr = ipaddr.parse("2001:db8::%eth0"); +addr.zoneId // => 'eth0' +``` + #### IPv4 properties `toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address. @@ -167,13 +173,29 @@ addr.octets // => [192, 168, 1, 1] ``` `prefixLengthFromSubnetMask()` will return a CIDR prefix length for a valid IPv4 netmask or -false if the netmask is not valid. +null if the netmask is not valid. ```js ipaddr.IPv4.parse('255.255.255.240').prefixLengthFromSubnetMask() == 28 ipaddr.IPv4.parse('255.192.164.0').prefixLengthFromSubnetMask() == null ``` +`subnetMaskFromPrefixLength()` will return an IPv4 netmask for a valid CIDR prefix length. + +```js +ipaddr.IPv4.subnetMaskFromPrefixLength(24) == "255.255.255.0" +ipaddr.IPv4.subnetMaskFromPrefixLength(29) == "255.255.255.248" +``` + +`broadcastAddressFromCIDR()` will return the broadcast address for a given IPv4 interface and netmask in CIDR notation. +```js +ipaddr.IPv4.broadcastAddressFromCIDR("172.0.0.1/24") == "172.0.0.255" +``` +`networkAddressFromCIDR()` will return the network address for a given IPv4 interface and netmask in CIDR notation. +```js +ipaddr.IPv4.networkAddressFromCIDR("172.0.0.1/24") == "172.0.0.0" +``` + #### Conversion IPv4 and IPv6 can be converted bidirectionally to and from network byte order (MSB) byte arrays. diff --git a/server/node_modules/ipaddr.js/bower.json b/server/node_modules/ipaddr.js/bower.json deleted file mode 100644 index 2f5093e..0000000 --- a/server/node_modules/ipaddr.js/bower.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "ipaddr.js", - "version": "1.3.0", - "homepage": "https://github.com/whitequark/ipaddr.js", - "authors": [ - "whitequark " - ], - "description": "IP address manipulation library in JavaScript (CoffeeScript, actually)", - "main": "lib/ipaddr.js", - "moduleType": [ - "globals", - "node" - ], - "keywords": [ - "javscript", - "ip", - "address", - "ipv4", - "ipv6" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/server/node_modules/ipaddr.js/ipaddr.min.js b/server/node_modules/ipaddr.js/ipaddr.min.js index d90a480..b54a7cc 100644 --- a/server/node_modules/ipaddr.js/ipaddr.min.js +++ b/server/node_modules/ipaddr.js/ipaddr.min.js @@ -1 +1 @@ -(function(){var r,t,n,e,i,o,a,s;t={},s=this,"undefined"!=typeof module&&null!==module&&module.exports?module.exports=t:s.ipaddr=t,a=function(r,t,n,e){var i,o;if(r.length!==t.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(i=0;e>0;){if(o=n-e,o<0&&(o=0),r[i]>>o!=t[i]>>o)return!1;e-=n,i+=1}return!0},t.subnetMatch=function(r,t,n){var e,i,o,a,s;null==n&&(n="unicast");for(e in t)for(i=t[e],!i[0]||i[0]instanceof Array||(i=[i]),a=0,s=i.length;a=0;t=a+=-1){if(!((n=this.octets[t])in o))return null;if(i=o[n],e&&0!==i)return null;8!==i&&(e=!0),r+=i}return 32-r},r}(),n="(0?\\d+|0x[a-f0-9]+)",e={fourOctet:new RegExp("^"+n+"\\."+n+"\\."+n+"\\."+n+"$","i"),longValue:new RegExp("^"+n+"$","i")},t.IPv4.parser=function(r){var t,n,i,o,a;if(n=function(r){return"0"===r[0]&&"x"!==r[1]?parseInt(r,8):parseInt(r)},t=r.match(e.fourOctet))return function(){var r,e,o,a;for(o=t.slice(1,6),a=[],r=0,e=o.length;r4294967295||a<0)throw new Error("ipaddr: address outside defined range");return function(){var r,t;for(t=[],o=r=0;r<=24;o=r+=8)t.push(a>>o&255);return t}().reverse()}return null},t.IPv6=function(){function r(r){var t,n,e,i,o,a;if(16===r.length)for(this.parts=[],t=e=0;e<=14;t=e+=2)this.parts.push(r[t]<<8|r[t+1]);else{if(8!==r.length)throw new Error("ipaddr: ipv6 part count should be 8 or 16");this.parts=r}for(a=this.parts,i=0,o=a.length;i>8),r.push(255&t);return r},r.prototype.toNormalizedString=function(){var r;return function(){var t,n,e,i;for(e=this.parts,i=[],t=0,n=e.length;t>8,255&r,n>>8,255&n])},r}(),i="(?:[0-9a-f]+::?)+",o={native:new RegExp("^(::)?("+i+")?([0-9a-f]+)?(::)?$","i"),transitional:new RegExp("^((?:"+i+")|(?:::)(?:"+i+")?)"+n+"\\."+n+"\\."+n+"\\."+n+"$","i")},r=function(r,t){var n,e,i,o,a;if(r.indexOf("::")!==r.lastIndexOf("::"))return null;for(n=0,e=-1;(e=r.indexOf(":",e+1))>=0;)n++;if("::"===r.substr(0,2)&&n--,"::"===r.substr(-2,2)&&n--,n>t)return null;for(a=t-n,o=":";a--;)o+="0:";return r=r.replace("::",o),":"===r[0]&&(r=r.slice(1)),":"===r[r.length-1]&&(r=r.slice(0,-1)),function(){var t,n,e,o;for(e=r.split(":"),o=[],t=0,n=e.length;t=0&&t<=32)return[this.parse(n[1]),t];throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},t.IPv6.parseCIDR=function(r){var t,n;if((n=r.match(/^(.+)\/(\d+)$/))&&(t=parseInt(n[2]))>=0&&t<=128)return[this.parse(n[1]),t];throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},t.isValid=function(r){return t.IPv6.isValid(r)||t.IPv4.isValid(r)},t.parse=function(r){if(t.IPv6.isValid(r))return t.IPv6.parse(r);if(t.IPv4.isValid(r))return t.IPv4.parse(r);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},t.parseCIDR=function(r){try{return t.IPv6.parseCIDR(r)}catch(n){n;try{return t.IPv4.parseCIDR(r)}catch(r){throw r,new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},t.fromByteArray=function(r){var n;if(4===(n=r.length))return new t.IPv4(r);if(16===n)return new t.IPv6(r);throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address")},t.process=function(r){var t;return t=this.parse(r),"ipv6"===t.kind()&&t.isIPv4MappedAddress()?t.toIPv4Address():t}}).call(this); \ No newline at end of file +(function(){var r,t,n,e,i,o,a,s;t={},s=this,"undefined"!=typeof module&&null!==module&&module.exports?module.exports=t:s.ipaddr=t,a=function(r,t,n,e){var i,o;if(r.length!==t.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(i=0;e>0;){if((o=n-e)<0&&(o=0),r[i]>>o!=t[i]>>o)return!1;e-=n,i+=1}return!0},t.subnetMatch=function(r,t,n){var e,i,o,a,s;null==n&&(n="unicast");for(o in t)for(!(a=t[o])[0]||a[0]instanceof Array||(a=[a]),e=0,i=a.length;e=0;t=n+=-1){if(!((e=this.octets[t])in a))return null;if(o=a[e],i&&0!==o)return null;8!==o&&(i=!0),r+=o}return 32-r},r}(),n="(0?\\d+|0x[a-f0-9]+)",e={fourOctet:new RegExp("^"+n+"\\."+n+"\\."+n+"\\."+n+"$","i"),longValue:new RegExp("^"+n+"$","i")},t.IPv4.parser=function(r){var t,n,i,o,a;if(n=function(r){return"0"===r[0]&&"x"!==r[1]?parseInt(r,8):parseInt(r)},t=r.match(e.fourOctet))return function(){var r,e,o,a;for(a=[],r=0,e=(o=t.slice(1,6)).length;r4294967295||a<0)throw new Error("ipaddr: address outside defined range");return function(){var r,t;for(t=[],o=r=0;r<=24;o=r+=8)t.push(a>>o&255);return t}().reverse()}return null},t.IPv6=function(){function r(r,t){var n,e,i,o,a,s;if(16===r.length)for(this.parts=[],n=e=0;e<=14;n=e+=2)this.parts.push(r[n]<<8|r[n+1]);else{if(8!==r.length)throw new Error("ipaddr: ipv6 part count should be 8 or 16");this.parts=r}for(i=0,o=(s=this.parts).length;it&&(r=n.index,t=n[0].length);return t<0?i:i.substring(0,r)+"::"+i.substring(r+t)},r.prototype.toByteArray=function(){var r,t,n,e,i;for(r=[],t=0,n=(i=this.parts).length;t>8),r.push(255&e);return r},r.prototype.toNormalizedString=function(){var r,t,n;return r=function(){var r,n,e,i;for(i=[],r=0,n=(e=this.parts).length;r>8,255&r,n>>8,255&n])},r.prototype.prefixLengthFromSubnetMask=function(){var r,t,n,e,i,o,a;for(a={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},r=0,i=!1,t=n=7;n>=0;t=n+=-1){if(!((e=this.parts[t])in a))return null;if(o=a[e],i&&0!==o)return null;16!==o&&(i=!0),r+=o}return 128-r},r}(),i="(?:[0-9a-f]+::?)+",o={zoneIndex:new RegExp("%[0-9a-z]{1,}","i"),native:new RegExp("^(::)?("+i+")?([0-9a-f]+)?(::)?(%[0-9a-z]{1,})?$","i"),transitional:new RegExp("^((?:"+i+")|(?:::)(?:"+i+")?)"+n+"\\."+n+"\\."+n+"\\."+n+"(%[0-9a-z]{1,})?$","i")},r=function(r,t){var n,e,i,a,s,p;if(r.indexOf("::")!==r.lastIndexOf("::"))return null;for((p=(r.match(o.zoneIndex)||[])[0])&&(p=p.substring(1),r=r.replace(/%.+$/,"")),n=0,e=-1;(e=r.indexOf(":",e+1))>=0;)n++;if("::"===r.substr(0,2)&&n--,"::"===r.substr(-2,2)&&n--,n>t)return null;for(s=t-n,a=":";s--;)a+="0:";return":"===(r=r.replace("::",a))[0]&&(r=r.slice(1)),":"===r[r.length-1]&&(r=r.slice(0,-1)),t=function(){var t,n,e,o;for(o=[],t=0,n=(e=r.split(":")).length;t=0&&t<=32)return e=[this.parse(n[1]),t],Object.defineProperty(e,"toString",{value:function(){return this.join("/")}}),e;throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},t.IPv4.subnetMaskFromPrefixLength=function(r){var t,n,e;if((r=parseInt(r))<0||r>32)throw new Error("ipaddr: invalid IPv4 prefix length");for(e=[0,0,0,0],n=0,t=Math.floor(r/8);n=0&&t<=128)return e=[this.parse(n[1]),t],Object.defineProperty(e,"toString",{value:function(){return this.join("/")}}),e;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},t.isValid=function(r){return t.IPv6.isValid(r)||t.IPv4.isValid(r)},t.parse=function(r){if(t.IPv6.isValid(r))return t.IPv6.parse(r);if(t.IPv4.isValid(r))return t.IPv4.parse(r);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},t.parseCIDR=function(r){try{return t.IPv6.parseCIDR(r)}catch(n){n;try{return t.IPv4.parseCIDR(r)}catch(r){throw r,new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},t.fromByteArray=function(r){var n;if(4===(n=r.length))return new t.IPv4(r);if(16===n)return new t.IPv6(r);throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address")},t.process=function(r){var t;return t=this.parse(r),"ipv6"===t.kind()&&t.isIPv4MappedAddress()?t.toIPv4Address():t}}).call(this); \ No newline at end of file diff --git a/server/node_modules/ipaddr.js/lib/ipaddr.js b/server/node_modules/ipaddr.js/lib/ipaddr.js index 8bef407..18bd93b 100644 --- a/server/node_modules/ipaddr.js/lib/ipaddr.js +++ b/server/node_modules/ipaddr.js/lib/ipaddr.js @@ -1,5 +1,5 @@ (function() { - var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root; + var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex; ipaddr = {}; @@ -32,7 +32,7 @@ }; ipaddr.subnetMatch = function(address, rangeList, defaultName) { - var rangeName, rangeSubnets, subnet, _i, _len; + var k, len, rangeName, rangeSubnets, subnet; if (defaultName == null) { defaultName = 'unicast'; } @@ -41,10 +41,12 @@ if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) { rangeSubnets = [rangeSubnets]; } - for (_i = 0, _len = rangeSubnets.length; _i < _len; _i++) { - subnet = rangeSubnets[_i]; - if (address.match.apply(address, subnet)) { - return rangeName; + for (k = 0, len = rangeSubnets.length; k < len; k++) { + subnet = rangeSubnets[k]; + if (address.kind() === subnet[0].kind()) { + if (address.match.apply(address, subnet)) { + return rangeName; + } } } } @@ -53,12 +55,12 @@ ipaddr.IPv4 = (function() { function IPv4(octets) { - var octet, _i, _len; + var k, len, octet; if (octets.length !== 4) { throw new Error("ipaddr: ipv4 octet count should be 4"); } - for (_i = 0, _len = octets.length; _i < _len; _i++) { - octet = octets[_i]; + for (k = 0, len = octets.length; k < len; k++) { + octet = octets[k]; if (!((0 <= octet && octet <= 255))) { throw new Error("ipaddr: ipv4 octet should fit in 8 bits"); } @@ -74,14 +76,18 @@ return this.octets.join("."); }; + IPv4.prototype.toNormalizedString = function() { + return this.toString(); + }; + IPv4.prototype.toByteArray = function() { return this.octets.slice(0); }; IPv4.prototype.match = function(other, cidrRange) { - var _ref; + var ref; if (cidrRange === void 0) { - _ref = other, other = _ref[0], cidrRange = _ref[1]; + ref = other, other = ref[0], cidrRange = ref[1]; } if (other.kind() !== 'ipv4') { throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one"); @@ -109,7 +115,7 @@ }; IPv4.prototype.prefixLengthFromSubnetMask = function() { - var cidr, i, octet, stop, zeros, zerotable, _i; + var cidr, i, k, octet, stop, zeros, zerotable; zerotable = { 0: 8, 128: 7, @@ -123,7 +129,7 @@ }; cidr = 0; stop = false; - for (i = _i = 3; _i >= 0; i = _i += -1) { + for (i = k = 3; k >= 0; i = k += -1) { octet = this.octets[i]; if (octet in zerotable) { zeros = zerotable[octet]; @@ -163,14 +169,14 @@ }; if (match = string.match(ipv4Regexes.fourOctet)) { return (function() { - var _i, _len, _ref, _results; - _ref = match.slice(1, 6); - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - part = _ref[_i]; - _results.push(parseIntAuto(part)); + var k, len, ref, results; + ref = match.slice(1, 6); + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(parseIntAuto(part)); } - return _results; + return results; })(); } else if (match = string.match(ipv4Regexes.longValue)) { value = parseIntAuto(match[1]); @@ -178,12 +184,12 @@ throw new Error("ipaddr: address outside defined range"); } return ((function() { - var _i, _results; - _results = []; - for (shift = _i = 0; _i <= 24; shift = _i += 8) { - _results.push((value >> shift) & 0xff); + var k, results; + results = []; + for (shift = k = 0; k <= 24; shift = k += 8) { + results.push((value >> shift) & 0xff); } - return _results; + return results; })()).reverse(); } else { return null; @@ -191,11 +197,11 @@ }; ipaddr.IPv6 = (function() { - function IPv6(parts) { - var i, part, _i, _j, _len, _ref; + function IPv6(parts, zoneId) { + var i, k, l, len, part, ref; if (parts.length === 16) { this.parts = []; - for (i = _i = 0; _i <= 14; i = _i += 2) { + for (i = k = 0; k <= 14; i = k += 2) { this.parts.push((parts[i] << 8) | parts[i + 1]); } } else if (parts.length === 8) { @@ -203,13 +209,16 @@ } else { throw new Error("ipaddr: ipv6 part count should be 8 or 16"); } - _ref = this.parts; - for (_j = 0, _len = _ref.length; _j < _len; _j++) { - part = _ref[_j]; + ref = this.parts; + for (l = 0, len = ref.length; l < len; l++) { + part = ref[l]; if (!((0 <= part && part <= 0xffff))) { throw new Error("ipaddr: ipv6 part should fit in 16 bits"); } } + if (zoneId) { + this.zoneId = zoneId; + } } IPv6.prototype.kind = function() { @@ -217,64 +226,33 @@ }; IPv6.prototype.toString = function() { - var compactStringParts, part, pushPart, state, stringParts, _i, _len; - stringParts = (function() { - var _i, _len, _ref, _results; - _ref = this.parts; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - part = _ref[_i]; - _results.push(part.toString(16)); - } - return _results; - }).call(this); - compactStringParts = []; - pushPart = function(part) { - return compactStringParts.push(part); - }; - state = 0; - for (_i = 0, _len = stringParts.length; _i < _len; _i++) { - part = stringParts[_i]; - switch (state) { - case 0: - if (part === '0') { - pushPart(''); - } else { - pushPart(part); - } - state = 1; - break; - case 1: - if (part === '0') { - state = 2; - } else { - pushPart(part); - } - break; - case 2: - if (part !== '0') { - pushPart(''); - pushPart(part); - state = 3; - } - break; - case 3: - pushPart(part); + return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::'); + }; + + IPv6.prototype.toRFC5952String = function() { + var bestMatchIndex, bestMatchLength, match, regex, string; + regex = /((^|:)(0(:|$)){2,})/g; + string = this.toNormalizedString(); + bestMatchIndex = 0; + bestMatchLength = -1; + while ((match = regex.exec(string))) { + if (match[0].length > bestMatchLength) { + bestMatchIndex = match.index; + bestMatchLength = match[0].length; } } - if (state === 2) { - pushPart(''); - pushPart(''); + if (bestMatchLength < 0) { + return string; } - return compactStringParts.join(":"); + return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength); }; IPv6.prototype.toByteArray = function() { - var bytes, part, _i, _len, _ref; + var bytes, k, len, part, ref; bytes = []; - _ref = this.parts; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - part = _ref[_i]; + ref = this.parts; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; bytes.push(part >> 8); bytes.push(part & 0xff); } @@ -282,23 +260,47 @@ }; IPv6.prototype.toNormalizedString = function() { - var part; - return ((function() { - var _i, _len, _ref, _results; - _ref = this.parts; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - part = _ref[_i]; - _results.push(part.toString(16)); + var addr, part, suffix; + addr = ((function() { + var k, len, ref, results; + ref = this.parts; + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(part.toString(16)); } - return _results; + return results; }).call(this)).join(":"); + suffix = ''; + if (this.zoneId) { + suffix = '%' + this.zoneId; + } + return addr + suffix; + }; + + IPv6.prototype.toFixedLengthString = function() { + var addr, part, suffix; + addr = ((function() { + var k, len, ref, results; + ref = this.parts; + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(part.toString(16).padStart(4, '0')); + } + return results; + }).call(this)).join(":"); + suffix = ''; + if (this.zoneId) { + suffix = '%' + this.zoneId; + } + return addr + suffix; }; IPv6.prototype.match = function(other, cidrRange) { - var _ref; + var ref; if (cidrRange === void 0) { - _ref = other, other = _ref[0], cidrRange = _ref[1]; + ref = other, other = ref[0], cidrRange = ref[1]; } if (other.kind() !== 'ipv6') { throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one"); @@ -329,30 +331,79 @@ }; IPv6.prototype.toIPv4Address = function() { - var high, low, _ref; + var high, low, ref; if (!this.isIPv4MappedAddress()) { throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4"); } - _ref = this.parts.slice(-2), high = _ref[0], low = _ref[1]; + ref = this.parts.slice(-2), high = ref[0], low = ref[1]; return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]); }; + IPv6.prototype.prefixLengthFromSubnetMask = function() { + var cidr, i, k, part, stop, zeros, zerotable; + zerotable = { + 0: 16, + 32768: 15, + 49152: 14, + 57344: 13, + 61440: 12, + 63488: 11, + 64512: 10, + 65024: 9, + 65280: 8, + 65408: 7, + 65472: 6, + 65504: 5, + 65520: 4, + 65528: 3, + 65532: 2, + 65534: 1, + 65535: 0 + }; + cidr = 0; + stop = false; + for (i = k = 7; k >= 0; i = k += -1) { + part = this.parts[i]; + if (part in zerotable) { + zeros = zerotable[part]; + if (stop && zeros !== 0) { + return null; + } + if (zeros !== 16) { + stop = true; + } + cidr += zeros; + } else { + return null; + } + } + return 128 - cidr; + }; + return IPv6; })(); ipv6Part = "(?:[0-9a-f]+::?)+"; + zoneIndex = "%[0-9a-z]{1,}"; + ipv6Regexes = { - "native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?$", 'i'), - transitional: new RegExp(("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)") + ("" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$"), 'i') + zoneIndex: new RegExp(zoneIndex, 'i'), + "native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", 'i'), + transitional: new RegExp(("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)") + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), 'i') }; expandIPv6 = function(string, parts) { - var colonCount, lastColon, part, replacement, replacementCount; + var colonCount, lastColon, part, replacement, replacementCount, zoneId; if (string.indexOf('::') !== string.lastIndexOf('::')) { return null; } + zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0]; + if (zoneId) { + zoneId = zoneId.substring(1); + string = string.replace(/%.+$/, ''); + } colonCount = 0; lastColon = -1; while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) { @@ -379,35 +430,43 @@ if (string[string.length - 1] === ':') { string = string.slice(0, -1); } - return (function() { - var _i, _len, _ref, _results; - _ref = string.split(":"); - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - part = _ref[_i]; - _results.push(parseInt(part, 16)); + parts = (function() { + var k, len, ref, results; + ref = string.split(":"); + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(parseInt(part, 16)); } - return _results; + return results; })(); + return { + parts: parts, + zoneId: zoneId + }; }; ipaddr.IPv6.parser = function(string) { - var match, octet, octets, parts, _i, _len; - if (string.match(ipv6Regexes['native'])) { + var addr, k, len, match, octet, octets, zoneId; + if (ipv6Regexes['native'].test(string)) { return expandIPv6(string, 8); } else if (match = string.match(ipv6Regexes['transitional'])) { - parts = expandIPv6(match[1].slice(0, -1), 6); - if (parts) { + zoneId = match[6] || ''; + addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6); + if (addr.parts) { octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])]; - for (_i = 0, _len = octets.length; _i < _len; _i++) { - octet = octets[_i]; + for (k = 0, len = octets.length; k < len; k++) { + octet = octets[k]; if (!((0 <= octet && octet <= 255))) { return null; } } - parts.push(octets[0] << 8 | octets[1]); - parts.push(octets[2] << 8 | octets[3]); - return parts; + addr.parts.push(octets[0] << 8 | octets[1]); + addr.parts.push(octets[2] << 8 | octets[3]); + return { + parts: addr.parts, + zoneId: addr.zoneId + }; } } return null; @@ -422,14 +481,14 @@ try { new this(this.parser(string)); return true; - } catch (_error) { - e = _error; + } catch (error1) { + e = error1; return false; } }; ipaddr.IPv4.isValidFourPartDecimal = function(string) { - if (ipaddr.IPv4.isValid(string) && string.match(/^\d+(\.\d+){3}$/)) { + if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)) { return true; } else { return false; @@ -437,20 +496,21 @@ }; ipaddr.IPv6.isValid = function(string) { - var e; + var addr, e; if (typeof string === "string" && string.indexOf(":") === -1) { return false; } try { - new this(this.parser(string)); + addr = this.parser(string); + new this(addr.parts, addr.zoneId); return true; - } catch (_error) { - e = _error; + } catch (error1) { + e = error1; return false; } }; - ipaddr.IPv4.parse = ipaddr.IPv6.parse = function(string) { + ipaddr.IPv4.parse = function(string) { var parts; parts = this.parser(string); if (parts === null) { @@ -459,23 +519,101 @@ return new this(parts); }; + ipaddr.IPv6.parse = function(string) { + var addr; + addr = this.parser(string); + if (addr.parts === null) { + throw new Error("ipaddr: string is not formatted like ip address"); + } + return new this(addr.parts, addr.zoneId); + }; + ipaddr.IPv4.parseCIDR = function(string) { - var maskLength, match; + var maskLength, match, parsed; if (match = string.match(/^(.+)\/(\d+)$/)) { maskLength = parseInt(match[2]); if (maskLength >= 0 && maskLength <= 32) { - return [this.parse(match[1]), maskLength]; + parsed = [this.parse(match[1]), maskLength]; + Object.defineProperty(parsed, 'toString', { + value: function() { + return this.join('/'); + } + }); + return parsed; } } throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range"); }; + ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) { + var filledOctetCount, j, octets; + prefix = parseInt(prefix); + if (prefix < 0 || prefix > 32) { + throw new Error('ipaddr: invalid IPv4 prefix length'); + } + octets = [0, 0, 0, 0]; + j = 0; + filledOctetCount = Math.floor(prefix / 8); + while (j < filledOctetCount) { + octets[j] = 255; + j++; + } + if (filledOctetCount < 4) { + octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8); + } + return new this(octets); + }; + + ipaddr.IPv4.broadcastAddressFromCIDR = function(string) { + var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; + try { + cidr = this.parseCIDR(string); + ipInterfaceOctets = cidr[0].toByteArray(); + subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); + octets = []; + i = 0; + while (i < 4) { + octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255); + i++; + } + return new this(octets); + } catch (error1) { + error = error1; + throw new Error('ipaddr: the address does not have IPv4 CIDR format'); + } + }; + + ipaddr.IPv4.networkAddressFromCIDR = function(string) { + var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; + try { + cidr = this.parseCIDR(string); + ipInterfaceOctets = cidr[0].toByteArray(); + subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); + octets = []; + i = 0; + while (i < 4) { + octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10)); + i++; + } + return new this(octets); + } catch (error1) { + error = error1; + throw new Error('ipaddr: the address does not have IPv4 CIDR format'); + } + }; + ipaddr.IPv6.parseCIDR = function(string) { - var maskLength, match; + var maskLength, match, parsed; if (match = string.match(/^(.+)\/(\d+)$/)) { maskLength = parseInt(match[2]); if (maskLength >= 0 && maskLength <= 128) { - return [this.parse(match[1]), maskLength]; + parsed = [this.parse(match[1]), maskLength]; + Object.defineProperty(parsed, 'toString', { + value: function() { + return this.join('/'); + } + }); + return parsed; } } throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range"); @@ -499,12 +637,12 @@ var e; try { return ipaddr.IPv6.parseCIDR(string); - } catch (_error) { - e = _error; + } catch (error1) { + e = error1; try { return ipaddr.IPv4.parseCIDR(string); - } catch (_error) { - e = _error; + } catch (error1) { + e = error1; throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format"); } } diff --git a/server/node_modules/ipaddr.js/package.json b/server/node_modules/ipaddr.js/package.json index 2bc1643..623cba4 100644 --- a/server/node_modules/ipaddr.js/package.json +++ b/server/node_modules/ipaddr.js/package.json @@ -1,27 +1,27 @@ { - "_from": "ipaddr.js@1.3.0", - "_id": "ipaddr.js@1.3.0", + "_from": "ipaddr.js@1.9.1", + "_id": "ipaddr.js@1.9.1", "_inBundle": false, - "_integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=", + "_integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "_location": "/ipaddr.js", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "ipaddr.js@1.3.0", + "raw": "ipaddr.js@1.9.1", "name": "ipaddr.js", "escapedName": "ipaddr.js", - "rawSpec": "1.3.0", + "rawSpec": "1.9.1", "saveSpec": null, - "fetchSpec": "1.3.0" + "fetchSpec": "1.9.1" }, "_requiredBy": [ "/proxy-addr" ], - "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", - "_shasum": "1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec", - "_spec": "ipaddr.js@1.3.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/proxy-addr", + "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "_shasum": "bff38543eeb8984825079ff3a2a8e6cbd46781b3", + "_spec": "ipaddr.js@1.9.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/proxy-addr", "author": { "name": "whitequark", "email": "whitequark@whitequark.org" @@ -34,9 +34,9 @@ "deprecated": false, "description": "A library for manipulating IPv4 and IPv6 addresses in JavaScript.", "devDependencies": { - "coffee-script": "~1.6", - "nodeunit": ">=0.8.2 <0.8.7", - "uglify-js": "latest" + "coffee-script": "~1.12.6", + "nodeunit": "^0.11.3", + "uglify-js": "~3.0.19" }, "directories": { "lib": "./lib" @@ -44,6 +44,11 @@ "engines": { "node": ">= 0.10" }, + "files": [ + "lib/", + "LICENSE", + "ipaddr.min.js" + ], "homepage": "https://github.com/whitequark/ipaddr.js#readme", "keywords": [ "ip", @@ -51,7 +56,7 @@ "ipv6" ], "license": "MIT", - "main": "./lib/ipaddr", + "main": "./lib/ipaddr.js", "name": "ipaddr.js", "repository": { "type": "git", @@ -60,5 +65,6 @@ "scripts": { "test": "cake build test" }, - "version": "1.3.0" + "types": "./lib/ipaddr.js.d.ts", + "version": "1.9.1" } diff --git a/server/node_modules/ipaddr.js/src/ipaddr.coffee b/server/node_modules/ipaddr.js/src/ipaddr.coffee deleted file mode 100644 index 941014c..0000000 --- a/server/node_modules/ipaddr.js/src/ipaddr.coffee +++ /dev/null @@ -1,460 +0,0 @@ -# Define the main object -ipaddr = {} - -root = this - -# Export for both the CommonJS and browser-like environment -if module? && module.exports - module.exports = ipaddr -else - root['ipaddr'] = ipaddr - -# A generic CIDR (Classless Inter-Domain Routing) RFC1518 range matcher. -matchCIDR = (first, second, partSize, cidrBits) -> - if first.length != second.length - throw new Error "ipaddr: cannot match CIDR for objects with different lengths" - - part = 0 - while cidrBits > 0 - shift = partSize - cidrBits - shift = 0 if shift < 0 - - if first[part] >> shift != second[part] >> shift - return false - - cidrBits -= partSize - part += 1 - - return true - -# An utility function to ease named range matching. See examples below. -ipaddr.subnetMatch = (address, rangeList, defaultName='unicast') -> - for rangeName, rangeSubnets of rangeList - # ECMA5 Array.isArray isn't available everywhere - if rangeSubnets[0] && !(rangeSubnets[0] instanceof Array) - rangeSubnets = [ rangeSubnets ] - - for subnet in rangeSubnets - return rangeName if address.match.apply(address, subnet) - - return defaultName - -# An IPv4 address (RFC791). -class ipaddr.IPv4 - # Constructs a new IPv4 address from an array of four octets - # in network order (MSB first) - # Verifies the input. - constructor: (octets) -> - if octets.length != 4 - throw new Error "ipaddr: ipv4 octet count should be 4" - - for octet in octets - if !(0 <= octet <= 255) - throw new Error "ipaddr: ipv4 octet should fit in 8 bits" - - @octets = octets - - # The 'kind' method exists on both IPv4 and IPv6 classes. - kind: -> - return 'ipv4' - - # Returns the address in convenient, decimal-dotted format. - toString: -> - return @octets.join "." - - # Returns an array of byte-sized values in network order (MSB first) - toByteArray: -> - return @octets.slice(0) # octets.clone - - # Checks if this address matches other one within given CIDR range. - match: (other, cidrRange) -> - if cidrRange == undefined - [other, cidrRange] = other - - if other.kind() != 'ipv4' - throw new Error "ipaddr: cannot match ipv4 address with non-ipv4 one" - - return matchCIDR(this.octets, other.octets, 8, cidrRange) - - # Special IPv4 address ranges. - # See also https://en.wikipedia.org/wiki/Reserved_IP_addresses - SpecialRanges: - unspecified: [ - [ new IPv4([0, 0, 0, 0]), 8 ] - ] - broadcast: [ - [ new IPv4([255, 255, 255, 255]), 32 ] - ] - multicast: [ # RFC3171 - [ new IPv4([224, 0, 0, 0]), 4 ] - ] - linkLocal: [ # RFC3927 - [ new IPv4([169, 254, 0, 0]), 16 ] - ] - loopback: [ # RFC5735 - [ new IPv4([127, 0, 0, 0]), 8 ] - ] - carrierGradeNat: [ # RFC6598 - [ new IPv4([100, 64, 0, 0]), 10 ] - ] - private: [ # RFC1918 - [ new IPv4([10, 0, 0, 0]), 8 ] - [ new IPv4([172, 16, 0, 0]), 12 ] - [ new IPv4([192, 168, 0, 0]), 16 ] - ] - reserved: [ # Reserved and testing-only ranges; RFCs 5735, 5737, 2544, 1700 - [ new IPv4([192, 0, 0, 0]), 24 ] - [ new IPv4([192, 0, 2, 0]), 24 ] - [ new IPv4([192, 88, 99, 0]), 24 ] - [ new IPv4([198, 51, 100, 0]), 24 ] - [ new IPv4([203, 0, 113, 0]), 24 ] - [ new IPv4([240, 0, 0, 0]), 4 ] - ] - - # Checks if the address corresponds to one of the special ranges. - range: -> - return ipaddr.subnetMatch(this, @SpecialRanges) - - # Convrets this IPv4 address to an IPv4-mapped IPv6 address. - toIPv4MappedAddress: -> - return ipaddr.IPv6.parse "::ffff:#{@toString()}" - - # returns a number of leading ones in IPv4 address, making sure that - # the rest is a solid sequence of 0's (valid netmask) - # returns either the CIDR length or null if mask is not valid - prefixLengthFromSubnetMask: -> - # number of zeroes in octet - zerotable = - 0: 8 - 128: 7 - 192: 6 - 224: 5 - 240: 4 - 248: 3 - 252: 2 - 254: 1 - 255: 0 - - cidr = 0 - # non-zero encountered stop scanning for zeroes - stop = false - for i in [3..0] by -1 - octet = @octets[i] - if octet of zerotable - zeros = zerotable[octet] - if stop and zeros != 0 - return null - unless zeros == 8 - stop = true - cidr += zeros - else - return null - return 32 - cidr - -# A list of regular expressions that match arbitrary IPv4 addresses, -# for which a number of weird notations exist. -# Note that an address like 0010.0xa5.1.1 is considered legal. -ipv4Part = "(0?\\d+|0x[a-f0-9]+)" -ipv4Regexes = - fourOctet: new RegExp "^#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}$", 'i' - longValue: new RegExp "^#{ipv4Part}$", 'i' - -# Classful variants (like a.b, where a is an octet, and b is a 24-bit -# value representing last three octets; this corresponds to a class C -# address) are omitted due to classless nature of modern Internet. -ipaddr.IPv4.parser = (string) -> - parseIntAuto = (string) -> - if string[0] == "0" && string[1] != "x" - parseInt(string, 8) - else - parseInt(string) - - # parseInt recognizes all that octal & hexadecimal weirdness for us - if match = string.match(ipv4Regexes.fourOctet) - return (parseIntAuto(part) for part in match[1..5]) - else if match = string.match(ipv4Regexes.longValue) - value = parseIntAuto(match[1]) - if value > 0xffffffff || value < 0 - throw new Error "ipaddr: address outside defined range" - return ((value >> shift) & 0xff for shift in [0..24] by 8).reverse() - else - return null - -# An IPv6 address (RFC2460) -class ipaddr.IPv6 - # Constructs an IPv6 address from an array of eight 16-bit parts - # or sixteen 8-bit parts in network order (MSB first). - # Throws an error if the input is invalid. - constructor: (parts) -> - if parts.length == 16 - @parts = [] - for i in [0..14] by 2 - @parts.push((parts[i] << 8) | parts[i + 1]) - else if parts.length == 8 - @parts = parts - else - throw new Error "ipaddr: ipv6 part count should be 8 or 16" - - for part in @parts - if !(0 <= part <= 0xffff) - throw new Error "ipaddr: ipv6 part should fit in 16 bits" - - # The 'kind' method exists on both IPv4 and IPv6 classes. - kind: -> - return 'ipv6' - - # Returns the address in compact, human-readable format like - # 2001:db8:8:66::1 - toString: -> - stringParts = (part.toString(16) for part in @parts) - - compactStringParts = [] - pushPart = (part) -> compactStringParts.push part - - state = 0 - for part in stringParts - switch state - when 0 - if part == '0' - pushPart('') - else - pushPart(part) - - state = 1 - when 1 - if part == '0' - state = 2 - else - pushPart(part) - when 2 - unless part == '0' - pushPart('') - pushPart(part) - state = 3 - when 3 - pushPart(part) - - if state == 2 - pushPart('') - pushPart('') - - return compactStringParts.join ":" - - # Returns an array of byte-sized values in network order (MSB first) - toByteArray: -> - bytes = [] - for part in @parts - bytes.push(part >> 8) - bytes.push(part & 0xff) - - return bytes - - # Returns the address in expanded format with all zeroes included, like - # 2001:db8:8:66:0:0:0:1 - toNormalizedString: -> - return (part.toString(16) for part in @parts).join ":" - - # Checks if this address matches other one within given CIDR range. - match: (other, cidrRange) -> - if cidrRange == undefined - [other, cidrRange] = other - - if other.kind() != 'ipv6' - throw new Error "ipaddr: cannot match ipv6 address with non-ipv6 one" - - return matchCIDR(this.parts, other.parts, 16, cidrRange) - - # Special IPv6 ranges - SpecialRanges: - unspecified: [ new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128 ] # RFC4291, here and after - linkLocal: [ new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10 ] - multicast: [ new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8 ] - loopback: [ new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128 ] - uniqueLocal: [ new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7 ] - ipv4Mapped: [ new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96 ] - rfc6145: [ new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96 ] # RFC6145 - rfc6052: [ new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96 ] # RFC6052 - '6to4': [ new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16 ] # RFC3056 - teredo: [ new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32 ] # RFC6052, RFC6146 - reserved: [ - [ new IPv6([ 0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32 ] # RFC4291 - ] - - # Checks if the address corresponds to one of the special ranges. - range: -> - return ipaddr.subnetMatch(this, @SpecialRanges) - - # Checks if this address is an IPv4-mapped IPv6 address. - isIPv4MappedAddress: -> - return @range() == 'ipv4Mapped' - - # Converts this address to IPv4 address if it is an IPv4-mapped IPv6 address. - # Throws an error otherwise. - toIPv4Address: -> - unless @isIPv4MappedAddress() - throw new Error "ipaddr: trying to convert a generic ipv6 address to ipv4" - - [high, low] = @parts[-2..-1] - - return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]) - -# IPv6-matching regular expressions. -# For IPv6, the task is simpler: it is enough to match the colon-delimited -# hexadecimal IPv6 and a transitional variant with dotted-decimal IPv4 at -# the end. -ipv6Part = "(?:[0-9a-f]+::?)+" -ipv6Regexes = - native: new RegExp "^(::)?(#{ipv6Part})?([0-9a-f]+)?(::)?$", 'i' - transitional: new RegExp "^((?:#{ipv6Part})|(?:::)(?:#{ipv6Part})?)" + - "#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}$", 'i' - -# Expand :: in an IPv6 address or address part consisting of `parts` groups. -expandIPv6 = (string, parts) -> - # More than one '::' means invalid adddress - if string.indexOf('::') != string.lastIndexOf('::') - return null - - # How many parts do we already have? - colonCount = 0 - lastColon = -1 - while (lastColon = string.indexOf(':', lastColon + 1)) >= 0 - colonCount++ - - # 0::0 is two parts more than :: - colonCount-- if string.substr(0, 2) == '::' - colonCount-- if string.substr(-2, 2) == '::' - - # The following loop would hang if colonCount > parts - if colonCount > parts - return null - - # replacement = ':' + '0:' * (parts - colonCount) - replacementCount = parts - colonCount - replacement = ':' - while replacementCount-- - replacement += '0:' - - # Insert the missing zeroes - string = string.replace('::', replacement) - - # Trim any garbage which may be hanging around if :: was at the edge in - # the source string - string = string[1..-1] if string[0] == ':' - string = string[0..-2] if string[string.length-1] == ':' - - return (parseInt(part, 16) for part in string.split(":")) - -# Parse an IPv6 address. -ipaddr.IPv6.parser = (string) -> - if string.match(ipv6Regexes['native']) - return expandIPv6(string, 8) - - else if match = string.match(ipv6Regexes['transitional']) - parts = expandIPv6(match[1][0..-2], 6) - if parts - octets = [parseInt(match[2]), parseInt(match[3]), - parseInt(match[4]), parseInt(match[5])] - for octet in octets - if !(0 <= octet <= 255) - return null - - parts.push(octets[0] << 8 | octets[1]) - parts.push(octets[2] << 8 | octets[3]) - return parts - - return null - -# Checks if a given string is formatted like IPv4/IPv6 address. -ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = (string) -> - return @parser(string) != null - -# Checks if a given string is a valid IPv4/IPv6 address. -ipaddr.IPv4.isValid = (string) -> - try - new this(@parser(string)) - return true - catch e - return false - -ipaddr.IPv4.isValidFourPartDecimal = (string) -> - if ipaddr.IPv4.isValid(string) and string.match(/^\d+(\.\d+){3}$/) - return true - else - return false - -ipaddr.IPv6.isValid = (string) -> - # Since IPv6.isValid is always called first, this shortcut - # provides a substantial performance gain. - if typeof string == "string" and string.indexOf(":") == -1 - return false - - try - new this(@parser(string)) - return true - catch e - return false - -# Tries to parse and validate a string with IPv4/IPv6 address. -# Throws an error if it fails. -ipaddr.IPv4.parse = ipaddr.IPv6.parse = (string) -> - parts = @parser(string) - if parts == null - throw new Error "ipaddr: string is not formatted like ip address" - - return new this(parts) - -ipaddr.IPv4.parseCIDR = (string) -> - if match = string.match(/^(.+)\/(\d+)$/) - maskLength = parseInt(match[2]) - if maskLength >= 0 and maskLength <= 32 - return [@parse(match[1]), maskLength] - - throw new Error "ipaddr: string is not formatted like an IPv4 CIDR range" - -ipaddr.IPv6.parseCIDR = (string) -> - if match = string.match(/^(.+)\/(\d+)$/) - maskLength = parseInt(match[2]) - if maskLength >= 0 and maskLength <= 128 - return [@parse(match[1]), maskLength] - - throw new Error "ipaddr: string is not formatted like an IPv6 CIDR range" - -# Checks if the address is valid IP address -ipaddr.isValid = (string) -> - return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string) - -# Try to parse an address and throw an error if it is impossible -ipaddr.parse = (string) -> - if ipaddr.IPv6.isValid(string) - return ipaddr.IPv6.parse(string) - else if ipaddr.IPv4.isValid(string) - return ipaddr.IPv4.parse(string) - else - throw new Error "ipaddr: the address has neither IPv6 nor IPv4 format" - -ipaddr.parseCIDR = (string) -> - try - return ipaddr.IPv6.parseCIDR(string) - catch e - try - return ipaddr.IPv4.parseCIDR(string) - catch e - throw new Error "ipaddr: the address has neither IPv6 nor IPv4 CIDR format" - -# Try to parse an array in network order (MSB first) for IPv4 and IPv6 -ipaddr.fromByteArray = (bytes) -> - length = bytes.length - if length == 4 - return new ipaddr.IPv4(bytes) - else if length == 16 - return new ipaddr.IPv6(bytes) - else - throw new Error "ipaddr: the binary input is neither an IPv6 nor IPv4 address" - -# Parse an address and return plain IPv4 address if it is an IPv4-mapped address -ipaddr.process = (string) -> - addr = @parse(string) - if addr.kind() == 'ipv6' && addr.isIPv4MappedAddress() - return addr.toIPv4Address() - else - return addr diff --git a/server/node_modules/ipaddr.js/test/ipaddr.test.coffee b/server/node_modules/ipaddr.js/test/ipaddr.test.coffee deleted file mode 100644 index 34ec7d9..0000000 --- a/server/node_modules/ipaddr.js/test/ipaddr.test.coffee +++ /dev/null @@ -1,346 +0,0 @@ -ipaddr = require '../lib/ipaddr' - -module.exports = - 'should define main classes': (test) -> - test.ok(ipaddr.IPv4?, 'defines IPv4 class') - test.ok(ipaddr.IPv6?, 'defines IPv6 class') - test.done() - - 'can construct IPv4 from octets': (test) -> - test.doesNotThrow -> - new ipaddr.IPv4([192, 168, 1, 2]) - test.done() - - 'refuses to construct invalid IPv4': (test) -> - test.throws -> - new ipaddr.IPv4([300, 1, 2, 3]) - test.throws -> - new ipaddr.IPv4([8, 8, 8]) - test.done() - - 'converts IPv4 to string correctly': (test) -> - addr = new ipaddr.IPv4([192, 168, 1, 1]) - test.equal(addr.toString(), '192.168.1.1') - test.done() - - 'returns correct kind for IPv4': (test) -> - addr = new ipaddr.IPv4([1, 2, 3, 4]) - test.equal(addr.kind(), 'ipv4') - test.done() - - 'allows to access IPv4 octets': (test) -> - addr = new ipaddr.IPv4([42, 0, 0, 0]) - test.equal(addr.octets[0], 42) - test.done() - - 'checks IPv4 address format': (test) -> - test.equal(ipaddr.IPv4.isIPv4('192.168.007.0xa'), true) - test.equal(ipaddr.IPv4.isIPv4('1024.0.0.1'), true) - test.equal(ipaddr.IPv4.isIPv4('8.0xa.wtf.6'), false) - test.done() - - 'validates IPv4 addresses': (test) -> - test.equal(ipaddr.IPv4.isValid('192.168.007.0xa'), true) - test.equal(ipaddr.IPv4.isValid('1024.0.0.1'), false) - test.equal(ipaddr.IPv4.isValid('8.0xa.wtf.6'), false) - test.done() - - 'parses IPv4 in several weird formats': (test) -> - test.deepEqual(ipaddr.IPv4.parse('192.168.1.1').octets, [192, 168, 1, 1]) - test.deepEqual(ipaddr.IPv4.parse('0xc0.168.1.1').octets, [192, 168, 1, 1]) - test.deepEqual(ipaddr.IPv4.parse('192.0250.1.1').octets, [192, 168, 1, 1]) - test.deepEqual(ipaddr.IPv4.parse('0xc0a80101').octets, [192, 168, 1, 1]) - test.deepEqual(ipaddr.IPv4.parse('030052000401').octets, [192, 168, 1, 1]) - test.deepEqual(ipaddr.IPv4.parse('3232235777').octets, [192, 168, 1, 1]) - test.done() - - 'barfs at invalid IPv4': (test) -> - test.throws -> - ipaddr.IPv4.parse('10.0.0.wtf') - test.done() - - 'matches IPv4 CIDR correctly': (test) -> - addr = new ipaddr.IPv4([10, 5, 0, 1]) - test.equal(addr.match(ipaddr.IPv4.parse('0.0.0.0'), 0), true) - test.equal(addr.match(ipaddr.IPv4.parse('11.0.0.0'), 8), false) - test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.0'), 8), true) - test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.1'), 8), true) - test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.10'), 8), true) - test.equal(addr.match(ipaddr.IPv4.parse('10.5.5.0'), 16), true) - test.equal(addr.match(ipaddr.IPv4.parse('10.4.5.0'), 16), false) - test.equal(addr.match(ipaddr.IPv4.parse('10.4.5.0'), 15), true) - test.equal(addr.match(ipaddr.IPv4.parse('10.5.0.2'), 32), false) - test.equal(addr.match(addr, 32), true) - test.done() - - 'parses IPv4 CIDR correctly': (test) -> - addr = new ipaddr.IPv4([10, 5, 0, 1]) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('0.0.0.0/0')), true) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('11.0.0.0/8')), false) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.0.0.0/8')), true) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.0.0.1/8')), true) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.0.0.10/8')), true) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.5.5.0/16')), true) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.4.5.0/16')), false) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.4.5.0/15')), true) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.5.0.2/32')), false) - test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.5.0.1/32')), true) - test.throws -> - ipaddr.IPv4.parseCIDR('10.5.0.1') - test.throws -> - ipaddr.IPv4.parseCIDR('0.0.0.0/-1') - test.throws -> - ipaddr.IPv4.parseCIDR('0.0.0.0/33') - test.done() - - 'detects reserved IPv4 networks': (test) -> - test.equal(ipaddr.IPv4.parse('0.0.0.0').range(), 'unspecified') - test.equal(ipaddr.IPv4.parse('0.1.0.0').range(), 'unspecified') - test.equal(ipaddr.IPv4.parse('10.1.0.1').range(), 'private') - test.equal(ipaddr.IPv4.parse('100.64.0.0').range(), 'carrierGradeNat') - test.equal(ipaddr.IPv4.parse('100.127.255.255').range(), 'carrierGradeNat') - test.equal(ipaddr.IPv4.parse('192.168.2.1').range(), 'private') - test.equal(ipaddr.IPv4.parse('224.100.0.1').range(), 'multicast') - test.equal(ipaddr.IPv4.parse('169.254.15.0').range(), 'linkLocal') - test.equal(ipaddr.IPv4.parse('127.1.1.1').range(), 'loopback') - test.equal(ipaddr.IPv4.parse('255.255.255.255').range(), 'broadcast') - test.equal(ipaddr.IPv4.parse('240.1.2.3').range(), 'reserved') - test.equal(ipaddr.IPv4.parse('8.8.8.8').range(), 'unicast') - test.done() - - 'checks the conventional IPv4 address format': (test) -> - test.equal(ipaddr.IPv4.isValidFourPartDecimal('192.168.1.1'), true) - test.equal(ipaddr.IPv4.isValidFourPartDecimal('0xc0.168.1.1'), false) - test.done() - - 'can construct IPv6 from 16bit parts': (test) -> - test.doesNotThrow -> - new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) - test.done() - - 'can construct IPv6 from 8bit parts': (test) -> - test.doesNotThrow -> - new ipaddr.IPv6([0x20, 0x01, 0xd, 0xb8, 0xf5, 0x3a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]) - test.deepEqual(new ipaddr.IPv6([0x20, 0x01, 0xd, 0xb8, 0xf5, 0x3a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), - new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1])) - test.done() - - 'refuses to construct invalid IPv6': (test) -> - test.throws -> - new ipaddr.IPv6([0xfffff, 0, 0, 0, 0, 0, 0, 1]) - test.throws -> - new ipaddr.IPv6([0xfffff, 0, 0, 0, 0, 0, 1]) - test.throws -> - new ipaddr.IPv6([0xffff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]) - test.done() - - 'converts IPv6 to string correctly': (test) -> - addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) - test.equal(addr.toNormalizedString(), '2001:db8:f53a:0:0:0:0:1') - test.equal(addr.toString(), '2001:db8:f53a::1') - test.equal(new ipaddr.IPv6([0, 0, 0, 0, 0, 0, 0, 1]).toString(), '::1') - test.equal(new ipaddr.IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]).toString(), '2001:db8::') - test.done() - - 'returns correct kind for IPv6': (test) -> - addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) - test.equal(addr.kind(), 'ipv6') - test.done() - - 'allows to access IPv6 address parts': (test) -> - addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 42, 0, 1]) - test.equal(addr.parts[5], 42) - test.done() - - 'checks IPv6 address format': (test) -> - test.equal(ipaddr.IPv6.isIPv6('2001:db8:F53A::1'), true) - test.equal(ipaddr.IPv6.isIPv6('200001::1'), true) - test.equal(ipaddr.IPv6.isIPv6('::ffff:192.168.1.1'), true) - test.equal(ipaddr.IPv6.isIPv6('::ffff:300.168.1.1'), false) - test.equal(ipaddr.IPv6.isIPv6('::ffff:300.168.1.1:0'), false) - test.equal(ipaddr.IPv6.isIPv6('fe80::wtf'), false) - test.done() - - 'validates IPv6 addresses': (test) -> - test.equal(ipaddr.IPv6.isValid('2001:db8:F53A::1'), true) - test.equal(ipaddr.IPv6.isValid('200001::1'), false) - test.equal(ipaddr.IPv6.isValid('::ffff:192.168.1.1'), true) - test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1'), false) - test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1:0'), false) - test.equal(ipaddr.IPv6.isValid('::ffff:222.1.41.9000'), false) - test.equal(ipaddr.IPv6.isValid('2001:db8::F53A::1'), false) - test.equal(ipaddr.IPv6.isValid('fe80::wtf'), false) - test.equal(ipaddr.IPv6.isValid('2002::2:'), false) - test.equal(ipaddr.IPv6.isValid(undefined), false) - test.done() - - 'parses IPv6 in different formats': (test) -> - test.deepEqual(ipaddr.IPv6.parse('2001:db8:F53A:0:0:0:0:1').parts, [0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) - test.deepEqual(ipaddr.IPv6.parse('fe80::10').parts, [0xfe80, 0, 0, 0, 0, 0, 0, 0x10]) - test.deepEqual(ipaddr.IPv6.parse('2001:db8:F53A::').parts, [0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 0]) - test.deepEqual(ipaddr.IPv6.parse('::1').parts, [0, 0, 0, 0, 0, 0, 0, 1]) - test.deepEqual(ipaddr.IPv6.parse('::').parts, [0, 0, 0, 0, 0, 0, 0, 0]) - test.done() - - 'barfs at invalid IPv6': (test) -> - test.throws -> - ipaddr.IPv6.parse('fe80::0::1') - test.done() - - 'matches IPv6 CIDR correctly': (test) -> - addr = ipaddr.IPv6.parse('2001:db8:f53a::1') - test.equal(addr.match(ipaddr.IPv6.parse('::'), 0), true) - test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f53a::1:1'), 64), true) - test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f53b::1:1'), 48), false) - test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f531::1:1'), 44), true) - test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f500::1'), 40), true) - test.equal(addr.match(ipaddr.IPv6.parse('2001:db9:f500::1'), 40), false) - test.equal(addr.match(addr, 128), true) - test.done() - - 'parses IPv6 CIDR correctly': (test) -> - addr = ipaddr.IPv6.parse('2001:db8:f53a::1') - test.equal(addr.match(ipaddr.IPv6.parseCIDR('::/0')), true) - test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f53a::1:1/64')), true) - test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f53b::1:1/48')), false) - test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f531::1:1/44')), true) - test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f500::1/40')), true) - test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db9:f500::1/40')), false) - test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/128')), true) - test.throws -> - ipaddr.IPv6.parseCIDR('2001:db8:f53a::1') - test.throws -> - ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/-1') - test.throws -> - ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/129') - test.done() - - 'converts between IPv4-mapped IPv6 addresses and IPv4 addresses': (test) -> - addr = ipaddr.IPv4.parse('77.88.21.11') - mapped = addr.toIPv4MappedAddress() - test.deepEqual(mapped.parts, [0, 0, 0, 0, 0, 0xffff, 0x4d58, 0x150b]) - test.deepEqual(mapped.toIPv4Address().octets, addr.octets) - test.done() - - 'refuses to convert non-IPv4-mapped IPv6 address to IPv4 address': (test) -> - test.throws -> - ipaddr.IPv6.parse('2001:db8::1').toIPv4Address() - test.done() - - 'detects reserved IPv6 networks': (test) -> - test.equal(ipaddr.IPv6.parse('::').range(), 'unspecified') - test.equal(ipaddr.IPv6.parse('fe80::1234:5678:abcd:0123').range(), 'linkLocal') - test.equal(ipaddr.IPv6.parse('ff00::1234').range(), 'multicast') - test.equal(ipaddr.IPv6.parse('::1').range(), 'loopback') - test.equal(ipaddr.IPv6.parse('fc00::').range(), 'uniqueLocal') - test.equal(ipaddr.IPv6.parse('::ffff:192.168.1.10').range(), 'ipv4Mapped') - test.equal(ipaddr.IPv6.parse('::ffff:0:192.168.1.10').range(), 'rfc6145') - test.equal(ipaddr.IPv6.parse('64:ff9b::1234').range(), 'rfc6052') - test.equal(ipaddr.IPv6.parse('2002:1f63:45e8::1').range(), '6to4') - test.equal(ipaddr.IPv6.parse('2001::4242').range(), 'teredo') - test.equal(ipaddr.IPv6.parse('2001:db8::3210').range(), 'reserved') - test.equal(ipaddr.IPv6.parse('2001:470:8:66::1').range(), 'unicast') - test.done() - - 'is able to determine IP address type': (test) -> - test.equal(ipaddr.parse('8.8.8.8').kind(), 'ipv4') - test.equal(ipaddr.parse('2001:db8:3312::1').kind(), 'ipv6') - test.done() - - 'throws an error if tried to parse an invalid address': (test) -> - test.throws -> - ipaddr.parse('::some.nonsense') - test.done() - - 'correctly processes IPv4-mapped addresses': (test) -> - test.equal(ipaddr.process('8.8.8.8').kind(), 'ipv4') - test.equal(ipaddr.process('2001:db8:3312::1').kind(), 'ipv6') - test.equal(ipaddr.process('::ffff:192.168.1.1').kind(), 'ipv4') - test.done() - - 'correctly converts IPv6 and IPv4 addresses to byte arrays': (test) -> - test.deepEqual(ipaddr.parse('1.2.3.4').toByteArray(), - [0x1, 0x2, 0x3, 0x4]); - # Fuck yeah. The first byte of Google's IPv6 address is 42. 42! - test.deepEqual(ipaddr.parse('2a00:1450:8007::68').toByteArray(), - [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68 ]) - test.done() - - 'correctly parses 1 as an IPv4 address': (test) -> - test.equal(ipaddr.IPv6.isValid('1'), false) - test.equal(ipaddr.IPv4.isValid('1'), true) - test.deepEqual(new ipaddr.IPv4([0, 0, 0, 1]), ipaddr.parse('1')) - test.done() - - 'correctly detects IPv4 and IPv6 CIDR addresses': (test) -> - test.deepEqual([ipaddr.IPv6.parse('fc00::'), 64], - ipaddr.parseCIDR('fc00::/64')) - test.deepEqual([ipaddr.IPv4.parse('1.2.3.4'), 5], - ipaddr.parseCIDR('1.2.3.4/5')) - test.done() - - 'does not consider a very large or very small number a valid IP address': (test) -> - test.equal(ipaddr.isValid('4999999999'), false) - test.equal(ipaddr.isValid('-1'), false) - test.done() - - 'does not hang on ::8:8:8:8:8:8:8:8:8': (test) -> - test.equal(ipaddr.IPv6.isValid('::8:8:8:8:8:8:8:8:8'), false) - test.done() - - 'subnetMatch does not fail on empty range': (test) -> - ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {}, false) - ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {subnet: []}, false) - test.done() - - 'subnetMatch returns default subnet on empty range': (test) -> - test.equal(ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {}, false), false) - test.equal(ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {subnet: []}, false), false) - test.done() - - 'is able to determine IP address type from byte array input': (test) -> - test.equal(ipaddr.fromByteArray([0x7f, 0, 0, 1]).kind(), 'ipv4') - test.equal(ipaddr.fromByteArray([0x20, 0x01, 0xd, 0xb8, 0xf5, 0x3a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]).kind(), 'ipv6') - test.throws -> - ipaddr.fromByteArray([1]) - test.done() - - 'prefixLengthFromSubnetMask returns proper CIDR notation for standard IPv4 masks': (test) -> - test.equal(ipaddr.IPv4.parse('255.255.255.255').prefixLengthFromSubnetMask(), 32) - test.equal(ipaddr.IPv4.parse('255.255.255.254').prefixLengthFromSubnetMask(), 31) - test.equal(ipaddr.IPv4.parse('255.255.255.252').prefixLengthFromSubnetMask(), 30) - test.equal(ipaddr.IPv4.parse('255.255.255.248').prefixLengthFromSubnetMask(), 29) - test.equal(ipaddr.IPv4.parse('255.255.255.240').prefixLengthFromSubnetMask(), 28) - test.equal(ipaddr.IPv4.parse('255.255.255.224').prefixLengthFromSubnetMask(), 27) - test.equal(ipaddr.IPv4.parse('255.255.255.192').prefixLengthFromSubnetMask(), 26) - test.equal(ipaddr.IPv4.parse('255.255.255.128').prefixLengthFromSubnetMask(), 25) - test.equal(ipaddr.IPv4.parse('255.255.255.0').prefixLengthFromSubnetMask(), 24) - test.equal(ipaddr.IPv4.parse('255.255.254.0').prefixLengthFromSubnetMask(), 23) - test.equal(ipaddr.IPv4.parse('255.255.252.0').prefixLengthFromSubnetMask(), 22) - test.equal(ipaddr.IPv4.parse('255.255.248.0').prefixLengthFromSubnetMask(), 21) - test.equal(ipaddr.IPv4.parse('255.255.240.0').prefixLengthFromSubnetMask(), 20) - test.equal(ipaddr.IPv4.parse('255.255.224.0').prefixLengthFromSubnetMask(), 19) - test.equal(ipaddr.IPv4.parse('255.255.192.0').prefixLengthFromSubnetMask(), 18) - test.equal(ipaddr.IPv4.parse('255.255.128.0').prefixLengthFromSubnetMask(), 17) - test.equal(ipaddr.IPv4.parse('255.255.0.0').prefixLengthFromSubnetMask(), 16) - test.equal(ipaddr.IPv4.parse('255.254.0.0').prefixLengthFromSubnetMask(), 15) - test.equal(ipaddr.IPv4.parse('255.252.0.0').prefixLengthFromSubnetMask(), 14) - test.equal(ipaddr.IPv4.parse('255.248.0.0').prefixLengthFromSubnetMask(), 13) - test.equal(ipaddr.IPv4.parse('255.240.0.0').prefixLengthFromSubnetMask(), 12) - test.equal(ipaddr.IPv4.parse('255.224.0.0').prefixLengthFromSubnetMask(), 11) - test.equal(ipaddr.IPv4.parse('255.192.0.0').prefixLengthFromSubnetMask(), 10) - test.equal(ipaddr.IPv4.parse('255.128.0.0').prefixLengthFromSubnetMask(), 9) - test.equal(ipaddr.IPv4.parse('255.0.0.0').prefixLengthFromSubnetMask(), 8) - test.equal(ipaddr.IPv4.parse('254.0.0.0').prefixLengthFromSubnetMask(), 7) - test.equal(ipaddr.IPv4.parse('252.0.0.0').prefixLengthFromSubnetMask(), 6) - test.equal(ipaddr.IPv4.parse('248.0.0.0').prefixLengthFromSubnetMask(), 5) - test.equal(ipaddr.IPv4.parse('240.0.0.0').prefixLengthFromSubnetMask(), 4) - test.equal(ipaddr.IPv4.parse('224.0.0.0').prefixLengthFromSubnetMask(), 3) - test.equal(ipaddr.IPv4.parse('192.0.0.0').prefixLengthFromSubnetMask(), 2) - test.equal(ipaddr.IPv4.parse('128.0.0.0').prefixLengthFromSubnetMask(), 1) - test.equal(ipaddr.IPv4.parse('0.0.0.0').prefixLengthFromSubnetMask(), 0) - # negative cases - test.equal(ipaddr.IPv4.parse('192.168.255.0').prefixLengthFromSubnetMask(), null) - test.equal(ipaddr.IPv4.parse('255.0.255.0').prefixLengthFromSubnetMask(), null) - test.done() - diff --git a/server/node_modules/media-typer/package.json b/server/node_modules/media-typer/package.json index 42d95b0..f7b716f 100644 --- a/server/node_modules/media-typer/package.json +++ b/server/node_modules/media-typer/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "_shasum": "8710d7af0aa626f8fffa1ce00168545263255748", "_spec": "media-typer@0.3.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/type-is", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/type-is", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" diff --git a/server/node_modules/merge-descriptors/package.json b/server/node_modules/merge-descriptors/package.json index e6cb034..76b9238 100644 --- a/server/node_modules/merge-descriptors/package.json +++ b/server/node_modules/merge-descriptors/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "_shasum": "b00aaa556dd8b44568150ec9d1b953f3f90cbb61", "_spec": "merge-descriptors@1.0.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Jonathan Ong", "email": "me@jongleberry.com", diff --git a/server/node_modules/methods/package.json b/server/node_modules/methods/package.json index 569d9db..2afb87d 100644 --- a/server/node_modules/methods/package.json +++ b/server/node_modules/methods/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "_shasum": "5529a4d67654134edcc5266656835b0f851afcee", "_spec": "methods@~1.1.2", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "browser": { "http": false }, diff --git a/server/node_modules/mime-db/HISTORY.md b/server/node_modules/mime-db/HISTORY.md index 8e4d413..ff9438e 100644 --- a/server/node_modules/mime-db/HISTORY.md +++ b/server/node_modules/mime-db/HISTORY.md @@ -1,160 +1,228 @@ +1.48.0 / 2021-05-30 +=================== + + * Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + * Add new upstream MIME types + * Mark `text/yaml` as compressible + +1.47.0 / 2021-04-01 +=================== + + * Add new upstream MIME types + * Remove ambigious extensions from IANA for `application/*+xml` types + * Update primary extension to `.es` for `application/ecmascript` + +1.46.0 / 2021-02-13 +=================== + + * Add extension `.amr` to `audio/amr` + * Add extension `.m4s` to `video/iso.segment` + * Add extension `.opus` to `audio/ogg` + * Add new upstream MIME types + +1.45.0 / 2020-09-22 +=================== + + * Add `application/ubjson` with extension `.ubj` + * Add `image/avif` with extension `.avif` + * Add `image/ktx2` with extension `.ktx2` + * Add extension `.dbf` to `application/vnd.dbf` + * Add extension `.rar` to `application/vnd.rar` + * Add extension `.td` to `application/urc-targetdesc+xml` + * Add new upstream MIME types + * Fix extension of `application/vnd.apple.keynote` to be `.key` + +1.44.0 / 2020-04-22 +=================== + + * Add charsets from IANA + * Add extension `.cjs` to `application/node` + * Add new upstream MIME types + +1.43.0 / 2020-01-05 +=================== + + * Add `application/x-keepass2` with extension `.kdbx` + * Add extension `.mxmf` to `audio/mobile-xmf` + * Add extensions from IANA for `application/*+xml` types + * Add new upstream MIME types + +1.42.0 / 2019-09-25 +=================== + + * Add `image/vnd.ms-dds` with extension `.dds` + * Add new upstream MIME types + * Remove compressible from `multipart/mixed` + +1.41.0 / 2019-08-30 +=================== + + * Add new upstream MIME types + * Add `application/toml` with extension `.toml` + * Mark `font/ttf` as compressible + +1.40.0 / 2019-04-20 +=================== + + * Add extensions from IANA for `model/*` types + * Add `text/mdx` with extension `.mdx` + +1.39.0 / 2019-04-04 +=================== + + * Add extensions `.siv` and `.sieve` to `application/sieve` + * Add new upstream MIME types + +1.38.0 / 2019-02-04 +=================== + + * Add extension `.nq` to `application/n-quads` + * Add extension `.nt` to `application/n-triples` + * Add new upstream MIME types + * Mark `text/less` as compressible + +1.37.0 / 2018-10-19 +=================== + + * Add extensions to HEIC image types + * Add new upstream MIME types + +1.36.0 / 2018-08-20 +=================== + + * Add Apple file extensions from IANA + * Add extensions from IANA for `image/*` types + * Add new upstream MIME types + +1.35.0 / 2018-07-15 +=================== + + * Add extension `.owl` to `application/rdf+xml` + * Add new upstream MIME types + - Removes extension `.woff` from `application/font-woff` + +1.34.0 / 2018-06-03 +=================== + + * Add extension `.csl` to `application/vnd.citationstyles.style+xml` + * Add extension `.es` to `application/ecmascript` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/turtle` + * Mark all XML-derived types as compressible + +1.33.0 / 2018-02-15 +=================== + + * Add extensions from IANA for `message/*` types + * Add new upstream MIME types + * Fix some incorrect OOXML types + * Remove `application/font-woff2` + +1.32.0 / 2017-11-29 +=================== + + * Add new upstream MIME types + * Update `text/hjson` to registered `application/hjson` + * Add `text/shex` with extension `.shex` + +1.31.0 / 2017-10-25 +=================== + + * Add `application/raml+yaml` with extension `.raml` + * Add `application/wasm` with extension `.wasm` + * Add new `font` type from IANA + * Add new upstream font extensions + * Add new upstream MIME types + * Add extensions for JPEG-2000 images + +1.30.0 / 2017-08-27 +=================== + + * Add `application/vnd.ms-outlook` + * Add `application/x-arj` + * Add extension `.mjs` to `application/javascript` + * Add glTF types and extensions + * Add new upstream MIME types + * Add `text/x-org` + * Add VirtualBox MIME types + * Fix `source` records for `video/*` types that are IANA + * Update `font/opentype` to registered `font/otf` + +1.29.0 / 2017-07-10 +=================== + + * Add `application/fido.trusted-apps+json` + * Add extension `.wadl` to `application/vnd.sun.wadl+xml` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/css` + +1.28.0 / 2017-05-14 +=================== + + * Add new upstream MIME types + * Add extension `.gz` to `application/gzip` + * Update extensions `.md` and `.markdown` to be `text/markdown` + 1.27.0 / 2017-03-16 =================== - * Add `application/emergencycalldata.control+xml` - * Add `application/emergencycalldata.ecall.msd` - * Add `application/emergencycalldata.veds+xml` - * Add `application/geo+json-seq` - * Add `application/n-quads` - * Add `application/n-triples` - * Add `application/vnd.apothekende.reservation+json` - * Add `application/vnd.efi.img` - * Add `application/vnd.efi.iso` - * Add `application/vnd.imagemeter.image+zip` - * Add `application/vnd.las.las+json` - * Add `application/vnd.ocf+cbor` - * Add `audio/melp` - * Add `audio/melp1200` - * Add `audio/melp2400` - * Add `audio/melp600` + * Add new upstream MIME types * Add `image/apng` with extension `.apng` 1.26.0 / 2017-01-14 =================== - * Add `application/coap-payload` - * Add `application/cose` - * Add `application/cose-key` - * Add `application/cose-key-set` - * Add `application/mud+json` - * Add `application/trig` - * Add `application/vnd.dataresource+json` - * Add `application/vnd.hc+json` - * Add `application/vnd.tableschema+json` - * Add `application/yang-patch+json` - * Add `application/yang-patch+xml` + * Add new upstream MIME types * Add extension `.geojson` to `application/geo+json` 1.25.0 / 2016-11-11 =================== - * Add `application/dicom+json` - * Add `application/dicom+xml` - * Add `application/vnd.openstreetmap.data+xml` - * Add `application/vnd.tri.onesource` - * Add `application/yang-data+json` - * Add `application/yang-data+xml` + * Add new upstream MIME types 1.24.0 / 2016-09-18 =================== - * Add `application/clue_info+xml` - * Add `application/geo+json` - * Add `application/lgr+xml` - * Add `application/vnd.amazon.mobi8-ebook` - * Add `application/vnd.chess-pgn` - * Add `application/vnd.comicbook+zip` - * Add `application/vnd.d2l.coursepackage1p0+zip` - * Add `application/vnd.espass-espass+zip` - * Add `application/vnd.nearst.inv+json` - * Add `application/vnd.oma.lwm2m+json` - * Add `application/vnd.oma.lwm2m+tlv` - * Add `application/vnd.quarantainenet` - * Add `application/vnd.rar` * Add `audio/mp3` - * Add `image/dicom-rle` - * Add `image/emf` - * Add `image/jls` - * Add `image/wmf` - * Add `model/gltf+json` - * Add `text/vnd.ascii-art` + * Add new upstream MIME types 1.23.0 / 2016-05-01 =================== - * Add `application/efi` - * Add `application/vnd.3gpp.sms+xml` - * Add `application/vnd.3lightssoftware.imagescal` - * Add `application/vnd.coreos.ignition+json` - * Add `application/vnd.desmume.movie` - * Add `application/vnd.onepager` - * Add `application/vnd.vel+json` - * Add `text/prs.prop.logic` - * Add `video/encaprtp` - * Add `video/h265` - * Add `video/iso.segment` - * Add `video/raptorfec` - * Add `video/rtploopback` - * Add `video/vnd.radgamettools.bink` - * Add `video/vnd.radgamettools.smacker` - * Add `video/vp8` + * Add new upstream MIME types * Add extension `.3gpp` to `audio/3gpp` 1.22.0 / 2016-02-15 =================== - * Add `application/ppsp-tracker+json` - * Add `application/problem+json` - * Add `application/problem+xml` - * Add `application/vnd.hdt` - * Add `application/vnd.ms-printschematicket+xml` - * Add `model/vnd.rosette.annotated-data-model` * Add `text/slim` * Add extension `.rng` to `application/xml` + * Add new upstream MIME types * Fix extension of `application/dash+xml` to be `.mpd` * Update primary extension to `.m4a` for `audio/mp4` 1.21.0 / 2016-01-06 =================== - * Add `application/emergencycalldata.comment+xml` - * Add `application/emergencycalldata.deviceinfo+xml` - * Add `application/emergencycalldata.providerinfo+xml` - * Add `application/emergencycalldata.serviceinfo+xml` - * Add `application/emergencycalldata.subscriberinfo+xml` - * Add `application/vnd.filmit.zfc` - * Add `application/vnd.google-apps.document` - * Add `application/vnd.google-apps.presentation` - * Add `application/vnd.google-apps.spreadsheet` - * Add `application/vnd.mapbox-vector-tile` - * Add `application/vnd.ms-printdevicecapabilities+xml` - * Add `application/vnd.ms-windows.devicepairing` - * Add `application/vnd.ms-windows.nwprinting.oob` - * Add `application/vnd.tml` - * Add `audio/evs` + * Add Google document types + * Add new upstream MIME types 1.20.0 / 2015-11-10 =================== - * Add `application/cdni` - * Add `application/csvm+json` - * Add `application/rfc+xml` - * Add `application/vnd.3gpp.access-transfer-events+xml` - * Add `application/vnd.3gpp.srvcc-ext+xml` - * Add `application/vnd.ms-windows.wsd.oob` - * Add `application/vnd.oxli.countgraph` - * Add `application/vnd.pagerduty+json` * Add `text/x-suse-ymp` + * Add new upstream MIME types 1.19.0 / 2015-09-17 =================== - * Add `application/vnd.3gpp-prose-pc3ch+xml` - * Add `application/vnd.3gpp.srvcc-info+xml` * Add `application/vnd.apple.pkpass` - * Add `application/vnd.drive+json` + * Add new upstream MIME types 1.18.0 / 2015-09-03 =================== - * Add `application/pkcs12` - * Add `application/vnd.3gpp-prose+xml` - * Add `application/vnd.3gpp.mid-call+xml` - * Add `application/vnd.3gpp.state-and-event-info+xml` - * Add `application/vnd.anki` - * Add `application/vnd.firemonkeys.cloudcell` - * Add `application/vnd.openblox.game+xml` - * Add `application/vnd.openblox.game-binary` + * Add new upstream MIME types 1.17.0 / 2015-08-13 =================== diff --git a/server/node_modules/mime-db/README.md b/server/node_modules/mime-db/README.md index 7662440..41c696a 100644 --- a/server/node_modules/mime-db/README.md +++ b/server/node_modules/mime-db/README.md @@ -3,7 +3,7 @@ [![NPM Version][npm-version-image]][npm-url] [![NPM Downloads][npm-downloads-image]][npm-url] [![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] +[![Build Status][ci-image]][ci-url] [![Coverage Status][coveralls-image]][coveralls-url] This is a database of all mime types. @@ -24,21 +24,21 @@ npm install mime-db ### Database Download If you're crazy enough to use this in the browser, you can just grab the -JSON file using [RawGit](https://rawgit.com/). It is recommended to replace -`master` with [a release tag](https://github.com/jshttp/mime-db/tags) as the -JSON format may change in the future. +JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to +replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags) +as the JSON format may change in the future. ``` -https://cdn.rawgit.com/jshttp/mime-db/master/db.json +https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json ``` ## Usage ```js -var db = require('mime-db'); +var db = require('mime-db') // grab data on .js files -var data = db['application/javascript']; +var data = db['application/javascript'] ``` ## Data Structure @@ -59,24 +59,42 @@ If unknown, every property could be `undefined`. ## Contributing -To edit the database, only make PRs against `src/custom.json` or +To edit the database, only make PRs against `src/custom-types.json` or `src/custom-suffix.json`. +The `src/custom-types.json` file is a JSON object with the MIME type as the +keys and the values being an object with the following keys: + +- `compressible` - leave out if you don't know, otherwise `true`/`false` to + indicate whether the data represented by the type is typically compressible. +- `extensions` - include an array of file extensions that are associated with + the type. +- `notes` - human-readable notes about the type, typically what the type is. +- `sources` - include an array of URLs of where the MIME type and the associated + extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); + links to type aggregating sites and Wikipedia are _not acceptable_. + To update the build, run `npm run build`. -## Adding Custom Media Types +### Adding Custom Media Types The best way to get new media types included in this library is to register them with the IANA. The community registration procedure is outlined in [RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types registered with the IANA are automatically pulled into this library. -[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg -[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg -[npm-url]: https://npmjs.org/package/mime-db -[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg -[travis-url]: https://travis-ci.org/jshttp/mime-db -[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg +If that is not possible / feasible, they can be added directly here as a +"custom" type. To do this, it is required to have a primary source that +definitively lists the media type. If an extension is going to be listed as +associateed with this media type, the source must definitively link the +media type and extension as well. + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci +[ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master [coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master -[node-image]: https://img.shields.io/node/v/mime-db.svg -[node-url]: http://nodejs.org/download/ +[node-image]: https://badgen.net/npm/node/mime-db +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-db +[npm-url]: https://npmjs.org/package/mime-db +[npm-version-image]: https://badgen.net/npm/v/mime-db diff --git a/server/node_modules/mime-db/db.json b/server/node_modules/mime-db/db.json index 2c51517..067e0ce 100644 --- a/server/node_modules/mime-db/db.json +++ b/server/node_modules/mime-db/db.json @@ -3,10 +3,21 @@ "source": "iana" }, "application/3gpdash-qoe-report+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/3gpp-ims+xml": { - "source": "iana" + "source": "iana", + "compressible": true + }, + "application/3gpphal+json": { + "source": "iana", + "compressible": true + }, + "application/3gpphalforms+json": { + "source": "iana", + "compressible": true }, "application/a2l": { "source": "iana" @@ -14,6 +25,10 @@ "application/activemessage": { "source": "iana" }, + "application/activity+json": { + "source": "iana", + "compressible": true + }, "application/alto-costmap+json": { "source": "iana", "compressible": true @@ -54,6 +69,14 @@ "source": "iana", "compressible": true }, + "application/alto-updatestreamcontrol+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamparams+json": { + "source": "iana", + "compressible": true + }, "application/aml": { "source": "iana" }, @@ -81,26 +104,54 @@ }, "application/atomcat+xml": { "source": "iana", + "compressible": true, "extensions": ["atomcat"] }, "application/atomdeleted+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"] }, "application/atomicmail": { "source": "iana" }, "application/atomsvc+xml": { "source": "iana", + "compressible": true, "extensions": ["atomsvc"] }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"] + }, + "application/atsc-dynamic-event-message": { + "source": "iana" + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"] + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"] + }, "application/atxml": { "source": "iana" }, "application/auth-policy+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/bacnet-xdd+zip": { - "source": "iana" + "source": "iana", + "compressible": false }, "application/batch-smtp": { "source": "iana" @@ -110,14 +161,18 @@ "extensions": ["bdoc"] }, "application/beep+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/calendar+json": { "source": "iana", "compressible": true }, "application/calendar+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["xcs"] }, "application/call-completion": { "source": "iana" @@ -125,18 +180,32 @@ "application/cals-1840": { "source": "iana" }, + "application/captive+json": { + "source": "iana", + "compressible": true + }, "application/cbor": { "source": "iana" }, - "application/ccmp+xml": { + "application/cbor-seq": { + "source": "iana" + }, + "application/cccex": { "source": "iana" }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true + }, "application/ccxml+xml": { "source": "iana", + "compressible": true, "extensions": ["ccxml"] }, "application/cdfx+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["cdfx"] }, "application/cdmi-capability": { "source": "iana", @@ -165,22 +234,33 @@ "source": "iana" }, "application/cea-2018+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/cellml+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/cfw": { "source": "iana" }, - "application/clue_info+xml": { + "application/clr": { "source": "iana" }, + "application/clue+xml": { + "source": "iana", + "compressible": true + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true + }, "application/cms": { "source": "iana" }, "application/cnrp+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/coap-group+json": { "source": "iana", @@ -193,7 +273,8 @@ "source": "iana" }, "application/conference-info+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/cose": { "source": "iana" @@ -205,16 +286,19 @@ "source": "iana" }, "application/cpl+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/csrattrs": { "source": "iana" }, "application/csta+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/cstadata+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/csvm+json": { "source": "iana", @@ -224,6 +308,9 @@ "source": "apache", "extensions": ["cu"] }, + "application/cwt": { + "source": "iana" + }, "application/cybercash": { "source": "iana" }, @@ -232,6 +319,7 @@ }, "application/dash+xml": { "source": "iana", + "compressible": true, "extensions": ["mpd"] }, "application/dashdelta": { @@ -239,6 +327,7 @@ }, "application/davmount+xml": { "source": "iana", + "compressible": true, "extensions": ["davmount"] }, "application/dca-rft": { @@ -251,7 +340,8 @@ "source": "iana" }, "application/dialog-info+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/dicom": { "source": "iana" @@ -261,7 +351,8 @@ "compressible": true }, "application/dicom+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/dii": { "source": "iana" @@ -272,19 +363,32 @@ "application/dns": { "source": "iana" }, + "application/dns+json": { + "source": "iana", + "compressible": true + }, + "application/dns-message": { + "source": "iana" + }, "application/docbook+xml": { "source": "apache", + "compressible": true, "extensions": ["dbk"] }, - "application/dskpp+xml": { + "application/dots+cbor": { "source": "iana" }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true + }, "application/dssc+der": { "source": "iana", "extensions": ["dssc"] }, "application/dssc+xml": { "source": "iana", + "compressible": true, "extensions": ["xdssc"] }, "application/dvcs": { @@ -293,7 +397,7 @@ "application/ecmascript": { "source": "iana", "compressible": true, - "extensions": ["ecma"] + "extensions": ["es","ecma"] }, "application/edi-consent": { "source": "iana" @@ -309,45 +413,71 @@ "application/efi": { "source": "iana" }, + "application/elm+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/elm+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.cap+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, "application/emergencycalldata.comment+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/emergencycalldata.control+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/emergencycalldata.deviceinfo+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/emergencycalldata.ecall.msd": { "source": "iana" }, "application/emergencycalldata.providerinfo+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/emergencycalldata.serviceinfo+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/emergencycalldata.subscriberinfo+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/emergencycalldata.veds+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/emma+xml": { "source": "iana", + "compressible": true, "extensions": ["emma"] }, "application/emotionml+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["emotionml"] }, "application/encaprtp": { "source": "iana" }, "application/epp+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/epub+zip": { "source": "iana", + "compressible": false, "extensions": ["epub"] }, "application/eshop": { @@ -357,6 +487,10 @@ "source": "iana", "extensions": ["exi"] }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true + }, "application/fastinfoset": { "source": "iana" }, @@ -364,11 +498,29 @@ "source": "iana" }, "application/fdt+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["fdt"] + }, + "application/fhir+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fhir+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fido.trusted-apps+json": { + "compressible": true }, "application/fits": { "source": "iana" }, + "application/flexfec": { + "source": "iana" + }, "application/font-sfnt": { "source": "iana" }, @@ -378,15 +530,11 @@ }, "application/font-woff": { "source": "iana", - "compressible": false, - "extensions": ["woff"] - }, - "application/font-woff2": { - "compressible": false, - "extensions": ["woff2"] + "compressible": false }, "application/framework-attributes+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/geo+json": { "source": "iana", @@ -396,12 +544,24 @@ "application/geo+json-seq": { "source": "iana" }, + "application/geopackage+sqlite3": { + "source": "iana" + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true + }, + "application/gltf-buffer": { + "source": "iana" + }, "application/gml+xml": { "source": "iana", + "compressible": true, "extensions": ["gml"] }, "application/gpx+xml": { "source": "apache", + "compressible": true, "extensions": ["gpx"] }, "application/gxf": { @@ -410,13 +570,18 @@ }, "application/gzip": { "source": "iana", - "compressible": false + "compressible": false, + "extensions": ["gz"] }, "application/h224": { "source": "iana" }, "application/held+xml": { - "source": "iana" + "source": "iana", + "compressible": true + }, + "application/hjson": { + "extensions": ["hjson"] }, "application/http": { "source": "iana" @@ -426,10 +591,12 @@ "extensions": ["stk"] }, "application/ibe-key-request+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/ibe-pkg-reply+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/ibe-pp-data": { "source": "iana" @@ -438,7 +605,9 @@ "source": "iana" }, "application/im-iscomposing+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/index": { "source": "iana" @@ -457,6 +626,7 @@ }, "application/inkml+xml": { "source": "iana", + "compressible": true, "extensions": ["ink","inkml"] }, "application/iotp": { @@ -473,7 +643,9 @@ "source": "iana" }, "application/its+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["its"] }, "application/java-archive": { "source": "apache", @@ -494,7 +666,11 @@ "source": "iana", "charset": "UTF-8", "compressible": true, - "extensions": ["js"] + "extensions": ["js","mjs"] + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true }, "application/jose": { "source": "iana" @@ -507,6 +683,10 @@ "source": "iana", "compressible": true }, + "application/jscalendar+json": { + "source": "iana", + "compressible": true + }, "application/json": { "source": "iana", "charset": "UTF-8", @@ -540,10 +720,12 @@ "source": "iana" }, "application/kpml-request+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/kpml-response+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/ld+json": { "source": "iana", @@ -551,20 +733,29 @@ "extensions": ["jsonld"] }, "application/lgr+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["lgr"] }, "application/link-format": { "source": "iana" }, "application/load-control+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/lost+xml": { "source": "iana", + "compressible": true, "extensions": ["lostxml"] }, "application/lostsync+xml": { - "source": "iana" + "source": "iana", + "compressible": true + }, + "application/lpf+zip": { + "source": "iana", + "compressible": false }, "application/lxf": { "source": "iana" @@ -582,6 +773,7 @@ }, "application/mads+xml": { "source": "iana", + "compressible": true, "extensions": ["mads"] }, "application/manifest+json": { @@ -595,6 +787,7 @@ }, "application/marcxml+xml": { "source": "iana", + "compressible": true, "extensions": ["mrcx"] }, "application/mathematica": { @@ -603,59 +796,76 @@ }, "application/mathml+xml": { "source": "iana", + "compressible": true, "extensions": ["mathml"] }, "application/mathml-content+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mathml-presentation+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-associated-procedure-description+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-deregister+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-envelope+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-msk+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-msk-response+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-protection-description+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-reception-report+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-register+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-register-response+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-schedule+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbms-user-service-description+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mbox": { "source": "iana", "extensions": ["mbox"] }, "application/media-policy-dataset+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/media_control+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mediaservercontrol+xml": { "source": "iana", + "compressible": true, "extensions": ["mscml"] }, "application/merge-patch+json": { @@ -664,14 +874,17 @@ }, "application/metalink+xml": { "source": "apache", + "compressible": true, "extensions": ["metalink"] }, "application/metalink4+xml": { "source": "iana", + "compressible": true, "extensions": ["meta4"] }, "application/mets+xml": { "source": "iana", + "compressible": true, "extensions": ["mets"] }, "application/mf4": { @@ -680,8 +893,22 @@ "application/mikey": { "source": "iana" }, + "application/mipc": { + "source": "iana" + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"] + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"] + }, "application/mods+xml": { "source": "iana", + "compressible": true, "extensions": ["mods"] }, "application/moss-keys": { @@ -714,16 +941,22 @@ "source": "iana" }, "application/mrb-consumer+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/mrb-publish+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/msc-ivr+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/msc-mixer+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/msword": { "source": "iana", @@ -734,34 +967,49 @@ "source": "iana", "compressible": true }, + "application/multipart-core": { + "source": "iana" + }, "application/mxf": { "source": "iana", "extensions": ["mxf"] }, "application/n-quads": { - "source": "iana" + "source": "iana", + "extensions": ["nq"] }, "application/n-triples": { - "source": "iana" + "source": "iana", + "extensions": ["nt"] }, "application/nasdata": { "source": "iana" }, "application/news-checkgroups": { - "source": "iana" + "source": "iana", + "charset": "US-ASCII" }, "application/news-groupinfo": { - "source": "iana" + "source": "iana", + "charset": "US-ASCII" }, "application/news-transmission": { "source": "iana" }, "application/nlsml+xml": { - "source": "iana" + "source": "iana", + "compressible": true + }, + "application/node": { + "source": "iana", + "extensions": ["cjs"] }, "application/nss": { "source": "iana" }, + "application/oauth-authz-req+jwt": { + "source": "iana" + }, "application/ocsp-request": { "source": "iana" }, @@ -777,11 +1025,16 @@ "source": "iana", "extensions": ["oda"] }, + "application/odm+xml": { + "source": "iana", + "compressible": true + }, "application/odx": { "source": "iana" }, "application/oebps-package+xml": { "source": "iana", + "compressible": true, "extensions": ["opf"] }, "application/ogg": { @@ -791,24 +1044,38 @@ }, "application/omdoc+xml": { "source": "apache", + "compressible": true, "extensions": ["omdoc"] }, "application/onenote": { "source": "apache", "extensions": ["onetoc","onetoc2","onetmp","onepkg"] }, + "application/opc-nodeset+xml": { + "source": "iana", + "compressible": true + }, + "application/oscore": { + "source": "iana" + }, "application/oxps": { "source": "iana", "extensions": ["oxps"] }, "application/p2p-overlay+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["relo"] }, "application/parityfec": { "source": "iana" }, + "application/passport": { + "source": "iana" + }, "application/patch-ops-error+xml": { "source": "iana", + "compressible": true, "extensions": ["xer"] }, "application/pdf": { @@ -819,6 +1086,9 @@ "application/pdx": { "source": "iana" }, + "application/pem-certificate-chain": { + "source": "iana" + }, "application/pgp-encrypted": { "source": "iana", "compressible": false, @@ -836,10 +1106,14 @@ "extensions": ["prf"] }, "application/pidf+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/pidf-diff+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/pkcs10": { "source": "iana", @@ -860,6 +1134,9 @@ "source": "iana", "extensions": ["p8"] }, + "application/pkcs8-encrypted": { + "source": "iana" + }, "application/pkix-attr-cert": { "source": "iana", "extensions": ["ac"] @@ -882,10 +1159,13 @@ }, "application/pls+xml": { "source": "iana", + "compressible": true, "extensions": ["pls"] }, "application/poc-settings+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/postscript": { "source": "iana", @@ -901,10 +1181,13 @@ "compressible": true }, "application/problem+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/provenance+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["provx"] }, "application/prs.alvestrand.titrax-sheet": { "source": "iana" @@ -913,8 +1196,13 @@ "source": "iana", "extensions": ["cww"] }, + "application/prs.cyn": { + "source": "iana", + "charset": "7-BIT" + }, "application/prs.hpub+zip": { - "source": "iana" + "source": "iana", + "compressible": false }, "application/prs.nprend": { "source": "iana" @@ -926,15 +1214,25 @@ "source": "iana" }, "application/prs.xsf+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/pskc+xml": { "source": "iana", + "compressible": true, "extensions": ["pskcxml"] }, + "application/pvd+json": { + "source": "iana", + "compressible": true + }, "application/qsig": { "source": "iana" }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"] + }, "application/raptorfec": { "source": "iana" }, @@ -945,10 +1243,11 @@ "application/rdf+xml": { "source": "iana", "compressible": true, - "extensions": ["rdf"] + "extensions": ["rdf","owl"] }, "application/reginfo+xml": { "source": "iana", + "compressible": true, "extensions": ["rif"] }, "application/relax-ng-compact-syntax": { @@ -964,25 +1263,45 @@ }, "application/resource-lists+xml": { "source": "iana", + "compressible": true, "extensions": ["rl"] }, "application/resource-lists-diff+xml": { "source": "iana", + "compressible": true, "extensions": ["rld"] }, "application/rfc+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/riscos": { "source": "iana" }, "application/rlmi+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/rls-services+xml": { "source": "iana", + "compressible": true, "extensions": ["rs"] }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"] + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"] + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"] + }, "application/rpki-ghostbusters": { "source": "iana", "extensions": ["gbr"] @@ -991,6 +1310,9 @@ "source": "iana", "extensions": ["mft"] }, + "application/rpki-publication": { + "source": "iana" + }, "application/rpki-roa": { "source": "iana", "extensions": ["roa"] @@ -1000,6 +1322,7 @@ }, "application/rsd+xml": { "source": "apache", + "compressible": true, "extensions": ["rsd"] }, "application/rss+xml": { @@ -1019,17 +1342,32 @@ "source": "iana" }, "application/samlassertion+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/samlmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/sarif+json": { + "source": "iana", + "compressible": true + }, + "application/sarif-external-properties+json": { + "source": "iana", + "compressible": true + }, + "application/sbe": { "source": "iana" }, "application/sbml+xml": { "source": "iana", + "compressible": true, "extensions": ["sbml"] }, "application/scaip+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/scim+json": { "source": "iana", @@ -1055,9 +1393,50 @@ "source": "iana", "extensions": ["sdp"] }, - "application/sep+xml": { + "application/secevent+jwt": { "source": "iana" }, + "application/senml+cbor": { + "source": "iana" + }, + "application/senml+json": { + "source": "iana", + "compressible": true + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"] + }, + "application/senml-etch+cbor": { + "source": "iana" + }, + "application/senml-etch+json": { + "source": "iana", + "compressible": true + }, + "application/senml-exi": { + "source": "iana" + }, + "application/sensml+cbor": { + "source": "iana" + }, + "application/sensml+json": { + "source": "iana", + "compressible": true + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"] + }, + "application/sensml-exi": { + "source": "iana" + }, + "application/sep+xml": { + "source": "iana", + "compressible": true + }, "application/sep-exi": { "source": "iana" }, @@ -1086,13 +1465,16 @@ }, "application/shf+xml": { "source": "iana", + "compressible": true, "extensions": ["shf"] }, "application/sieve": { - "source": "iana" + "source": "iana", + "extensions": ["siv","sieve"] }, "application/simple-filter+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/simple-message-summary": { "source": "iana" @@ -1100,6 +1482,9 @@ "application/simplesymbolcontainer": { "source": "iana" }, + "application/sipc": { + "source": "iana" + }, "application/slate": { "source": "iana" }, @@ -1108,6 +1493,7 @@ }, "application/smil+xml": { "source": "iana", + "compressible": true, "extensions": ["smi","smil"] }, "application/smpte336m": { @@ -1126,10 +1512,12 @@ }, "application/sparql-results+xml": { "source": "iana", + "compressible": true, "extensions": ["srx"] }, "application/spirits-event+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/sql": { "source": "iana" @@ -1140,20 +1528,33 @@ }, "application/srgs+xml": { "source": "iana", + "compressible": true, "extensions": ["grxml"] }, "application/sru+xml": { "source": "iana", + "compressible": true, "extensions": ["sru"] }, "application/ssdl+xml": { "source": "apache", + "compressible": true, "extensions": ["ssdl"] }, "application/ssml+xml": { "source": "iana", + "compressible": true, "extensions": ["ssml"] }, + "application/stix+json": { + "source": "iana", + "compressible": true + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"] + }, "application/tamp-apex-update": { "source": "iana" }, @@ -1190,12 +1591,25 @@ "application/tar": { "compressible": true }, + "application/taxii+json": { + "source": "iana", + "compressible": true + }, + "application/td+json": { + "source": "iana", + "compressible": true + }, "application/tei+xml": { "source": "iana", + "compressible": true, "extensions": ["tei","teicorpus"] }, + "application/tetra_isi": { + "source": "iana" + }, "application/thraud+xml": { "source": "iana", + "compressible": true, "extensions": ["tfi"] }, "application/timestamp-query": { @@ -1208,36 +1622,72 @@ "source": "iana", "extensions": ["tsd"] }, + "application/tlsrpt+gzip": { + "source": "iana" + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true + }, + "application/tnauthlist": { + "source": "iana" + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"] + }, + "application/trickle-ice-sdpfrag": { + "source": "iana" + }, "application/trig": { "source": "iana" }, "application/ttml+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["ttml"] }, "application/tve-trigger": { "source": "iana" }, + "application/tzif": { + "source": "iana" + }, + "application/tzif-leap": { + "source": "iana" + }, + "application/ubjson": { + "compressible": false, + "extensions": ["ubj"] + }, "application/ulpfec": { "source": "iana" }, "application/urc-grpsheet+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/urc-ressheet+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["rsheet"] }, "application/urc-targetdesc+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["td"] }, "application/urc-uisocketdesc+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vcard+json": { "source": "iana", "compressible": true }, "application/vcard+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vemmi": { "source": "iana" @@ -1245,19 +1695,159 @@ "application/vividence.scriptfile": { "source": "apache" }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"] + }, "application/vnd.3gpp-prose+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-v2x-local-service-information": { "source": "iana" }, - "application/vnd.3gpp.access-transfer-events+xml": { + "application/vnd.3gpp.5gnas": { "source": "iana" }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true + }, "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gtpc": { + "source": "iana" + }, + "application/vnd.3gpp.interworking-data": { + "source": "iana" + }, + "application/vnd.3gpp.lpp": { + "source": "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { "source": "iana" }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true + }, "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ngap": { + "source": "iana" + }, + "application/vnd.3gpp.pfcp": { "source": "iana" }, "application/vnd.3gpp.pic-bw-large": { @@ -1272,26 +1862,35 @@ "source": "iana", "extensions": ["pvb"] }, + "application/vnd.3gpp.s1ap": { + "source": "iana" + }, "application/vnd.3gpp.sms": { "source": "iana" }, "application/vnd.3gpp.sms+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.3gpp.srvcc-ext+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.3gpp.srvcc-info+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.3gpp.state-and-event-info+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.3gpp.ussd+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.3gpp2.bcmcsinfo+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.3gpp2.sms": { "source": "iana" @@ -1325,6 +1924,7 @@ }, "application/vnd.adobe.air-application-installer-package+zip": { "source": "apache", + "compressible": false, "extensions": ["air"] }, "application/vnd.adobe.flash.movie": { @@ -1343,6 +1943,7 @@ }, "application/vnd.adobe.xdp+xml": { "source": "iana", + "compressible": true, "extensions": ["xdp"] }, "application/vnd.adobe.xfdf": { @@ -1352,6 +1953,45 @@ "application/vnd.aether.imp": { "source": "iana" }, + "application/vnd.afpc.afplinedata": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + "source": "iana" + }, + "application/vnd.afpc.foca-charset": { + "source": "iana" + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana" + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana" + }, + "application/vnd.afpc.modca": { + "source": "iana" + }, + "application/vnd.afpc.modca-cmtable": { + "source": "iana" + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana" + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana" + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana" + }, "application/vnd.ah-barcode": { "source": "iana" }, @@ -1367,6 +2007,10 @@ "source": "iana", "extensions": ["azs"] }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true + }, "application/vnd.amazon.ebook": { "source": "apache", "extensions": ["azw"] @@ -1383,6 +2027,10 @@ "extensions": ["ami"] }, "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.android.ota": { "source": "iana" }, "application/vnd.android.package-archive": { @@ -1418,18 +2066,35 @@ "source": "iana", "compressible": true }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true + }, "application/vnd.apothekende.reservation+json": { "source": "iana", "compressible": true }, "application/vnd.apple.installer+xml": { "source": "iana", + "compressible": true, "extensions": ["mpkg"] }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["key"] + }, "application/vnd.apple.mpegurl": { "source": "iana", "extensions": ["m3u8"] }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"] + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"] + }, "application/vnd.apple.pkpass": { "compressible": false, "extensions": ["pkpass"] @@ -1441,6 +2106,10 @@ "source": "iana", "extensions": ["swi"] }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true + }, "application/vnd.artsquare": { "source": "iana" }, @@ -1455,20 +2124,47 @@ "application/vnd.autopackage": { "source": "iana" }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true + }, "application/vnd.avistar+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.balsamiq.bmml+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["bmml"] }, "application/vnd.balsamiq.bmpr": { "source": "iana" }, + "application/vnd.banana-accounting": { + "source": "iana" + }, + "application/vnd.bbf.usp.error": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true + }, "application/vnd.bekitzur-stech+json": { "source": "iana", "compressible": true }, + "application/vnd.bint.med-content": { + "source": "iana" + }, "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.blink-idb-value-wrapper": { "source": "iana" }, "application/vnd.blueice.multipass": { @@ -1485,10 +2181,20 @@ "source": "iana", "extensions": ["bmi"] }, + "application/vnd.bpf": { + "source": "iana" + }, + "application/vnd.bpf3": { + "source": "iana" + }, "application/vnd.businessobjects": { "source": "iana", "extensions": ["rep"] }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true + }, "application/vnd.cab-jscript": { "source": "iana" }, @@ -1498,6 +2204,10 @@ "application/vnd.canon-lips": { "source": "iana" }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true + }, "application/vnd.cendio.thinlinc.clientconf": { "source": "iana" }, @@ -1506,6 +2216,7 @@ }, "application/vnd.chemdraw+xml": { "source": "iana", + "compressible": true, "extensions": ["cdxml"] }, "application/vnd.chess-pgn": { @@ -1515,6 +2226,9 @@ "source": "iana", "extensions": ["mmd"] }, + "application/vnd.ciedi": { + "source": "iana" + }, "application/vnd.cinderella": { "source": "iana", "extensions": ["cdy"] @@ -1523,7 +2237,9 @@ "source": "iana" }, "application/vnd.citationstyles.style+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["csl"] }, "application/vnd.claymore": { "source": "iana", @@ -1548,6 +2264,24 @@ "application/vnd.coffeescript": { "source": "iana" }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana" + }, "application/vnd.collection+json": { "source": "iana", "compressible": true @@ -1561,6 +2295,10 @@ "compressible": true }, "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.comicbook-rar": { "source": "iana" }, "application/vnd.commerce-battelle": { @@ -1604,14 +2342,29 @@ }, "application/vnd.criticaltools.wbs+xml": { "source": "iana", + "compressible": true, "extensions": ["wbs"] }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.crypto-shade-file": { + "source": "iana" + }, + "application/vnd.cryptomator.encrypted": { + "source": "iana" + }, + "application/vnd.cryptomator.vault": { + "source": "iana" + }, "application/vnd.ctc-posml": { "source": "iana", "extensions": ["pml"] }, "application/vnd.ctct.ws+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.cups-pdf": { "source": "iana" @@ -1641,12 +2394,28 @@ "extensions": ["pcurl"] }, "application/vnd.cyan.dean.root+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.cybank": { "source": "iana" }, + "application/vnd.cyclonedx+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cyclonedx+xml": { + "source": "iana", + "compressible": true + }, "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.d3m-dataset": { + "source": "iana" + }, + "application/vnd.d3m-problem": { "source": "iana" }, "application/vnd.dart": { @@ -1658,10 +2427,18 @@ "source": "iana", "extensions": ["rdz"] }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true + }, "application/vnd.dataresource+json": { "source": "iana", "compressible": true }, + "application/vnd.dbf": { + "source": "iana", + "extensions": ["dbf"] + }, "application/vnd.debian.binary-package": { "source": "iana" }, @@ -1671,6 +2448,7 @@ }, "application/vnd.dece.ttml+xml": { "source": "iana", + "compressible": true, "extensions": ["uvt","uvvt"] }, "application/vnd.dece.unspecified": { @@ -1685,17 +2463,15 @@ "source": "iana", "extensions": ["fe_launch"] }, - "application/vnd.desmume-movie": { - "source": "iana" - }, "application/vnd.desmume.movie": { - "source": "apache" + "source": "iana" }, "application/vnd.dir-bi.plate-dl-nosuffix": { "source": "iana" }, "application/vnd.dm.delegation+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dna": { "source": "iana", @@ -1747,6 +2523,10 @@ "source": "iana", "extensions": ["ait"] }, + "application/vnd.dvb.dvbisl+xml": { + "source": "iana", + "compressible": true + }, "application/vnd.dvb.dvbj": { "source": "iana" }, @@ -1775,25 +2555,32 @@ "source": "iana" }, "application/vnd.dvb.notif-aggregate-root+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dvb.notif-container+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dvb.notif-generic+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dvb.notif-ia-msglist+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dvb.notif-ia-registration-request+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dvb.notif-ia-registration-response+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dvb.notif-init+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.dvb.pfr": { "source": "iana" @@ -1818,6 +2605,9 @@ "application/vnd.ecdis-update": { "source": "iana" }, + "application/vnd.ecip.rlp": { + "source": "iana" + }, "application/vnd.ecowin.chart": { "source": "iana", "extensions": ["mag"] @@ -1844,7 +2634,8 @@ "source": "iana" }, "application/vnd.emclient.accessrequest+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.enliven": { "source": "iana", @@ -1854,7 +2645,8 @@ "source": "iana" }, "application/vnd.eprints.data+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.epson.esf": { "source": "iana", @@ -1880,74 +2672,95 @@ "source": "iana" }, "application/vnd.espass-espass+zip": { - "source": "iana" + "source": "iana", + "compressible": false }, "application/vnd.eszigno3+xml": { "source": "iana", + "compressible": true, "extensions": ["es3","et3"] }, "application/vnd.etsi.aoc+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.asic-e+zip": { - "source": "iana" + "source": "iana", + "compressible": false }, "application/vnd.etsi.asic-s+zip": { - "source": "iana" + "source": "iana", + "compressible": false }, "application/vnd.etsi.cug+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvcommand+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvdiscovery+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvprofile+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvsad-bc+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvsad-cod+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvsad-npvr+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvservice+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvsync+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.iptvueprofile+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.mcid+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.mheg5": { "source": "iana" }, "application/vnd.etsi.overload-control-policy-dataset+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.pstn+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.sci+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.simservs+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.timestamp-token": { "source": "iana" }, "application/vnd.etsi.tsl+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.etsi.tsl.der": { "source": "iana" @@ -1955,6 +2768,22 @@ "application/vnd.eudora.data": { "source": "iana" }, + "application/vnd.evolv.ecig.profile": { + "source": "iana" + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana" + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana" + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.exstream-package": { + "source": "iana" + }, "application/vnd.ezpix-album": { "source": "iana", "extensions": ["ez2"] @@ -1984,6 +2813,10 @@ "application/vnd.ffsns": { "source": "iana" }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false + }, "application/vnd.filmit.zfc": { "source": "iana" }, @@ -2020,6 +2853,19 @@ "source": "iana", "extensions": ["fsc"] }, + "application/vnd.fujifilm.fb.docuworks": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + "source": "iana", + "compressible": true + }, "application/vnd.fujitsu.oasys": { "source": "iana", "extensions": ["oas"] @@ -2067,6 +2913,13 @@ "application/vnd.fut-misnet": { "source": "iana" }, + "application/vnd.futoin+cbor": { + "source": "iana" + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true + }, "application/vnd.fuzzysheet": { "source": "iana", "extensions": ["fzs"] @@ -2075,17 +2928,25 @@ "source": "iana", "extensions": ["txd"] }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true + }, "application/vnd.geo+json": { "source": "iana", "compressible": true }, "application/vnd.geocube+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.geogebra.file": { "source": "iana", "extensions": ["ggb"] }, + "application/vnd.geogebra.slides": { + "source": "iana" + }, "application/vnd.geogebra.tool": { "source": "iana", "extensions": ["ggt"] @@ -2142,13 +3003,16 @@ "extensions": ["kmz"] }, "application/vnd.gov.sk.e-form+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.gov.sk.e-form+zip": { - "source": "iana" + "source": "iana", + "compressible": false }, "application/vnd.gov.sk.xmldatacontainer+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.grafeq": { "source": "iana", @@ -2191,10 +3055,12 @@ }, "application/vnd.hal+xml": { "source": "iana", + "compressible": true, "extensions": ["hal"] }, "application/vnd.handheld-entertainment+xml": { "source": "iana", + "compressible": true, "extensions": ["zmm"] }, "application/vnd.hbci": { @@ -2250,6 +3116,14 @@ "source": "iana", "extensions": ["sfd-hdstx"] }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true + }, "application/vnd.hyperdrive+json": { "source": "iana", "compressible": true @@ -2290,8 +3164,13 @@ "source": "iana", "extensions": ["igl"] }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false + }, "application/vnd.imagemeter.image+zip": { - "source": "iana" + "source": "iana", + "compressible": false }, "application/vnd.immervision-ivp": { "source": "iana", @@ -2335,7 +3214,8 @@ "compressible": true }, "application/vnd.informedcontrol.rms+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.informix-visionary": { "source": "iana" @@ -2344,7 +3224,8 @@ "source": "iana" }, "application/vnd.infotech.project+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.innopath.wamp.notification": { "source": "iana" @@ -2376,25 +3257,32 @@ "extensions": ["qfx"] }, "application/vnd.iptc.g2.catalogitem+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.iptc.g2.conceptitem+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.iptc.g2.knowledgeitem+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.iptc.g2.newsitem+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.iptc.g2.newsmessage+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.iptc.g2.packageitem+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.iptc.g2.planningitem+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.ipunplugged.rcprofile": { "source": "iana", @@ -2402,6 +3290,7 @@ }, "application/vnd.irepository.package+xml": { "source": "iana", + "compressible": true, "extensions": ["irp"] }, "application/vnd.is-xpr": { @@ -2412,6 +3301,10 @@ "source": "iana", "extensions": ["fcs"] }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false + }, "application/vnd.jam": { "source": "iana", "extensions": ["jam"] @@ -2511,25 +3404,45 @@ "source": "iana", "extensions": ["sse"] }, + "application/vnd.las": { + "source": "iana" + }, "application/vnd.las.las+json": { "source": "iana", "compressible": true }, "application/vnd.las.las+xml": { "source": "iana", + "compressible": true, "extensions": ["lasxml"] }, - "application/vnd.liberty-request+xml": { + "application/vnd.laszip": { "source": "iana" }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true + }, "application/vnd.llamagraphics.life-balance.desktop": { "source": "iana", "extensions": ["lbd"] }, "application/vnd.llamagraphics.life-balance.exchange+xml": { "source": "iana", + "compressible": true, "extensions": ["lbe"] }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.loom": { + "source": "iana" + }, "application/vnd.lotus-1-2-3": { "source": "iana", "extensions": ["123"] @@ -2563,16 +3476,20 @@ "extensions": ["portpkg"] }, "application/vnd.mapbox-vector-tile": { - "source": "iana" + "source": "iana", + "extensions": ["mvt"] }, "application/vnd.marlin.drm.actiontoken+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.marlin.drm.conftoken+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.marlin.drm.license+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.marlin.drm.mdcf": { "source": "iana" @@ -2622,6 +3539,9 @@ "application/vnd.microsoft.portable-executable": { "source": "iana" }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana" + }, "application/vnd.miele+json": { "source": "iana", "compressible": true @@ -2757,7 +3677,8 @@ "extensions": ["lrm"] }, "application/vnd.ms-office.activex+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.ms-officetheme": { "source": "iana", @@ -2767,6 +3688,10 @@ "source": "apache", "compressible": true }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"] + }, "application/vnd.ms-package.obfuscated-opentype": { "source": "apache" }, @@ -2779,7 +3704,8 @@ "extensions": ["stl"] }, "application/vnd.ms-playready.initiator+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.ms-powerpoint": { "source": "iana", @@ -2807,13 +3733,16 @@ "extensions": ["potm"] }, "application/vnd.ms-printdevicecapabilities+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.ms-printing.printticket+xml": { - "source": "apache" + "source": "apache", + "compressible": true }, "application/vnd.ms-printschematicket+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.ms-project": { "source": "iana", @@ -2908,6 +3837,9 @@ "source": "iana", "compressible": true }, + "application/vnd.nebumind.line": { + "source": "iana" + }, "application/vnd.nervana": { "source": "iana" }, @@ -2918,6 +3850,9 @@ "source": "iana", "extensions": ["nlu"] }, + "application/vnd.nimn": { + "source": "iana" + }, "application/vnd.nintendo.nitro.rom": { "source": "iana" }, @@ -2947,10 +3882,12 @@ "source": "iana" }, "application/vnd.nokia.conml+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.nokia.iptv.config+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.nokia.isds-radio-presets": { "source": "iana" @@ -2959,13 +3896,17 @@ "source": "iana" }, "application/vnd.nokia.landmark+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.nokia.landmarkcollection+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.nokia.n-gage.ac+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["ac"] }, "application/vnd.nokia.n-gage.data": { "source": "iana", @@ -2982,7 +3923,8 @@ "source": "iana" }, "application/vnd.nokia.pcd+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.nokia.radio-preset": { "source": "iana", @@ -3097,42 +4039,55 @@ "application/vnd.ocf+cbor": { "source": "iana" }, + "application/vnd.oci.image.manifest.v1+json": { + "source": "iana", + "compressible": true + }, "application/vnd.oftn.l10n+json": { "source": "iana", "compressible": true }, "application/vnd.oipf.contentaccessdownload+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.contentaccessstreaming+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.cspg-hexbinary": { "source": "iana" }, "application/vnd.oipf.dae.svg+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.dae.xhtml+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.mippvcontrolmessage+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.pae.gem": { "source": "iana" }, "application/vnd.oipf.spdiscovery+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.spdlist+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.ueprofile+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oipf.userprofile+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.olpc-sugar": { "source": "iana", @@ -3148,19 +4103,23 @@ "source": "iana" }, "application/vnd.oma.bcast.associated-procedure-parameter+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.bcast.drm-trigger+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.bcast.imd+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.bcast.ltkm": { "source": "iana" }, "application/vnd.oma.bcast.notification+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.bcast.provisioningtrigger": { "source": "iana" @@ -3169,7 +4128,8 @@ "source": "iana" }, "application/vnd.oma.bcast.sgdd+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.bcast.sgdu": { "source": "iana" @@ -3178,28 +4138,35 @@ "source": "iana" }, "application/vnd.oma.bcast.smartcard-trigger+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.bcast.sprov+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.bcast.stkm": { "source": "iana" }, "application/vnd.oma.cab-address-book+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.cab-feature-handler+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.cab-pcc+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.cab-subs-invite+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.cab-user-prefs+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.dcd": { "source": "iana" @@ -3209,12 +4176,18 @@ }, "application/vnd.oma.dd2+xml": { "source": "iana", + "compressible": true, "extensions": ["dd2"] }, "application/vnd.oma.drm.risd+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+cbor": { "source": "iana" }, "application/vnd.oma.lwm2m+json": { @@ -3225,40 +4198,54 @@ "source": "iana" }, "application/vnd.oma.pal+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.poc.detailed-progress-report+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.poc.final-report+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.poc.groups+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.poc.invocation-descriptor+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.poc.optimized-progress-report+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.push": { "source": "iana" }, "application/vnd.oma.scidm.messages+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oma.xcap-directory+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.omads-email+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/vnd.omads-file+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/vnd.omads-folder+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/vnd.omaloc-supl-init": { "source": "iana" @@ -3266,9 +4253,26 @@ "application/vnd.onepager": { "source": "iana" }, - "application/vnd.openblox.game+xml": { + "application/vnd.onepagertamp": { + "source": "iana" + }, + "application/vnd.onepagertamx": { "source": "iana" }, + "application/vnd.onepagertat": { + "source": "iana" + }, + "application/vnd.onepagertatp": { + "source": "iana" + }, + "application/vnd.onepagertatx": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"] + }, "application/vnd.openblox.game-binary": { "source": "iana" }, @@ -3280,55 +4284,69 @@ "extensions": ["oxt"] }, "application/vnd.openstreetmap.data+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["osm"] }, "application/vnd.openxmlformats-officedocument.custom-properties+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.drawing+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.extended-properties+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml-template": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.presentation": { "source": "iana", @@ -3336,91 +4354,112 @@ "extensions": ["pptx"] }, "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.slide": { "source": "iana", "extensions": ["sldx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { "source": "iana", "extensions": ["ppsx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.template": { - "source": "apache", + "source": "iana", "extensions": ["potx"] }, "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml-template": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { "source": "iana", @@ -3428,50 +4467,59 @@ "extensions": ["xlsx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { - "source": "apache", + "source": "iana", "extensions": ["xltx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.theme+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.themeoverride+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.vmldrawing": { "source": "iana" }, - "application/vnd.openxmlformats-officedocument.wordprocessingml-template": { - "source": "iana" - }, "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { "source": "iana", @@ -3479,50 +4527,64 @@ "extensions": ["docx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { - "source": "apache", + "source": "iana", "extensions": ["dotx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-package.core-properties+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.openxmlformats-package.relationships+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oracle.resource+json": { "source": "iana", @@ -3550,7 +4612,8 @@ "extensions": ["esa"] }, "application/vnd.otps.ct-kip+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.oxli.countgraph": { "source": "iana" @@ -3566,11 +4629,14 @@ "application/vnd.panoply": { "source": "iana" }, - "application/vnd.paos+xml": { + "application/vnd.paos.xml": { + "source": "iana" + }, + "application/vnd.patentdive": { "source": "iana" }, - "application/vnd.paos.xml": { - "source": "apache" + "application/vnd.patientecommsdoc": { + "source": "iana" }, "application/vnd.pawaafile": { "source": "iana", @@ -3599,7 +4665,8 @@ "extensions": ["wg"] }, "application/vnd.poc.group-advertisement+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.pocketlearn": { "source": "iana", @@ -3635,6 +4702,9 @@ "source": "iana", "extensions": ["mgz"] }, + "application/vnd.psfs": { + "source": "iana" + }, "application/vnd.publishare-delta-tree": { "source": "iana", "extensions": ["qps"] @@ -3647,7 +4717,8 @@ "source": "iana" }, "application/vnd.pwg-xhtml-print+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.qualcomm.brew-app-res": { "source": "iana" @@ -3663,49 +4734,64 @@ "source": "iana" }, "application/vnd.radisys.moml+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-audit+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-audit-conf+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-audit-conn+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-audit-dialog+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-audit-stream+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-conf+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-dialog+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-dialog-base+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-dialog-fax-detect+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-dialog-group+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-dialog-speech+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.radisys.msml-dialog-transform+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.rainstor.data": { "source": "iana" @@ -3714,7 +4800,8 @@ "source": "iana" }, "application/vnd.rar": { - "source": "iana" + "source": "iana", + "extensions": ["rar"] }, "application/vnd.realvnc.bed": { "source": "iana", @@ -3726,11 +4813,16 @@ }, "application/vnd.recordare.musicxml+xml": { "source": "iana", + "compressible": true, "extensions": ["musicxml"] }, "application/vnd.renlearn.rlprint": { "source": "iana" }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true + }, "application/vnd.rig.cryptonote": { "source": "iana", "extensions": ["cryptonote"] @@ -3749,6 +4841,7 @@ }, "application/vnd.route66.link66+xml": { "source": "iana", + "compressible": true, "extensions": ["link66"] }, "application/vnd.rs-274x": { @@ -3764,6 +4857,9 @@ "source": "iana", "extensions": ["st"] }, + "application/vnd.sar": { + "source": "iana" + }, "application/vnd.sbm.cid": { "source": "iana" }, @@ -3810,6 +4906,10 @@ "source": "iana", "extensions": ["see"] }, + "application/vnd.seis+json": { + "source": "iana", + "compressible": true + }, "application/vnd.sema": { "source": "iana", "extensions": ["sema"] @@ -3822,6 +4922,9 @@ "source": "iana", "extensions": ["semf"] }, + "application/vnd.shade-save-file": { + "source": "iana" + }, "application/vnd.shana.informed.formdata": { "source": "iana", "extensions": ["ifm"] @@ -3838,6 +4941,23 @@ "source": "iana", "extensions": ["ipk"] }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shp": { + "source": "iana" + }, + "application/vnd.shx": { + "source": "iana" + }, + "application/vnd.sigrok.session": { + "source": "iana" + }, "application/vnd.simtech-mindmapper": { "source": "iana", "extensions": ["twd","twds"] @@ -3857,14 +4977,20 @@ "source": "iana", "extensions": ["teacher"] }, - "application/vnd.software602.filler.form+xml": { + "application/vnd.snesdev-page-table": { "source": "iana" }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"] + }, "application/vnd.software602.filler.form-xml-zip": { "source": "iana" }, "application/vnd.solent.sdkm+xml": { "source": "iana", + "compressible": true, "extensions": ["sdkm","sdkd"] }, "application/vnd.spotfire.dxp": { @@ -3875,6 +5001,9 @@ "source": "iana", "extensions": ["sfs"] }, + "application/vnd.sqlite3": { + "source": "iana" + }, "application/vnd.sss-cod": { "source": "iana" }, @@ -3920,7 +5049,9 @@ "source": "iana" }, "application/vnd.sun.wadl+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["wadl"] }, "application/vnd.sun.xml.calc": { "source": "apache", @@ -3973,20 +5104,29 @@ "application/vnd.swiftview-ics": { "source": "iana" }, + "application/vnd.sycle+xml": { + "source": "iana", + "compressible": true + }, "application/vnd.symbian.install": { "source": "apache", "extensions": ["sis","sisx"] }, "application/vnd.syncml+xml": { "source": "iana", + "charset": "UTF-8", + "compressible": true, "extensions": ["xsm"] }, "application/vnd.syncml.dm+wbxml": { "source": "iana", + "charset": "UTF-8", "extensions": ["bdm"] }, "application/vnd.syncml.dm+xml": { "source": "iana", + "charset": "UTF-8", + "compressible": true, "extensions": ["xdm"] }, "application/vnd.syncml.dm.notification": { @@ -3996,13 +5136,18 @@ "source": "iana" }, "application/vnd.syncml.dmddf+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["ddf"] }, "application/vnd.syncml.dmtnds+wbxml": { "source": "iana" }, "application/vnd.syncml.dmtnds+xml": { - "source": "iana" + "source": "iana", + "charset": "UTF-8", + "compressible": true }, "application/vnd.syncml.ds.notification": { "source": "iana" @@ -4019,8 +5164,13 @@ "source": "iana", "extensions": ["pcap","cap","dmp"] }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true + }, "application/vnd.tmd.mediaflex.api+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.tml": { "source": "iana" @@ -4068,6 +5218,7 @@ }, "application/vnd.uoml+xml": { "source": "iana", + "compressible": true, "extensions": ["uoml"] }, "application/vnd.uplanet.alert": { @@ -4132,6 +5283,12 @@ "application/vnd.verimatrix.vcas": { "source": "iana" }, + "application/vnd.veryant.thin": { + "source": "iana" + }, + "application/vnd.ves.encrypted": { + "source": "iana" + }, "application/vnd.vidsoft.vidconference": { "source": "iana" }, @@ -4158,6 +5315,7 @@ }, "application/vnd.wap.wbxml": { "source": "iana", + "charset": "UTF-8", "extensions": ["wbxml"] }, "application/vnd.wap.wmlc": { @@ -4172,6 +5330,9 @@ "source": "iana", "extensions": ["wtb"] }, + "application/vnd.wfa.dpp": { + "source": "iana" + }, "application/vnd.wfa.p2p": { "source": "iana" }, @@ -4216,10 +5377,12 @@ "source": "iana" }, "application/vnd.wv.csp+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.wv.ssp+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.xacml+json": { "source": "iana", @@ -4237,7 +5400,8 @@ "source": "iana" }, "application/vnd.xmi+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/vnd.xmpie.cpkg": { "source": "iana" @@ -4272,6 +5436,7 @@ }, "application/vnd.yamaha.openscoreformat.osfpvg+xml": { "source": "iana", + "compressible": true, "extensions": ["osfpvg"] }, "application/vnd.yamaha.remote-setup": { @@ -4298,23 +5463,42 @@ "source": "iana", "extensions": ["cmp"] }, + "application/vnd.youtube.yt": { + "source": "iana" + }, "application/vnd.zul": { "source": "iana", "extensions": ["zir","zirz"] }, "application/vnd.zzazz.deck+xml": { "source": "iana", + "compressible": true, "extensions": ["zaz"] }, "application/voicexml+xml": { "source": "iana", + "compressible": true, "extensions": ["vxml"] }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true + }, "application/vq-rtcpxr": { "source": "iana" }, + "application/wasm": { + "source": "iana", + "compressible": true, + "extensions": ["wasm"] + }, "application/watcherinfo+xml": { - "source": "iana" + "source": "iana", + "compressible": true + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true }, "application/whoispp-query": { "source": "iana" @@ -4338,10 +5522,12 @@ }, "application/wsdl+xml": { "source": "iana", + "compressible": true, "extensions": ["wsdl"] }, "application/wspolicy+xml": { "source": "iana", + "compressible": true, "extensions": ["wspolicy"] }, "application/x-7z-compressed": { @@ -4364,6 +5550,10 @@ "source": "apache", "extensions": ["dmg"] }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"] + }, "application/x-authorware-bin": { "source": "apache", "extensions": ["aab","x32","u32","vox"] @@ -4465,14 +5655,17 @@ }, "application/x-dtbncx+xml": { "source": "apache", + "compressible": true, "extensions": ["ncx"] }, "application/x-dtbook+xml": { "source": "apache", + "compressible": true, "extensions": ["dtb"] }, "application/x-dtbresource+xml": { "source": "apache", + "compressible": true, "extensions": ["res"] }, "application/x-dvi": { @@ -4509,11 +5702,6 @@ "source": "apache", "extensions": ["psf"] }, - "application/x-font-otf": { - "source": "apache", - "compressible": true, - "extensions": ["otf"] - }, "application/x-font-pcf": { "source": "apache", "extensions": ["pcf"] @@ -4528,11 +5716,6 @@ "application/x-font-sunos-news": { "source": "apache" }, - "application/x-font-ttf": { - "source": "apache", - "compressible": true, - "extensions": ["ttf","ttc"] - }, "application/x-font-type1": { "source": "apache", "extensions": ["pfa","pfb","pfm","afm"] @@ -4599,6 +5782,9 @@ "application/x-javascript": { "compressible": true }, + "application/x-keepass2": { + "extensions": ["kdbx"] + }, "application/x-latex": { "source": "apache", "compressible": false, @@ -4730,6 +5916,9 @@ "source": "apache", "extensions": ["p7r"] }, + "application/x-pki-message": { + "source": "iana" + }, "application/x-rar-compressed": { "source": "apache", "compressible": false, @@ -4827,6 +6016,38 @@ "source": "apache", "extensions": ["ustar"] }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"] + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"] + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"] + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"] + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"] + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"] + }, "application/x-wais-source": { "source": "apache", "extensions": ["src"] @@ -4840,15 +6061,22 @@ "compressible": true }, "application/x-x509-ca-cert": { - "source": "apache", + "source": "iana", "extensions": ["der","crt","pem"] }, + "application/x-x509-ca-ra-cert": { + "source": "iana" + }, + "application/x-x509-next-ca-cert": { + "source": "iana" + }, "application/x-xfig": { "source": "apache", "extensions": ["fig"] }, "application/x-xliff+xml": { "source": "apache", + "compressible": true, "extensions": ["xlf"] }, "application/x-xpinstall": { @@ -4868,39 +6096,54 @@ "source": "iana" }, "application/xacml+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/xaml+xml": { "source": "apache", + "compressible": true, "extensions": ["xaml"] }, "application/xcap-att+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["xav"] }, "application/xcap-caps+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["xca"] }, "application/xcap-diff+xml": { "source": "iana", + "compressible": true, "extensions": ["xdf"] }, "application/xcap-el+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["xel"] }, "application/xcap-error+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/xcap-ns+xml": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["xns"] }, "application/xcon-conference-info+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/xcon-conference-info-diff+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/xenc+xml": { "source": "iana", + "compressible": true, "extensions": ["xenc"] }, "application/xhtml+xml": { @@ -4909,7 +6152,13 @@ "extensions": ["xhtml","xht"] }, "application/xhtml-voice+xml": { - "source": "apache" + "source": "apache", + "compressible": true + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"] }, "application/xml": { "source": "iana", @@ -4925,10 +6174,12 @@ "source": "iana" }, "application/xml-patch+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/xmpp+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/xop+xml": { "source": "iana", @@ -4937,18 +6188,22 @@ }, "application/xproc+xml": { "source": "apache", + "compressible": true, "extensions": ["xpl"] }, "application/xslt+xml": { "source": "iana", - "extensions": ["xslt"] + "compressible": true, + "extensions": ["xsl","xslt"] }, "application/xspf+xml": { "source": "apache", + "compressible": true, "extensions": ["xspf"] }, "application/xv+xml": { "source": "iana", + "compressible": true, "extensions": ["mxml","xhvml","xvml","xvm"] }, "application/yang": { @@ -4960,17 +6215,20 @@ "compressible": true }, "application/yang-data+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/yang-patch+json": { "source": "iana", "compressible": true }, "application/yang-patch+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "application/yin+xml": { "source": "iana", + "compressible": true, "extensions": ["yin"] }, "application/zip": { @@ -4981,6 +6239,9 @@ "application/zlib": { "source": "iana" }, + "application/zstd": { + "source": "iana" + }, "audio/1d-interleaved-parityfec": { "source": "iana" }, @@ -4995,6 +6256,9 @@ "audio/3gpp2": { "source": "iana" }, + "audio/aac": { + "source": "iana" + }, "audio/ac3": { "source": "iana" }, @@ -5003,7 +6267,8 @@ "extensions": ["adp"] }, "audio/amr": { - "source": "iana" + "source": "iana", + "extensions": ["amr"] }, "audio/amr-wb": { "source": "iana" @@ -5115,6 +6380,9 @@ "audio/evs": { "source": "iana" }, + "audio/flexfec": { + "source": "iana" + }, "audio/fwdred": { "source": "iana" }, @@ -5206,12 +6474,16 @@ "audio/melp600": { "source": "iana" }, + "audio/mhas": { + "source": "iana" + }, "audio/midi": { "source": "apache", "extensions": ["mid","midi","kar","rmi"] }, "audio/mobile-xmf": { - "source": "iana" + "source": "iana", + "extensions": ["mxmf"] }, "audio/mp3": { "compressible": false, @@ -5245,7 +6517,7 @@ "audio/ogg": { "source": "iana", "compressible": false, - "extensions": ["oga","ogg","spx"] + "extensions": ["oga","ogg","spx","opus"] }, "audio/opus": { "source": "iana" @@ -5293,6 +6565,9 @@ "source": "apache", "extensions": ["s3m"] }, + "audio/scip": { + "source": "iana" + }, "audio/silk": { "source": "apache", "extensions": ["sil"] @@ -5306,6 +6581,9 @@ "audio/smv0": { "source": "iana" }, + "audio/sofa": { + "source": "iana" + }, "audio/sp-midi": { "source": "iana" }, @@ -5321,15 +6599,27 @@ "audio/telephone-event": { "source": "iana" }, + "audio/tetra_acelp": { + "source": "iana" + }, + "audio/tetra_acelp_bb": { + "source": "iana" + }, "audio/tone": { "source": "iana" }, + "audio/tsvcis": { + "source": "iana" + }, "audio/uemclip": { "source": "iana" }, "audio/ulpfec": { "source": "iana" }, + "audio/usac": { + "source": "iana" + }, "audio/vdvi": { "source": "iana" }, @@ -5407,6 +6697,9 @@ "source": "iana", "extensions": ["dtshd"] }, + "audio/vnd.dts.uhd": { + "source": "iana" + }, "audio/vnd.dvb.file": { "source": "iana" }, @@ -5445,6 +6738,9 @@ "audio/vnd.octel.sbc": { "source": "iana" }, + "audio/vnd.presonus.multitrack": { + "source": "iana" + }, "audio/vnd.qcelp": { "source": "iana" }, @@ -5575,14 +6871,50 @@ "source": "apache", "extensions": ["xyz"] }, - "font/opentype": { + "font/collection": { + "source": "iana", + "extensions": ["ttc"] + }, + "font/otf": { + "source": "iana", "compressible": true, "extensions": ["otf"] }, + "font/sfnt": { + "source": "iana" + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"] + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"] + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"] + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"] + }, "image/apng": { "compressible": false, "extensions": ["apng"] }, + "image/avci": { + "source": "iana" + }, + "image/avcs": { + "source": "iana" + }, + "image/avif": { + "source": "iana", + "compressible": false, + "extensions": ["avif"] + }, "image/bmp": { "source": "iana", "compressible": true, @@ -5593,13 +6925,16 @@ "extensions": ["cgm"] }, "image/dicom-rle": { - "source": "iana" + "source": "iana", + "extensions": ["drle"] }, "image/emf": { - "source": "iana" + "source": "iana", + "extensions": ["emf"] }, "image/fits": { - "source": "iana" + "source": "iana", + "extensions": ["fits"] }, "image/g3fax": { "source": "iana", @@ -5610,31 +6945,102 @@ "compressible": false, "extensions": ["gif"] }, + "image/heic": { + "source": "iana", + "extensions": ["heic"] + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"] + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"] + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"] + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"] + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"] + }, "image/ief": { "source": "iana", "extensions": ["ief"] }, "image/jls": { - "source": "iana" + "source": "iana", + "extensions": ["jls"] }, "image/jp2": { - "source": "iana" + "source": "iana", + "compressible": false, + "extensions": ["jp2","jpg2"] }, "image/jpeg": { "source": "iana", "compressible": false, "extensions": ["jpeg","jpg","jpe"] }, + "image/jph": { + "source": "iana", + "extensions": ["jph"] + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"] + }, "image/jpm": { - "source": "iana" + "source": "iana", + "compressible": false, + "extensions": ["jpm"] }, "image/jpx": { - "source": "iana" + "source": "iana", + "compressible": false, + "extensions": ["jpx","jpf"] + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"] + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"] + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"] + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"] + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"] + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"] + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"] }, "image/ktx": { "source": "iana", "extensions": ["ktx"] }, + "image/ktx2": { + "source": "iana", + "extensions": ["ktx2"] + }, "image/naplps": { "source": "iana" }, @@ -5651,7 +7057,8 @@ "extensions": ["btif"] }, "image/prs.pti": { - "source": "iana" + "source": "iana", + "extensions": ["pti"] }, "image/pwg-raster": { "source": "iana" @@ -5666,15 +7073,17 @@ "extensions": ["svg","svgz"] }, "image/t38": { - "source": "iana" + "source": "iana", + "extensions": ["t38"] }, "image/tiff": { "source": "iana", "compressible": false, - "extensions": ["tiff","tif"] + "extensions": ["tif","tiff"] }, "image/tiff-fx": { - "source": "iana" + "source": "iana", + "extensions": ["tfx"] }, "image/vnd.adobe.photoshop": { "source": "iana", @@ -5682,7 +7091,8 @@ "extensions": ["psd"] }, "image/vnd.airzip.accelerator.azv": { - "source": "iana" + "source": "iana", + "extensions": ["azv"] }, "image/vnd.cns.inf2": { "source": "iana" @@ -5731,7 +7141,8 @@ "source": "iana" }, "image/vnd.microsoft.icon": { - "source": "iana" + "source": "iana", + "extensions": ["ico"] }, "image/vnd.mix": { "source": "iana" @@ -5739,6 +7150,9 @@ "image/vnd.mozilla.apng": { "source": "iana" }, + "image/vnd.ms-dds": { + "extensions": ["dds"] + }, "image/vnd.ms-modi": { "source": "iana", "extensions": ["mdi"] @@ -5751,6 +7165,10 @@ "source": "iana", "extensions": ["npx"] }, + "image/vnd.pco.b16": { + "source": "iana", + "extensions": ["b16"] + }, "image/vnd.radiance": { "source": "iana" }, @@ -5767,10 +7185,12 @@ "source": "iana" }, "image/vnd.tencent.tap": { - "source": "iana" + "source": "iana", + "extensions": ["tap"] }, "image/vnd.valve.source.texture": { - "source": "iana" + "source": "iana", + "extensions": ["vtf"] }, "image/vnd.wap.wbmp": { "source": "iana", @@ -5781,14 +7201,16 @@ "extensions": ["xif"] }, "image/vnd.zbrush.pcx": { - "source": "iana" + "source": "iana", + "extensions": ["pcx"] }, "image/webp": { "source": "apache", "extensions": ["webp"] }, "image/wmf": { - "source": "iana" + "source": "iana", + "extensions": ["wmf"] }, "image/x-3ds": { "source": "apache", @@ -5878,7 +7300,10 @@ "source": "iana" }, "message/disposition-notification": { - "source": "iana" + "source": "iana", + "extensions": [ + "disposition-notification" + ] }, "message/external-body": { "source": "iana" @@ -5887,16 +7312,20 @@ "source": "iana" }, "message/global": { - "source": "iana" + "source": "iana", + "extensions": ["u8msg"] }, "message/global-delivery-status": { - "source": "iana" + "source": "iana", + "extensions": ["u8dsn"] }, "message/global-disposition-notification": { - "source": "iana" + "source": "iana", + "extensions": ["u8mdn"] }, "message/global-headers": { - "source": "iana" + "source": "iana", + "extensions": ["u8hdr"] }, "message/http": { "source": "iana", @@ -5934,11 +7363,25 @@ "source": "iana" }, "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"] + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"] + }, + "model/e57": { "source": "iana" }, "model/gltf+json": { "source": "iana", - "compressible": true + "compressible": true, + "extensions": ["gltf"] + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"] }, "model/iges": { "source": "iana", @@ -5950,8 +7393,21 @@ "compressible": false, "extensions": ["msh","mesh","silo"] }, + "model/mtl": { + "source": "iana", + "extensions": ["mtl"] + }, + "model/obj": { + "source": "iana", + "extensions": ["obj"] + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"] + }, "model/vnd.collada+xml": { "source": "iana", + "compressible": true, "extensions": ["dae"] }, "model/vnd.dwf": { @@ -5976,26 +7432,43 @@ "extensions": ["gtw"] }, "model/vnd.moml+xml": { - "source": "iana" + "source": "iana", + "compressible": true }, "model/vnd.mts": { "source": "iana", "extensions": ["mts"] }, "model/vnd.opengex": { - "source": "iana" + "source": "iana", + "extensions": ["ogex"] }, "model/vnd.parasolid.transmit.binary": { - "source": "iana" + "source": "iana", + "extensions": ["x_b"] }, "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"] + }, + "model/vnd.pytha.pyox": { "source": "iana" }, "model/vnd.rosette.annotated-data-model": { "source": "iana" }, + "model/vnd.sap.vds": { + "source": "iana", + "extensions": ["vds"] + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"] + }, "model/vnd.valve.source.compiled-map": { - "source": "iana" + "source": "iana", + "extensions": ["bsp"] }, "model/vnd.vtu": { "source": "iana", @@ -6012,7 +7485,8 @@ "extensions": ["x3db","x3dbz"] }, "model/x3d+fastinfoset": { - "source": "iana" + "source": "iana", + "extensions": ["x3db"] }, "model/x3d+vrml": { "source": "apache", @@ -6025,7 +7499,8 @@ "extensions": ["x3d","x3dz"] }, "model/x3d-vrml": { - "source": "iana" + "source": "iana", + "extensions": ["x3dv"] }, "multipart/alternative": { "source": "iana", @@ -6052,8 +7527,10 @@ "source": "iana" }, "multipart/mixed": { - "source": "iana", - "compressible": false + "source": "iana" + }, + "multipart/multilingual": { + "source": "iana" }, "multipart/parallel": { "source": "iana" @@ -6069,6 +7546,9 @@ "source": "iana", "compressible": false }, + "multipart/vnd.bint.med-plus": { + "source": "iana" + }, "multipart/voice-message": { "source": "iana" }, @@ -6096,8 +7576,18 @@ "text/coffeescript": { "extensions": ["coffee","litcoffee"] }, + "text/cql": { + "source": "iana" + }, + "text/cql-expression": { + "source": "iana" + }, + "text/cql-identifier": { + "source": "iana" + }, "text/css": { "source": "iana", + "charset": "UTF-8", "compressible": true, "extensions": ["css"] }, @@ -6124,14 +7614,20 @@ "text/enriched": { "source": "iana" }, + "text/fhirpath": { + "source": "iana" + }, + "text/flexfec": { + "source": "iana" + }, "text/fwdred": { "source": "iana" }, - "text/grammar-ref-list": { + "text/gff3": { "source": "iana" }, - "text/hjson": { - "extensions": ["hjson"] + "text/grammar-ref-list": { + "source": "iana" }, "text/html": { "source": "iana", @@ -6153,25 +7649,34 @@ "extensions": ["jsx"] }, "text/less": { + "compressible": true, "extensions": ["less"] }, "text/markdown": { - "source": "iana" + "source": "iana", + "compressible": true, + "extensions": ["markdown","md"] }, "text/mathml": { "source": "nginx", "extensions": ["mml"] }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"] + }, "text/mizar": { "source": "iana" }, "text/n3": { "source": "iana", + "charset": "UTF-8", "compressible": true, "extensions": ["n3"] }, "text/parameters": { - "source": "iana" + "source": "iana", + "charset": "UTF-8" }, "text/parityfec": { "source": "iana" @@ -6182,7 +7687,8 @@ "extensions": ["txt","text","conf","def","list","log","in","ini"] }, "text/provenance-notation": { - "source": "iana" + "source": "iana", + "charset": "UTF-8" }, "text/prs.fallenstein.rst": { "source": "iana" @@ -6226,9 +7732,23 @@ "source": "iana", "extensions": ["sgml","sgm"] }, + "text/shaclc": { + "source": "iana" + }, + "text/shex": { + "source": "iana", + "extensions": ["shex"] + }, "text/slim": { "extensions": ["slim","slm"] }, + "text/spdx": { + "source": "iana", + "extensions": ["spdx"] + }, + "text/strings": { + "source": "iana" + }, "text/stylus": { "extensions": ["stylus","styl"] }, @@ -6246,6 +7766,7 @@ }, "text/turtle": { "source": "iana", + "charset": "UTF-8", "extensions": ["ttl"] }, "text/ulpfec": { @@ -6287,7 +7808,8 @@ "extensions": ["scurl"] }, "text/vnd.debian.copyright": { - "source": "iana" + "source": "iana", + "charset": "UTF-8" }, "text/vnd.dmclientscript": { "source": "iana" @@ -6297,6 +7819,10 @@ "extensions": ["sub"] }, "text/vnd.esmertec.theme-descriptor": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.ficlab.flt": { "source": "iana" }, "text/vnd.fly": { @@ -6307,10 +7833,19 @@ "source": "iana", "extensions": ["flx"] }, + "text/vnd.gml": { + "source": "iana" + }, "text/vnd.graphviz": { "source": "iana", "extensions": ["gv"] }, + "text/vnd.hans": { + "source": "iana" + }, + "text/vnd.hgl": { + "source": "iana" + }, "text/vnd.in3d.3dml": { "source": "iana", "extensions": ["3dml"] @@ -6340,15 +7875,23 @@ "text/vnd.radisys.msml-basic-layout": { "source": "iana" }, + "text/vnd.senx.warpscript": { + "source": "iana" + }, "text/vnd.si.uricatalogue": { "source": "iana" }, + "text/vnd.sosi": { + "source": "iana" + }, "text/vnd.sun.j2me.app-descriptor": { "source": "iana", + "charset": "UTF-8", "extensions": ["jad"] }, "text/vnd.trolltech.linguist": { - "source": "iana" + "source": "iana", + "charset": "UTF-8" }, "text/vnd.wap.si": { "source": "iana" @@ -6365,6 +7908,7 @@ "extensions": ["wmls"] }, "text/vtt": { + "source": "iana", "charset": "UTF-8", "compressible": true, "extensions": ["vtt"] @@ -6403,7 +7947,7 @@ }, "text/x-markdown": { "compressible": true, - "extensions": ["markdown","md","mkd"] + "extensions": ["mkd"] }, "text/x-nfo": { "source": "apache", @@ -6413,6 +7957,10 @@ "source": "apache", "extensions": ["opml"] }, + "text/x-org": { + "compressible": true, + "extensions": ["org"] + }, "text/x-pascal": { "source": "apache", "extensions": ["p","pas"] @@ -6460,269 +8008,295 @@ "source": "iana" }, "text/yaml": { + "compressible": true, "extensions": ["yaml","yml"] }, "video/1d-interleaved-parityfec": { - "source": "apache" + "source": "iana" }, "video/3gpp": { - "source": "apache", + "source": "iana", "extensions": ["3gp","3gpp"] }, "video/3gpp-tt": { - "source": "apache" + "source": "iana" }, "video/3gpp2": { - "source": "apache", + "source": "iana", "extensions": ["3g2"] }, + "video/av1": { + "source": "iana" + }, "video/bmpeg": { - "source": "apache" + "source": "iana" }, "video/bt656": { - "source": "apache" + "source": "iana" }, "video/celb": { - "source": "apache" + "source": "iana" }, "video/dv": { - "source": "apache" + "source": "iana" }, "video/encaprtp": { - "source": "apache" + "source": "iana" + }, + "video/ffv1": { + "source": "iana" + }, + "video/flexfec": { + "source": "iana" }, "video/h261": { - "source": "apache", + "source": "iana", "extensions": ["h261"] }, "video/h263": { - "source": "apache", + "source": "iana", "extensions": ["h263"] }, "video/h263-1998": { - "source": "apache" + "source": "iana" }, "video/h263-2000": { - "source": "apache" + "source": "iana" }, "video/h264": { - "source": "apache", + "source": "iana", "extensions": ["h264"] }, "video/h264-rcdo": { - "source": "apache" + "source": "iana" }, "video/h264-svc": { - "source": "apache" + "source": "iana" }, "video/h265": { - "source": "apache" + "source": "iana" }, "video/iso.segment": { - "source": "apache" + "source": "iana", + "extensions": ["m4s"] }, "video/jpeg": { - "source": "apache", + "source": "iana", "extensions": ["jpgv"] }, "video/jpeg2000": { - "source": "apache" + "source": "iana" }, "video/jpm": { "source": "apache", "extensions": ["jpm","jpgm"] }, "video/mj2": { - "source": "apache", + "source": "iana", "extensions": ["mj2","mjp2"] }, "video/mp1s": { - "source": "apache" + "source": "iana" }, "video/mp2p": { - "source": "apache" + "source": "iana" }, "video/mp2t": { - "source": "apache", + "source": "iana", "extensions": ["ts"] }, "video/mp4": { - "source": "apache", + "source": "iana", "compressible": false, "extensions": ["mp4","mp4v","mpg4"] }, "video/mp4v-es": { - "source": "apache" + "source": "iana" }, "video/mpeg": { - "source": "apache", + "source": "iana", "compressible": false, "extensions": ["mpeg","mpg","mpe","m1v","m2v"] }, "video/mpeg4-generic": { - "source": "apache" + "source": "iana" }, "video/mpv": { - "source": "apache" + "source": "iana" }, "video/nv": { - "source": "apache" + "source": "iana" }, "video/ogg": { - "source": "apache", + "source": "iana", "compressible": false, "extensions": ["ogv"] }, "video/parityfec": { - "source": "apache" + "source": "iana" }, "video/pointer": { - "source": "apache" + "source": "iana" }, "video/quicktime": { - "source": "apache", + "source": "iana", "compressible": false, "extensions": ["qt","mov"] }, "video/raptorfec": { - "source": "apache" + "source": "iana" }, "video/raw": { - "source": "apache" + "source": "iana" }, "video/rtp-enc-aescm128": { - "source": "apache" + "source": "iana" }, "video/rtploopback": { - "source": "apache" + "source": "iana" }, "video/rtx": { - "source": "apache" + "source": "iana" + }, + "video/scip": { + "source": "iana" + }, + "video/smpte291": { + "source": "iana" }, "video/smpte292m": { - "source": "apache" + "source": "iana" }, "video/ulpfec": { - "source": "apache" + "source": "iana" }, "video/vc1": { - "source": "apache" + "source": "iana" + }, + "video/vc2": { + "source": "iana" }, "video/vnd.cctv": { - "source": "apache" + "source": "iana" }, "video/vnd.dece.hd": { - "source": "apache", + "source": "iana", "extensions": ["uvh","uvvh"] }, "video/vnd.dece.mobile": { - "source": "apache", + "source": "iana", "extensions": ["uvm","uvvm"] }, "video/vnd.dece.mp4": { - "source": "apache" + "source": "iana" }, "video/vnd.dece.pd": { - "source": "apache", + "source": "iana", "extensions": ["uvp","uvvp"] }, "video/vnd.dece.sd": { - "source": "apache", + "source": "iana", "extensions": ["uvs","uvvs"] }, "video/vnd.dece.video": { - "source": "apache", + "source": "iana", "extensions": ["uvv","uvvv"] }, "video/vnd.directv.mpeg": { - "source": "apache" + "source": "iana" }, "video/vnd.directv.mpeg-tts": { - "source": "apache" + "source": "iana" }, "video/vnd.dlna.mpeg-tts": { - "source": "apache" + "source": "iana" }, "video/vnd.dvb.file": { - "source": "apache", + "source": "iana", "extensions": ["dvb"] }, "video/vnd.fvt": { - "source": "apache", + "source": "iana", "extensions": ["fvt"] }, "video/vnd.hns.video": { - "source": "apache" + "source": "iana" }, "video/vnd.iptvforum.1dparityfec-1010": { - "source": "apache" + "source": "iana" }, "video/vnd.iptvforum.1dparityfec-2005": { - "source": "apache" + "source": "iana" }, "video/vnd.iptvforum.2dparityfec-1010": { - "source": "apache" + "source": "iana" }, "video/vnd.iptvforum.2dparityfec-2005": { - "source": "apache" + "source": "iana" }, "video/vnd.iptvforum.ttsavc": { - "source": "apache" + "source": "iana" }, "video/vnd.iptvforum.ttsmpeg2": { - "source": "apache" + "source": "iana" }, "video/vnd.motorola.video": { - "source": "apache" + "source": "iana" }, "video/vnd.motorola.videop": { - "source": "apache" + "source": "iana" }, "video/vnd.mpegurl": { - "source": "apache", + "source": "iana", "extensions": ["mxu","m4u"] }, "video/vnd.ms-playready.media.pyv": { - "source": "apache", + "source": "iana", "extensions": ["pyv"] }, "video/vnd.nokia.interleaved-multimedia": { - "source": "apache" + "source": "iana" + }, + "video/vnd.nokia.mp4vr": { + "source": "iana" }, "video/vnd.nokia.videovoip": { - "source": "apache" + "source": "iana" }, "video/vnd.objectvideo": { - "source": "apache" + "source": "iana" }, "video/vnd.radgamettools.bink": { - "source": "apache" + "source": "iana" }, "video/vnd.radgamettools.smacker": { - "source": "apache" + "source": "iana" }, "video/vnd.sealed.mpeg1": { - "source": "apache" + "source": "iana" }, "video/vnd.sealed.mpeg4": { - "source": "apache" + "source": "iana" }, "video/vnd.sealed.swf": { - "source": "apache" + "source": "iana" }, "video/vnd.sealedmedia.softseal.mov": { - "source": "apache" + "source": "iana" }, "video/vnd.uvvu.mp4": { - "source": "apache", + "source": "iana", "extensions": ["uvu","uvvu"] }, "video/vnd.vivo": { - "source": "apache", + "source": "iana", "extensions": ["viv"] }, + "video/vnd.youtube.yt": { + "source": "iana" + }, "video/vp8": { - "source": "apache" + "source": "iana" }, "video/webm": { "source": "apache", diff --git a/server/node_modules/mime-db/package.json b/server/node_modules/mime-db/package.json index 8bd9fd5..9498e03 100644 --- a/server/node_modules/mime-db/package.json +++ b/server/node_modules/mime-db/package.json @@ -1,27 +1,27 @@ { - "_from": "mime-db@~1.27.0", - "_id": "mime-db@1.27.0", + "_from": "mime-db@1.48.0", + "_id": "mime-db@1.48.0", "_inBundle": false, - "_integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "_integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "_location": "/mime-db", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "mime-db@~1.27.0", + "raw": "mime-db@1.48.0", "name": "mime-db", "escapedName": "mime-db", - "rawSpec": "~1.27.0", + "rawSpec": "1.48.0", "saveSpec": null, - "fetchSpec": "~1.27.0" + "fetchSpec": "1.48.0" }, "_requiredBy": [ "/mime-types" ], - "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "_shasum": "820f572296bbd20ec25ed55e5b5de869e5436eb1", - "_spec": "mime-db@~1.27.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/mime-types", + "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "_shasum": "e35b31045dd7eada3aaad537ed88a33afbef2d1d", + "_spec": "mime-db@1.48.0", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/mime-types", "bugs": { "url": "https://github.com/jshttp/mime-db/issues" }, @@ -45,18 +45,21 @@ "deprecated": false, "description": "Media Type Database", "devDependencies": { - "bluebird": "3.5.0", + "bluebird": "3.7.2", "co": "4.6.0", "cogent": "1.0.1", - "csv-parse": "1.2.0", - "eslint": "3.17.1", - "eslint-config-standard": "7.0.1", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "2.1.1", + "csv-parse": "4.15.4", + "eslint": "7.27.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.23.4", + "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.0", + "eslint-plugin-standard": "4.1.0", "gnode": "0.1.2", - "istanbul": "0.4.5", - "mocha": "1.21.5", - "raw-body": "2.2.0", + "mocha": "8.4.0", + "nyc": "15.1.0", + "raw-body": "2.4.1", "stream-to-array": "2.3.0" }, "engines": { @@ -87,12 +90,13 @@ }, "scripts": { "build": "node scripts/build", - "fetch": "gnode scripts/fetch-apache && gnode scripts/fetch-iana && gnode scripts/fetch-nginx", + "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", "lint": "eslint .", "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "update": "npm run fetch && npm run build" + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" }, - "version": "1.27.0" + "version": "1.48.0" } diff --git a/server/node_modules/mime-types/HISTORY.md b/server/node_modules/mime-types/HISTORY.md index b8008bc..19e45a1 100644 --- a/server/node_modules/mime-types/HISTORY.md +++ b/server/node_modules/mime-types/HISTORY.md @@ -1,3 +1,151 @@ +2.1.31 / 2021-06-01 +=================== + + * deps: mime-db@1.48.0 + - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + - Add new upstream MIME types + - Mark `text/yaml` as compressible + +2.1.30 / 2021-04-02 +=================== + + * deps: mime-db@1.47.0 + - Add extension `.amr` to `audio/amr` + - Remove ambigious extensions from IANA for `application/*+xml` types + - Update primary extension to `.es` for `application/ecmascript` + +2.1.29 / 2021-02-17 +=================== + + * deps: mime-db@1.46.0 + - Add extension `.amr` to `audio/amr` + - Add extension `.m4s` to `video/iso.segment` + - Add extension `.opus` to `audio/ogg` + - Add new upstream MIME types + +2.1.28 / 2021-01-01 +=================== + + * deps: mime-db@1.45.0 + - Add `application/ubjson` with extension `.ubj` + - Add `image/avif` with extension `.avif` + - Add `image/ktx2` with extension `.ktx2` + - Add extension `.dbf` to `application/vnd.dbf` + - Add extension `.rar` to `application/vnd.rar` + - Add extension `.td` to `application/urc-targetdesc+xml` + - Add new upstream MIME types + - Fix extension of `application/vnd.apple.keynote` to be `.key` + +2.1.27 / 2020-04-23 +=================== + + * deps: mime-db@1.44.0 + - Add charsets from IANA + - Add extension `.cjs` to `application/node` + - Add new upstream MIME types + +2.1.26 / 2020-01-05 +=================== + + * deps: mime-db@1.43.0 + - Add `application/x-keepass2` with extension `.kdbx` + - Add extension `.mxmf` to `audio/mobile-xmf` + - Add extensions from IANA for `application/*+xml` types + - Add new upstream MIME types + +2.1.25 / 2019-11-12 +=================== + + * deps: mime-db@1.42.0 + - Add new upstream MIME types + - Add `application/toml` with extension `.toml` + - Add `image/vnd.ms-dds` with extension `.dds` + +2.1.24 / 2019-04-20 +=================== + + * deps: mime-db@1.40.0 + - Add extensions from IANA for `model/*` types + - Add `text/mdx` with extension `.mdx` + +2.1.23 / 2019-04-17 +=================== + + * deps: mime-db@~1.39.0 + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add new upstream MIME types + +2.1.22 / 2019-02-14 +=================== + + * deps: mime-db@~1.38.0 + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add new upstream MIME types + - Mark `text/less` as compressible + +2.1.21 / 2018-10-19 +=================== + + * deps: mime-db@~1.37.0 + - Add extensions to HEIC image types + - Add new upstream MIME types + +2.1.20 / 2018-08-26 +=================== + + * deps: mime-db@~1.36.0 + - Add Apple file extensions from IANA + - Add extensions from IANA for `image/*` types + - Add new upstream MIME types + +2.1.19 / 2018-07-17 +=================== + + * deps: mime-db@~1.35.0 + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.owl` to `application/rdf+xml` + - Add new upstream MIME types + - Add UTF-8 as default charset for `text/turtle` + +2.1.18 / 2018-02-16 +=================== + + * deps: mime-db@~1.33.0 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add new upstream MIME types + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +2.1.17 / 2017-09-01 +=================== + + * deps: mime-db@~1.30.0 + - Add `application/vnd.ms-outlook` + - Add `application/x-arj` + - Add extension `.mjs` to `application/javascript` + - Add glTF types and extensions + - Add new upstream MIME types + - Add `text/x-org` + - Add VirtualBox MIME types + - Fix `source` records for `video/*` types that are IANA + - Update `font/opentype` to registered `font/otf` + +2.1.16 / 2017-07-24 +=================== + + * deps: mime-db@~1.29.0 + - Add `application/fido.trusted-apps+json` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add new upstream MIME types + - Update extensions `.md` and `.markdown` to be `text/markdown` + 2.1.15 / 2017-03-23 =================== diff --git a/server/node_modules/mime-types/README.md b/server/node_modules/mime-types/README.md index 4579db6..c978ac2 100644 --- a/server/node_modules/mime-types/README.md +++ b/server/node_modules/mime-types/README.md @@ -1,14 +1,14 @@ # mime-types -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] [![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] +[![Build Status][ci-image]][ci-url] [![Test Coverage][coveralls-image]][coveralls-url] The ultimate javascript content-type utility. -Similar to [the `mime` module](https://www.npmjs.com/package/mime), except: +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: - __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, so do @@ -17,7 +17,7 @@ Similar to [the `mime` module](https://www.npmjs.com/package/mime), except: - No `.define()` functionality - Bug fixes for `.lookup(path)` -Otherwise, the API is compatible. +Otherwise, the API is compatible with `mime` 1.x. ## Install @@ -47,10 +47,10 @@ All functions return `false` if input is invalid or not found. Lookup the content-type associated with a file. ```js -mime.lookup('json') // 'application/json' -mime.lookup('.md') // 'text/x-markdown' -mime.lookup('file.html') // 'text/html' -mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' mime.lookup('folder/.htaccess') // false mime.lookup('cats') // false @@ -59,10 +59,16 @@ mime.lookup('cats') // false ### mime.contentType(type) Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. ```js -mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' // from a full path mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' @@ -81,7 +87,7 @@ mime.extension('application/octet-stream') // 'bin' Lookup the implied default charset of a content-type. ```js -mime.charset('text/x-markdown') // 'UTF-8' +mime.charset('text/markdown') // 'UTF-8' ``` ### var type = mime.types[extension] @@ -96,13 +102,12 @@ A map of extensions by content-type. [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/mime-types.svg +[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci +[ci-url]: https://github.com/jshttp/mime-types/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types [npm-url]: https://npmjs.org/package/mime-types -[node-version-image]: https://img.shields.io/node/v/mime-types.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg -[travis-url]: https://travis-ci.org/jshttp/mime-types -[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/mime-types -[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg -[downloads-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/server/node_modules/mime-types/index.js b/server/node_modules/mime-types/index.js index 6e0ea43..b9f34d5 100644 --- a/server/node_modules/mime-types/index.js +++ b/server/node_modules/mime-types/index.js @@ -20,8 +20,8 @@ var extname = require('path').extname * @private */ -var extractTypeRegExp = /^\s*([^;\s]*)(?:;|\s|$)/ -var textTypeRegExp = /^text\//i +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ +var TEXT_TYPE_REGEXP = /^text\//i /** * Module exports. @@ -52,7 +52,7 @@ function charset (type) { } // TODO: use media-typer - var match = extractTypeRegExp.exec(type) + var match = EXTRACT_TYPE_REGEXP.exec(type) var mime = match && db[match[1].toLowerCase()] if (mime && mime.charset) { @@ -60,7 +60,7 @@ function charset (type) { } // default text/* to utf-8 - if (match && textTypeRegExp.test(match[1])) { + if (match && TEXT_TYPE_REGEXP.test(match[1])) { return 'UTF-8' } @@ -110,7 +110,7 @@ function extension (type) { } // TODO: use media-typer - var match = extractTypeRegExp.exec(type) + var match = EXTRACT_TYPE_REGEXP.exec(type) // get extensions var exts = match && exports.extensions[match[1].toLowerCase()] diff --git a/server/node_modules/mime-types/package.json b/server/node_modules/mime-types/package.json index 6f7a17e..cd0f25d 100644 --- a/server/node_modules/mime-types/package.json +++ b/server/node_modules/mime-types/package.json @@ -1,28 +1,28 @@ { - "_from": "mime-types@~2.1.11", - "_id": "mime-types@2.1.15", + "_from": "mime-types@~2.1.24", + "_id": "mime-types@2.1.31", "_inBundle": false, - "_integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "_integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "_location": "/mime-types", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "mime-types@~2.1.11", + "raw": "mime-types@~2.1.24", "name": "mime-types", "escapedName": "mime-types", - "rawSpec": "~2.1.11", + "rawSpec": "~2.1.24", "saveSpec": null, - "fetchSpec": "~2.1.11" + "fetchSpec": "~2.1.24" }, "_requiredBy": [ "/accepts", "/type-is" ], - "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "_shasum": "a4ebf5064094569237b8cf70046776d09fc92aed", - "_spec": "mime-types@~2.1.11", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/accepts", + "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "_shasum": "a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b", + "_spec": "mime-types@~2.1.24", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/type-is", "bugs": { "url": "https://github.com/jshttp/mime-types/issues" }, @@ -44,17 +44,20 @@ } ], "dependencies": { - "mime-db": "~1.27.0" + "mime-db": "1.48.0" }, "deprecated": false, "description": "The ultimate javascript content-type utility.", "devDependencies": { - "eslint": "3.18.0", - "eslint-config-standard": "7.1.0", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "2.1.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" + "eslint": "7.27.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.23.4", + "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "8.4.0", + "nyc": "15.1.0" }, "engines": { "node": ">= 0.6" @@ -78,8 +81,8 @@ "scripts": { "lint": "eslint .", "test": "mocha --reporter spec test/test.js", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js" + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" }, - "version": "2.1.15" + "version": "2.1.31" } diff --git a/server/node_modules/mime/package.json b/server/node_modules/mime/package.json index 217ee6b..bf2a18e 100644 --- a/server/node_modules/mime/package.json +++ b/server/node_modules/mime/package.json @@ -1,4 +1,10 @@ { + "_args": [ + [ + "mime@1.3.4", + "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server" + ] + ], "_from": "mime@1.3.4", "_id": "mime@1.3.4", "_inBundle": false, @@ -16,12 +22,11 @@ "fetchSpec": "1.3.4" }, "_requiredBy": [ - "/send" + "/mailparser" ], "_resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "_shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53", - "_spec": "mime@1.3.4", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/send", + "_spec": "1.3.4", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server", "author": { "name": "Robert Kieffer", "email": "robert@broofa.com", @@ -33,7 +38,6 @@ "bugs": { "url": "https://github.com/broofa/node-mime/issues" }, - "bundleDependencies": false, "contributors": [ { "name": "Benjamin Thomas", @@ -42,7 +46,6 @@ } ], "dependencies": {}, - "deprecated": false, "description": "A comprehensive library for mime-type mapping", "devDependencies": { "mime-db": "^1.2.0" diff --git a/server/node_modules/ms/package.json b/server/node_modules/ms/package.json index d12bc04..e3d9cb3 100644 --- a/server/node_modules/ms/package.json +++ b/server/node_modules/ms/package.json @@ -1,4 +1,10 @@ { + "_args": [ + [ + "ms@2.0.0", + "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server" + ] + ], "_from": "ms@2.0.0", "_id": "ms@2.0.0", "_inBundle": false, @@ -16,18 +22,19 @@ "fetchSpec": "2.0.0" }, "_requiredBy": [ + "/body-parser/debug", + "/cookie-session/debug", "/debug", - "/send" + "/express/debug", + "/finalhandler/debug", + "/mquery/debug" ], "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "_shasum": "5608aeadfc00be6c2901df5f9861788de0d597c8", - "_spec": "ms@2.0.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/debug", + "_spec": "2.0.0", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server", "bugs": { "url": "https://github.com/zeit/ms/issues" }, - "bundleDependencies": false, - "deprecated": false, "description": "Tiny milisecond conversion utility", "devDependencies": { "eslint": "3.19.0", diff --git a/server/node_modules/negotiator/HISTORY.md b/server/node_modules/negotiator/HISTORY.md index 10b6917..6d06c76 100644 --- a/server/node_modules/negotiator/HISTORY.md +++ b/server/node_modules/negotiator/HISTORY.md @@ -1,3 +1,8 @@ +0.6.2 / 2019-04-29 +================== + + * Fix sorting charset, encoding, and language with extra parameters + 0.6.1 / 2016-05-02 ================== diff --git a/server/node_modules/negotiator/lib/charset.js b/server/node_modules/negotiator/lib/charset.js index ac4217b..cdd0148 100644 --- a/server/node_modules/negotiator/lib/charset.js +++ b/server/node_modules/negotiator/lib/charset.js @@ -58,8 +58,8 @@ function parseCharset(str, i) { var q = 1; if (match[2]) { var params = match[2].split(';') - for (var i = 0; i < params.length; i ++) { - var p = params[i].trim().split('='); + for (var j = 0; j < params.length; j++) { + var p = params[j].trim().split('='); if (p[0] === 'q') { q = parseFloat(p[1]); break; diff --git a/server/node_modules/negotiator/lib/encoding.js b/server/node_modules/negotiator/lib/encoding.js index 70ac3de..8432cd7 100644 --- a/server/node_modules/negotiator/lib/encoding.js +++ b/server/node_modules/negotiator/lib/encoding.js @@ -74,8 +74,8 @@ function parseEncoding(str, i) { var q = 1; if (match[2]) { var params = match[2].split(';'); - for (var i = 0; i < params.length; i ++) { - var p = params[i].trim().split('='); + for (var j = 0; j < params.length; j++) { + var p = params[j].trim().split('='); if (p[0] === 'q') { q = parseFloat(p[1]); break; diff --git a/server/node_modules/negotiator/lib/language.js b/server/node_modules/negotiator/lib/language.js index 1bd2d0e..62f737f 100644 --- a/server/node_modules/negotiator/lib/language.js +++ b/server/node_modules/negotiator/lib/language.js @@ -32,10 +32,10 @@ function parseAcceptLanguage(accept) { var accepts = accept.split(','); for (var i = 0, j = 0; i < accepts.length; i++) { - var langauge = parseLanguage(accepts[i].trim(), i); + var language = parseLanguage(accepts[i].trim(), i); - if (langauge) { - accepts[j++] = langauge; + if (language) { + accepts[j++] = language; } } @@ -55,16 +55,16 @@ function parseLanguage(str, i) { if (!match) return null; var prefix = match[1], - suffix = match[2], - full = prefix; + suffix = match[2], + full = prefix; if (suffix) full += "-" + suffix; var q = 1; if (match[3]) { var params = match[3].split(';') - for (var i = 0; i < params.length; i ++) { - var p = params[i].split('='); + for (var j = 0; j < params.length; j++) { + var p = params[j].split('='); if (p[0] === 'q') q = parseFloat(p[1]); } } diff --git a/server/node_modules/negotiator/package.json b/server/node_modules/negotiator/package.json index 0b36ebe..5ea42bd 100644 --- a/server/node_modules/negotiator/package.json +++ b/server/node_modules/negotiator/package.json @@ -1,27 +1,27 @@ { - "_from": "negotiator@0.6.1", - "_id": "negotiator@0.6.1", + "_from": "negotiator@0.6.2", + "_id": "negotiator@0.6.2", "_inBundle": false, - "_integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "_integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "_location": "/negotiator", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "negotiator@0.6.1", + "raw": "negotiator@0.6.2", "name": "negotiator", "escapedName": "negotiator", - "rawSpec": "0.6.1", + "rawSpec": "0.6.2", "saveSpec": null, - "fetchSpec": "0.6.1" + "fetchSpec": "0.6.2" }, "_requiredBy": [ "/accepts" ], - "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "_shasum": "2b327184e8992101177b28563fb5e7102acd0ca9", - "_spec": "negotiator@0.6.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/accepts", + "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "_shasum": "feacf7ccf525a77ae9634436a64883ffeca346fb", + "_spec": "negotiator@0.6.2", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/accepts", "bugs": { "url": "https://github.com/jshttp/negotiator/issues" }, @@ -44,8 +44,10 @@ "deprecated": false, "description": "HTTP content negotiation", "devDependencies": { - "istanbul": "0.4.3", - "mocha": "~1.21.5" + "eslint": "5.16.0", + "eslint-plugin-markdown": "1.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" }, "engines": { "node": ">= 0.6" @@ -73,9 +75,10 @@ "url": "git+https://github.com/jshttp/negotiator.git" }, "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" }, - "version": "0.6.1" + "version": "0.6.2" } diff --git a/server/node_modules/on-finished/package.json b/server/node_modules/on-finished/package.json index ae64390..a411e53 100644 --- a/server/node_modules/on-finished/package.json +++ b/server/node_modules/on-finished/package.json @@ -16,6 +16,7 @@ "fetchSpec": "~2.3.0" }, "_requiredBy": [ + "/body-parser", "/express", "/finalhandler", "/send" @@ -23,7 +24,7 @@ "_resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "_shasum": "20f1336481b083cd75337992a16971aa2d906947", "_spec": "on-finished@~2.3.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/body-parser", "bugs": { "url": "https://github.com/jshttp/on-finished/issues" }, diff --git a/server/node_modules/parseurl/HISTORY.md b/server/node_modules/parseurl/HISTORY.md index 395041e..8e40954 100644 --- a/server/node_modules/parseurl/HISTORY.md +++ b/server/node_modules/parseurl/HISTORY.md @@ -1,3 +1,14 @@ +1.3.3 / 2019-04-15 +================== + + * Fix Node.js 0.8 return value inconsistencies + +1.3.2 / 2017-09-09 +================== + + * perf: reduce overhead for full URLs + * perf: unroll the "fast-path" `RegExp` + 1.3.1 / 2016-01-17 ================== diff --git a/server/node_modules/parseurl/LICENSE b/server/node_modules/parseurl/LICENSE index ec7dfe7..27653d3 100644 --- a/server/node_modules/parseurl/LICENSE +++ b/server/node_modules/parseurl/LICENSE @@ -2,7 +2,7 @@ (The MIT License) Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014 Douglas Christopher Wilson +Copyright (c) 2014-2017 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/server/node_modules/parseurl/README.md b/server/node_modules/parseurl/README.md index f4796eb..443e716 100644 --- a/server/node_modules/parseurl/README.md +++ b/server/node_modules/parseurl/README.md @@ -1,8 +1,8 @@ # parseurl -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] [![Build Status][travis-image]][travis-url] [![Test Coverage][coveralls-image]][coveralls-url] @@ -10,7 +10,11 @@ Parse a URL with memoization. ## Install -```bash +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 parseurl ``` @@ -40,81 +44,90 @@ does not change will return a cached parsed object, rather than parsing again. ```bash $ npm run-script bench -> parseurl@1.3.1 bench nodejs-parseurl +> parseurl@1.3.3 bench nodejs-parseurl > node benchmark/index.js + http_parser@2.8.0 + node@10.6.0 + v8@6.7.288.46-node.13 + uv@1.21.0 + zlib@1.2.11 + ares@1.14.0 + modules@64 + nghttp2@1.32.0 + napi@3 + openssl@1.1.0h + icu@61.1 + unicode@10.0 + cldr@33.0 + tz@2018c + > node benchmark/fullurl.js Parsing URL "http://localhost:8888/foo/bar?user=tj&pet=fluffy" - 1 test completed. - 2 tests completed. - 3 tests completed. + 4 tests completed. - fasturl x 1,290,780 ops/sec ±0.46% (195 runs sampled) - nativeurl x 56,401 ops/sec ±0.22% (196 runs sampled) - parseurl x 55,231 ops/sec ±0.22% (194 runs sampled) + fasturl x 2,207,842 ops/sec ±3.76% (184 runs sampled) + nativeurl - legacy x 507,180 ops/sec ±0.82% (191 runs sampled) + nativeurl - whatwg x 290,044 ops/sec ±1.96% (189 runs sampled) + parseurl x 488,907 ops/sec ±2.13% (192 runs sampled) > node benchmark/pathquery.js Parsing URL "/foo/bar?user=tj&pet=fluffy" - 1 test completed. - 2 tests completed. - 3 tests completed. + 4 tests completed. - fasturl x 1,986,668 ops/sec ±0.27% (190 runs sampled) - nativeurl x 98,740 ops/sec ±0.21% (195 runs sampled) - parseurl x 2,628,171 ops/sec ±0.36% (195 runs sampled) + fasturl x 3,812,564 ops/sec ±3.15% (188 runs sampled) + nativeurl - legacy x 2,651,631 ops/sec ±1.68% (189 runs sampled) + nativeurl - whatwg x 161,837 ops/sec ±2.26% (189 runs sampled) + parseurl x 4,166,338 ops/sec ±2.23% (184 runs sampled) > node benchmark/samerequest.js Parsing URL "/foo/bar?user=tj&pet=fluffy" on same request object - 1 test completed. - 2 tests completed. - 3 tests completed. + 4 tests completed. - fasturl x 2,184,468 ops/sec ±0.40% (194 runs sampled) - nativeurl x 99,437 ops/sec ±0.71% (194 runs sampled) - parseurl x 10,498,005 ops/sec ±0.61% (186 runs sampled) + fasturl x 3,821,651 ops/sec ±2.42% (185 runs sampled) + nativeurl - legacy x 2,651,162 ops/sec ±1.90% (187 runs sampled) + nativeurl - whatwg x 175,166 ops/sec ±1.44% (188 runs sampled) + parseurl x 14,912,606 ops/sec ±3.59% (183 runs sampled) > node benchmark/simplepath.js Parsing URL "/foo/bar" - 1 test completed. - 2 tests completed. - 3 tests completed. + 4 tests completed. - fasturl x 4,535,825 ops/sec ±0.27% (191 runs sampled) - nativeurl x 98,769 ops/sec ±0.54% (191 runs sampled) - parseurl x 4,164,865 ops/sec ±0.34% (192 runs sampled) + fasturl x 12,421,765 ops/sec ±2.04% (191 runs sampled) + nativeurl - legacy x 7,546,036 ops/sec ±1.41% (188 runs sampled) + nativeurl - whatwg x 198,843 ops/sec ±1.83% (189 runs sampled) + parseurl x 24,244,006 ops/sec ±0.51% (194 runs sampled) > node benchmark/slash.js Parsing URL "/" - 1 test completed. - 2 tests completed. - 3 tests completed. + 4 tests completed. - fasturl x 4,908,405 ops/sec ±0.42% (191 runs sampled) - nativeurl x 100,945 ops/sec ±0.59% (188 runs sampled) - parseurl x 4,333,208 ops/sec ±0.27% (194 runs sampled) + fasturl x 17,159,456 ops/sec ±3.25% (188 runs sampled) + nativeurl - legacy x 11,635,097 ops/sec ±3.79% (184 runs sampled) + nativeurl - whatwg x 240,693 ops/sec ±0.83% (189 runs sampled) + parseurl x 42,279,067 ops/sec ±0.55% (190 runs sampled) ``` ## License [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/parseurl.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/parseurl/master +[coveralls-url]: https://coveralls.io/r/pillarjs/parseurl?branch=master +[node-image]: https://badgen.net/npm/node/parseurl +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/parseurl [npm-url]: https://npmjs.org/package/parseurl -[node-version-image]: https://img.shields.io/node/v/parseurl.svg -[node-version-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/pillarjs/parseurl/master.svg +[npm-version-image]: https://badgen.net/npm/v/parseurl +[travis-image]: https://badgen.net/travis/pillarjs/parseurl/master [travis-url]: https://travis-ci.org/pillarjs/parseurl -[coveralls-image]: https://img.shields.io/coveralls/pillarjs/parseurl/master.svg -[coveralls-url]: https://coveralls.io/r/pillarjs/parseurl?branch=master -[downloads-image]: https://img.shields.io/npm/dm/parseurl.svg -[downloads-url]: https://npmjs.org/package/parseurl diff --git a/server/node_modules/parseurl/index.js b/server/node_modules/parseurl/index.js index 56cc6ec..ece7223 100644 --- a/server/node_modules/parseurl/index.js +++ b/server/node_modules/parseurl/index.js @@ -1,7 +1,7 @@ /*! * parseurl * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2014 Douglas Christopher Wilson + * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ @@ -9,6 +9,7 @@ /** * Module dependencies. + * @private */ var url = require('url') @@ -16,14 +17,8 @@ var parse = url.parse var Url = url.Url /** - * Pattern for a simple path case. - * See: https://github.com/joyent/node/pull/7878 - */ - -var simplePathRegExp = /^(\/\/?(?!\/)[^\?#\s]*)(\?[^#\s]*)?$/ - -/** - * Exports. + * Module exports. + * @public */ module.exports = parseurl @@ -34,10 +29,10 @@ module.exports.original = originalurl * * @param {ServerRequest} req * @return {Object} - * @api public + * @public */ -function parseurl(req) { +function parseurl (req) { var url = req.url if (url === undefined) { @@ -56,7 +51,7 @@ function parseurl(req) { parsed = fastparse(url) parsed._raw = url - return req._parsedUrl = parsed + return (req._parsedUrl = parsed) }; /** @@ -64,10 +59,10 @@ function parseurl(req) { * * @param {ServerRequest} req * @return {Object} - * @api public + * @public */ -function originalurl(req) { +function originalurl (req) { var url = req.originalUrl if (typeof url !== 'string') { @@ -86,7 +81,7 @@ function originalurl(req) { parsed = fastparse(url) parsed._raw = url - return req._parsedOriginalUrl = parsed + return (req._parsedOriginalUrl = parsed) }; /** @@ -94,31 +89,56 @@ function originalurl(req) { * * @param {string} str * @return {Object} - * @api private + * @private */ -function fastparse(str) { - // Try fast path regexp - // See: https://github.com/joyent/node/pull/7878 - var simplePath = typeof str === 'string' && simplePathRegExp.exec(str) - - // Construct simple URL - if (simplePath) { - var pathname = simplePath[1] - var search = simplePath[2] || null - var url = Url !== undefined - ? new Url() - : {} - url.path = str - url.href = str - url.pathname = pathname - url.search = search - url.query = search && search.substr(1) +function fastparse (str) { + if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) { + return parse(str) + } - return url + var pathname = str + var query = null + var search = null + + // This takes the regexp from https://github.com/joyent/node/pull/7878 + // Which is /^(\/[^?#\s]*)(\?[^#\s]*)?$/ + // And unrolls it into a for loop + for (var i = 1; i < str.length; i++) { + switch (str.charCodeAt(i)) { + case 0x3f: /* ? */ + if (search === null) { + pathname = str.substring(0, i) + query = str.substring(i + 1) + search = str.substring(i) + } + break + case 0x09: /* \t */ + case 0x0a: /* \n */ + case 0x0c: /* \f */ + case 0x0d: /* \r */ + case 0x20: /* */ + case 0x23: /* # */ + case 0xa0: + case 0xfeff: + return parse(str) + } + } + + var url = Url !== undefined + ? new Url() + : {} + + url.path = str + url.href = str + url.pathname = pathname + + if (search !== null) { + url.query = query + url.search = search } - return parse(str) + return url } /** @@ -127,12 +147,12 @@ function fastparse(str) { * @param {string} url * @param {object} parsedUrl * @return {boolean} - * @api private + * @private */ -function fresh(url, parsedUrl) { - return typeof parsedUrl === 'object' - && parsedUrl !== null - && (Url === undefined || parsedUrl instanceof Url) - && parsedUrl._raw === url +function fresh (url, parsedUrl) { + return typeof parsedUrl === 'object' && + parsedUrl !== null && + (Url === undefined || parsedUrl instanceof Url) && + parsedUrl._raw === url } diff --git a/server/node_modules/parseurl/package.json b/server/node_modules/parseurl/package.json index fe5e52f..becfd61 100644 --- a/server/node_modules/parseurl/package.json +++ b/server/node_modules/parseurl/package.json @@ -1,34 +1,29 @@ { - "_from": "parseurl@~1.3.1", - "_id": "parseurl@1.3.1", + "_from": "parseurl@~1.3.3", + "_id": "parseurl@1.3.3", "_inBundle": false, - "_integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "_integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "_location": "/parseurl", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "parseurl@~1.3.1", + "raw": "parseurl@~1.3.3", "name": "parseurl", "escapedName": "parseurl", - "rawSpec": "~1.3.1", + "rawSpec": "~1.3.3", "saveSpec": null, - "fetchSpec": "~1.3.1" + "fetchSpec": "~1.3.3" }, "_requiredBy": [ "/express", "/finalhandler", "/serve-static" ], - "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "_shasum": "c8ab8c9223ba34888aa64a297b28853bec18da56", - "_spec": "parseurl@~1.3.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, + "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "_shasum": "9da19e7bee8d12dff0513ed5b76957793bc2e8d4", + "_spec": "parseurl@~1.3.3", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "bugs": { "url": "https://github.com/pillarjs/parseurl/issues" }, @@ -37,16 +32,27 @@ { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" } ], "deprecated": false, "description": "parse a url with memoization", "devDependencies": { "beautify-benchmark": "0.2.4", - "benchmark": "2.0.0", + "benchmark": "2.1.4", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.1", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", "fast-url-parser": "1.1.3", - "istanbul": "0.4.2", - "mocha": "~1.21.5" + "istanbul": "0.4.5", + "mocha": "6.1.3" }, "engines": { "node": ">= 0.8" @@ -66,9 +72,10 @@ }, "scripts": { "bench": "node benchmark/index.js", + "lint": "eslint .", "test": "mocha --check-leaks --bail --reporter spec test/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec test/" }, - "version": "1.3.1" + "version": "1.3.3" } diff --git a/server/node_modules/path-to-regexp/package.json b/server/node_modules/path-to-regexp/package.json index 51e258d..45a9422 100644 --- a/server/node_modules/path-to-regexp/package.json +++ b/server/node_modules/path-to-regexp/package.json @@ -21,7 +21,7 @@ "_resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "_shasum": "df604178005f522f15eb4490e7247a1bfaa67f8c", "_spec": "path-to-regexp@0.1.7", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "bugs": { "url": "https://github.com/component/path-to-regexp/issues" }, diff --git a/server/node_modules/proxy-addr/HISTORY.md b/server/node_modules/proxy-addr/HISTORY.md index 9a62abc..8480242 100644 --- a/server/node_modules/proxy-addr/HISTORY.md +++ b/server/node_modules/proxy-addr/HISTORY.md @@ -1,3 +1,55 @@ +2.0.7 / 2021-05-31 +================== + + * deps: forwarded@0.2.0 + - Use `req.socket` over deprecated `req.connection` + +2.0.6 / 2020-02-24 +================== + + * deps: ipaddr.js@1.9.1 + +2.0.5 / 2019-04-16 +================== + + * deps: ipaddr.js@1.9.0 + +2.0.4 / 2018-07-26 +================== + + * deps: ipaddr.js@1.8.0 + +2.0.3 / 2018-02-19 +================== + + * deps: ipaddr.js@1.6.0 + +2.0.2 / 2017-09-24 +================== + + * deps: forwarded@~0.1.2 + - perf: improve header parsing + - perf: reduce overhead when no `X-Forwarded-For` header + +2.0.1 / 2017-09-10 +================== + + * deps: forwarded@~0.1.1 + - Fix trimming leading / trailing OWS + - perf: hoist regular expression + * deps: ipaddr.js@1.5.2 + +2.0.0 / 2017-08-08 +================== + + * Drop support for Node.js below 0.10 + +1.1.5 / 2017-07-25 +================== + + * Fix array argument being altered + * deps: ipaddr.js@1.4.0 + 1.1.4 / 2017-03-24 ================== diff --git a/server/node_modules/proxy-addr/README.md b/server/node_modules/proxy-addr/README.md index 6b1075a..69c0b63 100644 --- a/server/node_modules/proxy-addr/README.md +++ b/server/node_modules/proxy-addr/README.md @@ -1,9 +1,9 @@ # proxy-addr -[![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] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] [![Test Coverage][coveralls-image]][coveralls-url] Determine address of proxied request @@ -33,8 +33,8 @@ the address, `false` if you don't. The closest untrusted address is returned. ```js -proxyaddr(req, function(addr){ return addr === '127.0.0.1' }) -proxyaddr(req, function(addr, i){ return i < 1 }) +proxyaddr(req, function (addr) { return addr === '127.0.0.1' }) +proxyaddr(req, function (addr, i) { return i < 1 }) ``` The `trust` arugment may also be a single IP address string or an @@ -104,8 +104,8 @@ the same arguments as `trust` does in `proxyaddr(req, trust)` and returns a function suitable for `proxyaddr(req, trust)`. ```js -var trust = proxyaddr.compile('localhost') -var addr = proxyaddr(req, trust) +var trust = proxyaddr.compile('loopback') +var addr = proxyaddr(req, trust) ``` This function is meant to be optimized for use against every request. @@ -128,13 +128,12 @@ $ npm run-script bench [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/proxy-addr.svg -[npm-url]: https://npmjs.org/package/proxy-addr -[node-version-image]: https://img.shields.io/node/v/proxy-addr.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/proxy-addr/master.svg -[travis-url]: https://travis-ci.org/jshttp/proxy-addr -[coveralls-image]: https://img.shields.io/coveralls/jshttp/proxy-addr/master.svg +[ci-image]: https://badgen.net/github/checks/jshttp/proxy-addr/master?label=ci +[ci-url]: https://github.com/jshttp/proxy-addr/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/proxy-addr/master [coveralls-url]: https://coveralls.io/r/jshttp/proxy-addr?branch=master -[downloads-image]: https://img.shields.io/npm/dm/proxy-addr.svg -[downloads-url]: https://npmjs.org/package/proxy-addr +[node-image]: https://badgen.net/npm/node/proxy-addr +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/proxy-addr +[npm-url]: https://npmjs.org/package/proxy-addr +[npm-version-image]: https://badgen.net/npm/v/proxy-addr diff --git a/server/node_modules/proxy-addr/index.js b/server/node_modules/proxy-addr/index.js index 2dad636..a909b05 100644 --- a/server/node_modules/proxy-addr/index.js +++ b/server/node_modules/proxy-addr/index.js @@ -11,37 +11,37 @@ * @public */ -module.exports = proxyaddr; -module.exports.all = alladdrs; -module.exports.compile = compile; +module.exports = proxyaddr +module.exports.all = alladdrs +module.exports.compile = compile /** * Module dependencies. * @private */ -var forwarded = require('forwarded'); -var ipaddr = require('ipaddr.js'); +var forwarded = require('forwarded') +var ipaddr = require('ipaddr.js') /** * Variables. * @private */ -var digitre = /^[0-9]+$/; -var isip = ipaddr.isValid; -var parseip = ipaddr.parse; +var DIGIT_REGEXP = /^[0-9]+$/ +var isip = ipaddr.isValid +var parseip = ipaddr.parse /** * Pre-defined IP ranges. * @private */ -var ipranges = { +var IP_RANGES = { linklocal: ['169.254.0.0/16', 'fe80::/10'], loopback: ['127.0.0.1/8', '::1/128'], uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7'] -}; +} /** * Get all addresses in the request, optionally stopping @@ -52,26 +52,26 @@ var ipranges = { * @public */ -function alladdrs(req, trust) { +function alladdrs (req, trust) { // get addresses - var addrs = forwarded(req); + var addrs = forwarded(req) if (!trust) { // Return all addresses - return addrs; + return addrs } if (typeof trust !== 'function') { - trust = compile(trust); + trust = compile(trust) } for (var i = 0; i < addrs.length - 1; i++) { - if (trust(addrs[i], i)) continue; + if (trust(addrs[i], i)) continue - addrs.length = i + 1; + addrs.length = i + 1 } - return addrs; + return addrs } /** @@ -81,33 +81,35 @@ function alladdrs(req, trust) { * @private */ -function compile(val) { +function compile (val) { if (!val) { - throw new TypeError('argument is required'); + throw new TypeError('argument is required') } - var trust = typeof val === 'string' - ? [val] - : val; + var trust - if (!Array.isArray(trust)) { - throw new TypeError('unsupported trust argument'); + if (typeof val === 'string') { + trust = [val] + } else if (Array.isArray(val)) { + trust = val.slice() + } else { + throw new TypeError('unsupported trust argument') } for (var i = 0; i < trust.length; i++) { - val = trust[i]; + val = trust[i] - if (!ipranges.hasOwnProperty(val)) { - continue; + if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) { + continue } // Splice in pre-defined range - val = ipranges[val]; - trust.splice.apply(trust, [i, 1].concat(val)); - i += val.length - 1; + val = IP_RANGES[val] + trust.splice.apply(trust, [i, 1].concat(val)) + i += val.length - 1 } - return compileTrust(compileRangeSubnets(trust)); + return compileTrust(compileRangeSubnets(trust)) } /** @@ -117,14 +119,14 @@ function compile(val) { * @private */ -function compileRangeSubnets(arr) { - var rangeSubnets = new Array(arr.length); +function compileRangeSubnets (arr) { + var rangeSubnets = new Array(arr.length) for (var i = 0; i < arr.length; i++) { - rangeSubnets[i] = parseipNotation(arr[i]); + rangeSubnets[i] = parseipNotation(arr[i]) } - return rangeSubnets; + return rangeSubnets } /** @@ -134,14 +136,14 @@ function compileRangeSubnets(arr) { * @private */ -function compileTrust(rangeSubnets) { +function compileTrust (rangeSubnets) { // Return optimized function based on length - var len = rangeSubnets.length; + var len = rangeSubnets.length return len === 0 ? trustNone : len === 1 - ? trustSingle(rangeSubnets[0]) - : trustMulti(rangeSubnets); + ? trustSingle(rangeSubnets[0]) + : trustMulti(rangeSubnets) } /** @@ -151,46 +153,46 @@ function compileTrust(rangeSubnets) { * @private */ -function parseipNotation(note) { - var pos = note.lastIndexOf('/'); +function parseipNotation (note) { + var pos = note.lastIndexOf('/') var str = pos !== -1 ? note.substring(0, pos) - : note; + : note if (!isip(str)) { - throw new TypeError('invalid IP address: ' + str); + throw new TypeError('invalid IP address: ' + str) } - var ip = parseip(str); + var ip = parseip(str) if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) { // Store as IPv4 - ip = ip.toIPv4Address(); + ip = ip.toIPv4Address() } var max = ip.kind() === 'ipv6' ? 128 - : 32; + : 32 var range = pos !== -1 ? note.substring(pos + 1, note.length) - : null; + : null if (range === null) { - range = max; - } else if (digitre.test(range)) { - range = parseInt(range, 10); + range = max + } else if (DIGIT_REGEXP.test(range)) { + range = parseInt(range, 10) } else if (ip.kind() === 'ipv4' && isip(range)) { - range = parseNetmask(range); + range = parseNetmask(range) } else { - range = null; + range = null } if (range <= 0 || range > max) { - throw new TypeError('invalid range on address: ' + note); + throw new TypeError('invalid range on address: ' + note) } - return [ip, range]; + return [ip, range] } /** @@ -200,13 +202,13 @@ function parseipNotation(note) { * @private */ -function parseNetmask(netmask) { - var ip = parseip(netmask); - var kind = ip.kind(); +function parseNetmask (netmask) { + var ip = parseip(netmask) + var kind = ip.kind() return kind === 'ipv4' ? ip.prefixLengthFromSubnetMask() - : null; + : null } /** @@ -217,19 +219,19 @@ function parseNetmask(netmask) { * @public */ -function proxyaddr(req, trust) { +function proxyaddr (req, trust) { if (!req) { - throw new TypeError('req argument is required'); + throw new TypeError('req argument is required') } if (!trust) { - throw new TypeError('trust argument is required'); + throw new TypeError('trust argument is required') } - var addrs = alladdrs(req, trust); - var addr = addrs[addrs.length - 1]; + var addrs = alladdrs(req, trust) + var addr = addrs[addrs.length - 1] - return addr; + return addr } /** @@ -238,8 +240,8 @@ function proxyaddr(req, trust) { * @private */ -function trustNone() { - return false; +function trustNone () { + return false } /** @@ -249,44 +251,44 @@ function trustNone() { * @private */ -function trustMulti(subnets) { - return function trust(addr) { - if (!isip(addr)) return false; +function trustMulti (subnets) { + return function trust (addr) { + if (!isip(addr)) return false - var ip = parseip(addr); - var ipconv; - var kind = ip.kind(); + var ip = parseip(addr) + var ipconv + var kind = ip.kind() for (var i = 0; i < subnets.length; i++) { - var subnet = subnets[i]; - var subnetip = subnet[0]; - var subnetkind = subnetip.kind(); - var subnetrange = subnet[1]; - var trusted = ip; + var subnet = subnets[i] + var subnetip = subnet[0] + var subnetkind = subnetip.kind() + var subnetrange = subnet[1] + var trusted = ip if (kind !== subnetkind) { if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) { // Incompatible IP addresses - continue; + continue } if (!ipconv) { // Convert IP to match subnet IP kind ipconv = subnetkind === 'ipv4' ? ip.toIPv4Address() - : ip.toIPv4MappedAddress(); + : ip.toIPv4MappedAddress() } - trusted = ipconv; + trusted = ipconv } if (trusted.match(subnetip, subnetrange)) { - return true; + return true } } - return false; - }; + return false + } } /** @@ -296,30 +298,30 @@ function trustMulti(subnets) { * @private */ -function trustSingle(subnet) { - var subnetip = subnet[0]; - var subnetkind = subnetip.kind(); - var subnetisipv4 = subnetkind === 'ipv4'; - var subnetrange = subnet[1]; +function trustSingle (subnet) { + var subnetip = subnet[0] + var subnetkind = subnetip.kind() + var subnetisipv4 = subnetkind === 'ipv4' + var subnetrange = subnet[1] - return function trust(addr) { - if (!isip(addr)) return false; + return function trust (addr) { + if (!isip(addr)) return false - var ip = parseip(addr); - var kind = ip.kind(); + var ip = parseip(addr) + var kind = ip.kind() if (kind !== subnetkind) { if (subnetisipv4 && !ip.isIPv4MappedAddress()) { // Incompatible IP addresses - return false; + return false } // Convert IP to match subnet IP kind ip = subnetisipv4 ? ip.toIPv4Address() - : ip.toIPv4MappedAddress(); + : ip.toIPv4MappedAddress() } - return ip.match(subnetip, subnetrange); - }; + return ip.match(subnetip, subnetrange) + } } diff --git a/server/node_modules/proxy-addr/package.json b/server/node_modules/proxy-addr/package.json index 83e89ef..6c78e6e 100644 --- a/server/node_modules/proxy-addr/package.json +++ b/server/node_modules/proxy-addr/package.json @@ -1,27 +1,27 @@ { - "_from": "proxy-addr@~1.1.4", - "_id": "proxy-addr@1.1.4", + "_from": "proxy-addr@~2.0.5", + "_id": "proxy-addr@2.0.7", "_inBundle": false, - "_integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", + "_integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "_location": "/proxy-addr", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "proxy-addr@~1.1.4", + "raw": "proxy-addr@~2.0.5", "name": "proxy-addr", "escapedName": "proxy-addr", - "rawSpec": "~1.1.4", + "rawSpec": "~2.0.5", "saveSpec": null, - "fetchSpec": "~1.1.4" + "fetchSpec": "~2.0.5" }, "_requiredBy": [ "/express" ], - "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", - "_shasum": "27e545f6960a44a627d9b44467e35c1b6b4ce2f3", - "_spec": "proxy-addr@~1.1.4", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "_shasum": "f19fe69ceab311eeb94b42e70e8c2070f9ba1025", + "_spec": "proxy-addr@~2.0.5", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" @@ -31,19 +31,27 @@ }, "bundleDependencies": false, "dependencies": { - "forwarded": "~0.1.0", - "ipaddr.js": "1.3.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "deprecated": false, "description": "Determine address of proxied request", "devDependencies": { "beautify-benchmark": "0.2.4", - "benchmark": "2.1.3", - "istanbul": "0.4.5", - "mocha": "~1.21.5" + "benchmark": "2.1.4", + "deep-equal": "1.0.1", + "eslint": "7.26.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.23.4", + "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "4.3.1", + "eslint-plugin-standard": "4.1.0", + "mocha": "8.4.0", + "nyc": "15.1.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.10" }, "files": [ "LICENSE", @@ -65,9 +73,10 @@ }, "scripts": { "bench": "node benchmark/index.js", + "lint": "eslint .", "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" }, - "version": "1.1.4" + "version": "2.0.7" } diff --git a/server/node_modules/qs/.eslintrc b/server/node_modules/qs/.eslintrc index e2cade5..e3bde89 100644 --- a/server/node_modules/qs/.eslintrc +++ b/server/node_modules/qs/.eslintrc @@ -4,15 +4,18 @@ "extends": "@ljharb", "rules": { - "complexity": [2, 26], + "complexity": 0, "consistent-return": 1, + "func-name-matching": 0, "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], "indent": [2, 4], - "max-params": [2, 12], - "max-statements": [2, 43], + "max-lines-per-function": [2, { "max": 150 }], + "max-params": [2, 14], + "max-statements": [2, 52], + "multiline-comment-style": 0, "no-continue": 1, "no-magic-numbers": 0, "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], - "operator-linebreak": [2, "after"], + "operator-linebreak": [2, "before"], } } diff --git a/server/node_modules/qs/.jscs.json b/server/node_modules/qs/.jscs.json deleted file mode 100644 index 3d099c4..0000000 --- a/server/node_modules/qs/.jscs.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "es3": true, - - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": { - "allExcept": [], - "keywords": ["if", "else", "for", "while", "do", "try", "catch"] - }, - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "disallowSpaceBeforeComma": true, - "disallowSpaceAfterComma": false, - "disallowSpaceBeforeSemicolon": true, - - "disallowNodeTypes": [ - "DebuggerStatement", - "ForInStatement", - "LabeledStatement", - "SwitchCase", - "SwitchStatement", - "WithStatement" - ], - - "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": { "allExcept": ["keywords"] }, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 1 - }, - - "requirePaddingNewLinesAfterUseStrict": true, - - "disallowArrowFunctions": true, - - "disallowMultiLineTernary": true, - - "validateOrderInObjectKeys": "asc-insensitive", - - "disallowIdenticalDestructuringNames": true, - - "disallowNestedTernaries": { "maxLevel": 1 }, - - "requireSpaceAfterComma": { "allExcept": ["trailing"] }, - "requireAlignedMultilineParams": false, - - "requireSpacesInGenerator": { - "afterStar": true - }, - - "disallowSpacesInGenerator": { - "beforeStar": true - }, - - "disallowVar": false, - - "requireArrayDestructuring": false, - - "requireEnhancedObjectLiterals": false, - - "requireObjectDestructuring": false, - - "requireEarlyReturn": false, - - "requireCapitalizedConstructorsNew": { - "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] - }, - - "requireImportAlphabetized": false, - - "requireSpaceBeforeObjectValues": true, - "requireSpaceBeforeDestructuredValues": true, - - "disallowSpacesInsideTemplateStringPlaceholders": true, - - "disallowArrayDestructuringReturn": false, - - "requireNewlineBeforeSingleStatementsInIf": false, - - "disallowUnusedVariables": true, - - "requireSpacesInsideImportedObjectBraces": true, - - "requireUseStrict": true -} - diff --git a/server/node_modules/qs/CHANGELOG.md b/server/node_modules/qs/CHANGELOG.md index 85e69b0..50505c4 100644 --- a/server/node_modules/qs/CHANGELOG.md +++ b/server/node_modules/qs/CHANGELOG.md @@ -1,3 +1,59 @@ +## **6.7.0** +- [New] `stringify`/`parse`: add `comma` as an `arrayFormat` option (#276, #219) +- [Fix] correctly parse nested arrays (#212) +- [Fix] `utils.merge`: avoid a crash with a null target and a truthy non-array source, also with an array source +- [Robustness] `stringify`: cache `Object.prototype.hasOwnProperty` +- [Refactor] `utils`: `isBuffer`: small tweak; add tests +- [Refactor] use cached `Array.isArray` +- [Refactor] `parse`/`stringify`: make a function to normalize the options +- [Refactor] `utils`: reduce observable [[Get]]s +- [Refactor] `stringify`/`utils`: cache `Array.isArray` +- [Tests] always use `String(x)` over `x.toString()` +- [Tests] fix Buffer tests to work in node < 4.5 and node < 5.10 +- [Tests] temporarily allow coverage to fail + +## **6.6.0** +- [New] Add support for iso-8859-1, utf8 "sentinel" and numeric entities (#268) +- [New] move two-value combine to a `utils` function (#189) +- [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279) +- [Fix] when `parseArrays` is false, properly handle keys ending in `[]` (#260) +- [Fix] `stringify`: do not crash in an obscure combo of `interpretNumericEntities`, a bad custom `decoder`, & `iso-8859-1` +- [Fix] `utils`: `merge`: fix crash when `source` is a truthy primitive & no options are provided +- [refactor] `stringify`: Avoid arr = arr.concat(...), push to the existing instance (#269) +- [Refactor] `parse`: only need to reassign the var once +- [Refactor] `parse`/`stringify`: clean up `charset` options checking; fix defaults +- [Refactor] add missing defaults +- [Refactor] `parse`: one less `concat` call +- [Refactor] `utils`: `compactQueue`: make it explicitly side-effecting +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`, `iconv-lite`, `safe-publish-latest`, `tape` +- [Tests] up to `node` `v10.10`, `v9.11`, `v8.12`, `v6.14`, `v4.9`; pin included builds to LTS + +## **6.5.2** +- [Fix] use `safer-buffer` instead of `Buffer` constructor +- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230) +- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify` + +## **6.5.1** +- [Fix] Fix parsing & compacting very deep objects (#224) +- [Refactor] name utils functions +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` +- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node +- [Tests] Use precise dist for Node.js 0.6 runtime (#225) +- [Tests] make 0.6 required, now that it’s passing +- [Tests] on `node` `v8.2`; fix npm on node 0.6 + +## **6.5.0** +- [New] add `utils.assign` +- [New] pass default encoder/decoder to custom encoder/decoder functions (#206) +- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213) +- [Fix] Handle stringifying empty objects with addQueryPrefix (#217) +- [Fix] do not mutate `options` argument (#207) +- [Refactor] `parse`: cache index to reuse in else statement (#182) +- [Docs] add various badges to readme (#208) +- [Dev Deps] update `eslint`, `browserify`, `iconv-lite`, `tape` +- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`; npm v4.6 breaks on node < v1; npm v5+ breaks on node < v4 +- [Tests] add `editorconfig-tools` + ## **6.4.0** - [New] `qs.stringify`: add `encodeValuesOnly` option - [Fix] follow `allowPrototypes` option during merge (#201, #201) @@ -7,6 +63,13 @@ - [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds - [eslint] reduce warnings +## **6.3.2** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Dev Deps] update `eslint` +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + ## **6.3.1** - [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!) - [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape` @@ -33,6 +96,12 @@ - [Tests] skip Object.create tests when null objects are not available - [Tests] Turn on eslint for test files (#175) +## **6.2.3** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + ## **6.2.2** - [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties @@ -48,6 +117,12 @@ - [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) - [Fix] fix compacting of nested sparse arrays (#150) +## **6.1.2 +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + ## **6.1.1** - [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties @@ -56,6 +131,12 @@ - [Fix] "sort" option should work at a depth of 3 or more (#151) - [Fix] Restore `dist` directory; will be removed in v7 (#148) +## **6.0.4** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + ## **6.0.3** - [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties - [Fix] Restore `dist` directory; will be removed in v7 (#148) diff --git a/server/node_modules/qs/README.md b/server/node_modules/qs/README.md index 32fc312..8590cfd 100644 --- a/server/node_modules/qs/README.md +++ b/server/node_modules/qs/README.md @@ -1,8 +1,14 @@ -# qs +# qs [![Version Badge][2]][1] -A querystring parsing and stringifying library with some added security. +[![Build Status][3]][4] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] -[![Build Status](https://api.travis-ci.org/ljharb/qs.svg)](http://travis-ci.org/ljharb/qs) +A querystring parsing and stringifying library with some added security. Lead Maintainer: [Jordan Harband](https://github.com/ljharb) @@ -33,9 +39,9 @@ For example, the string `'foo[bar]=baz'` converts to: ```javascript assert.deepEqual(qs.parse('foo[bar]=baz'), { - foo: { - bar: 'baz' - } + foo: { + bar: 'baz' + } }); ``` @@ -57,7 +63,7 @@ URI encoded strings work too: ```javascript assert.deepEqual(qs.parse('a%5Bb%5D=c'), { - a: { b: 'c' } + a: { b: 'c' } }); ``` @@ -65,11 +71,11 @@ You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: ```javascript assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { - foo: { - bar: { - baz: 'foobarbaz' + foo: { + bar: { + baz: 'foobarbaz' + } } - } }); ``` @@ -78,19 +84,19 @@ By default, when nesting objects **qs** will only parse up to 5 children deep. T ```javascript var expected = { - a: { - b: { - c: { - d: { - e: { - f: { - '[g][h][i]': 'j' + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } } - } } - } } - } }; var string = 'a[b][c][d][e][f][g][h][i]=j'; assert.deepEqual(qs.parse(string), expected); @@ -112,6 +118,13 @@ var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); assert.deepEqual(limited, { a: 'b' }); ``` +To bypass the leading question mark, use `ignoreQueryPrefix`: + +```javascript +var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true }); +assert.deepEqual(prefixed, { a: 'b', c: 'd' }); +``` + An optional delimiter can also be passed: ```javascript @@ -133,6 +146,62 @@ var withDots = qs.parse('a.b=c', { allowDots: true }); assert.deepEqual(withDots, { a: { b: 'c' } }); ``` +If you have to deal with legacy browsers or services, there's +also support for decoding percent-encoded octets as iso-8859-1: + +```javascript +var oldCharset = qs.parse('a=%A7', { charset: 'iso-8859-1' }); +assert.deepEqual(oldCharset, { a: '§' }); +``` + +Some services add an initial `utf8=✓` value to forms so that old +Internet Explorer versions are more likely to submit the form as +utf-8. Additionally, the server can check the value against wrong +encodings of the checkmark character and detect that a query string +or `application/x-www-form-urlencoded` body was *not* sent as +utf-8, eg. if the form had an `accept-charset` parameter or the +containing page had a different character set. + +**qs** supports this mechanism via the `charsetSentinel` option. +If specified, the `utf8` parameter will be omitted from the +returned object. It will be used to switch to `iso-8859-1`/`utf-8` +mode depending on how the checkmark is encoded. + +**Important**: When you specify both the `charset` option and the +`charsetSentinel` option, the `charset` will be overridden when +the request contains a `utf8` parameter from which the actual +charset can be deduced. In that sense the `charset` will behave +as the default charset rather than the authoritative charset. + +```javascript +var detectedAsUtf8 = qs.parse('utf8=%E2%9C%93&a=%C3%B8', { + charset: 'iso-8859-1', + charsetSentinel: true +}); +assert.deepEqual(detectedAsUtf8, { a: 'ø' }); + +// Browsers encode the checkmark as ✓ when submitting as iso-8859-1: +var detectedAsIso8859_1 = qs.parse('utf8=%26%2310003%3B&a=%F8', { + charset: 'utf-8', + charsetSentinel: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: 'ø' }); +``` + +If you want to decode the `&#...;` syntax to the actual character, +you can specify the `interpretNumericEntities` option as well: + +```javascript +var detectedAsIso8859_1 = qs.parse('a=%26%239786%3B', { + charset: 'iso-8859-1', + interpretNumericEntities: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: '☺' }); +``` + +It also works when the charset has been detected in `charsetSentinel` +mode. + ### Parsing Arrays **qs** can also parse arrays using a similar `[]` notation: @@ -169,7 +238,7 @@ assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); ``` **qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will -instead be converted to an object with the index as the key: +instead be converted to an object with the index as the key. This is needed to handle cases when someone sent, for example, `a[999999999]` and it will take significant time to iterate over this huge array. ```javascript var withMaxIndex = qs.parse('a[100]=b'); @@ -204,6 +273,13 @@ var arraysOfObjects = qs.parse('a[][b]=c'); assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); ``` +Some people use comma to join array, **qs** can parse it: +```javascript +var arraysOfObjects = qs.parse('a=b,c', { comma: true }) +assert.deepEqual(arraysOfObjects, { a: ['b', 'c'] }) +``` +(_this cannot convert nested objects, such as `a={b:1},{c:d}`_) + ### Stringifying [](#preventEval) @@ -227,10 +303,10 @@ assert.equal(unencoded, 'a[b]=c'); Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`: ```javascript -var encodedValues = qs.stringify( - { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, - { encodeValuesOnly: true } -) +var encodedValues = qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } +); assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'); ``` @@ -238,8 +314,8 @@ This encoding can also be replaced by a custom encoding method set as `encoder` ```javascript var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { - // Passed in values `a`, `b`, `c` - return // Return encoded string + // Passed in values `a`, `b`, `c` + return // Return encoded string }}) ``` @@ -249,8 +325,8 @@ Analogue to the `encoder` there is a `decoder` option for `parse` to override de ```javascript var decoded = qs.parse('x=z', { decoder: function (str) { - // Passed in values `x`, `z` - return // Return decoded string + // Passed in values `x`, `z` + return // Return decoded string }}) ``` @@ -279,6 +355,8 @@ qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) // 'a[]=b&a[]=c' qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) // 'a=b&a=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' }) +// 'a=b,c' ``` When objects are stringified, by default they use bracket notation: @@ -317,6 +395,12 @@ Properties that are set to `undefined` will be omitted entirely: assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); ``` +The query string may optionally be prepended with a question mark: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d'); +``` + The delimiter may be overridden with stringify as well: ```javascript @@ -338,7 +422,7 @@ You may use the `sort` option to affect the order of parameter keys: ```javascript function alphabeticalSort(a, b) { - return a.localeCompare(b); + return a.localeCompare(b); } assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y'); ``` @@ -349,17 +433,17 @@ pass an array, it will be used to select properties and array indices for string ```javascript function filterFunc(prefix, value) { - if (prefix == 'b') { - // Return an `undefined` value to omit a property. - return; - } - if (prefix == 'e[f]') { - return value.getTime(); - } - if (prefix == 'e[g][0]') { - return value * 2; - } - return value; + if (prefix == 'b') { + // Return an `undefined` value to omit a property. + return; + } + if (prefix == 'e[f]') { + return value.getTime(); + } + if (prefix == 'e[g][0]') { + return value * 2; + } + return value; } qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); // 'a=b&c=d&e[f]=123&e[g][0]=4' @@ -407,10 +491,40 @@ var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); assert.equal(nullsSkipped, 'a=b'); ``` +If you're communicating with legacy systems, you can switch to `iso-8859-1` +using the `charset` option: + +```javascript +var iso = qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }); +assert.equal(iso, '%E6=%E6'); +``` + +Characters that don't exist in `iso-8859-1` will be converted to numeric +entities, similar to what browsers do: + +```javascript +var numeric = qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }); +assert.equal(numeric, 'a=%26%239786%3B'); +``` + +You can use the `charsetSentinel` option to announce the character by +including an `utf8=✓` parameter with the proper encoding if the checkmark, +similar to what Ruby on Rails and others do when submitting forms. + +```javascript +var sentinel = qs.stringify({ a: '☺' }, { charsetSentinel: true }); +assert.equal(sentinel, 'utf8=%E2%9C%93&a=%E2%98%BA'); + +var isoSentinel = qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }); +assert.equal(isoSentinel, 'utf8=%26%2310003%3B&a=%E6'); +``` + ### Dealing with special character sets -By default the encoding and decoding of characters is done in `utf-8`. If you -wish to encode querystrings to a different character set (i.e. +By default the encoding and decoding of characters is done in `utf-8`, +and `iso-8859-1` support is also built in via the `charset` parameter. + +If you wish to encode querystrings to a different character set (i.e. [Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the [`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: @@ -438,3 +552,19 @@ assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c'); assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c'); ``` + +[1]: https://npmjs.org/package/qs +[2]: http://versionbadg.es/ljharb/qs.svg +[3]: https://api.travis-ci.org/ljharb/qs.svg +[4]: https://travis-ci.org/ljharb/qs +[5]: https://david-dm.org/ljharb/qs.svg +[6]: https://david-dm.org/ljharb/qs +[7]: https://david-dm.org/ljharb/qs/dev-status.svg +[8]: https://david-dm.org/ljharb/qs?type=dev +[9]: https://ci.testling.com/ljharb/qs.png +[10]: https://ci.testling.com/ljharb/qs +[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true +[license-image]: http://img.shields.io/npm/l/qs.svg +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/qs.svg +[downloads-url]: http://npm-stat.com/charts.html?package=qs diff --git a/server/node_modules/qs/dist/qs.js b/server/node_modules/qs/dist/qs.js index 2d0d63f..17f4e60 100644 --- a/server/node_modules/qs/dist/qs.js +++ b/server/node_modules/qs/dist/qs.js @@ -1,4 +1,4 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1) { + val = val.split(','); + } + if (has.call(obj, key)) { - obj[key] = [].concat(obj[key]).concat(val); + obj[key] = utils.combine(obj[key], val); } else { obj[key] = val; } @@ -76,36 +131,39 @@ var parseValues = function parseQueryStringValues(str, options) { return obj; }; -var parseObject = function parseObjectRecursive(chain, val, options) { - if (!chain.length) { - return val; - } +var parseObject = function (chain, val, options) { + var leaf = val; - var root = chain.shift(); + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; - var obj; - if (root === '[]') { - obj = []; - obj = obj.concat(parseObject(chain, val, options)); - } else { - obj = options.plainObjects ? Object.create(null) : {}; - var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; - var index = parseInt(cleanRoot, 10); - if ( - !isNaN(index) && - root !== cleanRoot && - String(index) === cleanRoot && - index >= 0 && - (options.parseArrays && index <= options.arrayLimit) - ) { - obj = []; - obj[index] = parseObject(chain, val, options); + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); } else { - obj[cleanRoot] = parseObject(chain, val, options); + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } } + + leaf = obj; } - return obj; + return leaf; }; var parseKeys = function parseQueryStringKeys(givenKey, val, options) { @@ -130,8 +188,7 @@ var parseKeys = function parseQueryStringKeys(givenKey, val, options) { var keys = []; if (parent) { - // If we aren't using plain objects, optionally prefix keys - // that would overwrite object prototype properties + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties if (!options.plainObjects && has.call(Object.prototype, parent)) { if (!options.allowPrototypes) { return; @@ -163,23 +220,41 @@ var parseKeys = function parseQueryStringKeys(givenKey, val, options) { return parseObject(keys, val, options); }; -module.exports = function (str, opts) { - var options = opts || {}; +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } - if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { throw new TypeError('Decoder has to be a function.'); } - options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; - options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; - options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; - options.parseArrays = options.parseArrays !== false; - options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; - options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; - options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; - options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; - options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; - options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new Error('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + depth: typeof opts.depth === 'number' ? opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); if (str === '' || str === null || typeof str === 'undefined') { return options.plainObjects ? Object.create(null) : {}; @@ -205,11 +280,13 @@ module.exports = function (str, opts) { var utils = require('./utils'); var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; var arrayPrefixGenerators = { brackets: function brackets(prefix) { // eslint-disable-line func-name-matching return prefix + '[]'; }, + comma: 'comma', indices: function indices(prefix, key) { // eslint-disable-line func-name-matching return prefix + '[' + key + ']'; }, @@ -218,13 +295,26 @@ var arrayPrefixGenerators = { } }; +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + var toISO = Date.prototype.toISOString; var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, delimiter: '&', encode: true, encoder: utils.encode, encodeValuesOnly: false, + formatter: formats.formatters[formats['default']], + // deprecated + indices: false, serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching return toISO.call(date); }, @@ -244,16 +334,21 @@ var stringify = function stringify( // eslint-disable-line func-name-matching allowDots, serializeDate, formatter, - encodeValuesOnly + encodeValuesOnly, + charset ) { var obj = object; if (typeof filter === 'function') { obj = filter(prefix, obj); } else if (obj instanceof Date) { obj = serializeDate(obj); - } else if (obj === null) { + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = obj.join(','); + } + + if (obj === null) { if (strictNullHandling) { - return encoder && !encodeValuesOnly ? encoder(prefix) : prefix; + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset) : prefix; } obj = ''; @@ -261,8 +356,8 @@ var stringify = function stringify( // eslint-disable-line func-name-matching if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { if (encoder) { - var keyValue = encodeValuesOnly ? prefix : encoder(prefix); - return [formatter(keyValue) + '=' + formatter(encoder(obj))]; + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset))]; } return [formatter(prefix) + '=' + formatter(String(obj))]; } @@ -274,7 +369,7 @@ var stringify = function stringify( // eslint-disable-line func-name-matching } var objKeys; - if (Array.isArray(filter)) { + if (isArray(filter)) { objKeys = filter; } else { var keys = Object.keys(obj); @@ -288,10 +383,10 @@ var stringify = function stringify( // eslint-disable-line func-name-matching continue; } - if (Array.isArray(obj)) { - values = values.concat(stringify( + if (isArray(obj)) { + pushToArray(values, stringify( obj[key], - generateArrayPrefix(prefix, key), + typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix, generateArrayPrefix, strictNullHandling, skipNulls, @@ -301,10 +396,11 @@ var stringify = function stringify( // eslint-disable-line func-name-matching allowDots, serializeDate, formatter, - encodeValuesOnly + encodeValuesOnly, + charset )); } else { - values = values.concat(stringify( + pushToArray(values, stringify( obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, @@ -316,7 +412,8 @@ var stringify = function stringify( // eslint-disable-line func-name-matching allowDots, serializeDate, formatter, - encodeValuesOnly + encodeValuesOnly, + charset )); } } @@ -324,36 +421,63 @@ var stringify = function stringify( // eslint-disable-line func-name-matching return values; }; -module.exports = function (object, opts) { - var obj = object; - var options = opts || {}; +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } - if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { throw new TypeError('Encoder has to be a function.'); } - var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; - var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; - var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; - var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; - var sort = typeof options.sort === 'function' ? options.sort : null; - var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; - var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; - var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; - if (typeof options.format === 'undefined') { - options.format = formats.default; - } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { - throw new TypeError('Unknown format option provided.'); - } - var formatter = formats.formatters[options.format]; + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + var objKeys; var filter; if (typeof options.filter === 'function') { filter = options.filter; obj = filter('', obj); - } else if (Array.isArray(options.filter)) { + } else if (isArray(options.filter)) { filter = options.filter; objKeys = filter; } @@ -365,10 +489,10 @@ module.exports = function (object, opts) { } var arrayFormat; - if (options.arrayFormat in arrayPrefixGenerators) { - arrayFormat = options.arrayFormat; - } else if ('indices' in options) { - arrayFormat = options.indices ? 'indices' : 'repeat'; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; } else { arrayFormat = 'indices'; } @@ -379,40 +503,54 @@ module.exports = function (object, opts) { objKeys = Object.keys(obj); } - if (sort) { - objKeys.sort(sort); + if (options.sort) { + objKeys.sort(options.sort); } for (var i = 0; i < objKeys.length; ++i) { var key = objKeys[i]; - if (skipNulls && obj[key] === null) { + if (options.skipNulls && obj[key] === null) { continue; } - - keys = keys.concat(stringify( + pushToArray(keys, stringify( obj[key], key, generateArrayPrefix, - strictNullHandling, - skipNulls, - encode ? encoder : null, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset )); } - return keys.join(delimiter); + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; }; },{"./formats":1,"./utils":5}],5:[function(require,module,exports){ 'use strict'; var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; var hexTable = (function () { var array = []; @@ -423,7 +561,26 @@ var hexTable = (function () { return array; }()); -exports.arrayToObject = function (source, options) { +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { var obj = options && options.plainObjects ? Object.create(null) : {}; for (var i = 0; i < source.length; ++i) { if (typeof source[i] !== 'undefined') { @@ -434,16 +591,16 @@ exports.arrayToObject = function (source, options) { return obj; }; -exports.merge = function (target, source, options) { +var merge = function merge(target, source, options) { if (!source) { return target; } if (typeof source !== 'object') { - if (Array.isArray(target)) { + if (isArray(target)) { target.push(source); - } else if (typeof target === 'object') { - if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) { + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { target[source] = true; } } else { @@ -453,20 +610,21 @@ exports.merge = function (target, source, options) { return target; } - if (typeof target !== 'object') { + if (!target || typeof target !== 'object') { return [target].concat(source); } var mergeTarget = target; - if (Array.isArray(target) && !Array.isArray(source)) { - mergeTarget = exports.arrayToObject(target, options); + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); } - if (Array.isArray(target) && Array.isArray(source)) { + if (isArray(target) && isArray(source)) { source.forEach(function (item, i) { if (has.call(target, i)) { - if (target[i] && typeof target[i] === 'object') { - target[i] = exports.merge(target[i], item, options); + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); } else { target.push(item); } @@ -480,8 +638,8 @@ exports.merge = function (target, source, options) { return Object.keys(source).reduce(function (acc, key) { var value = source[key]; - if (Object.prototype.hasOwnProperty.call(acc, key)) { - acc[key] = exports.merge(acc[key], value, options); + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); } else { acc[key] = value; } @@ -489,15 +647,28 @@ exports.merge = function (target, source, options) { }, mergeTarget); }; -exports.decode = function (str) { +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 try { - return decodeURIComponent(str.replace(/\+/g, ' ')); + return decodeURIComponent(strWithoutPlus); } catch (e) { - return str; + return strWithoutPlus; } }; -exports.encode = function (str) { +var encode = function encode(str, defaultEncoder, charset) { // This code was originally written by Brian White (mscdex) for the io.js core querystring library. // It has been adapted here for stricter adherence to RFC 3986 if (str.length === 0) { @@ -506,18 +677,24 @@ exports.encode = function (str) { var string = typeof str === 'string' ? str : String(str); + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + var out = ''; for (var i = 0; i < string.length; ++i) { var c = string.charCodeAt(i); if ( - c === 0x2D || // - - c === 0x2E || // . - c === 0x5F || // _ - c === 0x7E || // ~ - (c >= 0x30 && c <= 0x39) || // 0-9 - (c >= 0x41 && c <= 0x5A) || // a-z - (c >= 0x61 && c <= 0x7A) // A-Z + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z ) { out += string.charAt(i); continue; @@ -540,58 +717,66 @@ exports.encode = function (str) { i += 1; c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); - out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]; // eslint-disable-line max-len + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; } return out; }; -exports.compact = function (obj, references) { - if (typeof obj !== 'object' || obj === null) { - return obj; - } - - var refs = references || []; - var lookup = refs.indexOf(obj); - if (lookup !== -1) { - return refs[lookup]; - } +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; - refs.push(obj); + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; - if (Array.isArray(obj)) { - var compacted = []; - - for (var i = 0; i < obj.length; ++i) { - if (obj[i] && typeof obj[i] === 'object') { - compacted.push(exports.compact(obj[i], refs)); - } else if (typeof obj[i] !== 'undefined') { - compacted.push(obj[i]); + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); } } - - return compacted; } - var keys = Object.keys(obj); - keys.forEach(function (key) { - obj[key] = exports.compact(obj[key], refs); - }); + compactQueue(queue); - return obj; + return value; }; -exports.isRegExp = function (obj) { +var isRegExp = function isRegExp(obj) { return Object.prototype.toString.call(obj) === '[object RegExp]'; }; -exports.isBuffer = function (obj) { - if (obj === null || typeof obj === 'undefined') { +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { return false; } return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); }; +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; + },{}]},{},[2])(2) -}); \ No newline at end of file +}); diff --git a/server/node_modules/qs/lib/parse.js b/server/node_modules/qs/lib/parse.js index 1307e9d..d81628b 100644 --- a/server/node_modules/qs/lib/parse.js +++ b/server/node_modules/qs/lib/parse.js @@ -8,32 +8,87 @@ var defaults = { allowDots: false, allowPrototypes: false, arrayLimit: 20, + charset: 'utf-8', + charsetSentinel: false, + comma: false, decoder: utils.decode, delimiter: '&', depth: 5, + ignoreQueryPrefix: false, + interpretNumericEntities: false, parameterLimit: 1000, + parseArrays: true, plainObjects: false, strictNullHandling: false }; +var interpretNumericEntities = function (str) { + return str.replace(/&#(\d+);/g, function ($0, numberStr) { + return String.fromCharCode(parseInt(numberStr, 10)); + }); +}; + +// This is what browsers will submit when the ✓ character occurs in an +// application/x-www-form-urlencoded body and the encoding of the page containing +// the form is iso-8859-1, or when the submitted form has an accept-charset +// attribute of iso-8859-1. Presumably also with other charsets that do not contain +// the ✓ character, such as us-ascii. +var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') + +// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. +var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') + var parseValues = function parseQueryStringValues(str, options) { var obj = {}; - var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; // Keep track of where the utf8 sentinel was found + var i; + + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + skipIndex = i; + i = parts.length; // The eslint settings do not allow break; + } + } + } - for (var i = 0; i < parts.length; ++i) { + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } var part = parts[i]; - var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; var key, val; if (pos === -1) { - key = options.decoder(part); + key = options.decoder(part, defaults.decoder, charset); val = options.strictNullHandling ? null : ''; } else { - key = options.decoder(part.slice(0, pos)); - val = options.decoder(part.slice(pos + 1)); + key = options.decoder(part.slice(0, pos), defaults.decoder, charset); + val = options.decoder(part.slice(pos + 1), defaults.decoder, charset); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (val && options.comma && val.indexOf(',') > -1) { + val = val.split(','); } + if (has.call(obj, key)) { - obj[key] = [].concat(obj[key]).concat(val); + obj[key] = utils.combine(obj[key], val); } else { obj[key] = val; } @@ -42,36 +97,39 @@ var parseValues = function parseQueryStringValues(str, options) { return obj; }; -var parseObject = function parseObjectRecursive(chain, val, options) { - if (!chain.length) { - return val; - } +var parseObject = function (chain, val, options) { + var leaf = val; + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; - var root = chain.shift(); - - var obj; - if (root === '[]') { - obj = []; - obj = obj.concat(parseObject(chain, val, options)); - } else { - obj = options.plainObjects ? Object.create(null) : {}; - var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; - var index = parseInt(cleanRoot, 10); - if ( - !isNaN(index) && - root !== cleanRoot && - String(index) === cleanRoot && - index >= 0 && - (options.parseArrays && index <= options.arrayLimit) - ) { - obj = []; - obj[index] = parseObject(chain, val, options); + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); } else { - obj[cleanRoot] = parseObject(chain, val, options); + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } } + + leaf = obj; } - return obj; + return leaf; }; var parseKeys = function parseQueryStringKeys(givenKey, val, options) { @@ -96,8 +154,7 @@ var parseKeys = function parseQueryStringKeys(givenKey, val, options) { var keys = []; if (parent) { - // If we aren't using plain objects, optionally prefix keys - // that would overwrite object prototype properties + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties if (!options.plainObjects && has.call(Object.prototype, parent)) { if (!options.allowPrototypes) { return; @@ -129,23 +186,41 @@ var parseKeys = function parseQueryStringKeys(givenKey, val, options) { return parseObject(keys, val, options); }; -module.exports = function (str, opts) { - var options = opts || {}; +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } - if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { throw new TypeError('Decoder has to be a function.'); } - options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; - options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; - options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; - options.parseArrays = options.parseArrays !== false; - options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; - options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; - options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; - options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; - options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; - options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new Error('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + depth: typeof opts.depth === 'number' ? opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); if (str === '' || str === null || typeof str === 'undefined') { return options.plainObjects ? Object.create(null) : {}; diff --git a/server/node_modules/qs/lib/stringify.js b/server/node_modules/qs/lib/stringify.js index 7694988..7455049 100644 --- a/server/node_modules/qs/lib/stringify.js +++ b/server/node_modules/qs/lib/stringify.js @@ -2,11 +2,13 @@ var utils = require('./utils'); var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; var arrayPrefixGenerators = { brackets: function brackets(prefix) { // eslint-disable-line func-name-matching return prefix + '[]'; }, + comma: 'comma', indices: function indices(prefix, key) { // eslint-disable-line func-name-matching return prefix + '[' + key + ']'; }, @@ -15,13 +17,26 @@ var arrayPrefixGenerators = { } }; +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + var toISO = Date.prototype.toISOString; var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, delimiter: '&', encode: true, encoder: utils.encode, encodeValuesOnly: false, + formatter: formats.formatters[formats['default']], + // deprecated + indices: false, serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching return toISO.call(date); }, @@ -41,16 +56,21 @@ var stringify = function stringify( // eslint-disable-line func-name-matching allowDots, serializeDate, formatter, - encodeValuesOnly + encodeValuesOnly, + charset ) { var obj = object; if (typeof filter === 'function') { obj = filter(prefix, obj); } else if (obj instanceof Date) { obj = serializeDate(obj); - } else if (obj === null) { + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = obj.join(','); + } + + if (obj === null) { if (strictNullHandling) { - return encoder && !encodeValuesOnly ? encoder(prefix) : prefix; + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset) : prefix; } obj = ''; @@ -58,8 +78,8 @@ var stringify = function stringify( // eslint-disable-line func-name-matching if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { if (encoder) { - var keyValue = encodeValuesOnly ? prefix : encoder(prefix); - return [formatter(keyValue) + '=' + formatter(encoder(obj))]; + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset))]; } return [formatter(prefix) + '=' + formatter(String(obj))]; } @@ -71,7 +91,7 @@ var stringify = function stringify( // eslint-disable-line func-name-matching } var objKeys; - if (Array.isArray(filter)) { + if (isArray(filter)) { objKeys = filter; } else { var keys = Object.keys(obj); @@ -85,10 +105,10 @@ var stringify = function stringify( // eslint-disable-line func-name-matching continue; } - if (Array.isArray(obj)) { - values = values.concat(stringify( + if (isArray(obj)) { + pushToArray(values, stringify( obj[key], - generateArrayPrefix(prefix, key), + typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix, generateArrayPrefix, strictNullHandling, skipNulls, @@ -98,10 +118,11 @@ var stringify = function stringify( // eslint-disable-line func-name-matching allowDots, serializeDate, formatter, - encodeValuesOnly + encodeValuesOnly, + charset )); } else { - values = values.concat(stringify( + pushToArray(values, stringify( obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, @@ -113,7 +134,8 @@ var stringify = function stringify( // eslint-disable-line func-name-matching allowDots, serializeDate, formatter, - encodeValuesOnly + encodeValuesOnly, + charset )); } } @@ -121,36 +143,63 @@ var stringify = function stringify( // eslint-disable-line func-name-matching return values; }; -module.exports = function (object, opts) { - var obj = object; - var options = opts || {}; +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } - if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { throw new TypeError('Encoder has to be a function.'); } - var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; - var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; - var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; - var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; - var sort = typeof options.sort === 'function' ? options.sort : null; - var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; - var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; - var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; - if (typeof options.format === 'undefined') { - options.format = formats.default; - } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { - throw new TypeError('Unknown format option provided.'); - } - var formatter = formats.formatters[options.format]; + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + var objKeys; var filter; if (typeof options.filter === 'function') { filter = options.filter; obj = filter('', obj); - } else if (Array.isArray(options.filter)) { + } else if (isArray(options.filter)) { filter = options.filter; objKeys = filter; } @@ -162,10 +211,10 @@ module.exports = function (object, opts) { } var arrayFormat; - if (options.arrayFormat in arrayPrefixGenerators) { - arrayFormat = options.arrayFormat; - } else if ('indices' in options) { - arrayFormat = options.indices ? 'indices' : 'repeat'; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; } else { arrayFormat = 'indices'; } @@ -176,32 +225,45 @@ module.exports = function (object, opts) { objKeys = Object.keys(obj); } - if (sort) { - objKeys.sort(sort); + if (options.sort) { + objKeys.sort(options.sort); } for (var i = 0; i < objKeys.length; ++i) { var key = objKeys[i]; - if (skipNulls && obj[key] === null) { + if (options.skipNulls && obj[key] === null) { continue; } - - keys = keys.concat(stringify( + pushToArray(keys, stringify( obj[key], key, generateArrayPrefix, - strictNullHandling, - skipNulls, - encode ? encoder : null, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset )); } - return keys.join(delimiter); + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; }; diff --git a/server/node_modules/qs/lib/utils.js b/server/node_modules/qs/lib/utils.js index b214332..1b219cd 100644 --- a/server/node_modules/qs/lib/utils.js +++ b/server/node_modules/qs/lib/utils.js @@ -1,6 +1,7 @@ 'use strict'; var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; var hexTable = (function () { var array = []; @@ -11,7 +12,26 @@ var hexTable = (function () { return array; }()); -exports.arrayToObject = function (source, options) { +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { var obj = options && options.plainObjects ? Object.create(null) : {}; for (var i = 0; i < source.length; ++i) { if (typeof source[i] !== 'undefined') { @@ -22,16 +42,16 @@ exports.arrayToObject = function (source, options) { return obj; }; -exports.merge = function (target, source, options) { +var merge = function merge(target, source, options) { if (!source) { return target; } if (typeof source !== 'object') { - if (Array.isArray(target)) { + if (isArray(target)) { target.push(source); - } else if (typeof target === 'object') { - if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) { + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { target[source] = true; } } else { @@ -41,20 +61,21 @@ exports.merge = function (target, source, options) { return target; } - if (typeof target !== 'object') { + if (!target || typeof target !== 'object') { return [target].concat(source); } var mergeTarget = target; - if (Array.isArray(target) && !Array.isArray(source)) { - mergeTarget = exports.arrayToObject(target, options); + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); } - if (Array.isArray(target) && Array.isArray(source)) { + if (isArray(target) && isArray(source)) { source.forEach(function (item, i) { if (has.call(target, i)) { - if (target[i] && typeof target[i] === 'object') { - target[i] = exports.merge(target[i], item, options); + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); } else { target.push(item); } @@ -68,8 +89,8 @@ exports.merge = function (target, source, options) { return Object.keys(source).reduce(function (acc, key) { var value = source[key]; - if (Object.prototype.hasOwnProperty.call(acc, key)) { - acc[key] = exports.merge(acc[key], value, options); + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); } else { acc[key] = value; } @@ -77,15 +98,28 @@ exports.merge = function (target, source, options) { }, mergeTarget); }; -exports.decode = function (str) { +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 try { - return decodeURIComponent(str.replace(/\+/g, ' ')); + return decodeURIComponent(strWithoutPlus); } catch (e) { - return str; + return strWithoutPlus; } }; -exports.encode = function (str) { +var encode = function encode(str, defaultEncoder, charset) { // This code was originally written by Brian White (mscdex) for the io.js core querystring library. // It has been adapted here for stricter adherence to RFC 3986 if (str.length === 0) { @@ -94,18 +128,24 @@ exports.encode = function (str) { var string = typeof str === 'string' ? str : String(str); + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + var out = ''; for (var i = 0; i < string.length; ++i) { var c = string.charCodeAt(i); if ( - c === 0x2D || // - - c === 0x2E || // . - c === 0x5F || // _ - c === 0x7E || // ~ - (c >= 0x30 && c <= 0x39) || // 0-9 - (c >= 0x41 && c <= 0x5A) || // a-z - (c >= 0x61 && c <= 0x7A) // A-Z + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z ) { out += string.charAt(i); continue; @@ -128,55 +168,63 @@ exports.encode = function (str) { i += 1; c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); - out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]; // eslint-disable-line max-len + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; } return out; }; -exports.compact = function (obj, references) { - if (typeof obj !== 'object' || obj === null) { - return obj; - } - - var refs = references || []; - var lookup = refs.indexOf(obj); - if (lookup !== -1) { - return refs[lookup]; - } - - refs.push(obj); - - if (Array.isArray(obj)) { - var compacted = []; - - for (var i = 0; i < obj.length; ++i) { - if (obj[i] && typeof obj[i] === 'object') { - compacted.push(exports.compact(obj[i], refs)); - } else if (typeof obj[i] !== 'undefined') { - compacted.push(obj[i]); +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); } } - - return compacted; } - var keys = Object.keys(obj); - keys.forEach(function (key) { - obj[key] = exports.compact(obj[key], refs); - }); + compactQueue(queue); - return obj; + return value; }; -exports.isRegExp = function (obj) { +var isRegExp = function isRegExp(obj) { return Object.prototype.toString.call(obj) === '[object RegExp]'; }; -exports.isBuffer = function (obj) { - if (obj === null || typeof obj === 'undefined') { +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { return false; } return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); }; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; diff --git a/server/node_modules/qs/package.json b/server/node_modules/qs/package.json index 8795380..a97c95a 100644 --- a/server/node_modules/qs/package.json +++ b/server/node_modules/qs/package.json @@ -1,27 +1,29 @@ { - "_from": "qs@6.4.0", - "_id": "qs@6.4.0", + "_from": "qs@6.7.0", + "_id": "qs@6.7.0", "_inBundle": false, - "_integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "_integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "_location": "/qs", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "qs@6.4.0", + "raw": "qs@6.7.0", "name": "qs", "escapedName": "qs", - "rawSpec": "6.4.0", + "rawSpec": "6.7.0", "saveSpec": null, - "fetchSpec": "6.4.0" + "fetchSpec": "6.7.0" }, "_requiredBy": [ - "/express" + "/body-parser", + "/express", + "/stripe" ], - "_resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "_shasum": "13e26d28ad6b0ffaa91312cd3bf708ed351e7233", - "_spec": "qs@6.4.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "_shasum": "41dc1a015e3d581f1621776be31afb2876a9b1bc", + "_spec": "qs@6.7.0", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/body-parser", "bugs": { "url": "https://github.com/ljharb/qs/issues" }, @@ -37,17 +39,20 @@ "deprecated": false, "description": "A querystring parser that supports nesting and arrays, with a depth limit", "devDependencies": { - "@ljharb/eslint-config": "^11.0.0", - "browserify": "^14.1.0", - "covert": "^1.1.0", - "eslint": "^3.17.0", + "@ljharb/eslint-config": "^13.1.1", + "browserify": "^16.2.3", + "covert": "^1.1.1", + "editorconfig-tools": "^0.1.1", + "eslint": "^5.15.3", "evalmd": "^0.0.17", - "iconv-lite": "^0.4.15", + "for-each": "^0.3.3", + "iconv-lite": "^0.4.24", "mkdirp": "^0.5.1", - "parallelshell": "^2.0.0", + "object-inspect": "^1.6.0", "qs-iconv": "^1.0.4", - "safe-publish-latest": "^1.1.1", - "tape": "^4.6.3" + "safe-publish-latest": "^1.1.2", + "safer-buffer": "^2.1.2", + "tape": "^4.10.1" }, "engines": { "node": ">=0.6" @@ -55,7 +60,11 @@ "homepage": "https://github.com/ljharb/qs", "keywords": [ "querystring", - "qs" + "qs", + "query", + "url", + "parse", + "stringify" ], "license": "BSD-3-Clause", "main": "lib/index.js", @@ -68,11 +77,12 @@ "coverage": "covert test", "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js", "lint": "eslint lib/*.js test/*.js", + "postlint": "editorconfig-tools check * lib/* test/*", "prepublish": "safe-publish-latest && npm run dist", "pretest": "npm run --silent readme && npm run --silent lint", "readme": "evalmd README.md", "test": "npm run --silent coverage", "tests-only": "node test" }, - "version": "6.4.0" + "version": "6.7.0" } diff --git a/server/node_modules/qs/test/.eslintrc b/server/node_modules/qs/test/.eslintrc index c4f52d0..9ebbb92 100644 --- a/server/node_modules/qs/test/.eslintrc +++ b/server/node_modules/qs/test/.eslintrc @@ -1,11 +1,17 @@ { "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, "consistent-return": 2, + "function-paren-newline": 0, "max-lines": 0, + "max-lines-per-function": 0, "max-nested-callbacks": [2, 3], "max-statements": 0, + "no-buffer-constructor": 0, "no-extend-native": 0, "no-magic-numbers": 0, + "object-curly-newline": 0, "sort-keys": 0 } } diff --git a/server/node_modules/qs/test/parse.js b/server/node_modules/qs/test/parse.js index e451e91..8967789 100644 --- a/server/node_modules/qs/test/parse.js +++ b/server/node_modules/qs/test/parse.js @@ -2,7 +2,9 @@ var test = require('tape'); var qs = require('../'); +var utils = require('../lib/utils'); var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; test('parse()', function (t) { t.test('parses a simple string', function (st) { @@ -230,11 +232,19 @@ test('parse()', function (t) { }); t.test('parses buffers correctly', function (st) { - var b = new Buffer('test'); + var b = SaferBuffer.from('test'); st.deepEqual(qs.parse({ a: b }), { a: b }); st.end(); }); + t.test('parses jquery-param strings', function (st) { + // readable = 'filter[0][]=int1&filter[0][]==&filter[0][]=77&filter[]=and&filter[2][]=int2&filter[2][]==&filter[2][]=8' + var encoded = 'filter%5B0%5D%5B%5D=int1&filter%5B0%5D%5B%5D=%3D&filter%5B0%5D%5B%5D=77&filter%5B%5D=and&filter%5B2%5D%5B%5D=int2&filter%5B2%5D%5B%5D=%3D&filter%5B2%5D%5B%5D=8'; + var expected = { filter: [['int1', '=', '77'], 'and', ['int2', '=', '8']] }; + st.deepEqual(qs.parse(encoded), expected); + st.end(); + }); + t.test('continues parsing when no parent is found', function (st) { st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); @@ -255,7 +265,7 @@ test('parse()', function (t) { st.end(); }); - t.test('should not throw when a native prototype has an enumerable property', { parallel: false }, function (st) { + t.test('should not throw when a native prototype has an enumerable property', function (st) { Object.prototype.crash = ''; Array.prototype.crash = ''; st.doesNotThrow(qs.parse.bind(null, 'a=b')); @@ -300,7 +310,21 @@ test('parse()', function (t) { }); t.test('allows disabling array parsing', function (st) { - st.deepEqual(qs.parse('a[0]=b&a[1]=c', { parseArrays: false }), { a: { 0: 'b', 1: 'c' } }); + var indices = qs.parse('a[0]=b&a[1]=c', { parseArrays: false }); + st.deepEqual(indices, { a: { 0: 'b', 1: 'c' } }); + st.equal(Array.isArray(indices.a), false, 'parseArrays:false, indices case is not an array'); + + var emptyBrackets = qs.parse('a[]=b', { parseArrays: false }); + st.deepEqual(emptyBrackets, { a: { 0: 'b' } }); + st.equal(Array.isArray(emptyBrackets.a), false, 'parseArrays:false, empty brackets case is not an array'); + + st.end(); + }); + + t.test('allows for query string prefix', function (st) { + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' }); st.end(); }); @@ -323,6 +347,15 @@ test('parse()', function (t) { st.end(); }); + t.test('parses string with comma as array divider', function (st) { + st.deepEqual(qs.parse('foo=bar,tee', { comma: true }), { foo: ['bar', 'tee'] }); + st.deepEqual(qs.parse('foo[bar]=coffee,tee', { comma: true }), { foo: { bar: ['coffee', 'tee'] } }); + st.deepEqual(qs.parse('foo=', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true, strictNullHandling: true }), { foo: null }); + st.end(); + }); + t.test('parses an object in dot notation', function (st) { var input = { 'user.name': { 'pop[bob]': 3 }, @@ -388,6 +421,33 @@ test('parse()', function (t) { st.end(); }); + t.test('does not crash when parsing deep objects', function (st) { + var parsed; + var str = 'foo'; + + for (var i = 0; i < 5000; i++) { + str += '[p]'; + } + + str += '=bar'; + + st.doesNotThrow(function () { + parsed = qs.parse(str, { depth: 5000 }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + + var depth = 0; + var ref = parsed.foo; + while ((ref = ref.p)) { + depth += 1; + } + + st.equal(depth, 5000, 'parsed is 5000 properties deep'); + + st.end(); + }); + t.test('parses null objects correctly', { skip: !Object.create }, function (st) { var a = Object.create(null); a.b = 'c'; @@ -504,16 +564,113 @@ test('parse()', function (t) { result.push(parseInt(parts[1], 16)); parts = reg.exec(str); } - return iconv.decode(new Buffer(result), 'shift_jis').toString(); + return String(iconv.decode(SaferBuffer.from(result), 'shift_jis')); } }), { 県: '大阪府' }); st.end(); }); + t.test('receives the default decoder as a second argument', function (st) { + st.plan(1); + qs.parse('a', { + decoder: function (str, defaultDecoder) { + st.equal(defaultDecoder, utils.decode); + } + }); + st.end(); + }); + t.test('throws error with wrong decoder', function (st) { - st.throws(function () { + st['throws'](function () { qs.parse({}, { decoder: 'string' }); }, new TypeError('Decoder has to be a function.')); st.end(); }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.parse('a[b]=true', options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.parse('a=b', { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('parses an iso-8859-1 string if asked to', function (st) { + st.deepEqual(qs.parse('%A2=%BD', { charset: 'iso-8859-1' }), { '¢': '½' }); + st.end(); + }); + + var urlEncodedCheckmarkInUtf8 = '%E2%9C%93'; + var urlEncodedOSlashInUtf8 = '%C3%B8'; + var urlEncodedNumCheckmark = '%26%2310003%3B'; + var urlEncodedNumSmiley = '%26%239786%3B'; + + t.test('prefers an utf-8 charset specified by the utf8 sentinel to a default charset of iso-8859-1', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'iso-8859-1' }), { ø: 'ø' }); + st.end(); + }); + + t.test('prefers an iso-8859-1 charset specified by the utf8 sentinel to a default charset of utf-8', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('does not require the utf8 sentinel to be defined before the parameters whose decoding it affects', function (st) { + st.deepEqual(qs.parse('a=' + urlEncodedOSlashInUtf8 + '&utf8=' + urlEncodedNumCheckmark, { charsetSentinel: true, charset: 'utf-8' }), { a: 'ø' }); + st.end(); + }); + + t.test('should ignore an utf8 sentinel with an unknown value', function (st) { + st.deepEqual(qs.parse('utf8=foo&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to utf-8 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to iso-8859-1 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('interprets numeric entities in iso-8859-1 when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('handles a custom decoder returning `null`, in the `iso-8859-1` charset, when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=&bar=' + urlEncodedNumSmiley, { + charset: 'iso-8859-1', + decoder: function (str, defaultDecoder, charset) { + return str ? defaultDecoder(str, defaultDecoder, charset) : null; + }, + interpretNumericEntities: true + }), { foo: null, bar: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1' }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities when the charset is utf-8, even when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'utf-8', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret %uXXXX syntax in iso-8859-1 mode', function (st) { + st.deepEqual(qs.parse('%u263A=%u263A', { charset: 'iso-8859-1' }), { '%u263A': '%u263A' }); + st.end(); + }); + + t.end(); }); diff --git a/server/node_modules/qs/test/stringify.js b/server/node_modules/qs/test/stringify.js index 711dae5..53041c2 100644 --- a/server/node_modules/qs/test/stringify.js +++ b/server/node_modules/qs/test/stringify.js @@ -2,7 +2,9 @@ var test = require('tape'); var qs = require('../'); +var utils = require('../lib/utils'); var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; test('stringify()', function (t) { t.test('stringifies a querystring object', function (st) { @@ -17,6 +19,32 @@ test('stringify()', function (t) { st.end(); }); + t.test('stringifies falsy values', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(null, { strictNullHandling: true }), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(0), ''); + st.end(); + }); + + t.test('adds query prefix', function (st) { + st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b'); + st.end(); + }); + + t.test('with query prefix, outputs blank string given an empty object', function (st) { + st.equal(qs.stringify({}, { addQueryPrefix: true }), ''); + st.end(); + }); + + t.test('stringifies nested falsy values', function (st) { + st.equal(qs.stringify({ a: { b: { c: null } } }), 'a%5Bb%5D%5Bc%5D='); + st.equal(qs.stringify({ a: { b: { c: null } } }, { strictNullHandling: true }), 'a%5Bb%5D%5Bc%5D'); + st.equal(qs.stringify({ a: { b: { c: false } } }), 'a%5Bb%5D%5Bc%5D=false'); + st.end(); + }); + t.test('stringifies a nested object', function (st) { st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); @@ -40,6 +68,11 @@ test('stringify()', function (t) { 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', 'brackets => brackets' ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma' }), + 'a=b%2Cc%2Cd', + 'comma => comma' + ); st.equal( qs.stringify({ a: ['b', 'c', 'd'] }), 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', @@ -66,6 +99,7 @@ test('stringify()', function (t) { t.test('stringifies a nested array value', function (st) { st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'comma' }), 'a%5Bb%5D=c%2Cd'); // a[b]=c,d st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); st.end(); }); @@ -87,6 +121,14 @@ test('stringify()', function (t) { 'a.b[]=c&a.b[]=d', 'brackets: stringifies with dots + brackets' ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'comma' } + ), + 'a.b=c,d', + 'comma: stringifies with dots + comma' + ); st.equal( qs.stringify( { a: { b: ['c', 'd'] } }, @@ -101,12 +143,12 @@ test('stringify()', function (t) { t.test('stringifies an object inside an array', function (st) { st.equal( qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), - 'a%5B0%5D%5Bb%5D=c', + 'a%5B0%5D%5Bb%5D=c', // a[0][b]=c 'indices => brackets' ); st.equal( qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), - 'a%5B%5D%5Bb%5D=c', + 'a%5B%5D%5Bb%5D=c', // a[][b]=c 'brackets => brackets' ); st.equal( @@ -325,8 +367,8 @@ test('stringify()', function (t) { }); t.test('stringifies buffer values', function (st) { - st.equal(qs.stringify({ a: new Buffer('test') }), 'a=test'); - st.equal(qs.stringify({ a: { b: new Buffer('test') } }), 'a%5Bb%5D=test'); + st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); + st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); st.end(); }); @@ -452,15 +494,25 @@ test('stringify()', function (t) { st.end(); }); + t.test('receives the default encoder as a second argument', function (st) { + st.plan(2); + qs.stringify({ a: 1 }, { + encoder: function (str, defaultEncoder) { + st.equal(defaultEncoder, utils.encode); + } + }); + st.end(); + }); + t.test('throws error with wrong encoder', function (st) { - st.throws(function () { + st['throws'](function () { qs.stringify({}, { encoder: 'string' }); }, new TypeError('Encoder has to be a function.')); st.end(); }); t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { - st.equal(qs.stringify({ a: new Buffer([1]) }, { + st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { encoder: function (buffer) { if (typeof buffer === 'string') { return buffer; @@ -483,7 +535,7 @@ test('stringify()', function (t) { mutatedDate.toISOString = function () { throw new SyntaxError(); }; - st.throws(function () { + st['throws'](function () { mutatedDate.toISOString(); }, SyntaxError); st.equal( @@ -525,7 +577,7 @@ test('stringify()', function (t) { t.test('Edge cases and unknown formats', function (st) { ['UFO1234', false, 1234, null, {}, []].forEach( function (format) { - st.throws( + st['throws']( function () { qs.stringify({ a: 'b c' }, { format: format }); }, @@ -564,4 +616,64 @@ test('stringify()', function (t) { st.end(); }); + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.stringify({ a: 'b' }, { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('respects a charset of iso-8859-1', function (st) { + st.equal(qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }), '%E6=%E6'); + st.end(); + }); + + t.test('encodes unrepresentable chars as numeric entities in iso-8859-1 mode', function (st) { + st.equal(qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }), 'a=%26%239786%3B'); + st.end(); + }); + + t.test('respects an explicit charset of utf-8 (the default)', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charset: 'utf-8' }), 'a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is utf-8', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'utf-8' }), 'utf8=%E2%9C%93&a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is iso-8859-1', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }), 'utf8=%26%2310003%3B&a=%E6'); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.stringify({}, options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('strictNullHandling works with custom filter', function (st) { + var filter = function (prefix, value) { + return value; + }; + + var options = { strictNullHandling: true, filter: filter }; + st.equal(qs.stringify({ key: null }, options), 'key'); + st.end(); + }); + + t.test('strictNullHandling works with null serializeDate', function (st) { + var serializeDate = function () { + return null; + }; + var options = { strictNullHandling: true, serializeDate: serializeDate }; + var date = new Date(); + st.equal(qs.stringify({ key: date }, options), 'key'); + st.end(); + }); + + t.end(); }); diff --git a/server/node_modules/qs/test/utils.js b/server/node_modules/qs/test/utils.js index 0721dd8..da31ce5 100644 --- a/server/node_modules/qs/test/utils.js +++ b/server/node_modules/qs/test/utils.js @@ -1,9 +1,16 @@ 'use strict'; var test = require('tape'); +var inspect = require('object-inspect'); +var SaferBuffer = require('safer-buffer').Buffer; +var forEach = require('for-each'); var utils = require('../lib/utils'); test('merge()', function (t) { + t.deepEqual(utils.merge(null, true), [null, true], 'merges true into null'); + + t.deepEqual(utils.merge(null, [42]), [null, 42], 'merges null into an array'); + t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); @@ -18,5 +25,112 @@ test('merge()', function (t) { var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); + var noOptionsNonObjectSource = utils.merge({ foo: 'baz' }, 'bar'); + t.deepEqual(noOptionsNonObjectSource, { foo: 'baz', bar: true }); + + t.test( + 'avoids invoking array setters unnecessarily', + { skip: typeof Object.defineProperty !== 'function' }, + function (st) { + var setCount = 0; + var getCount = 0; + var observed = []; + Object.defineProperty(observed, 0, { + get: function () { + getCount += 1; + return { bar: 'baz' }; + }, + set: function () { setCount += 1; } + }); + utils.merge(observed, [null]); + st.equal(setCount, 0); + st.equal(getCount, 1); + observed[0] = observed[0]; // eslint-disable-line no-self-assign + st.equal(setCount, 1); + st.equal(getCount, 2); + st.end(); + } + ); + + t.end(); +}); + +test('assign()', function (t) { + var target = { a: 1, b: 2 }; + var source = { b: 3, c: 4 }; + var result = utils.assign(target, source); + + t.equal(result, target, 'returns the target'); + t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged'); + t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched'); + + t.end(); +}); + +test('combine()', function (t) { + t.test('both arrays', function (st) { + var a = [1]; + var b = [2]; + var combined = utils.combine(a, b); + + st.deepEqual(a, [1], 'a is not mutated'); + st.deepEqual(b, [2], 'b is not mutated'); + st.notEqual(a, combined, 'a !== combined'); + st.notEqual(b, combined, 'b !== combined'); + st.deepEqual(combined, [1, 2], 'combined is a + b'); + + st.end(); + }); + + t.test('one array, one non-array', function (st) { + var aN = 1; + var a = [aN]; + var bN = 2; + var b = [bN]; + + var combinedAnB = utils.combine(aN, b); + st.deepEqual(b, [bN], 'b is not mutated'); + st.notEqual(aN, combinedAnB, 'aN + b !== aN'); + st.notEqual(a, combinedAnB, 'aN + b !== a'); + st.notEqual(bN, combinedAnB, 'aN + b !== bN'); + st.notEqual(b, combinedAnB, 'aN + b !== b'); + st.deepEqual([1, 2], combinedAnB, 'first argument is array-wrapped when not an array'); + + var combinedABn = utils.combine(a, bN); + st.deepEqual(a, [aN], 'a is not mutated'); + st.notEqual(aN, combinedABn, 'a + bN !== aN'); + st.notEqual(a, combinedABn, 'a + bN !== a'); + st.notEqual(bN, combinedABn, 'a + bN !== bN'); + st.notEqual(b, combinedABn, 'a + bN !== b'); + st.deepEqual([1, 2], combinedABn, 'second argument is array-wrapped when not an array'); + + st.end(); + }); + + t.test('neither is an array', function (st) { + var combined = utils.combine(1, 2); + st.notEqual(1, combined, '1 + 2 !== 1'); + st.notEqual(2, combined, '1 + 2 !== 2'); + st.deepEqual([1, 2], combined, 'both arguments are array-wrapped when not an array'); + + st.end(); + }); + + t.end(); +}); + +test('isBuffer()', function (t) { + forEach([null, undefined, true, false, '', 'abc', 42, 0, NaN, {}, [], function () {}, /a/g], function (x) { + t.equal(utils.isBuffer(x), false, inspect(x) + ' is not a buffer'); + }); + + var fakeBuffer = { constructor: Buffer }; + t.equal(utils.isBuffer(fakeBuffer), false, 'fake buffer is not a buffer'); + + var saferBuffer = SaferBuffer.from('abc'); + t.equal(utils.isBuffer(saferBuffer), true, 'SaferBuffer instance is a buffer'); + + var buffer = Buffer.from ? Buffer.from('abc') : new Buffer('abc'); + t.equal(utils.isBuffer(buffer), true, 'real Buffer instance is a buffer'); t.end(); }); diff --git a/server/node_modules/range-parser/HISTORY.md b/server/node_modules/range-parser/HISTORY.md index 5e01eef..70a973d 100644 --- a/server/node_modules/range-parser/HISTORY.md +++ b/server/node_modules/range-parser/HISTORY.md @@ -1,3 +1,8 @@ +1.2.1 / 2019-05-10 +================== + + * Improve error when `str` is not a string + 1.2.0 / 2016-06-01 ================== diff --git a/server/node_modules/range-parser/README.md b/server/node_modules/range-parser/README.md index 1b24375..c247e82 100644 --- a/server/node_modules/range-parser/README.md +++ b/server/node_modules/range-parser/README.md @@ -1,8 +1,8 @@ # range-parser -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] [![Build Status][travis-image]][travis-url] [![Test Coverage][coveralls-image]][coveralls-url] @@ -10,12 +10,18 @@ Range header field parser. ## 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 range-parser ``` ## API + + ```js var parseRange = require('range-parser') ``` @@ -28,6 +34,8 @@ An array of ranges will be returned or negative numbers indicating an error pars * `-2` signals a malformed header string * `-1` signals an unsatisfiable range + + ```js // parse header from request var range = parseRange(size, req.headers.range) @@ -51,6 +59,8 @@ Specifies if overlapping & adjacent ranges should be combined, defaults to `fals When `true`, ranges will be combined and returned as if they were specified that way in the header. + + ```js parseRange(100, 'bytes=50-55,0-10,5-10,56-60', { combine: true }) // => [ @@ -63,13 +73,12 @@ parseRange(100, 'bytes=50-55,0-10,5-10,56-60', { combine: true }) [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/range-parser.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/range-parser/master +[coveralls-url]: https://coveralls.io/r/jshttp/range-parser?branch=master +[node-image]: https://badgen.net/npm/node/range-parser +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/range-parser [npm-url]: https://npmjs.org/package/range-parser -[node-version-image]: https://img.shields.io/node/v/range-parser.svg -[node-version-url]: https://nodejs.org/endownload -[travis-image]: https://img.shields.io/travis/jshttp/range-parser.svg +[npm-version-image]: https://badgen.net/npm/v/range-parser +[travis-image]: https://badgen.net/travis/jshttp/range-parser/master [travis-url]: https://travis-ci.org/jshttp/range-parser -[coveralls-image]: https://img.shields.io/coveralls/jshttp/range-parser.svg -[coveralls-url]: https://coveralls.io/r/jshttp/range-parser -[downloads-image]: https://img.shields.io/npm/dm/range-parser.svg -[downloads-url]: https://npmjs.org/package/range-parser diff --git a/server/node_modules/range-parser/index.js b/server/node_modules/range-parser/index.js index 83b2eb6..b7dc5c0 100644 --- a/server/node_modules/range-parser/index.js +++ b/server/node_modules/range-parser/index.js @@ -25,6 +25,10 @@ module.exports = rangeParser */ function rangeParser (size, str, options) { + if (typeof str !== 'string') { + throw new TypeError('argument str must be a string') + } + var index = str.indexOf('=') if (index === -1) { diff --git a/server/node_modules/range-parser/package.json b/server/node_modules/range-parser/package.json index 6e3f7f6..cac892d 100644 --- a/server/node_modules/range-parser/package.json +++ b/server/node_modules/range-parser/package.json @@ -1,28 +1,28 @@ { - "_from": "range-parser@~1.2.0", - "_id": "range-parser@1.2.0", + "_from": "range-parser@~1.2.1", + "_id": "range-parser@1.2.1", "_inBundle": false, - "_integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "_integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "_location": "/range-parser", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "range-parser@~1.2.0", + "raw": "range-parser@~1.2.1", "name": "range-parser", "escapedName": "range-parser", - "rawSpec": "~1.2.0", + "rawSpec": "~1.2.1", "saveSpec": null, - "fetchSpec": "~1.2.0" + "fetchSpec": "~1.2.1" }, "_requiredBy": [ "/express", "/send" ], - "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "_shasum": "f49be6b487894ddc40dcc94a322f611092e00d5e", - "_spec": "range-parser@~1.2.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "_shasum": "3cf37023d199e1c24d1a55b84800c2f3e6468031", + "_spec": "range-parser@~1.2.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca", @@ -50,12 +50,16 @@ "deprecated": false, "description": "Range header field string parser", "devDependencies": { - "eslint": "2.11.1", - "eslint-config-standard": "5.3.1", - "eslint-plugin-promise": "1.1.0", - "eslint-plugin-standard": "1.3.2", - "istanbul": "0.4.3", - "mocha": "1.21.5" + "deep-equal": "1.0.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.1.1" }, "engines": { "node": ">= 0.6" @@ -78,10 +82,10 @@ "url": "git+https://github.com/jshttp/range-parser.git" }, "scripts": { - "lint": "eslint **/*.js", + "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" }, - "version": "1.2.0" + "version": "1.2.1" } diff --git a/server/node_modules/send/HISTORY.md b/server/node_modules/send/HISTORY.md index 3297ba0..d14ac06 100644 --- a/server/node_modules/send/HISTORY.md +++ b/server/node_modules/send/HISTORY.md @@ -1,3 +1,88 @@ +0.17.1 / 2019-05-10 +=================== + + * Set stricter CSP header in redirect & error responses + * deps: range-parser@~1.2.1 + +0.17.0 / 2019-05-03 +=================== + + * deps: http-errors@~1.7.2 + - Set constructor name when possible + - Use `toidentifier` module to make class names + - deps: depd@~1.1.2 + - deps: setprototypeof@1.1.1 + - deps: statuses@'>= 1.5.0 < 2' + * deps: mime@1.6.0 + - Add extensions for JPEG-2000 images + - Add new `font/*` types from IANA + - Add WASM mapping + - Update `.bdoc` to `application/bdoc` + - Update `.bmp` to `image/bmp` + - Update `.m4a` to `audio/mp4` + - Update `.rtf` to `application/rtf` + - Update `.wav` to `audio/wav` + - Update `.xml` to `application/xml` + - Update generic extensions to `application/octet-stream`: + `.deb`, `.dll`, `.dmg`, `.exe`, `.iso`, `.msi` + - Use mime-score module to resolve extension conflicts + * deps: ms@2.1.1 + - Add `week`/`w` support + - Fix negative number handling + * deps: statuses@~1.5.0 + * perf: remove redundant `path.normalize` call + +0.16.2 / 2018-02-07 +=================== + + * Fix incorrect end tag in default error & redirects + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: encodeurl@~1.0.2 + - Fix encoding `%` as last character + * deps: statuses@~1.4.0 + +0.16.1 / 2017-09-29 +=================== + + * Fix regression in edge-case behavior for empty `path` + +0.16.0 / 2017-09-27 +=================== + + * Add `immutable` option + * Fix missing `` in default error & redirects + * Use instance methods on steam to check for listeners + * deps: mime@1.4.1 + - Add 70 new types for file extensions + - Set charset as "UTF-8" for .js and .json + * perf: improve path validation speed + +0.15.6 / 2017-09-22 +=================== + + * deps: debug@2.6.9 + * perf: improve `If-Match` token parsing + +0.15.5 / 2017-09-20 +=================== + + * deps: etag@~1.8.1 + - perf: replace regular expression with substring + * deps: fresh@0.5.2 + - Fix handling of modified headers with invalid dates + - perf: improve ETag match loop + - perf: improve `If-None-Match` token parsing + +0.15.4 / 2017-08-05 +=================== + + * deps: debug@2.6.8 + * deps: depd@~1.1.1 + - Remove unnecessary `Buffer` loading + * deps: http-errors@~1.6.2 + - deps: depd@1.1.1 + 0.15.3 / 2017-05-16 =================== diff --git a/server/node_modules/send/README.md b/server/node_modules/send/README.md index 0c8d11d..179e8c3 100644 --- a/server/node_modules/send/README.md +++ b/server/node_modules/send/README.md @@ -1,11 +1,10 @@ # send -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] [![Linux Build][travis-image]][travis-url] [![Windows Build][appveyor-image]][appveyor-url] [![Test Coverage][coveralls-image]][coveralls-url] -[![Gratipay][gratipay-image]][gratipay-url] Send is a library for streaming files from the file system as a http response supporting partial responses (Ranges), conditional-GET negotiation (If-Match, @@ -50,7 +49,7 @@ of the `Range` request header. ##### cacheControl Enable or disable setting `Cache-Control` response header, defaults to -true. Disabling this will ignore the `maxAge` option. +true. Disabling this will ignore the `immutable` and `maxAge` options. ##### dotfiles @@ -86,6 +85,14 @@ in the given order. By default, this is disabled (set to `false`). An example value that will serve extension-less HTML files: `['html', 'htm']`. This is skipped if the requested file already has an extension. +##### immutable + +Enable or diable the `immutable` directive in the `Cache-Control` response +header, defaults to `false`. If set to `true`, the `maxAge` option should +also be specified to enable caching. The `immutable` directive will prevent +supported clients from making conditional requests during the life of the +`maxAge` option to check if the file has changed. + ##### index By default send supports "index.html" files, to disable this @@ -167,7 +174,27 @@ $ npm test ## Examples -### Small example +### Serve a specific file + +This simple example will send a specific file to all requests. + +```js +var http = require('http') +var send = require('send') + +var server = http.createServer(function onRequest (req, res) { + send(req, '/path/to/index.html') + .pipe(res) +}) + +server.listen(3000) +``` + +### Serve all files from a directory + +This simple example will just serve up all the files in a +given directory as the top-level. For example, a request +`GET /foo.txt` will send back `/www/public/foo.txt`. ```js var http = require('http') @@ -175,7 +202,8 @@ var parseUrl = require('parseurl') var send = require('send') var server = http.createServer(function onRequest (req, res) { - send(req, parseUrl(req).pathname).pipe(res) + send(req, parseUrl(req).pathname, { root: '/www/public' }) + .pipe(res) }) server.listen(3000) @@ -197,7 +225,8 @@ send.mime.define({ }) var server = http.createServer(function onRequest (req, res) { - send(req, parseUrl(req).pathname).pipe(res) + send(req, parseUrl(req).pathname, { root: '/www/public' }) + .pipe(res) }) server.listen(3000) @@ -217,9 +246,9 @@ var send = require('send') // Transfer arbitrary files from within /www/example.com/public/* // with a custom handler for directory listing var server = http.createServer(function onRequest (req, res) { - send(req, parseUrl(req).pathname, {index: false, root: '/www/example.com/public'}) - .once('directory', directory) - .pipe(res) + send(req, parseUrl(req).pathname, { index: false, root: '/www/public' }) + .once('directory', directory) + .pipe(res) }) server.listen(3000) @@ -273,11 +302,11 @@ var server = http.createServer(function onRequest (req, res) { // transfer arbitrary files from within // /www/example.com/public/* - send(req, parseUrl(req).pathname, {root: '/www/example.com/public'}) - .on('error', error) - .on('directory', redirect) - .on('headers', headers) - .pipe(res) + send(req, parseUrl(req).pathname, { root: '/www/public' }) + .on('error', error) + .on('directory', redirect) + .on('headers', headers) + .pipe(res) }) server.listen(3000) @@ -287,15 +316,14 @@ server.listen(3000) [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/send.svg -[npm-url]: https://npmjs.org/package/send -[travis-image]: https://img.shields.io/travis/pillarjs/send/master.svg?label=linux -[travis-url]: https://travis-ci.org/pillarjs/send -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/send/master.svg?label=windows +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/send/master?label=windows [appveyor-url]: https://ci.appveyor.com/project/dougwilson/send -[coveralls-image]: https://img.shields.io/coveralls/pillarjs/send/master.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/send/master [coveralls-url]: https://coveralls.io/r/pillarjs/send?branch=master -[downloads-image]: https://img.shields.io/npm/dm/send.svg -[downloads-url]: https://npmjs.org/package/send -[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg -[gratipay-url]: https://www.gratipay.com/dougwilson/ +[node-image]: https://badgen.net/npm/node/send +[node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/send +[npm-url]: https://npmjs.org/package/send +[npm-version-image]: https://badgen.net/npm/v/send +[travis-image]: https://badgen.net/travis/pillarjs/send/master?label=linux +[travis-url]: https://travis-ci.org/pillarjs/send diff --git a/server/node_modules/send/index.js b/server/node_modules/send/index.js index 3756841..fca2112 100644 --- a/server/node_modules/send/index.js +++ b/server/node_modules/send/index.js @@ -19,7 +19,6 @@ var destroy = require('destroy') var encodeUrl = require('encodeurl') var escapeHtml = require('escape-html') var etag = require('etag') -var EventEmitter = require('events').EventEmitter var fresh = require('fresh') var fs = require('fs') var mime = require('mime') @@ -49,13 +48,6 @@ var sep = path.sep var BYTES_RANGE_REGEXP = /^ *bytes=/ -/** - * Simple expression to split token list. - * @private - */ - -var TOKEN_LIST_REGEXP = / *, */ - /** * Maximum value allowed for the max age. * @private @@ -78,14 +70,6 @@ var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/ module.exports = send module.exports.mime = mime -/** - * Shim EventEmitter.listenerCount for node.js < 0.10 - */ - -/* istanbul ignore next */ -var listenerCount = EventEmitter.listenerCount || - function (emitter, type) { return emitter.listeners(type).length } - /** * Return a `SendStream` for `req` and `path`. * @@ -153,6 +137,10 @@ function SendStream (req, path, options) { ? normalizeList(opts.extensions, 'extensions option') : [] + this._immutable = opts.immutable !== undefined + ? Boolean(opts.immutable) + : false + this._index = opts.index !== undefined ? normalizeList(opts.index, 'index option') : ['index.html'] @@ -278,7 +266,7 @@ SendStream.prototype.maxage = deprecate.function(function maxage (maxAge) { SendStream.prototype.error = function error (status, err) { // emit if listeners instead of responding - if (listenerCount(this, 'error') !== 0) { + if (hasListeners(this, 'error')) { return this.emit('error', createError(status, err, { expose: false })) @@ -300,7 +288,7 @@ SendStream.prototype.error = function error (status, err) { res.statusCode = status res.setHeader('Content-Type', 'text/html; charset=UTF-8') res.setHeader('Content-Length', Buffer.byteLength(doc)) - res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('Content-Security-Policy', "default-src 'none'") res.setHeader('X-Content-Type-Options', 'nosniff') res.end(doc) } @@ -345,7 +333,7 @@ SendStream.prototype.isPreconditionFailure = function isPreconditionFailure () { var match = req.headers['if-match'] if (match) { var etag = res.getHeader('ETag') - return !etag || (match !== '*' && match.split(TOKEN_LIST_REGEXP).every(function (match) { + return !etag || (match !== '*' && parseTokenList(match).every(function (match) { return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag })) } @@ -487,7 +475,7 @@ SendStream.prototype.isRangeFresh = function isRangeFresh () { SendStream.prototype.redirect = function redirect (path) { var res = this.res - if (listenerCount(this, 'directory') !== 0) { + if (hasListeners(this, 'directory')) { this.emit('directory', res, path) return } @@ -505,7 +493,7 @@ SendStream.prototype.redirect = function redirect (path) { res.statusCode = 301 res.setHeader('Content-Type', 'text/html; charset=UTF-8') res.setHeader('Content-Length', Buffer.byteLength(doc)) - res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('Content-Security-Policy', "default-src 'none'") res.setHeader('X-Content-Type-Options', 'nosniff') res.setHeader('Location', loc) res.end(doc) @@ -541,19 +529,23 @@ SendStream.prototype.pipe = function pipe (res) { var parts if (root !== null) { + // normalize + if (path) { + path = normalize('.' + sep + path) + } + // malicious path - if (UP_PATH_REGEXP.test(normalize('.' + sep + path))) { + if (UP_PATH_REGEXP.test(path)) { debug('malicious path "%s"', path) this.error(403) return res } + // explode path parts + parts = path.split(sep) + // join / normalize from optional root dir path = normalize(join(root, path)) - root = normalize(root + sep) - - // explode path parts - parts = path.substr(root.length).split(sep) } else { // ".." is malicious without "root" if (UP_PATH_REGEXP.test(path)) { @@ -676,7 +668,7 @@ SendStream.prototype.send = function send (path, stat) { // 416 Requested Range Not Satisfiable return this.error(416, { - headers: {'Content-Range': res.getHeader('Content-Range')} + headers: { 'Content-Range': res.getHeader('Content-Range') } }) } @@ -877,6 +869,11 @@ SendStream.prototype.setHeader = function setHeader (path, stat) { if (this._cacheControl && !res.getHeader('Cache-Control')) { var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000) + + if (this._immutable) { + cacheControl += ', immutable' + } + debug('cache-control %s', cacheControl) res.setHeader('Cache-Control', cacheControl) } @@ -935,7 +932,8 @@ function collapseLeadingSlashes (str) { function containsDotFile (parts) { for (var i = 0; i < parts.length; i++) { - if (parts[i][0] === '.') { + var part = parts[i] + if (part.length > 1 && part[0] === '.') { return true } } @@ -972,7 +970,8 @@ function createHtmlDocument (title, body) { '\n' + '\n' + '
' + body + '
\n' + - '\n' + '\n' + + '\n' } /** @@ -1007,6 +1006,26 @@ function getHeaderNames (res) { : res.getHeaderNames() } +/** + * Determine if emitter has listeners of a given type. + * + * The way to do this check is done three different ways in Node.js >= 0.8 + * so this consolidates them into a minimal set using instance methods. + * + * @param {EventEmitter} emitter + * @param {string} type + * @returns {boolean} + * @private + */ + +function hasListeners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + /** * Determine if the response headers have been sent. * @@ -1056,6 +1075,42 @@ function parseHttpDate (date) { : NaN } +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ + +function parseTokenList (str) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(str.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(str.substring(start, end)) + + return list +} + /** * Set an object of headers on a response. * diff --git a/server/node_modules/send/package.json b/server/node_modules/send/package.json index 27437e2..bffee39 100644 --- a/server/node_modules/send/package.json +++ b/server/node_modules/send/package.json @@ -1,28 +1,28 @@ { - "_from": "send@0.15.3", - "_id": "send@0.15.3", + "_from": "send@0.17.1", + "_id": "send@0.17.1", "_inBundle": false, - "_integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", + "_integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "_location": "/send", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "send@0.15.3", + "raw": "send@0.17.1", "name": "send", "escapedName": "send", - "rawSpec": "0.15.3", + "rawSpec": "0.17.1", "saveSpec": null, - "fetchSpec": "0.15.3" + "fetchSpec": "0.17.1" }, "_requiredBy": [ "/express", "/serve-static" ], - "_resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", - "_shasum": "5013f9f99023df50d1bd9892c19e3defd1d53309", - "_spec": "send@0.15.3", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "_shasum": "c1d8b059f7900f7466dd4938bdc44e11ddb376c8", + "_spec": "send@0.17.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" @@ -46,32 +46,34 @@ } ], "dependencies": { - "debug": "2.6.7", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", "destroy": "~1.0.4", - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.8.0", - "fresh": "0.5.0", - "http-errors": "~1.6.1", - "mime": "1.3.4", - "ms": "2.0.0", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.3.1" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "deprecated": false, "description": "Better streaming static file server with Range and conditional-GET support", "devDependencies": { "after": "0.8.2", - "eslint": "3.19.0", - "eslint-config-standard": "7.1.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "2.3.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", "istanbul": "0.4.5", - "mocha": "2.5.3", - "supertest": "1.1.0" + "mocha": "6.1.4", + "supertest": "4.0.2" }, "engines": { "node": ">= 0.8.0" @@ -100,5 +102,5 @@ "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot" }, - "version": "0.15.3" + "version": "0.17.1" } diff --git a/server/node_modules/serve-static/HISTORY.md b/server/node_modules/serve-static/HISTORY.md index c981107..7203e4f 100644 --- a/server/node_modules/serve-static/HISTORY.md +++ b/server/node_modules/serve-static/HISTORY.md @@ -1,3 +1,77 @@ +1.14.1 / 2019-05-10 +=================== + + * Set stricter CSP header in redirect response + * deps: send@0.17.1 + - deps: range-parser@~1.2.1 + +1.14.0 / 2019-05-07 +=================== + + * deps: parseurl@~1.3.3 + * deps: send@0.17.0 + - deps: http-errors@~1.7.2 + - deps: mime@1.6.0 + - deps: ms@2.1.1 + - deps: statuses@~1.5.0 + - perf: remove redundant `path.normalize` call + +1.13.2 / 2018-02-07 +=================== + + * Fix incorrect end tag in redirects + * deps: encodeurl@~1.0.2 + - Fix encoding `%` as last character + * deps: send@0.16.2 + - deps: depd@~1.1.2 + - deps: encodeurl@~1.0.2 + - deps: statuses@~1.4.0 + +1.13.1 / 2017-09-29 +=================== + + * Fix regression when `root` is incorrectly set to a file + * deps: send@0.16.1 + +1.13.0 / 2017-09-27 +=================== + + * deps: send@0.16.0 + - Add 70 new types for file extensions + - Add `immutable` option + - Fix missing `` in default error & redirects + - Set charset as "UTF-8" for .js and .json + - Use instance methods on steam to check for listeners + - deps: mime@1.4.1 + - perf: improve path validation speed + +1.12.6 / 2017-09-22 +=================== + + * deps: send@0.15.6 + - deps: debug@2.6.9 + - perf: improve `If-Match` token parsing + * perf: improve slash collapsing + +1.12.5 / 2017-09-21 +=================== + + * deps: parseurl@~1.3.2 + - perf: reduce overhead for full URLs + - perf: unroll the "fast-path" `RegExp` + * deps: send@0.15.5 + - Fix handling of modified headers with invalid dates + - deps: etag@~1.8.1 + - deps: fresh@0.5.2 + +1.12.4 / 2017-08-05 +=================== + + * deps: send@0.15.4 + - deps: debug@2.6.8 + - deps: depd@~1.1.1 + - deps: http-errors@~1.6.2 + 1.12.3 / 2017-05-16 =================== diff --git a/server/node_modules/serve-static/README.md b/server/node_modules/serve-static/README.md index 3dd5f48..7cce428 100644 --- a/server/node_modules/serve-static/README.md +++ b/server/node_modules/serve-static/README.md @@ -1,11 +1,10 @@ # serve-static -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] [![Linux Build][travis-image]][travis-url] [![Windows Build][appveyor-image]][appveyor-url] [![Test Coverage][coveralls-image]][coveralls-url] -[![Gratipay][gratipay-image]][gratipay-url] ## Install @@ -44,7 +43,7 @@ of the `Range` request header. ##### cacheControl Enable or disable setting `Cache-Control` response header, defaults to -true. Disabling this will ignore the `maxAge` option. +true. Disabling this will ignore the `immutable` and `maxAge` options. ##### dotfiles @@ -93,6 +92,14 @@ all methods. The default value is `true`. +##### immutable + +Enable or disable the `immutable` directive in the `Cache-Control` response +header, defaults to `false`. If set to `true`, the `maxAge` option should +also be specified to enable caching. The `immutable` directive will prevent +supported clients from making conditional requests during the life of the +`maxAge` option to check if the file has changed. + ##### index By default this module will send "index.html" files in response to a request @@ -134,7 +141,7 @@ var http = require('http') var serveStatic = require('serve-static') // Serve up public/ftp folder -var serve = serveStatic('public/ftp', {'index': ['index.html', 'index.htm']}) +var serve = serveStatic('public/ftp', { 'index': ['index.html', 'index.htm'] }) // Create server var server = http.createServer(function onRequest (req, res) { @@ -185,7 +192,7 @@ var serveStatic = require('serve-static') var app = express() -app.use(serveStatic('public/ftp', {'index': ['default.html', 'default.htm']})) +app.use(serveStatic('public/ftp', { 'index': ['default.html', 'default.htm'] })) app.listen(3000) ``` @@ -239,15 +246,14 @@ function setCustomCacheControl (res, path) { [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/serve-static.svg +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/serve-static/master?label=windows +[appveyor-url]: https://ci.appveyor.com/project/dougwilson/serve-static +[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/serve-static/master +[coveralls-url]: https://coveralls.io/r/expressjs/serve-static?branch=master +[node-image]: https://badgen.net/npm/node/serve-static +[node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/serve-static [npm-url]: https://npmjs.org/package/serve-static -[travis-image]: https://img.shields.io/travis/expressjs/serve-static/master.svg?label=linux +[npm-version-image]: https://badgen.net/npm/v/serve-static +[travis-image]: https://badgen.net/travis/expressjs/serve-static/master?label=linux [travis-url]: https://travis-ci.org/expressjs/serve-static -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/serve-static/master.svg?label=windows -[appveyor-url]: https://ci.appveyor.com/project/dougwilson/serve-static -[coveralls-image]: https://img.shields.io/coveralls/expressjs/serve-static/master.svg -[coveralls-url]: https://coveralls.io/r/expressjs/serve-static -[downloads-image]: https://img.shields.io/npm/dm/serve-static.svg -[downloads-url]: https://npmjs.org/package/serve-static -[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg -[gratipay-url]: https://gratipay.com/dougwilson/ diff --git a/server/node_modules/serve-static/index.js b/server/node_modules/serve-static/index.js index 85df3d0..b7d3984 100644 --- a/server/node_modules/serve-static/index.js +++ b/server/node_modules/serve-static/index.js @@ -132,7 +132,7 @@ function serveStatic (root, options) { */ function collapseLeadingSlashes (str) { for (var i = 0; i < str.length; i++) { - if (str[i] !== '/') { + if (str.charCodeAt(i) !== 0x2f /* / */) { break } } @@ -142,7 +142,7 @@ function collapseLeadingSlashes (str) { : str } - /** +/** * Create a minimal HTML document. * * @param {string} title @@ -159,7 +159,8 @@ function createHtmlDocument (title, body) { '\n' + '\n' + '
' + body + '
\n' + - '\n' + '\n' + + '\n' } /** @@ -201,7 +202,7 @@ function createRedirectDirectoryListener () { res.statusCode = 301 res.setHeader('Content-Type', 'text/html; charset=UTF-8') res.setHeader('Content-Length', Buffer.byteLength(doc)) - res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('Content-Security-Policy', "default-src 'none'") res.setHeader('X-Content-Type-Options', 'nosniff') res.setHeader('Location', loc) res.end(doc) diff --git a/server/node_modules/serve-static/package.json b/server/node_modules/serve-static/package.json index 3519c4d..967c60c 100644 --- a/server/node_modules/serve-static/package.json +++ b/server/node_modules/serve-static/package.json @@ -1,27 +1,27 @@ { - "_from": "serve-static@1.12.3", - "_id": "serve-static@1.12.3", + "_from": "serve-static@1.14.1", + "_id": "serve-static@1.14.1", "_inBundle": false, - "_integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", + "_integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "_location": "/serve-static", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "serve-static@1.12.3", + "raw": "serve-static@1.14.1", "name": "serve-static", "escapedName": "serve-static", - "rawSpec": "1.12.3", + "rawSpec": "1.14.1", "saveSpec": null, - "fetchSpec": "1.12.3" + "fetchSpec": "1.14.1" }, "_requiredBy": [ "/express" ], - "_resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", - "_shasum": "9f4ba19e2f3030c547f8af99107838ec38d5b1e2", - "_spec": "serve-static@1.12.3", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "_shasum": "666e636dc4f010f7ef29970a88a674320898b2f9", + "_spec": "serve-static@1.14.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" @@ -31,24 +31,25 @@ }, "bundleDependencies": false, "dependencies": { - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.1", - "send": "0.15.3" + "parseurl": "~1.3.3", + "send": "0.17.1" }, "deprecated": false, "description": "Serve static files", "devDependencies": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.2.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "4.2.2", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", "istanbul": "0.4.5", - "mocha": "2.5.3", - "supertest": "1.1.0" + "mocha": "6.1.4", + "safe-buffer": "5.1.2", + "supertest": "4.0.2" }, "engines": { "node": ">= 0.8.0" @@ -69,7 +70,8 @@ "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/" + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "version": "node scripts/version-history.js && git add HISTORY.md" }, - "version": "1.12.3" + "version": "1.14.1" } diff --git a/server/node_modules/setprototypeof/README.md b/server/node_modules/setprototypeof/README.md index 01d7947..f120044 100644 --- a/server/node_modules/setprototypeof/README.md +++ b/server/node_modules/setprototypeof/README.md @@ -1,5 +1,9 @@ # Polyfill for `Object.setPrototypeOf` +[![NPM Version](https://img.shields.io/npm/v/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) +[![NPM Downloads](https://img.shields.io/npm/dm/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https://github.com/standard/standard) + A simple cross platform implementation to set the prototype of an instianted object. Supports all modern browsers and at least back to IE8. ## Usage: @@ -9,13 +13,19 @@ $ npm install --save setprototypeof ``` ```javascript -var setPrototypeOf = require('setprototypeof'); +var setPrototypeOf = require('setprototypeof') -var obj = {}; +var obj = {} setPrototypeOf(obj, { - foo: function() { - return 'bar'; - } -}); -obj.foo(); // bar + foo: function () { + return 'bar' + } +}) +obj.foo() // bar +``` + +TypeScript is also supported: + +```typescript +import setPrototypeOf = require('setprototypeof') ``` diff --git a/server/node_modules/setprototypeof/index.js b/server/node_modules/setprototypeof/index.js index 93ea417..81fd5d7 100644 --- a/server/node_modules/setprototypeof/index.js +++ b/server/node_modules/setprototypeof/index.js @@ -1,15 +1,17 @@ -module.exports = Object.setPrototypeOf || ({__proto__:[]} instanceof Array ? setProtoOf : mixinProperties); +'use strict' +/* eslint no-proto: 0 */ +module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties) -function setProtoOf(obj, proto) { - obj.__proto__ = proto; - return obj; +function setProtoOf (obj, proto) { + obj.__proto__ = proto + return obj } -function mixinProperties(obj, proto) { - for (var prop in proto) { - if (!obj.hasOwnProperty(prop)) { - obj[prop] = proto[prop]; - } - } - return obj; +function mixinProperties (obj, proto) { + for (var prop in proto) { + if (!obj.hasOwnProperty(prop)) { + obj[prop] = proto[prop] + } + } + return obj } diff --git a/server/node_modules/setprototypeof/package.json b/server/node_modules/setprototypeof/package.json index 1c57ebc..e6e1352 100644 --- a/server/node_modules/setprototypeof/package.json +++ b/server/node_modules/setprototypeof/package.json @@ -1,28 +1,28 @@ { - "_from": "setprototypeof@1.0.3", - "_id": "setprototypeof@1.0.3", + "_from": "setprototypeof@1.1.1", + "_id": "setprototypeof@1.1.1", "_inBundle": false, - "_integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "_integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "_location": "/setprototypeof", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "setprototypeof@1.0.3", + "raw": "setprototypeof@1.1.1", "name": "setprototypeof", "escapedName": "setprototypeof", - "rawSpec": "1.0.3", + "rawSpec": "1.1.1", "saveSpec": null, - "fetchSpec": "1.0.3" + "fetchSpec": "1.1.1" }, "_requiredBy": [ "/express", "/http-errors" ], - "_resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "_shasum": "66567e37043eeb4f04d91bd658c0cbefb55b8e04", - "_spec": "setprototypeof@1.0.3", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "_shasum": "7e95acb24aa92f5885e0abef5ba131330d4ae683", + "_spec": "setprototypeof@1.1.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/http-errors", "author": { "name": "Wes Todd" }, @@ -32,6 +32,10 @@ "bundleDependencies": false, "deprecated": false, "description": "A small polyfill for Object.setprototypeof", + "devDependencies": { + "mocha": "^5.2.0", + "standard": "^12.0.1" + }, "homepage": "https://github.com/wesleytodd/setprototypeof", "keywords": [ "polyfill", @@ -46,7 +50,15 @@ "url": "git+https://github.com/wesleytodd/setprototypeof.git" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "node010": "NODE_VER=0.10 MOCHA_VER=3 npm run testversion", + "node11": "NODE_VER=11 npm run testversion", + "node4": "NODE_VER=4 npm run testversion", + "node6": "NODE_VER=6 npm run testversion", + "node9": "NODE_VER=9 npm run testversion", + "test": "standard && mocha", + "testallversions": "npm run node010 && npm run node4 && npm run node6 && npm run node9 && npm run node11", + "testversion": "docker run -it --rm -v $(PWD):/usr/src/app -w /usr/src/app node:${NODE_VER} npm install mocha@${MOCHA_VER:-latest} && npm t" }, - "version": "1.0.3" + "typings": "index.d.ts", + "version": "1.1.1" } diff --git a/server/node_modules/statuses/HISTORY.md b/server/node_modules/statuses/HISTORY.md index 3015a5f..a1977b2 100644 --- a/server/node_modules/statuses/HISTORY.md +++ b/server/node_modules/statuses/HISTORY.md @@ -1,3 +1,13 @@ +1.5.0 / 2018-03-27 +================== + + * Add `103 Early Hints` + +1.4.0 / 2017-10-20 +================== + + * Add `STATUS_CODES` export + 1.3.1 / 2016-11-11 ================== diff --git a/server/node_modules/statuses/LICENSE b/server/node_modules/statuses/LICENSE index 82af4df..28a3161 100644 --- a/server/node_modules/statuses/LICENSE +++ b/server/node_modules/statuses/LICENSE @@ -1,8 +1,8 @@ The MIT License (MIT) -Copyright (c) 2014 Jonathan Ong me@jongleberry.com -Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2016 Douglas Christopher Wilson 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/server/node_modules/statuses/README.md b/server/node_modules/statuses/README.md index 2bf0756..0fe5720 100644 --- a/server/node_modules/statuses/README.md +++ b/server/node_modules/statuses/README.md @@ -8,15 +8,38 @@ HTTP status utility for node. +This module provides a list of status codes and messages sourced from +a few different projects: + + * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) + * The [Node.js project](https://nodejs.org/) + * The [NGINX project](https://www.nginx.com/) + * The [Apache HTTP Server project](https://httpd.apache.org/) + +## 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 statuses +``` + ## API + + ```js var status = require('statuses') ``` ### var code = status(Integer || String) -If `Integer` or `String` is a valid HTTP code or status message, then the appropriate `code` will be returned. Otherwise, an error will be thrown. +If `Integer` or `String` is a valid HTTP code or status message, then the +appropriate `code` will be returned. Otherwise, an error will be thrown. + + ```js status(403) // => 403 @@ -26,6 +49,12 @@ status('Forbidden') // => 403 status(306) // throws, as it's not supported by node.js ``` +### status.STATUS_CODES + +Returns an object which maps status codes to status messages, in +the same format as the +[Node.js http module](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). + ### status.codes Returns an array of all the status codes as `Integer`s. @@ -34,13 +63,18 @@ Returns an array of all the status codes as `Integer`s. Map of `code` to `status message`. `undefined` for invalid `code`s. + + ```js status[404] // => 'Not Found' ``` ### var code = status[msg] -Map of `status message` to `code`. `msg` can either be title-cased or lower-cased. `undefined` for invalid `status message`s. +Map of `status message` to `code`. `msg` can either be title-cased or +lower-cased. `undefined` for invalid `status message`s. + + ```js status['not found'] // => 404 @@ -51,6 +85,8 @@ status['Not Found'] // => 404 Returns `true` if a status code is a valid redirect status. + + ```js status.redirect[200] // => undefined status.redirect[301] // => true @@ -60,6 +96,8 @@ status.redirect[301] // => true Returns `true` if a status code expects an empty body. + + ```js status.empty[200] // => undefined status.empty[204] // => true @@ -70,30 +108,16 @@ status.empty[304] // => true Returns `true` if you should retry the rest. + + ```js status.retry[501] // => undefined status.retry[503] // => true ``` -## Adding Status Codes - -The status codes are primarily sourced from http://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv. -Additionally, custom codes are added from http://en.wikipedia.org/wiki/List_of_HTTP_status_codes. -These are added manually in the `lib/*.json` files. -If you would like to add a status code, add it to the appropriate JSON file. - -To rebuild `codes.json`, run the following: - -```bash -# update src/iana.json -npm run fetch -# build codes.json -npm run build -``` - [npm-image]: https://img.shields.io/npm/v/statuses.svg [npm-url]: https://npmjs.org/package/statuses -[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg +[node-version-image]: https://img.shields.io/node/v/statuses.svg [node-version-url]: https://nodejs.org/en/download [travis-image]: https://img.shields.io/travis/jshttp/statuses.svg [travis-url]: https://travis-ci.org/jshttp/statuses diff --git a/server/node_modules/statuses/codes.json b/server/node_modules/statuses/codes.json index e765123..a09283a 100644 --- a/server/node_modules/statuses/codes.json +++ b/server/node_modules/statuses/codes.json @@ -2,6 +2,7 @@ "100": "Continue", "101": "Switching Protocols", "102": "Processing", + "103": "Early Hints", "200": "OK", "201": "Created", "202": "Accepted", @@ -62,4 +63,4 @@ "509": "Bandwidth Limit Exceeded", "510": "Not Extended", "511": "Network Authentication Required" -} \ No newline at end of file +} diff --git a/server/node_modules/statuses/index.js b/server/node_modules/statuses/index.js index 9f955c6..4df469a 100644 --- a/server/node_modules/statuses/index.js +++ b/server/node_modules/statuses/index.js @@ -21,6 +21,9 @@ var codes = require('./codes.json') module.exports = status +// status code to message map +status.STATUS_CODES = codes + // array of status codes status.codes = populateStatusesMap(status, codes) diff --git a/server/node_modules/statuses/package.json b/server/node_modules/statuses/package.json index f2b0cee..ed9d184 100644 --- a/server/node_modules/statuses/package.json +++ b/server/node_modules/statuses/package.json @@ -1,19 +1,19 @@ { - "_from": "statuses@~1.3.1", - "_id": "statuses@1.3.1", + "_from": "statuses@>= 1.5.0 < 2", + "_id": "statuses@1.5.0", "_inBundle": false, - "_integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "_integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "_location": "/statuses", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "statuses@~1.3.1", + "raw": "statuses@>= 1.5.0 < 2", "name": "statuses", "escapedName": "statuses", - "rawSpec": "~1.3.1", + "rawSpec": ">= 1.5.0 < 2", "saveSpec": null, - "fetchSpec": "~1.3.1" + "fetchSpec": ">= 1.5.0 < 2" }, "_requiredBy": [ "/express", @@ -21,10 +21,10 @@ "/http-errors", "/send" ], - "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "_shasum": "faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e", - "_spec": "statuses@~1.3.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "_shasum": "161c7dac177659fd9811f43771fa99381478628c", + "_spec": "statuses@>= 1.5.0 < 2", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/http-errors", "bugs": { "url": "https://github.com/jshttp/statuses/issues" }, @@ -43,13 +43,17 @@ "deprecated": false, "description": "HTTP status utility", "devDependencies": { - "csv-parse": "1.1.7", - "eslint": "3.10.0", - "eslint-config-standard": "6.2.1", - "eslint-plugin-promise": "3.3.2", - "eslint-plugin-standard": "2.0.1", + "csv-parse": "1.2.4", + "eslint": "4.19.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.7.0", + "eslint-plugin-standard": "3.0.1", "istanbul": "0.4.5", "mocha": "1.21.5", + "raw-body": "2.3.2", "stream-to-array": "2.3.0" }, "engines": { @@ -75,12 +79,12 @@ }, "scripts": { "build": "node scripts/build.js", - "fetch": "node scripts/fetch.js", - "lint": "eslint .", + "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js", + "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --check-leaks --bail 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/", "update": "npm run fetch && npm run build" }, - "version": "1.3.1" + "version": "1.5.0" } diff --git a/server/node_modules/type-is/HISTORY.md b/server/node_modules/type-is/HISTORY.md index 96bc93e..8de21f7 100644 --- a/server/node_modules/type-is/HISTORY.md +++ b/server/node_modules/type-is/HISTORY.md @@ -1,3 +1,44 @@ +1.6.18 / 2019-04-26 +=================== + + * Fix regression passing request object to `typeis.is` + +1.6.17 / 2019-04-25 +=================== + + * deps: mime-types@~2.1.24 + - Add Apple file extensions from IANA + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add extension `.owl` to `application/rdf+xml` + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add extensions from IANA for `image/*` types + - Add extensions from IANA for `model/*` types + - Add extensions to HEIC image types + - Add new mime types + - Add `text/mdx` with extension `.mdx` + * perf: prevent internal `throw` on invalid type + +1.6.16 / 2018-02-16 +=================== + + * deps: mime-types@~2.1.18 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add extension `.mjs` to `application/javascript` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add glTF types and extensions + - Add new mime types + - Update extensions `.md` and `.markdown` to be `text/markdown` + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + 1.6.15 / 2017-03-31 =================== diff --git a/server/node_modules/type-is/README.md b/server/node_modules/type-is/README.md index 70c47da..b85ef8f 100644 --- a/server/node_modules/type-is/README.md +++ b/server/node_modules/type-is/README.md @@ -1,7 +1,7 @@ # type-is -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] [![Node.js Version][node-version-image]][node-version-url] [![Build Status][travis-image]][travis-url] [![Test Coverage][coveralls-image]][coveralls-url] @@ -30,21 +30,39 @@ http.createServer(function (req, res) { }) ``` -### type = typeis(request, types) +### typeis(request, types) -`request` is the node HTTP request. `types` is an array of types. +Checks if the `request` is one of the `types`. If the request has no body, +even if there is a `Content-Type` header, then `null` is returned. If the +`Content-Type` header is invalid or does not matches any of the `types`, then +`false` is returned. Otherwise, a string of the type that matched is returned. + +The `request` argument is expected to be a Node.js HTTP request. The `types` +argument is an array of type strings. + +Each type in the `types` array can be one of the following: + +- A file extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. + The full mime type will be returned if matched. +- A suffix such as `+json`. This can be combined with a wildcard such as + `*/vnd+json` or `application/*+json`. The full mime type will be returned + if matched. + +Some examples to illustrate the inputs and returned value: ```js // req.headers.content-type = 'application/json' -typeis(req, ['json']) // 'json' -typeis(req, ['html', 'json']) // 'json' -typeis(req, ['application/*']) // 'application/json' -typeis(req, ['application/json']) // 'application/json' +typeis(req, ['json']) // => 'json' +typeis(req, ['html', 'json']) // => 'json' +typeis(req, ['application/*']) // => 'application/json' +typeis(req, ['application/json']) // => 'application/json' -typeis(req, ['html']) // false +typeis(req, ['html']) // => false ``` ### typeis.hasBody(request) @@ -68,33 +86,40 @@ if (typeis.hasBody(req)) { } ``` -### type = typeis.is(mediaType, types) +### typeis.is(mediaType, types) -`mediaType` is the [media type](https://tools.ietf.org/html/rfc6838) string. `types` is an array of types. +Checks if the `mediaType` is one of the `types`. If the `mediaType` is invalid +or does not matches any of the `types`, then `false` is returned. Otherwise, a +string of the type that matched is returned. - +The `mediaType` argument is expected to be a +[media type](https://tools.ietf.org/html/rfc6838) string. The `types` argument +is an array of type strings. -```js -var mediaType = 'application/json' +Each type in the `types` array can be one of the following: -typeis.is(mediaType, ['json']) // 'json' -typeis.is(mediaType, ['html', 'json']) // 'json' -typeis.is(mediaType, ['application/*']) // 'application/json' -typeis.is(mediaType, ['application/json']) // 'application/json' +- A file extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. + The full mime type will be returned if matched. +- A suffix such as `+json`. This can be combined with a wildcard such as + `*/vnd+json` or `application/*+json`. The full mime type will be returned + if matched. -typeis.is(mediaType, ['html']) // false -``` +Some examples to illustrate the inputs and returned value: -### Each type can be: + -- An extension name such as `json`. This name will be returned if matched. -- A mime type such as `application/json`. -- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. The full mime type will be returned if matched. -- A suffix such as `+json`. This can be combined with a wildcard such as `*/vnd+json` or `application/*+json`. The full mime type will be returned if matched. +```js +var mediaType = 'application/json' -`false` will be returned if no type matches or the content type is invalid. +typeis.is(mediaType, ['json']) // => 'json' +typeis.is(mediaType, ['html', 'json']) // => 'json' +typeis.is(mediaType, ['application/*']) // => 'application/json' +typeis.is(mediaType, ['application/json']) // => 'application/json' -`null` will be returned if the request does not have a body. +typeis.is(mediaType, ['html']) // => false +``` ## Examples @@ -134,13 +159,12 @@ app.use(function bodyParser (req, res, next) { [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/type-is.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/type-is/master +[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master +[node-version-image]: https://badgen.net/npm/node/type-is +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/type-is [npm-url]: https://npmjs.org/package/type-is -[node-version-image]: https://img.shields.io/node/v/type-is.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/type-is/master.svg +[npm-version-image]: https://badgen.net/npm/v/type-is +[travis-image]: https://badgen.net/travis/jshttp/type-is/master [travis-url]: https://travis-ci.org/jshttp/type-is -[coveralls-image]: https://img.shields.io/coveralls/jshttp/type-is/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master -[downloads-image]: https://img.shields.io/npm/dm/type-is.svg -[downloads-url]: https://npmjs.org/package/type-is diff --git a/server/node_modules/type-is/index.js b/server/node_modules/type-is/index.js index 4da7301..890ad76 100644 --- a/server/node_modules/type-is/index.js +++ b/server/node_modules/type-is/index.js @@ -254,6 +254,10 @@ function normalizeType (value) { */ function tryNormalizeType (value) { + if (!value) { + return null + } + try { return normalizeType(value) } catch (err) { diff --git a/server/node_modules/type-is/package.json b/server/node_modules/type-is/package.json index f990858..8568c75 100644 --- a/server/node_modules/type-is/package.json +++ b/server/node_modules/type-is/package.json @@ -1,27 +1,28 @@ { - "_from": "type-is@~1.6.15", - "_id": "type-is@1.6.15", + "_from": "type-is@~1.6.17", + "_id": "type-is@1.6.18", "_inBundle": false, - "_integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "_integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "_location": "/type-is", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "type-is@~1.6.15", + "raw": "type-is@~1.6.17", "name": "type-is", "escapedName": "type-is", - "rawSpec": "~1.6.15", + "rawSpec": "~1.6.17", "saveSpec": null, - "fetchSpec": "~1.6.15" + "fetchSpec": "~1.6.17" }, "_requiredBy": [ + "/body-parser", "/express" ], - "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "_shasum": "cab10fb4909e441c82842eafe1ad646c81804410", - "_spec": "type-is@~1.6.15", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "_shasum": "4e552cd05df09467dcbc4ef739de89f2cf37c131", + "_spec": "type-is@~1.6.17", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/body-parser", "bugs": { "url": "https://github.com/jshttp/type-is/issues" }, @@ -39,18 +40,20 @@ ], "dependencies": { "media-typer": "0.3.0", - "mime-types": "~2.1.15" + "mime-types": "~2.1.24" }, "deprecated": false, "description": "Infer the content-type of a request.", "devDependencies": { - "eslint": "3.19.0", - "eslint-config-standard": "7.1.0", - "eslint-plugin-markdown": "1.0.0-beta.4", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "2.1.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" + "eslint": "5.16.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.17.2", + "eslint-plugin-markdown": "1.0.0", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.1.1", + "eslint-plugin-standard": "4.0.0", + "mocha": "6.1.4", + "nyc": "14.0.0" }, "engines": { "node": ">= 0.6" @@ -75,8 +78,8 @@ "scripts": { "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + "test-cov": "nyc --reporter=html --reporter=text npm test", + "test-travis": "nyc --reporter=text npm test" }, - "version": "1.6.15" + "version": "1.6.18" } diff --git a/server/node_modules/unpipe/package.json b/server/node_modules/unpipe/package.json index a077131..c213520 100644 --- a/server/node_modules/unpipe/package.json +++ b/server/node_modules/unpipe/package.json @@ -1,27 +1,28 @@ { - "_from": "unpipe@~1.0.0", + "_from": "unpipe@1.0.0", "_id": "unpipe@1.0.0", "_inBundle": false, "_integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "_location": "/unpipe", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "unpipe@~1.0.0", + "raw": "unpipe@1.0.0", "name": "unpipe", "escapedName": "unpipe", - "rawSpec": "~1.0.0", + "rawSpec": "1.0.0", "saveSpec": null, - "fetchSpec": "~1.0.0" + "fetchSpec": "1.0.0" }, "_requiredBy": [ - "/finalhandler" + "/finalhandler", + "/raw-body" ], "_resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "_shasum": "b2bf4ee8514aae6165b4817829d21b2ef49904ec", - "_spec": "unpipe@~1.0.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/finalhandler", + "_spec": "unpipe@1.0.0", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/raw-body", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" diff --git a/server/node_modules/utils-merge/.travis.yml b/server/node_modules/utils-merge/.travis.yml deleted file mode 100644 index af92b02..0000000 --- a/server/node_modules/utils-merge/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: "node_js" -node_js: - - "0.4" - - "0.6" - - "0.8" - - "0.10" diff --git a/server/node_modules/utils-merge/LICENSE b/server/node_modules/utils-merge/LICENSE index e33bd10..76f6d08 100644 --- a/server/node_modules/utils-merge/LICENSE +++ b/server/node_modules/utils-merge/LICENSE @@ -1,6 +1,6 @@ -(The MIT License) +The MIT License (MIT) -Copyright (c) 2013 Jared Hanson +Copyright (c) 2013-2017 Jared Hanson 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 diff --git a/server/node_modules/utils-merge/README.md b/server/node_modules/utils-merge/README.md index 2f94e9b..0cb7117 100644 --- a/server/node_modules/utils-merge/README.md +++ b/server/node_modules/utils-merge/README.md @@ -1,10 +1,19 @@ # utils-merge +[![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge) +[![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge) +[![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge) +[![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge) +[![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge) + + Merges the properties from a source object into a destination object. ## Install - $ npm install utils-merge +```bash +$ npm install utils-merge +``` ## Usage @@ -16,19 +25,10 @@ merge(a, b); // => { foo: 'bar', bar: 'baz' } ``` -## Tests - - $ npm install - $ npm test - -[![Build Status](https://secure.travis-ci.org/jaredhanson/utils-merge.png)](http://travis-ci.org/jaredhanson/utils-merge) - -## Credits - - - [Jared Hanson](http://github.com/jaredhanson) - ## License [The MIT License](http://opensource.org/licenses/MIT) -Copyright (c) 2013 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> +Copyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> + + Sponsor diff --git a/server/node_modules/utils-merge/package.json b/server/node_modules/utils-merge/package.json index 56ef7c3..645f40e 100644 --- a/server/node_modules/utils-merge/package.json +++ b/server/node_modules/utils-merge/package.json @@ -1,27 +1,28 @@ { - "_from": "utils-merge@1.0.0", - "_id": "utils-merge@1.0.0", + "_from": "utils-merge@1.0.1", + "_id": "utils-merge@1.0.1", "_inBundle": false, - "_integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "_integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "_location": "/utils-merge", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "utils-merge@1.0.0", + "raw": "utils-merge@1.0.1", "name": "utils-merge", "escapedName": "utils-merge", - "rawSpec": "1.0.0", + "rawSpec": "1.0.1", "saveSpec": null, - "fetchSpec": "1.0.0" + "fetchSpec": "1.0.1" }, "_requiredBy": [ - "/express" + "/express", + "/passport-oauth2" ], - "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "_shasum": "0294fb922bb9375153541c4f7096231f287c8af8", - "_spec": "utils-merge@1.0.0", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "_shasum": "9f95710f50a267947b2ccc124741c1028427e713", + "_spec": "utils-merge@1.0.1", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Jared Hanson", "email": "jaredhanson@gmail.com", @@ -36,6 +37,7 @@ "description": "merge() utility function", "devDependencies": { "chai": "1.x.x", + "make-node": "0.3.x", "mocha": "1.x.x" }, "engines": { @@ -45,10 +47,11 @@ "keywords": [ "util" ], + "license": "MIT", "licenses": [ { "type": "MIT", - "url": "http://www.opensource.org/licenses/MIT" + "url": "http://opensource.org/licenses/MIT" } ], "main": "./index", @@ -60,5 +63,5 @@ "scripts": { "test": "mocha --reporter spec --require test/bootstrap/node test/*.test.js" }, - "version": "1.0.0" + "version": "1.0.1" } diff --git a/server/node_modules/vary/HISTORY.md b/server/node_modules/vary/HISTORY.md index 23d13de..f6cbcf7 100644 --- a/server/node_modules/vary/HISTORY.md +++ b/server/node_modules/vary/HISTORY.md @@ -1,3 +1,8 @@ +1.1.2 / 2017-09-23 +================== + + * perf: improve header token parsing speed + 1.1.1 / 2017-03-20 ================== diff --git a/server/node_modules/vary/index.js b/server/node_modules/vary/index.js index ac37a83..5b5e741 100644 --- a/server/node_modules/vary/index.js +++ b/server/node_modules/vary/index.js @@ -13,13 +13,6 @@ module.exports = vary module.exports.append = append -/** - * Regular expression to split on commas, trimming spaces - * @private - */ - -var ARRAY_SPLIT_REGEXP = / *, */ - /** * RegExp to match field-name in RFC 7230 sec 3.2 * @@ -101,7 +94,32 @@ function append (header, field) { */ function parse (header) { - return header.trim().split(ARRAY_SPLIT_REGEXP) + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = header.length; i < len; i++) { + switch (header.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(header.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(header.substring(start, end)) + + return list } /** diff --git a/server/node_modules/vary/package.json b/server/node_modules/vary/package.json index aa50ebf..9170231 100644 --- a/server/node_modules/vary/package.json +++ b/server/node_modules/vary/package.json @@ -1,27 +1,27 @@ { - "_from": "vary@~1.1.1", - "_id": "vary@1.1.1", + "_from": "vary@~1.1.2", + "_id": "vary@1.1.2", "_inBundle": false, - "_integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=", + "_integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "_location": "/vary", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "vary@~1.1.1", + "raw": "vary@~1.1.2", "name": "vary", "escapedName": "vary", - "rawSpec": "~1.1.1", + "rawSpec": "~1.1.2", "saveSpec": null, - "fetchSpec": "~1.1.1" + "fetchSpec": "~1.1.2" }, "_requiredBy": [ "/express" ], - "_resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", - "_shasum": "67535ebb694c1d52257457984665323f587e8d37", - "_spec": "vary@~1.1.1", - "_where": "/Users/stephengrider/workspace/FullstackWorkspace/prod/server/node_modules/express", + "_resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "_shasum": "2299f02c6ded30d4a5961b0b9f74524a18f634fc", + "_spec": "vary@~1.1.2", + "_where": "/Users/fredjabbari/Repo/REACT-MONGODB-UDEMY-STEPHEN-GRIDER003@PROD/FullstackReactCode/server/node_modules/express", "author": { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" @@ -33,11 +33,15 @@ "deprecated": false, "description": "Manipulate the HTTP Vary header", "devDependencies": { - "eslint": "3.18.0", - "eslint-config-standard": "7.1.0", - "eslint-plugin-markdown": "1.0.0-beta.4", + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.7.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "5.1.1", "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "2.1.1", + "eslint-plugin-standard": "3.0.1", "istanbul": "0.4.5", "mocha": "2.5.3", "supertest": "1.1.0" @@ -64,10 +68,11 @@ "url": "git+https://github.com/jshttp/vary.git" }, "scripts": { + "bench": "node benchmark/index.js", "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --bail --check-leaks test/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" }, - "version": "1.1.1" + "version": "1.1.2" } diff --git a/server/package-lock.json b/server/package-lock.json index 388c7e0..267f766 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -2,96 +2,221 @@ "name": "server", "version": "1.0.0", "lockfileVersion": 1, + "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/bson": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", + "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "requires": { + "@types/node": "*" + } + }, + "@types/mongodb": { + "version": "3.6.18", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.18.tgz", + "integrity": "sha512-JSVFt9p0rTfZ4EgzXmVHUB3ue00xe3CRbQho8nXfImzEDDM4O7I3po1bwbWl/EIbLENxUreZxqLOc8lvcnLVPA==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "@types/node": { + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=" + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } }, "addressparser": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=" + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } }, "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=" - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "async": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", - "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=" - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" - }, "async.ensureasync": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/async.ensureasync/-/async.ensureasync-0.5.2.tgz", - "integrity": "sha1-w8fkpOmzHZaHXVa4UEWYRG4eMF0=" + "integrity": "sha1-w8fkpOmzHZaHXVa4UEWYRG4eMF0=", + "requires": { + "async.util.ensureasync": "0.5.2" + } }, "async.queue": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/async.queue/-/async.queue-0.5.2.tgz", - "integrity": "sha1-jV2QgS4UgQZrwJBOjMFxKxfDvXw=" + "integrity": "sha1-jV2QgS4UgQZrwJBOjMFxKxfDvXw=", + "requires": { + "async.util.queue": "0.5.2" + } }, "async.util.arrayeach": { "version": "0.5.2", @@ -101,7 +226,11 @@ "async.util.ensureasync": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/async.util.ensureasync/-/async.util.ensureasync-0.5.2.tgz", - "integrity": "sha1-EJB/LL0GegYfma5tIuCM7TDbDWg=" + "integrity": "sha1-EJB/LL0GegYfma5tIuCM7TDbDWg=", + "requires": { + "async.util.restparam": "0.5.2", + "async.util.setimmediate": "0.5.2" + } }, "async.util.isarray": { "version": "0.5.2", @@ -126,7 +255,15 @@ "async.util.queue": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/async.util.queue/-/async.util.queue-0.5.2.tgz", - "integrity": "sha1-V/Zavho83yc9MavSirlUJfgiLuU=" + "integrity": "sha1-V/Zavho83yc9MavSirlUJfgiLuU=", + "requires": { + "async.util.arrayeach": "0.5.2", + "async.util.isarray": "0.5.2", + "async.util.map": "0.5.2", + "async.util.noop": "0.5.2", + "async.util.onlyonce": "0.5.2", + "async.util.setimmediate": "0.5.2" + } }, "async.util.restparam": { "version": "0.5.2", @@ -138,126 +275,262 @@ "resolved": "https://registry.npmjs.org/async.util.setimmediate/-/async.util.setimmediate-0.5.2.tgz", "integrity": "sha1-KBLrq/KlgCd1jUvHeT0cz68QJV8=" }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" }, "binary-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } }, "bluebird": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz", - "integrity": "sha1-AkpVFylTCIV/FPkfEQb8O1VfRGs=" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=" - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=" + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } }, "bottleneck": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-1.16.0.tgz", "integrity": "sha1-1s4TgIUnr8gLaQkvFWBmVeWyHxo=" }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=" + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } }, "bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", - "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" }, "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=" + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } }, - "commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "concat-map": { "version": "0.0.1", @@ -265,78 +538,70 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concurrently": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.5.0.tgz", - "integrity": "sha1-jPG3cHppFqeKT/W3e7BN7FSzebI=", - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=" - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=" - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dependencies": { - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=" - } - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=" - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=" - } + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.0.tgz", + "integrity": "sha512-v9I4Y3wFoXCSY2L73yYgwA9ESrQMpRn80jMcqMgHx720Hecz2GZAvTI6bREVST6lkddNypDKRN22qhK0X8Y00g==", + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "read-pkg": "^5.2.0", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" } }, "configstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", - "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-session": { "version": "2.0.0-beta.2", "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-2.0.0-beta.2.tgz", "integrity": "sha1-kbIBID/y7biXv9snGdraeEpI+xs=", + "requires": { + "cookies": "0.7.0", + "debug": "2.6.8", + "on-headers": "~1.0.1", + "safe-buffer": "5.0.1" + }, "dependencies": { "debug": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } }, "safe-buffer": { "version": "5.0.1", @@ -353,54 +618,57 @@ "cookies": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.0.tgz", - "integrity": "sha1-C8lh2RDDUlSYD8fJ7/XaEgEbvwA=" + "integrity": "sha1-C8lh2RDDUlSYD8fJ7/XaEgEbvwA=", + "requires": { + "depd": "~1.1.0", + "keygrip": "~1.0.1" + } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "date-fns": { - "version": "1.28.5", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.28.5.tgz", - "integrity": "sha1-JXz8RdMi30XvVlhmWWfuhBzXP68=" + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.22.1.tgz", + "integrity": "sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg==" }, "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "requires": { + "ms": "2.0.0" + } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "denque": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" }, "depd": { "version": "1.1.0", @@ -412,46 +680,67 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexify": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", - "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=" + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=" + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } }, "end-of-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", - "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=" + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-html": { "version": "1.0.3", @@ -464,721 +753,223 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "etag": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", - "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=" - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=" - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=" - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=" + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "express": { - "version": "4.15.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", - "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=" + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + } + } }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=" + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=" + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "finalhandler": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", - "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=" + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=" + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=" + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } }, - "forwarded": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", - "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "requires": { + "ini": "1.3.7" + } }, - "fresh": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", - "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "optional": true, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "block-stream": { - "version": "0.0.9", - "bundled": true - }, - "boom": { - "version": "2.10.1", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "optional": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "optional": true - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "optional": true - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true - }, - "rimraf": { - "version": "2.6.1", - "bundled": true - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "optional": true - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=" - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=" - }, - "got": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", - "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - } + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=" - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" - }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=" + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, - "hooks-fixed": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.0.tgz", - "integrity": "sha1-oB2JTVKsf2WZu7H2PfycQR33DLo=" + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-errors": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=" - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + } + } }, "iconv-lite": { "version": "0.4.15", @@ -1190,301 +981,246 @@ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "infinity-agent": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", - "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=" - }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, "ipaddr.js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", - "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=" + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "requires": { + "has": "^1.0.3" + } }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } }, "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=" - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-primitive": { + "is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "kareem": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.4.1.tgz", - "integrity": "sha1-7XYgAET6BB7zK02oJh4lU/EXNTE=" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" }, "keygrip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.1.tgz", "integrity": "sha1-sC+kgW7vIajEs1yp5Skh/8iaMOk=" }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } }, "latest-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", - "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=" + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "localtunnel": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.8.3.tgz", - "integrity": "sha1-3MWSL9hWUQN9S94k/ZMkjQsk6wU=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "requires": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, "dependencies": { "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=" - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=" - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.chunk": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=" - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=" - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "mailparser": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-0.6.2.tgz", - "integrity": "sha1-A8SGA5vfTfbNO2rcqqxBB9/bwGg=" + "integrity": "sha1-A8SGA5vfTfbNO2rcqqxBB9/bwGg=", + "requires": { + "encoding": "^0.1.12", + "mime": "^1.3.4", + "mimelib": "^0.3.0", + "uue": "^3.1.0" + } }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -1495,97 +1231,137 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=" - }, "mime": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" }, "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" }, "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=" + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "requires": { + "mime-db": "1.48.0" + } }, "mimelib": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/mimelib/-/mimelib-0.3.1.tgz", - "integrity": "sha1-eHrdJBXYJ6yzr27EvKHqlZZBiFM=" + "integrity": "sha1-eHrdJBXYJ6yzr27EvKHqlZZBiFM=", + "requires": { + "addressparser": "~1.0.1", + "encoding": "~0.1.12" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mongodb": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.27.tgz", - "integrity": "sha1-NBIgNNtm2YO89qta2yaiSnD+9uY=", + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.9.tgz", + "integrity": "sha512-1nSCKgSunzn/CXwgOWgbPHUWOO5OfERcuOWISmqd610jn0s8BU9K4879iJVabqgpPPbA6hO7rG48eq+fGED3Mg==", + "requires": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.0.3", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.12.13", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.13.tgz", + "integrity": "sha512-QGn1FCzZ8Z+mMGVg8oR2kQw4NmhLloCHsw1NqKWg3Yr7WfPzkE4pe7s9P6o5pkYGsku17n9mqMHowne7EFK/zQ==", + "requires": { + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.8", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.3", + "mquery": "3.2.5", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "13.5.2", + "sliced": "1.0.1" + }, "dependencies": { - "es6-promise": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" + "mongodb": { + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz", + "integrity": "sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ==", + "requires": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.0.3", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=" + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, - "mongodb-core": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.11.tgz", - "integrity": "sha1-HDh3bOsXSZepnCiGDu2QKNqbPho=" - }, - "mongoose": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.11.1.tgz", - "integrity": "sha1-JWC22J50SwWFfQJMq4sxYGZxbj4=" + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" }, "mpath": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz", - "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=" - }, - "mpromise": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz", - "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" }, "mquery": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.1.tgz", - "integrity": "sha1-mrNnSXFIAP8LtTpoHOS8TV8HyHs=", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", + "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, "dependencies": { "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" - }, - "sliced": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", - "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } } } }, @@ -1594,71 +1370,97 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "muri": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/muri/-/muri-1.2.1.tgz", - "integrity": "sha1-7H6lzmympSPrGrNbrNpfqBbJqjw=" - }, - "nan": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "optional": true - }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nested-error-stacks": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", - "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=" + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "nodemon": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz", - "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=" + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=" - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } }, "on-headers": { "version": "1.0.1", @@ -1666,79 +1468,109 @@ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" }, "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } }, "openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=" }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "optional-require": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", + "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==" }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=" + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, "package-json": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", - "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=" + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } }, "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "passport": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", - "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } }, "passport-google-oauth20": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-1.0.0.tgz", - "integrity": "sha1-O5YOih1w0dvnlGFcgnxoxAOSpdA=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", + "requires": { + "passport-oauth2": "1.x.x" + } }, "passport-oauth2": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.4.0.tgz", - "integrity": "sha1-9i+BWDy+EmCb585vFguTlaJ7hq0=" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.5.0.tgz", + "integrity": "sha512-kqBt6vR/5VlCK8iCx1/KpY42kQ+NEHZwsSyt4Y6STiNjU+wWICG1i8ucc1FapXDGO15C5O5VZz7+7vRzrDPXXQ==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } }, "passport-strategy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-parser/-/path-parser-2.0.2.tgz", - "integrity": "sha1-q5DtEFO2gmgdESCmkgj29qanNMI=" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/path-parser/-/path-parser-6.1.0.tgz", + "integrity": "sha512-nAB6J73z2rFcQP+870OHhpkHFj5kO4rPLc2Ol4Y3Ale7F6Hk1/cPKp7cQ8RznKF8FOSvu+YR9Xc6Gafk7DlpYA==", + "requires": { + "search-params": "3.0.0", + "tslib": "^1.10.0" + } }, "path-to-regexp": { "version": "0.1.7", @@ -1750,213 +1582,287 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "proxy-addr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", - "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=" + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } }, "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" - } - } + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=" - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } } } }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=" + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==" + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=" - }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } }, "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=" - }, - "remove-trailing-separator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", - "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=" + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dependencies": { - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - } + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" } }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==" + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "rx": { - "version": "2.3.24", - "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", - "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc=" + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } }, "search-params": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/search-params/-/search-params-1.3.0.tgz", - "integrity": "sha1-uh4cAdy9ii5BolI29gLyy/cQ1og=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/search-params/-/search-params-3.0.0.tgz", + "integrity": "sha512-8CYNl/bjkEhXWbDTU/K7c2jQtrnqEffIPyOLMqygW/7/b+ym8UtQumcAZjOfMLjZKR6AxK5tOr9fChbQZCzPqg==" }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } }, "send": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", - "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=" + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } }, "sendgrid": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/sendgrid/-/sendgrid-5.1.2.tgz", - "integrity": "sha1-IfHaDOLl6xF4Xhg6OGDGd0qw+Ck=" + "integrity": "sha1-IfHaDOLl6xF4Xhg6OGDGd0qw+Ck=", + "requires": { + "async.ensureasync": "^0.5.2", + "async.queue": "^0.5.2", + "bottleneck": "^1.12.0", + "debug": "^2.2.0", + "lodash.chunk": "^4.2.0", + "mailparser": "^0.6.1", + "sendgrid-rest": "^2.3.0" + } }, "sendgrid-rest": { "version": "2.4.0", @@ -1964,96 +1870,108 @@ "integrity": "sha512-3VRHhTnln17jPQNzBjEHO6u2Y7kLlhVnOvX0aGjr7yRVZpq5LXo0ilAFMsaHUfKVH+jFdCrHMAVLOAdtu6wLJA==" }, "serve-static": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", - "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=" + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } }, "spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=" }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=" - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=" + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==" + "spdx-license-ids": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==" }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=" + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } }, "strip-json-comments": { "version": "2.0.1", @@ -2061,62 +1979,84 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "stripe": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-4.23.1.tgz", - "integrity": "sha1-31KXcyPT7oh6B6xZBXA/zcBF0u4=", - "dependencies": { - "qs": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.0.4.tgz", - "integrity": "sha1-UQGdhHIMk5uCc36EVWp4Izjs6ns=" - } + "version": "8.154.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-8.154.0.tgz", + "integrity": "sha512-e+FQ+2PqDVXsm4MBXUDkQSnYqyJWdRr6JJvFI0QPCrgsi4qWWutFEyznGgplSgSdD3gMqgAeB+qhqo6pGSYMwQ==", + "requires": { + "@types/node": ">=8.1.0", + "qs": "^6.6.0" } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" }, - "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=" + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" }, - "touch": { + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=" + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=" + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } }, "tree-kill": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.1.0.tgz", - "integrity": "sha1-yWPc8DciiS7FnLpWnpQLcZVNFyk=" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=" + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } }, "uid2": { "version": "0.0.3", @@ -2124,9 +2064,20 @@ "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" }, "undefsafe": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", - "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "requires": { + "debug": "^2.2.0" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } }, "unpipe": { "version": "1.0.0", @@ -2134,9 +2085,51 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", - "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } }, "util-deprecate": { "version": "1.0.2", @@ -2144,39 +2137,49 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uue": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uue/-/uue-3.1.0.tgz", - "integrity": "sha1-XWfTcDDmbv67tLiqxG2vm1W++/Y=" + "integrity": "sha1-XWfTcDDmbv67tLiqxG2vm1W++/Y=", + "requires": { + "extend": "~3.0.0" + } }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, "vary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", - "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } }, "wrappy": { "version": "1.0.2", @@ -2184,24 +2187,44 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } }, "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yargs": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.29.0.tgz", - "integrity": "sha1-GquWYOrnnYuPZ1vK7qtu40ws9pw=" + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==" } } } diff --git a/server/package.json b/server/package.json index 73c09f6..ffab9af 100644 --- a/server/package.json +++ b/server/package.json @@ -18,18 +18,19 @@ "author": "", "license": "ISC", "dependencies": { - "body-parser": "^1.17.2", - "concurrently": "^3.5.0", + "body-parser": "^1.19.0", + "concurrently": "^6.2.0", "cookie-session": "^2.0.0-beta.2", - "express": "^4.15.3", - "localtunnel": "^1.8.3", - "lodash": "^4.17.4", - "mongoose": "^4.11.1", - "nodemon": "^1.11.0", - "passport": "^0.3.2", - "passport-google-oauth20": "^1.0.0", - "path-parser": "^2.0.2", + "express": "^4.17.1", + "localtunnel": "^2.0.1", + "lodash": "^4.17.21", + "mongodb": "^3.6.9", + "mongoose": "^5.12.13", + "nodemon": "^2.0.7", + "passport": "^0.4.1", + "passport-google-oauth20": "^2.0.0", + "path-parser": "^6.1.0", "sendgrid": "^5.1.2", - "stripe": "^4.23.1" + "stripe": "^8.154.0" } } From 7e6d43590f5e828a3e8de3390c8519a88d14a6fe Mon Sep 17 00:00:00 2001 From: gl3127 Date: Sun, 13 Jun 2021 22:54:09 -0500 Subject: [PATCH 2/6] init1 --- server/config/keys copy.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 server/config/keys copy.js diff --git a/server/config/keys copy.js b/server/config/keys copy.js new file mode 100644 index 0000000..04cde3b --- /dev/null +++ b/server/config/keys copy.js @@ -0,0 +1,6 @@ +module.exports = { + googleClientID: '548271082756-krvo7o9n25mpfd71e3k2g7rahlk7olo4.apps.googleusercontent.com', + googleClientSecret: 'LNtorf92cZqqVtxAniyo2PLT', + mongoURI: 'mongodb+srv://ffjabbari:15pishyy@emaily-dev.x7ckf.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', + cookieKey: 'fredman' +}; \ No newline at end of file From 20313d9d77615f65bcc6af70969408cdf38d13cf Mon Sep 17 00:00:00 2001 From: gl3127 Date: Mon, 14 Jun 2021 08:37:40 -0500 Subject: [PATCH 3/6] init3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 70ab159..ddd11b9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # FullstackReactCode -Companion repo to a course on Udemy.com. See here: https://www.udemy.com/node-with-react-fullstack-web-development +Companion repo to a course on Udemy.com. See here: https://www.udemy.com/node-with-react-fullstack-web-development. From 4dfa196c6b42de3238fead9ab34907d1ea88fa44 Mon Sep 17 00:00:00 2001 From: gl3127 Date: Mon, 14 Jun 2021 08:40:35 -0500 Subject: [PATCH 4/6] init4 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 70ab159..0343355 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # FullstackReactCode -Companion repo to a course on Udemy.com. See here: https://www.udemy.com/node-with-react-fullstack-web-development +Companion repo to a course on Udemy.com. See here: https://www.udemy.com/node-with-react-fullstack-web-development.. From 2e3e27c40b4325c68b4e76ac0f767e0410b855ee Mon Sep 17 00:00:00 2001 From: gl3127 Date: Mon, 14 Jun 2021 08:47:41 -0500 Subject: [PATCH 5/6] init5 --- server/config/keys copy.js | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 server/config/keys copy.js diff --git a/server/config/keys copy.js b/server/config/keys copy.js deleted file mode 100644 index 04cde3b..0000000 --- a/server/config/keys copy.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - googleClientID: '548271082756-krvo7o9n25mpfd71e3k2g7rahlk7olo4.apps.googleusercontent.com', - googleClientSecret: 'LNtorf92cZqqVtxAniyo2PLT', - mongoURI: 'mongodb+srv://ffjabbari:15pishyy@emaily-dev.x7ckf.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', - cookieKey: 'fredman' -}; \ No newline at end of file From 5a5f763e9eb1ff4e75261b9dfc61e7b8c5b8d440 Mon Sep 17 00:00:00 2001 From: gl3127 Date: Mon, 14 Jun 2021 13:51:17 -0500 Subject: [PATCH 6/6] init7F --- server/config/keys.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/server/config/keys.js b/server/config/keys.js index 04cde3b..0a7999f 100644 --- a/server/config/keys.js +++ b/server/config/keys.js @@ -1,6 +1,16 @@ -module.exports = { - googleClientID: '548271082756-krvo7o9n25mpfd71e3k2g7rahlk7olo4.apps.googleusercontent.com', - googleClientSecret: 'LNtorf92cZqqVtxAniyo2PLT', - mongoURI: 'mongodb+srv://ffjabbari:15pishyy@emaily-dev.x7ckf.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', - cookieKey: 'fredman' -}; \ No newline at end of file +// module.exports = { +// googleClientID: '548271082756-krvo7o9n25mpfd71e3k2g7rahlk7olo4.apps.googleusercontent.com', +// googleClientSecret: 'LNtorf92cZqqVtxAniyo2PLT', +// mongoURI: 'mongodb+srv://ffjabbari:15pishyy@emaily-dev.x7ckf.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', +// cookieKey: 'fredman' +// }; +process.env.NODE_ENV = 'dev'; +console.log('===>ENV:::', process.env.NODE_ENV); +// keys.js - figure out what set of credentials to return +if (process.env.NODE_ENV === 'production') { + // we are in production - return the prod set of keys + module.exports = require('./prod'); +} else { + // we are in development - return the dev keys!!! + module.exports = require('./dev'); +} \ No newline at end of file