├── README.md
├── .gitignore
├── node-find-recipe-step
├── test
│ ├── mocha.opts
│ └── index.spec.js
├── config.json
├── routes
│ ├── index.js
│ └── recipes.js
├── app.js
├── package.json
├── bin
│ └── www
├── unit.xml
├── README.md
├── recipes.json
└── package-lock.json
└── node-pagination-middleware
├── test
├── mocha.opts
├── mock.js
└── index.spec.js
├── config.json
├── routes
├── index.js
└── recipes.js
├── middleware.js
├── app.js
├── recipes.json
├── package.json
├── unit.xml
├── bin
└── www
└── README.md
/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules/
2 | **/yarn.lock
3 | **/package-lock.json
--------------------------------------------------------------------------------
/node-find-recipe-step/test/mocha.opts:
--------------------------------------------------------------------------------
1 | --reporter mocha-multi-reporters
2 | --reporter-options configFile=config.json
--------------------------------------------------------------------------------
/node-pagination-middleware/test/mocha.opts:
--------------------------------------------------------------------------------
1 | --reporter mocha-multi-reporters
2 | --reporter-options configFile=config.json
--------------------------------------------------------------------------------
/node-find-recipe-step/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "reporterEnabled": "spec, mocha-junit-reporter",
3 | "mochaJunitReporterReporterOptions": {
4 | "mochaFile": "unit.xml"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/node-pagination-middleware/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "reporterEnabled": "spec, mocha-junit-reporter",
3 | "mochaJunitReporterReporterOptions": {
4 | "mochaFile": "unit.xml"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/node-find-recipe-step/routes/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET home page. */
5 | router.get('/', function(req, res, next) {
6 | res.send('
HTML Data
');
7 | });
8 |
9 | module.exports = router;
10 |
--------------------------------------------------------------------------------
/node-pagination-middleware/routes/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET home page. */
5 | router.get('/', function(req, res, next) {
6 | res.send('HTML Data
');
7 | });
8 |
9 | module.exports = router;
10 |
--------------------------------------------------------------------------------
/node-pagination-middleware/middleware.js:
--------------------------------------------------------------------------------
1 | module.exports = (req, res, next) => {
2 | const { page = 1, limit = 3, q = '' } = req.query;
3 | req.context = {
4 | page: +page,
5 | limit: +limit,
6 | skip: (page - 1) * limit,
7 | searchTerm: q,
8 | search: new RegExp(q, "gi")
9 | };
10 | next();
11 | };
12 |
--------------------------------------------------------------------------------
/node-find-recipe-step/app.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var path = require('path');
3 | var cookieParser = require('cookie-parser');
4 | var logger = require('morgan');
5 |
6 | var indexRouter = require('./routes/index');
7 | var recipeRouter = require('./routes/recipes');
8 |
9 | var app = express();
10 |
11 | // view engine setup
12 | app.set('view engine', 'jade');
13 |
14 | app.use(logger('dev'));
15 | app.use(express.json());
16 | app.use(express.urlencoded({ extended: false }));
17 | app.use(cookieParser());
18 | app.use(express.static(path.join(__dirname, 'public')));
19 |
20 | app.use('/', indexRouter);
21 |
22 |
23 | module.exports = app;
24 |
--------------------------------------------------------------------------------
/node-pagination-middleware/test/mock.js:
--------------------------------------------------------------------------------
1 | const {assign} = require('lodash');
2 |
3 | /**
4 | *
5 | * @param options
6 | * @param options.baseUrl
7 | * @param options.hostName
8 | * @param options.url
9 | * @param options.originalUrl
10 | * @param options.path
11 | * @param options.ip
12 | * @constructor
13 | */
14 | function MockRequest(options) {
15 | assign(this, options);
16 | }
17 |
18 |
19 | function MockResponse() {
20 | this.headers = {};
21 | }
22 |
23 | MockResponse.prototype.setHeader = (name, value) => {
24 | if(!this.headers) this.headers = {};
25 | this.headers[name.toLowerCase()] = value;
26 | };
27 |
28 |
29 | module.exports = {
30 | Request: MockRequest,
31 | Response: MockResponse
32 | }
33 |
--------------------------------------------------------------------------------
/node-pagination-middleware/app.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var path = require('path');
3 | var cookieParser = require('cookie-parser');
4 | var logger = require('morgan');
5 | var middleware = require('./middleware');
6 |
7 | var indexRouter = require('./routes/index');
8 | var recipesRouter = require('./routes/recipes');
9 |
10 | var app = express();
11 |
12 | // view engine setup
13 | app.set('view engine', 'jade');
14 |
15 | app.use(logger('dev'));
16 | app.use(express.json());
17 | app.use(express.urlencoded({ extended: false }));
18 | app.use(cookieParser());
19 | app.use(express.static(path.join(__dirname, 'public')));
20 |
21 | app.use('/', indexRouter);
22 |
23 | app.use('/recipes', recipesRouter);
24 |
25 |
26 | module.exports = app;
27 |
--------------------------------------------------------------------------------
/node-pagination-middleware/recipes.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id" : 1,
4 | "name": "Crock Pot Roast"
5 | },
6 | {
7 | "id" : 2,
8 | "name": "Roasted Asparagus"
9 | },
10 | {
11 | "id" : 3,
12 | "name": "Curried Lentils and Rice"
13 | },
14 | {
15 | "id" : 4,
16 | "name": "Big Night Pizza"
17 | },
18 | {
19 | "id" : 5,
20 | "name": "Cranberry and Apple Stuffed Acorn Squash Recipe"
21 | },
22 | {
23 | "id" : 6,
24 | "name": "Mic's Yorkshire Puds"
25 | },
26 | {
27 | "id" : 7,
28 | "name": "Old-Fashioned Oatmeal Cookies"
29 | },
30 | {
31 | "id" : 8,
32 | "name": "Blueberry Oatmeal Squares"
33 | },
34 | {
35 | "id" : 9,
36 | "name": "Curried chicken salad"
37 | }
38 | ]
39 |
--------------------------------------------------------------------------------
/node-find-recipe-step/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "express-routes",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node bin/www",
7 | "prestart": "npm install",
8 | "pretest": "npm install",
9 | "test": "cross-env PORT=8001 ./node_modules/.bin/mocha test"
10 | },
11 | "dependencies": {
12 | "bluebird": "^3.7.2",
13 | "chai": "^4.2.0",
14 | "chai-http": "^4.3.0",
15 | "cookie-parser": "~1.4.4",
16 | "debug": "~2.6.9",
17 | "express": "~4.16.1",
18 | "jade": "~1.11.0",
19 | "mocha": "^7.1.0",
20 | "mocha-junit-reporter": "^1.23.3",
21 | "mocha-multi-reporters": "^1.1.7",
22 | "morgan": "~1.9.1"
23 | },
24 | "devDependencies": {
25 | "cross-env": "^7.0.2"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/node-pagination-middleware/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "express-pagination-middleware",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node bin/www",
7 | "prestart": "npm install",
8 | "pretest": "npm install",
9 | "test": "cross-env PORT=8001 ./node_modules/.bin/mocha test"
10 | },
11 | "dependencies": {
12 | "bluebird": "^3.7.2",
13 | "chai": "^4.2.0",
14 | "chai-http": "^4.3.0",
15 | "cookie-parser": "~1.4.4",
16 | "debug": "~2.6.9",
17 | "express": "~4.16.1",
18 | "jade": "~1.11.0",
19 | "mocha": "^7.1.0",
20 | "mocha-junit-reporter": "^1.23.3",
21 | "mocha-multi-reporters": "^1.1.7",
22 | "morgan": "~1.9.1",
23 | "shortid": "^2.2.15",
24 | "sinon": "^9.0.0"
25 | },
26 | "devDependencies": {
27 | "cross-env": "^7.0.2",
28 | "lodash": "^4.17.15"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/node-pagination-middleware/routes/recipes.js:
--------------------------------------------------------------------------------
1 | var recipes = require('../recipes.json');
2 | var router = require('express').Router();
3 |
4 |
5 | router.get('/', async (req, res) => {
6 | const {context} = req;
7 | const page = context && context.page || req.query.page
8 | const limit = context && context.limit || req.query.limit
9 | const skip = context && context.skip || req.query.skip || ((page-1) * limit)
10 | const search = context && context.searchTerm || req.query.q;
11 | let results = [];
12 | if (search) {
13 | results = recipes.filter(({name}) => name.match(search))
14 | } else {
15 | results = recipes
16 | }
17 | results = await results.slice(skip, (skip + limit))
18 | res.json({
19 | page: Number(page),
20 | limit: Number(limit),
21 | skip: Number(skip),
22 | search: search,
23 | data: results || []
24 | });
25 | });
26 |
27 | module.exports = router;
28 |
29 |
--------------------------------------------------------------------------------
/node-find-recipe-step/routes/recipes.js:
--------------------------------------------------------------------------------
1 | var recipes = require('../recipes.json');
2 | var router = require('express').Router();
3 | var recipes = require('../recipes.json');
4 |
5 | router.get('/step/:id', (req, res) => {
6 | const { id } = req.params;
7 |
8 | if ((id && isNaN(id)) || !id) {
9 | return res.status(400).send("NOT_FOUND");
10 | }
11 | // find recipe step
12 | const recipe = recipes[+id - 1];
13 |
14 | if (!recipe) {
15 | return res.status(400).send("NOT_FOUND");
16 | }
17 |
18 | let { elapsedTime = '' } = req.query;
19 | if (!elapsedTime) {
20 | elapsedTime = 0;
21 | }
22 | elapsedTime = +elapsedTime;
23 |
24 | let stop = false;
25 | const stepIndex = recipe.timers.reduce((prev, currentTime, index) => {
26 | if (!stop) {
27 | if (currentTime >= elapsedTime) {
28 | stop = true;
29 | }
30 | return index;
31 | }
32 |
33 | return prev;
34 | }, 0);
35 |
36 | res.json({
37 | index: stepIndex
38 | });
39 | });
40 |
41 | module.exports = router;
42 |
--------------------------------------------------------------------------------
/node-find-recipe-step/test/index.spec.js:
--------------------------------------------------------------------------------
1 | const chai = require('chai');
2 | const chaiHttp = require('chai-http');
3 | const server = require('../app');
4 | const recipes = require('../recipes.json');
5 | const should = chai.should();
6 |
7 | chai.use(chaiHttp);
8 |
9 | describe('express_recipes_routes', () => {
10 |
11 | it('Should return 400 for /recipes/step/:id if id is not valid', (done) => {
12 | chai.request(server)
13 | .get('/recipes/step/asdasd')
14 | .then(response => {
15 | response.status.should.eql(400);
16 | response.text.should.eql('NOT_FOUND');
17 | done();
18 | })
19 | });
20 |
21 |
22 | it('Should respond with 0 if elapsed time is 0', (done) => {
23 | chai.request(server)
24 | .get('/recipes/step/5?elapsedTime=0')
25 | .then(response => {
26 | response.status.should.eql(200);
27 | response.body.should.eql({index : 0});
28 | done();
29 | })
30 | });
31 |
32 | it('Should respond back with the correct step - 1', (done) => {
33 | chai.request(server)
34 | .get('/recipes/step/4?elapsedTime=11')
35 | .then(response => {
36 | response.status.should.eql(200);
37 | response.body.should.eql({index : 0});
38 | done();
39 | })
40 | })
41 |
42 | it('Should respond back with the correct step - 2', (done) => {
43 | chai.request(server)
44 | .get('/recipes/step/2?elapsedTime=9')
45 | .then(response => {
46 | response.status.should.eql(200);
47 | response.body.should.eql({index : 6});
48 | done();
49 | })
50 | })
51 |
52 |
53 | });
54 |
--------------------------------------------------------------------------------
/node-pagination-middleware/unit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/node-find-recipe-step/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('express-basics:server');
9 | var http = require('http');
10 |
11 | /**
12 | * Get port from environment and store in Express.
13 | */
14 |
15 | var port = normalizePort(process.env.PORT || '8000');
16 | app.set('port', port);
17 |
18 | /**
19 | * Create HTTP server.
20 | */
21 |
22 | var server = http.createServer(app);
23 |
24 | /**
25 | * Listen on provided port, on all network interfaces.
26 | */
27 |
28 | server.listen(port);
29 | server.on('error', onError);
30 | server.on('listening', onListening);
31 |
32 | /**
33 | * Normalize a port into a number, string, or false.
34 | */
35 |
36 | function normalizePort(val) {
37 | var port = parseInt(val, 10);
38 |
39 | if (isNaN(port)) {
40 | // named pipe
41 | return val;
42 | }
43 |
44 | if (port >= 0) {
45 | // port number
46 | return port;
47 | }
48 |
49 | return false;
50 | }
51 |
52 | /**
53 | * Event listener for HTTP server "error" event.
54 | */
55 |
56 | function onError(error) {
57 | if (error.syscall !== 'listen') {
58 | throw error;
59 | }
60 |
61 | var bind = typeof port === 'string'
62 | ? 'Pipe ' + port
63 | : 'Port ' + port;
64 |
65 | // handle specific listen errors with friendly messages
66 | switch (error.code) {
67 | case 'EACCES':
68 | console.error(bind + ' requires elevated privileges');
69 | process.exit(1);
70 | break;
71 | case 'EADDRINUSE':
72 | console.error(bind + ' is already in use');
73 | process.exit(1);
74 | break;
75 | default:
76 | throw error;
77 | }
78 | }
79 |
80 | /**
81 | * Event listener for HTTP server "listening" event.
82 | */
83 |
84 | function onListening() {
85 | var addr = server.address();
86 | var bind = typeof addr === 'string'
87 | ? 'pipe ' + addr
88 | : 'port ' + addr.port;
89 | debug('Listening on ' + bind);
90 | }
91 |
--------------------------------------------------------------------------------
/node-pagination-middleware/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('express-basics:server');
9 | var http = require('http');
10 |
11 | /**
12 | * Get port from environment and store in Express.
13 | */
14 |
15 | var port = normalizePort(process.env.PORT || '8000');
16 | app.set('port', port);
17 |
18 | /**
19 | * Create HTTP server.
20 | */
21 |
22 | var server = http.createServer(app);
23 |
24 | /**
25 | * Listen on provided port, on all network interfaces.
26 | */
27 |
28 | server.listen(port);
29 | server.on('error', onError);
30 | server.on('listening', onListening);
31 |
32 | /**
33 | * Normalize a port into a number, string, or false.
34 | */
35 |
36 | function normalizePort(val) {
37 | var port = parseInt(val, 10);
38 |
39 | if (isNaN(port)) {
40 | // named pipe
41 | return val;
42 | }
43 |
44 | if (port >= 0) {
45 | // port number
46 | return port;
47 | }
48 |
49 | return false;
50 | }
51 |
52 | /**
53 | * Event listener for HTTP server "error" event.
54 | */
55 |
56 | function onError(error) {
57 | if (error.syscall !== 'listen') {
58 | throw error;
59 | }
60 |
61 | var bind = typeof port === 'string'
62 | ? 'Pipe ' + port
63 | : 'Port ' + port;
64 |
65 | // handle specific listen errors with friendly messages
66 | switch (error.code) {
67 | case 'EACCES':
68 | console.error(bind + ' requires elevated privileges');
69 | process.exit(1);
70 | break;
71 | case 'EADDRINUSE':
72 | console.error(bind + ' is already in use');
73 | process.exit(1);
74 | break;
75 | default:
76 | throw error;
77 | }
78 | }
79 |
80 | /**
81 | * Event listener for HTTP server "listening" event.
82 | */
83 |
84 | function onListening() {
85 | var addr = server.address();
86 | var bind = typeof addr === 'string'
87 | ? 'pipe ' + addr
88 | : 'port ' + addr.port;
89 | debug('Listening on ' + bind);
90 | }
91 |
--------------------------------------------------------------------------------
/node-find-recipe-step/unit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/node-pagination-middleware/README.md:
--------------------------------------------------------------------------------
1 | # Express: Pagination Middleware
2 |
3 | You have been given the task to write an Express middleware that has to standardize the query, search, and projection parameters for all the endpoints.
4 |
5 | The middleware should parse the query parameter from the URL and create an object containing the following properties:
6 |
7 | - `page:` The page of the resource to fetch. Defaults to 1. [NUMBER]
8 | - `limit:` The number of items to return in a response. Defaults to 3. [NUMBER]
9 | - `skip:` The actual number of items that have to skip while fetching the data. Its value is ((page - 1) * limit). [NUMBER]
10 | - `searchTerm:` The search term to be used in the data-store query. The term is extracted from the q query parameter. [STRING]
11 | - `search:` A Regex expression that can be evaluated to match the names of the items in the recipes. The search should be global and case insensitive ("gi"). [RegexP]
12 |
13 |
14 | The generated object should then be added to the context property in the Express request object, and the control should be forwarded using the next function.
15 |
16 | ### Routes
17 | - `/recipes?page&limit&q` - The route to fetch all the recipes from the data-store. Optional query parameters `page`, `limit`, and `q` help in controlling the number and position of recipes sent back as a response by the server.
18 |
19 | ### Examples
20 | - `/recipes - a GET request to get all recipes`
21 | ```json
22 | {
23 | "page":1,
24 | "limit":3,
25 | "skip":0,
26 | "data":[
27 | {
28 | "id":1,
29 | "name":"Roast"
30 | },
31 | {
32 | "id":2,
33 | "name":"Asparagus"
34 | },
35 | {
36 | "id":3,
37 | "name":"Rice"
38 | }
39 | ]
40 | }
41 | ```
42 |
43 | - `/recipes?page=1&limit=2`
44 | ```json
45 | {
46 | "page":1,
47 | "limit":2,
48 | "skip":0,
49 | "data":[
50 | {
51 | "id":1,
52 | "name":"Roast"
53 | },
54 | {
55 | "id":2,
56 | "name":"Asparagus"
57 | }
58 | ]
59 | }
60 | ```
61 |
62 | - `/recipes?page=2&limit=3`
63 | ```json
64 | {
65 | "page":2,
66 | "limit":3,
67 | "skip":3,
68 | "data":[
69 | {
70 | "id":4,
71 | "name":"Pizza"
72 | },
73 | {
74 | "id":5,
75 | "name":"Recipe"
76 | },
77 | {
78 | "id":6,
79 | "name":"Puds"
80 | }
81 | ]
82 | }
83 | ```
84 |
85 | - `/recipes?page=1&limit=3&q=cr`
86 | ```json
87 | {
88 | "page":1,
89 | "limit":3,
90 | "skip":0,
91 | "search":"cr",
92 | "data":[
93 | {
94 | "id":1,
95 | "name":"Crock"
96 | },
97 | {
98 | "id":5,
99 | "name":"Cranberry"
100 | }
101 | ]
102 | }
103 | ```
104 |
105 | ### Project Specifications
106 |
107 | **Read-Only Paths**
108 | - test
109 | - bin
110 |
111 | **Commands**
112 | - run: `npm start`
113 | - install: `npm install`
114 | - test: `npm test`
115 |
--------------------------------------------------------------------------------
/node-find-recipe-step/README.md:
--------------------------------------------------------------------------------
1 | # Express: Find Recipe Step
2 |
3 | The request to the route `/recipes/step/:id?elapsedTime` returns the index of the current step of the recipe based on the elapsed time in the format `{"index: currentIndex}`.
4 |
5 | If the ID passed in the URL is missing or is not a valid number, the server should respond with the status code 400 and the string message `NOT_FOUND` in the body of the response. If the elapsedTime query parameter is not present in the URL, it should default to 0.
6 |
7 |
8 | _Note: Elapsed time should be interpreted as a Number, and the unit of measurement is the same as the unit of measurement for the timers (i.e., minutes)._
9 |
10 | Each Recipe object has a list of steps, stored in the steps property, and the corresponding timers, stored in the timers property. The steps and timers are two different arrays, but they are interpreted in combination with each other. The time required to finish step 1 (index 0) of the steps array is stored in the 0th index of the timer array.
11 |
12 | ```json
13 | {
14 | "id": 2,
15 | "name": "Roasted Asparagus",
16 | "steps": [
17 | "Preheat oven to 425°F.",
18 | "Cut off the woody bottom part of the asparagus spears and discard.",
19 | "With a vegetable peeler, peel off the skin on the bottom 2-3 inches of the spears (this keeps the asparagus from being all and if you eat asparagus you know what I mean by that).",
20 | "Place asparagus on foil-lined baking sheet and drizzle with olive oil.",
21 | "Sprinkle with salt.",
22 | "With your hands, roll the asparagus around until they are evenly coated with oil and salt.",
23 | "Roast for 10-15 minutes, depending on the thickness of your stalks and how tender you like them.",
24 | "They should be tender when pierced with the tip of a knife.",
25 | "The tips of the spears will get very brown but watch them to prevent burning.",
26 | "They are great plain, but sometimes I serve them with a light vinaigrette if we need something acidic to balance out our meal."
27 | ],
28 | "timers": [
29 | 0,
30 | 0,
31 | 0,
32 | 0,
33 | 0,
34 | 0,
35 | 10,
36 | 0,
37 | 0,
38 | 0
39 | ]
40 | },
41 | ```
42 |
43 | ### Routes
44 | - `/recipes/step/:id?elapsedTime` - The id parameter should be used to filter the results based on the ID of the object provided. If the ID is not valid or is not a valid number, the server should send a status code 400 with `NOT_FOUND` in the body of the response.
45 |
46 | ### Examples
47 | - `/recipes/step/4?elapsedTime=11`
48 | ```text
49 | Outptut - {index: 0}
50 | ```
51 |
52 | #### Explanation
53 | The ID of the recipe in the URL is 4. The recipe with ID 4 has the following properties:
54 | ```json
55 | {
56 | "id": 4,
57 | "name": "Big Night Pizza",
58 | "steps": [
59 | "Add hot water to yeast in a large bowl and let sit for 15 minutes.",
60 | "Mix in oil, sugar, salt, and flour and let sit for 1 hour.",
61 | ...
62 | ],
63 | "timers": [
64 | 15,
65 | 60,
66 | ...
67 | ]
68 | }
69 | ```
70 |
71 |
72 | The elapsed time sent as query param is 11. This roughly translates to, "Which step will be active for this recipe when 11 minutes have passed after starting the recipe?"
73 |
74 | The step at index 0 has a timer property of 15. So after 11 minutes, step 1 will be the current step, and its index is 0, which is the final output.
75 |
76 | - `/recipes/step/wqw`
77 | ```text
78 | Status Code - 400
79 | Body - NOT_FOUND
80 | ```
81 |
82 | ### Project Specifications
83 |
84 | **Read-Only Paths**
85 | - test
86 | - bin
87 | - recipes.json
88 |
89 | **Commands**
90 | - run: `npm start`
91 | - install: `npm install`
92 | - test: `npm test`
93 |
--------------------------------------------------------------------------------
/node-pagination-middleware/test/index.spec.js:
--------------------------------------------------------------------------------
1 | const chai = require('chai');
2 | const chaiHttp = require('chai-http');
3 | const server = require('../app');
4 | const should = chai.should();
5 | const sinon = require('sinon');
6 | const middleware = require('../middleware');
7 | const {Request, Response} = require('./mock');
8 |
9 | chai.use(chaiHttp);
10 |
11 | describe('express_pagination_middleware', () => {
12 | let req, res, next;
13 | beforeEach(() => {
14 | req = new Request({
15 | url: '/recipes',
16 | query: {}
17 | });
18 | res = new Response();
19 | next = sinon.stub()
20 | });
21 |
22 | it('Should have the context object in the request', () => {
23 | middleware(req, res, next);
24 | req.should.have.property('context');
25 | });
26 |
27 | it('Should have property id, timestamp, path in trace object', () => {
28 | middleware(req, res, next);
29 | req.context.should.have.property('page');
30 | req.context.should.have.property('limit');
31 | req.context.should.have.property('skip');
32 | req.context.should.have.property('search');
33 | req.context.should.have.property('searchTerm');
34 | });
35 |
36 | it('Should have the default page, limit and skip property values', () => {
37 | middleware(req, res, next);
38 | req.context.page.should.equal(1);
39 | req.context.skip.should.equal(0);
40 | req.context.limit.should.equal(3);
41 | });
42 |
43 | it('Should set the correct skip value based on page and limit', () => {
44 | req.query.page = 6;
45 | req.query.limit = 25;
46 | middleware(req, res, next);
47 | req.context.page.should.equal(6);
48 | req.context.skip.should.equal(125);
49 | req.context.limit.should.equal(25);
50 | });
51 |
52 |
53 | it('Should have a valid search property in context object', () => {
54 | const term = [...Array(10)].map(_ => (Math.random() * 36 | 0).toString(36)).join``;
55 | req.query.q = term;
56 | middleware(req, res, next);
57 | req.context.searchTerm.should.equal(term);
58 | })
59 |
60 | it('Should respond with the correct data - 1 ', (done) => {
61 | chai.request(server)
62 | .get('/recipes?q=c&page=1&limit=4')
63 | .then(({body}) => {
64 | body.page.should.equal(1);
65 | body.skip.should.equal(0);
66 | body.limit.should.equal(4);
67 | body.search.should.equal('c');
68 | body.data.length.should.equal(4);
69 | body.data.forEach(d => {
70 | switch (d.id) {
71 | case 1:
72 | d.name.should.equal('Crock Pot Roast')
73 | break;
74 |
75 | case 3:
76 | d.name.should.equal('Curried Lentils and Rice');
77 | break;
78 |
79 | case 5:
80 | d.name.should.equal('Cranberry and Apple Stuffed Acorn Squash Recipe');
81 | break;
82 |
83 | case 6:
84 | d.name.should.equal("Mic's Yorkshire Puds")
85 | break;
86 | }
87 | })
88 | done();
89 | })
90 | });
91 |
92 | it('Should respond with the correct data - 2', (done) => {
93 | chai.request(server)
94 | .get('/recipes?page=3&limit=4')
95 | .then(({body}) => {
96 | body.data.length.should.equal(1);
97 | body.data[0].name.should.equal('Curried chicken salad');
98 | done();
99 | })
100 | });
101 | });
102 |
--------------------------------------------------------------------------------
/node-find-recipe-step/recipes.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Crock Pot Roast",
5 | "steps": [
6 | "Place beef roast in crock pot.",
7 | "Mix the dried mixes together in a bowl and sprinkle over the roast.",
8 | "Pour the water around the roast.",
9 | "Cook on low for 7-9 hours."
10 | ],
11 | "timers": [
12 | 0,
13 | 0,
14 | 0,
15 | 420
16 | ]
17 | },
18 | {
19 | "id": 2,
20 | "name": "Roasted Asparagus",
21 | "steps": [
22 | "Preheat oven to 425°F.",
23 | "Cut off the woody bottom part of the asparagus spears and discard.",
24 | "With a vegetable peeler, peel off the skin on the bottom 2-3 inches of the spears (this keeps the asparagus from being all and if you eat asparagus you know what I mean by that).",
25 | "Place asparagus on foil-lined baking sheet and drizzle with olive oil.",
26 | "Sprinkle with salt.",
27 | "With your hands, roll the asparagus around until they are evenly coated with oil and salt.",
28 | "Roast for 10-15 minutes, depending on the thickness of your stalks and how tender you like them.",
29 | "They should be tender when pierced with the tip of a knife.",
30 | "The tips of the spears will get very brown but watch them to prevent burning.",
31 | "They are great plain, but sometimes I serve them with a light vinaigrette if we need something acidic to balance out our meal."
32 | ],
33 | "timers": [
34 | 0,
35 | 0,
36 | 0,
37 | 0,
38 | 0,
39 | 0,
40 | 10,
41 | 0,
42 | 0,
43 | 0
44 | ]
45 | },
46 | {
47 | "id": 3,
48 | "name": "Curried Lentils and Rice",
49 | "steps": [
50 | "Bring broth to a low boil.",
51 | "Add curry powder and salt.",
52 | "Cook lentils for 20 minutes.",
53 | "Add rice and simmer for 20 minutes.",
54 | "Enjoy!"
55 | ],
56 | "timers": [
57 | 0,
58 | 0,
59 | 20,
60 | 20,
61 | 0
62 | ]
63 | },
64 | {
65 | "id": 4,
66 | "name": "Big Night Pizza",
67 | "steps": [
68 | "Add hot water to yeast in a large bowl and let sit for 15 minutes.",
69 | "Mix in oil, sugar, salt, and flour and let sit for 1 hour.",
70 | "Knead the dough and spread onto a pan.",
71 | "Spread pizza sauce and sprinkle cheese.",
72 | "Add any optional toppings as you wish.",
73 | "Bake at 400 deg Fahrenheit for 15 minutes.",
74 | "Enjoy!"
75 | ],
76 | "timers": [
77 | 15,
78 | 60,
79 | 0,
80 | 0,
81 | 0,
82 | 15,
83 | 0
84 | ]
85 | },
86 | {
87 | "id": 5,
88 | "name": "Cranberry and Apple Stuffed Acorn Squash Recipe",
89 | "steps": [
90 | "Cut squash in half, remove seeds.",
91 | "Place squash in baking dish, cut-side down.",
92 | "Pour 1/4-inch water into dish.",
93 | "Bake for 30 minutes at 350 degrees F.",
94 | "In large bowl, combine remaining ingredients.",
95 | "Remove squash from oven, fill with mix.",
96 | "Bake for 30-40 more minutes, until squash tender.",
97 | "Enjoy!"
98 | ],
99 | "timers": [
100 | 0,
101 | 0,
102 | 0,
103 | 30,
104 | 0,
105 | 0,
106 | 30,
107 | 0
108 | ]
109 | },
110 | {
111 | "id": 6,
112 | "name": "Mic's Yorkshire Puds",
113 | "steps": [
114 | "Put the flour and some seasoning into a large bowl.",
115 | "Stir in eggs, one at a time.",
116 | "Whisk in milk until you have a smooth batter.",
117 | "Chill in the fridge for at least 30 minutes.",
118 | "Heat oven to 220C/gas mark 7.",
119 | "Pour the oil into the holes of a 8-hole muffin tin.",
120 | "Heat tin in the oven for 5 minutes.",
121 | "Ladle the batter mix into the tin.",
122 | "Bake for 30 minutes until well browned and risen."
123 | ],
124 | "timers": [
125 | 0,
126 | 0,
127 | 0,
128 | 30,
129 | 0,
130 | 0,
131 | 5,
132 | 0,
133 | 30
134 | ]
135 | },
136 | {
137 | "id": 7,
138 | "name": "Old-Fashioned Oatmeal Cookies",
139 | "steps": [
140 | "Simmer raisins and water over medium heat until raisins are plump, about 15 minutes.",
141 | "Drain raisins, reserving the liquid.",
142 | "Add enough water to reserved liquid to measure 1/2 cup.",
143 | "Heat oven to 400°.",
144 | "Mix thoroughly shortening, sugar, eggs and vanilla.",
145 | "Stir in reserved liquid.",
146 | "Blend in remaining ingredients.",
147 | "Drop dough by rounded teaspoonfuls about 2 inches apart onto ungreased baking sheet.",
148 | "Bake 8 to 10 minutes or until light brown.",
149 | "About 6 1/2 dozen cookies."
150 | ],
151 | "timers": [
152 | 15,
153 | 0,
154 | 0,
155 | 0,
156 | 0,
157 | 0,
158 | 0,
159 | 0,
160 | 8,
161 | 0
162 | ]
163 | },
164 | {
165 | "id": 8,
166 | "name": "Blueberry Oatmeal Squares",
167 | "steps": [
168 | "Filling: In saucepan, bring blueberries, sugar and orange juice to boil; reduce heat and simmer until tender, about 10 minutes.",
169 | "Whisk cornstarch with 2 tbsp (25 mL) water; whisk into blueberries and boil, stirring, until thickened, about 1 minute.",
170 | "Place plastic wrap directly on surface; refrigerate until cooled, about 1 hour.",
171 | "In large bowl, whisk together oats, flour, sugar, orange rind and salt ; with pastry blender, cut in butter until in coarse crumbs.",
172 | "Press half into 8-inch (2 L) square parchment paper–lined metal cake pan; spread with blueberry filling.",
173 | "Bake in centre of 350°F oven until light golden, about 45 minutes.",
174 | "Let cool on rack before cutting into squares.",
175 | "(Make-ahead: Cover and refrigerate for up to 2 days or overwrap with heavy-duty foil and freeze for up to 2 weeks.)"
176 | ],
177 | "timers": [
178 | 10,
179 | 1,
180 | 60,
181 | 0,
182 | 0,
183 | 45,
184 | 0,
185 | 0
186 | ]
187 | },
188 | {
189 | "id": 9,
190 | "name": "Curried chicken salad",
191 | "steps": [
192 | "ARRANGE chicken in a single layer in a large pot.",
193 | "Add water to just cover.",
194 | "Bring to a boil over medium-high.",
195 | "Flip chicken, reduce heat to medium and simmer until cooked, about 6 more min.",
196 | "Cool.",
197 | "STIR mayo with lemon zest, juice, curry and salt in large bowl.",
198 | "Using 2 forks, shred chicken, then stir into mayo mixture with mango, cranberries, green onions and celery.",
199 | "Divide among muffins with lettuce leaves",
200 | "Sandwich with tops"
201 | ],
202 | "timers": [
203 | 0,
204 | 0,
205 | 0,
206 | 6,
207 | 0,
208 | 0,
209 | 0,
210 | 0,
211 | 0
212 | ]
213 | }
214 | ]
215 |
--------------------------------------------------------------------------------
/node-find-recipe-step/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "express-routes",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/chai": {
8 | "version": "4.2.9",
9 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.9.tgz",
10 | "integrity": "sha512-NeXgZj+MFL4izGqA4sapdYzkzQG+MtGra9vhQ58dnmDY++VgJaRUws+aLVV5zRJCYJl/8s9IjMmhiUw1WsKSmw=="
11 | },
12 | "@types/cookiejar": {
13 | "version": "2.1.1",
14 | "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz",
15 | "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw=="
16 | },
17 | "@types/node": {
18 | "version": "13.7.7",
19 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz",
20 | "integrity": "sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg=="
21 | },
22 | "@types/superagent": {
23 | "version": "3.8.7",
24 | "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz",
25 | "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==",
26 | "requires": {
27 | "@types/cookiejar": "*",
28 | "@types/node": "*"
29 | }
30 | },
31 | "accepts": {
32 | "version": "1.3.7",
33 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
34 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
35 | "requires": {
36 | "mime-types": "~2.1.24",
37 | "negotiator": "0.6.2"
38 | }
39 | },
40 | "acorn": {
41 | "version": "2.7.0",
42 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
43 | "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
44 | },
45 | "acorn-globals": {
46 | "version": "1.0.9",
47 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
48 | "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
49 | "requires": {
50 | "acorn": "^2.1.0"
51 | }
52 | },
53 | "align-text": {
54 | "version": "0.1.4",
55 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
56 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
57 | "requires": {
58 | "kind-of": "^3.0.2",
59 | "longest": "^1.0.1",
60 | "repeat-string": "^1.5.2"
61 | }
62 | },
63 | "amdefine": {
64 | "version": "1.0.1",
65 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
66 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
67 | },
68 | "ansi-colors": {
69 | "version": "3.2.3",
70 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
71 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw=="
72 | },
73 | "ansi-regex": {
74 | "version": "3.0.0",
75 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
76 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
77 | },
78 | "ansi-styles": {
79 | "version": "3.2.1",
80 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
81 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
82 | "requires": {
83 | "color-convert": "^1.9.0"
84 | }
85 | },
86 | "anymatch": {
87 | "version": "3.1.1",
88 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
89 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
90 | "requires": {
91 | "normalize-path": "^3.0.0",
92 | "picomatch": "^2.0.4"
93 | }
94 | },
95 | "argparse": {
96 | "version": "1.0.10",
97 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
98 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
99 | "requires": {
100 | "sprintf-js": "~1.0.2"
101 | }
102 | },
103 | "array-flatten": {
104 | "version": "1.1.1",
105 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
106 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
107 | },
108 | "asap": {
109 | "version": "1.0.0",
110 | "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz",
111 | "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0="
112 | },
113 | "assertion-error": {
114 | "version": "1.1.0",
115 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
116 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
117 | },
118 | "asynckit": {
119 | "version": "0.4.0",
120 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
121 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
122 | },
123 | "balanced-match": {
124 | "version": "1.0.0",
125 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
126 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
127 | },
128 | "basic-auth": {
129 | "version": "2.0.1",
130 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
131 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
132 | "requires": {
133 | "safe-buffer": "5.1.2"
134 | }
135 | },
136 | "binary-extensions": {
137 | "version": "2.0.0",
138 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
139 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow=="
140 | },
141 | "bluebird": {
142 | "version": "3.7.2",
143 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
144 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
145 | },
146 | "body-parser": {
147 | "version": "1.18.3",
148 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
149 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
150 | "requires": {
151 | "bytes": "3.0.0",
152 | "content-type": "~1.0.4",
153 | "debug": "2.6.9",
154 | "depd": "~1.1.2",
155 | "http-errors": "~1.6.3",
156 | "iconv-lite": "0.4.23",
157 | "on-finished": "~2.3.0",
158 | "qs": "6.5.2",
159 | "raw-body": "2.3.3",
160 | "type-is": "~1.6.16"
161 | }
162 | },
163 | "brace-expansion": {
164 | "version": "1.1.11",
165 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
166 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
167 | "requires": {
168 | "balanced-match": "^1.0.0",
169 | "concat-map": "0.0.1"
170 | }
171 | },
172 | "braces": {
173 | "version": "3.0.2",
174 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
175 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
176 | "requires": {
177 | "fill-range": "^7.0.1"
178 | }
179 | },
180 | "browser-stdout": {
181 | "version": "1.3.1",
182 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
183 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
184 | },
185 | "bytes": {
186 | "version": "3.0.0",
187 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
188 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
189 | },
190 | "camelcase": {
191 | "version": "1.2.1",
192 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
193 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
194 | },
195 | "center-align": {
196 | "version": "0.1.3",
197 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
198 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
199 | "requires": {
200 | "align-text": "^0.1.3",
201 | "lazy-cache": "^1.0.3"
202 | }
203 | },
204 | "chai": {
205 | "version": "4.2.0",
206 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
207 | "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
208 | "requires": {
209 | "assertion-error": "^1.1.0",
210 | "check-error": "^1.0.2",
211 | "deep-eql": "^3.0.1",
212 | "get-func-name": "^2.0.0",
213 | "pathval": "^1.1.0",
214 | "type-detect": "^4.0.5"
215 | }
216 | },
217 | "chai-http": {
218 | "version": "4.3.0",
219 | "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.3.0.tgz",
220 | "integrity": "sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==",
221 | "requires": {
222 | "@types/chai": "4",
223 | "@types/superagent": "^3.8.3",
224 | "cookiejar": "^2.1.1",
225 | "is-ip": "^2.0.0",
226 | "methods": "^1.1.2",
227 | "qs": "^6.5.1",
228 | "superagent": "^3.7.0"
229 | }
230 | },
231 | "chalk": {
232 | "version": "2.4.2",
233 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
234 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
235 | "requires": {
236 | "ansi-styles": "^3.2.1",
237 | "escape-string-regexp": "^1.0.5",
238 | "supports-color": "^5.3.0"
239 | },
240 | "dependencies": {
241 | "supports-color": {
242 | "version": "5.5.0",
243 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
244 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
245 | "requires": {
246 | "has-flag": "^3.0.0"
247 | }
248 | }
249 | }
250 | },
251 | "character-parser": {
252 | "version": "1.2.1",
253 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
254 | "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
255 | },
256 | "charenc": {
257 | "version": "0.0.2",
258 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
259 | "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
260 | },
261 | "check-error": {
262 | "version": "1.0.2",
263 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
264 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
265 | },
266 | "chokidar": {
267 | "version": "3.3.0",
268 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
269 | "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
270 | "requires": {
271 | "anymatch": "~3.1.1",
272 | "braces": "~3.0.2",
273 | "fsevents": "~2.1.1",
274 | "glob-parent": "~5.1.0",
275 | "is-binary-path": "~2.1.0",
276 | "is-glob": "~4.0.1",
277 | "normalize-path": "~3.0.0",
278 | "readdirp": "~3.2.0"
279 | }
280 | },
281 | "clean-css": {
282 | "version": "3.4.28",
283 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
284 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
285 | "requires": {
286 | "commander": "2.8.x",
287 | "source-map": "0.4.x"
288 | },
289 | "dependencies": {
290 | "commander": {
291 | "version": "2.8.1",
292 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
293 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
294 | "requires": {
295 | "graceful-readlink": ">= 1.0.0"
296 | }
297 | }
298 | }
299 | },
300 | "cliui": {
301 | "version": "2.1.0",
302 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
303 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
304 | "requires": {
305 | "center-align": "^0.1.1",
306 | "right-align": "^0.1.1",
307 | "wordwrap": "0.0.2"
308 | },
309 | "dependencies": {
310 | "wordwrap": {
311 | "version": "0.0.2",
312 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
313 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
314 | }
315 | }
316 | },
317 | "color-convert": {
318 | "version": "1.9.3",
319 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
320 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
321 | "requires": {
322 | "color-name": "1.1.3"
323 | }
324 | },
325 | "color-name": {
326 | "version": "1.1.3",
327 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
328 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
329 | },
330 | "combined-stream": {
331 | "version": "1.0.8",
332 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
333 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
334 | "requires": {
335 | "delayed-stream": "~1.0.0"
336 | }
337 | },
338 | "commander": {
339 | "version": "2.6.0",
340 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
341 | "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
342 | },
343 | "component-emitter": {
344 | "version": "1.3.0",
345 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
346 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
347 | },
348 | "concat-map": {
349 | "version": "0.0.1",
350 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
351 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
352 | },
353 | "constantinople": {
354 | "version": "3.0.2",
355 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
356 | "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
357 | "requires": {
358 | "acorn": "^2.1.0"
359 | }
360 | },
361 | "content-disposition": {
362 | "version": "0.5.2",
363 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
364 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
365 | },
366 | "content-type": {
367 | "version": "1.0.4",
368 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
369 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
370 | },
371 | "cookie": {
372 | "version": "0.3.1",
373 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
374 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
375 | },
376 | "cookie-parser": {
377 | "version": "1.4.4",
378 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz",
379 | "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==",
380 | "requires": {
381 | "cookie": "0.3.1",
382 | "cookie-signature": "1.0.6"
383 | }
384 | },
385 | "cookie-signature": {
386 | "version": "1.0.6",
387 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
388 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
389 | },
390 | "cookiejar": {
391 | "version": "2.1.2",
392 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
393 | "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
394 | },
395 | "core-util-is": {
396 | "version": "1.0.2",
397 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
398 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
399 | },
400 | "cross-env": {
401 | "version": "7.0.2",
402 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz",
403 | "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==",
404 | "dev": true,
405 | "requires": {
406 | "cross-spawn": "^7.0.1"
407 | }
408 | },
409 | "cross-spawn": {
410 | "version": "7.0.1",
411 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
412 | "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
413 | "dev": true,
414 | "requires": {
415 | "path-key": "^3.1.0",
416 | "shebang-command": "^2.0.0",
417 | "which": "^2.0.1"
418 | },
419 | "dependencies": {
420 | "which": {
421 | "version": "2.0.2",
422 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
423 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
424 | "dev": true,
425 | "requires": {
426 | "isexe": "^2.0.0"
427 | }
428 | }
429 | }
430 | },
431 | "crypt": {
432 | "version": "0.0.2",
433 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
434 | "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
435 | },
436 | "css": {
437 | "version": "1.0.8",
438 | "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz",
439 | "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
440 | "requires": {
441 | "css-parse": "1.0.4",
442 | "css-stringify": "1.0.5"
443 | }
444 | },
445 | "css-parse": {
446 | "version": "1.0.4",
447 | "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz",
448 | "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90="
449 | },
450 | "css-stringify": {
451 | "version": "1.0.5",
452 | "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
453 | "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
454 | },
455 | "debug": {
456 | "version": "2.6.9",
457 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
458 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
459 | "requires": {
460 | "ms": "2.0.0"
461 | }
462 | },
463 | "decamelize": {
464 | "version": "1.2.0",
465 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
466 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
467 | },
468 | "deep-eql": {
469 | "version": "3.0.1",
470 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
471 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
472 | "requires": {
473 | "type-detect": "^4.0.0"
474 | }
475 | },
476 | "define-properties": {
477 | "version": "1.1.3",
478 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
479 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
480 | "requires": {
481 | "object-keys": "^1.0.12"
482 | }
483 | },
484 | "delayed-stream": {
485 | "version": "1.0.0",
486 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
487 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
488 | },
489 | "depd": {
490 | "version": "1.1.2",
491 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
492 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
493 | },
494 | "destroy": {
495 | "version": "1.0.4",
496 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
497 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
498 | },
499 | "diff": {
500 | "version": "3.5.0",
501 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
502 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
503 | },
504 | "ee-first": {
505 | "version": "1.1.1",
506 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
507 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
508 | },
509 | "emoji-regex": {
510 | "version": "7.0.3",
511 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
512 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
513 | },
514 | "encodeurl": {
515 | "version": "1.0.2",
516 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
517 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
518 | },
519 | "es-abstract": {
520 | "version": "1.17.4",
521 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz",
522 | "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==",
523 | "requires": {
524 | "es-to-primitive": "^1.2.1",
525 | "function-bind": "^1.1.1",
526 | "has": "^1.0.3",
527 | "has-symbols": "^1.0.1",
528 | "is-callable": "^1.1.5",
529 | "is-regex": "^1.0.5",
530 | "object-inspect": "^1.7.0",
531 | "object-keys": "^1.1.1",
532 | "object.assign": "^4.1.0",
533 | "string.prototype.trimleft": "^2.1.1",
534 | "string.prototype.trimright": "^2.1.1"
535 | }
536 | },
537 | "es-to-primitive": {
538 | "version": "1.2.1",
539 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
540 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
541 | "requires": {
542 | "is-callable": "^1.1.4",
543 | "is-date-object": "^1.0.1",
544 | "is-symbol": "^1.0.2"
545 | }
546 | },
547 | "escape-html": {
548 | "version": "1.0.3",
549 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
550 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
551 | },
552 | "escape-string-regexp": {
553 | "version": "1.0.5",
554 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
555 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
556 | },
557 | "esprima": {
558 | "version": "4.0.1",
559 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
560 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
561 | },
562 | "etag": {
563 | "version": "1.8.1",
564 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
565 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
566 | },
567 | "express": {
568 | "version": "4.16.4",
569 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
570 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
571 | "requires": {
572 | "accepts": "~1.3.5",
573 | "array-flatten": "1.1.1",
574 | "body-parser": "1.18.3",
575 | "content-disposition": "0.5.2",
576 | "content-type": "~1.0.4",
577 | "cookie": "0.3.1",
578 | "cookie-signature": "1.0.6",
579 | "debug": "2.6.9",
580 | "depd": "~1.1.2",
581 | "encodeurl": "~1.0.2",
582 | "escape-html": "~1.0.3",
583 | "etag": "~1.8.1",
584 | "finalhandler": "1.1.1",
585 | "fresh": "0.5.2",
586 | "merge-descriptors": "1.0.1",
587 | "methods": "~1.1.2",
588 | "on-finished": "~2.3.0",
589 | "parseurl": "~1.3.2",
590 | "path-to-regexp": "0.1.7",
591 | "proxy-addr": "~2.0.4",
592 | "qs": "6.5.2",
593 | "range-parser": "~1.2.0",
594 | "safe-buffer": "5.1.2",
595 | "send": "0.16.2",
596 | "serve-static": "1.13.2",
597 | "setprototypeof": "1.1.0",
598 | "statuses": "~1.4.0",
599 | "type-is": "~1.6.16",
600 | "utils-merge": "1.0.1",
601 | "vary": "~1.1.2"
602 | }
603 | },
604 | "extend": {
605 | "version": "3.0.2",
606 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
607 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
608 | },
609 | "fill-range": {
610 | "version": "7.0.1",
611 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
612 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
613 | "requires": {
614 | "to-regex-range": "^5.0.1"
615 | }
616 | },
617 | "finalhandler": {
618 | "version": "1.1.1",
619 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
620 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
621 | "requires": {
622 | "debug": "2.6.9",
623 | "encodeurl": "~1.0.2",
624 | "escape-html": "~1.0.3",
625 | "on-finished": "~2.3.0",
626 | "parseurl": "~1.3.2",
627 | "statuses": "~1.4.0",
628 | "unpipe": "~1.0.0"
629 | }
630 | },
631 | "find-up": {
632 | "version": "3.0.0",
633 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
634 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
635 | "requires": {
636 | "locate-path": "^3.0.0"
637 | }
638 | },
639 | "flat": {
640 | "version": "4.1.0",
641 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
642 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
643 | "requires": {
644 | "is-buffer": "~2.0.3"
645 | },
646 | "dependencies": {
647 | "is-buffer": {
648 | "version": "2.0.4",
649 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
650 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
651 | }
652 | }
653 | },
654 | "form-data": {
655 | "version": "2.5.1",
656 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
657 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
658 | "requires": {
659 | "asynckit": "^0.4.0",
660 | "combined-stream": "^1.0.6",
661 | "mime-types": "^2.1.12"
662 | }
663 | },
664 | "formidable": {
665 | "version": "1.2.2",
666 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
667 | "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
668 | },
669 | "forwarded": {
670 | "version": "0.1.2",
671 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
672 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
673 | },
674 | "fresh": {
675 | "version": "0.5.2",
676 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
677 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
678 | },
679 | "fs.realpath": {
680 | "version": "1.0.0",
681 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
682 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
683 | },
684 | "fsevents": {
685 | "version": "2.1.2",
686 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
687 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
688 | "optional": true
689 | },
690 | "function-bind": {
691 | "version": "1.1.1",
692 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
693 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
694 | },
695 | "get-caller-file": {
696 | "version": "2.0.5",
697 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
698 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
699 | },
700 | "get-func-name": {
701 | "version": "2.0.0",
702 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
703 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
704 | },
705 | "glob": {
706 | "version": "7.1.3",
707 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
708 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
709 | "requires": {
710 | "fs.realpath": "^1.0.0",
711 | "inflight": "^1.0.4",
712 | "inherits": "2",
713 | "minimatch": "^3.0.4",
714 | "once": "^1.3.0",
715 | "path-is-absolute": "^1.0.0"
716 | }
717 | },
718 | "glob-parent": {
719 | "version": "5.1.2",
720 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
721 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
722 | "requires": {
723 | "is-glob": "^4.0.1"
724 | }
725 | },
726 | "graceful-readlink": {
727 | "version": "1.0.1",
728 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
729 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
730 | },
731 | "growl": {
732 | "version": "1.10.5",
733 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
734 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="
735 | },
736 | "has": {
737 | "version": "1.0.3",
738 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
739 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
740 | "requires": {
741 | "function-bind": "^1.1.1"
742 | }
743 | },
744 | "has-flag": {
745 | "version": "3.0.0",
746 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
747 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
748 | },
749 | "has-symbols": {
750 | "version": "1.0.1",
751 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
752 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
753 | },
754 | "he": {
755 | "version": "1.2.0",
756 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
757 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
758 | },
759 | "http-errors": {
760 | "version": "1.6.3",
761 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
762 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
763 | "requires": {
764 | "depd": "~1.1.2",
765 | "inherits": "2.0.3",
766 | "setprototypeof": "1.1.0",
767 | "statuses": ">= 1.4.0 < 2"
768 | }
769 | },
770 | "iconv-lite": {
771 | "version": "0.4.23",
772 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
773 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
774 | "requires": {
775 | "safer-buffer": ">= 2.1.2 < 3"
776 | }
777 | },
778 | "inflight": {
779 | "version": "1.0.6",
780 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
781 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
782 | "requires": {
783 | "once": "^1.3.0",
784 | "wrappy": "1"
785 | }
786 | },
787 | "inherits": {
788 | "version": "2.0.3",
789 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
790 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
791 | },
792 | "ip-regex": {
793 | "version": "2.1.0",
794 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
795 | "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
796 | },
797 | "ipaddr.js": {
798 | "version": "1.9.1",
799 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
800 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
801 | },
802 | "is-binary-path": {
803 | "version": "2.1.0",
804 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
805 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
806 | "requires": {
807 | "binary-extensions": "^2.0.0"
808 | }
809 | },
810 | "is-buffer": {
811 | "version": "1.1.6",
812 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
813 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
814 | },
815 | "is-callable": {
816 | "version": "1.1.5",
817 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
818 | "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="
819 | },
820 | "is-date-object": {
821 | "version": "1.0.2",
822 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
823 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
824 | },
825 | "is-extglob": {
826 | "version": "2.1.1",
827 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
828 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
829 | },
830 | "is-fullwidth-code-point": {
831 | "version": "2.0.0",
832 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
833 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
834 | },
835 | "is-glob": {
836 | "version": "4.0.1",
837 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
838 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
839 | "requires": {
840 | "is-extglob": "^2.1.1"
841 | }
842 | },
843 | "is-ip": {
844 | "version": "2.0.0",
845 | "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz",
846 | "integrity": "sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas=",
847 | "requires": {
848 | "ip-regex": "^2.0.0"
849 | }
850 | },
851 | "is-number": {
852 | "version": "7.0.0",
853 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
854 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
855 | },
856 | "is-promise": {
857 | "version": "2.1.0",
858 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
859 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
860 | },
861 | "is-regex": {
862 | "version": "1.0.5",
863 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
864 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
865 | "requires": {
866 | "has": "^1.0.3"
867 | }
868 | },
869 | "is-symbol": {
870 | "version": "1.0.3",
871 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
872 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
873 | "requires": {
874 | "has-symbols": "^1.0.1"
875 | }
876 | },
877 | "isarray": {
878 | "version": "1.0.0",
879 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
880 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
881 | },
882 | "isexe": {
883 | "version": "2.0.0",
884 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
885 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
886 | },
887 | "jade": {
888 | "version": "1.11.0",
889 | "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz",
890 | "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
891 | "requires": {
892 | "character-parser": "1.2.1",
893 | "clean-css": "^3.1.9",
894 | "commander": "~2.6.0",
895 | "constantinople": "~3.0.1",
896 | "jstransformer": "0.0.2",
897 | "mkdirp": "~0.5.0",
898 | "transformers": "2.1.0",
899 | "uglify-js": "^2.4.19",
900 | "void-elements": "~2.0.1",
901 | "with": "~4.0.0"
902 | }
903 | },
904 | "js-yaml": {
905 | "version": "3.13.1",
906 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
907 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
908 | "requires": {
909 | "argparse": "^1.0.7",
910 | "esprima": "^4.0.0"
911 | }
912 | },
913 | "jstransformer": {
914 | "version": "0.0.2",
915 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz",
916 | "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
917 | "requires": {
918 | "is-promise": "^2.0.0",
919 | "promise": "^6.0.1"
920 | }
921 | },
922 | "kind-of": {
923 | "version": "3.2.2",
924 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
925 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
926 | "requires": {
927 | "is-buffer": "^1.1.5"
928 | }
929 | },
930 | "lazy-cache": {
931 | "version": "1.0.4",
932 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
933 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
934 | },
935 | "locate-path": {
936 | "version": "3.0.0",
937 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
938 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
939 | "requires": {
940 | "p-locate": "^3.0.0",
941 | "path-exists": "^3.0.0"
942 | }
943 | },
944 | "lodash": {
945 | "version": "4.17.21",
946 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
947 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
948 | },
949 | "log-symbols": {
950 | "version": "3.0.0",
951 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
952 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
953 | "requires": {
954 | "chalk": "^2.4.2"
955 | }
956 | },
957 | "longest": {
958 | "version": "1.0.1",
959 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
960 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
961 | },
962 | "md5": {
963 | "version": "2.2.1",
964 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
965 | "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
966 | "requires": {
967 | "charenc": "~0.0.1",
968 | "crypt": "~0.0.1",
969 | "is-buffer": "~1.1.1"
970 | }
971 | },
972 | "media-typer": {
973 | "version": "0.3.0",
974 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
975 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
976 | },
977 | "merge-descriptors": {
978 | "version": "1.0.1",
979 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
980 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
981 | },
982 | "methods": {
983 | "version": "1.1.2",
984 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
985 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
986 | },
987 | "mime": {
988 | "version": "1.4.1",
989 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
990 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
991 | },
992 | "mime-db": {
993 | "version": "1.43.0",
994 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
995 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
996 | },
997 | "mime-types": {
998 | "version": "2.1.26",
999 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
1000 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
1001 | "requires": {
1002 | "mime-db": "1.43.0"
1003 | }
1004 | },
1005 | "minimatch": {
1006 | "version": "3.0.4",
1007 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1008 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1009 | "requires": {
1010 | "brace-expansion": "^1.1.7"
1011 | }
1012 | },
1013 | "minimist": {
1014 | "version": "0.0.8",
1015 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1016 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
1017 | },
1018 | "mkdirp": {
1019 | "version": "0.5.1",
1020 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1021 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1022 | "requires": {
1023 | "minimist": "0.0.8"
1024 | }
1025 | },
1026 | "mocha": {
1027 | "version": "7.1.0",
1028 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.0.tgz",
1029 | "integrity": "sha512-MymHK8UkU0K15Q/zX7uflZgVoRWiTjy0fXE/QjKts6mowUvGxOdPhZ2qj3b0iZdUrNZlW9LAIMFHB4IW+2b3EQ==",
1030 | "requires": {
1031 | "ansi-colors": "3.2.3",
1032 | "browser-stdout": "1.3.1",
1033 | "chokidar": "3.3.0",
1034 | "debug": "3.2.6",
1035 | "diff": "3.5.0",
1036 | "escape-string-regexp": "1.0.5",
1037 | "find-up": "3.0.0",
1038 | "glob": "7.1.3",
1039 | "growl": "1.10.5",
1040 | "he": "1.2.0",
1041 | "js-yaml": "3.13.1",
1042 | "log-symbols": "3.0.0",
1043 | "minimatch": "3.0.4",
1044 | "mkdirp": "0.5.1",
1045 | "ms": "2.1.1",
1046 | "node-environment-flags": "1.0.6",
1047 | "object.assign": "4.1.0",
1048 | "strip-json-comments": "2.0.1",
1049 | "supports-color": "6.0.0",
1050 | "which": "1.3.1",
1051 | "wide-align": "1.1.3",
1052 | "yargs": "13.3.0",
1053 | "yargs-parser": "13.1.1",
1054 | "yargs-unparser": "1.6.0"
1055 | },
1056 | "dependencies": {
1057 | "ansi-regex": {
1058 | "version": "4.1.0",
1059 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1060 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
1061 | },
1062 | "camelcase": {
1063 | "version": "5.3.1",
1064 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
1065 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
1066 | },
1067 | "cliui": {
1068 | "version": "5.0.0",
1069 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
1070 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
1071 | "requires": {
1072 | "string-width": "^3.1.0",
1073 | "strip-ansi": "^5.2.0",
1074 | "wrap-ansi": "^5.1.0"
1075 | }
1076 | },
1077 | "debug": {
1078 | "version": "3.2.6",
1079 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1080 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1081 | "requires": {
1082 | "ms": "^2.1.1"
1083 | }
1084 | },
1085 | "ms": {
1086 | "version": "2.1.1",
1087 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1088 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1089 | },
1090 | "string-width": {
1091 | "version": "3.1.0",
1092 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1093 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1094 | "requires": {
1095 | "emoji-regex": "^7.0.1",
1096 | "is-fullwidth-code-point": "^2.0.0",
1097 | "strip-ansi": "^5.1.0"
1098 | }
1099 | },
1100 | "strip-ansi": {
1101 | "version": "5.2.0",
1102 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1103 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1104 | "requires": {
1105 | "ansi-regex": "^4.1.0"
1106 | }
1107 | },
1108 | "yargs": {
1109 | "version": "13.3.0",
1110 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
1111 | "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
1112 | "requires": {
1113 | "cliui": "^5.0.0",
1114 | "find-up": "^3.0.0",
1115 | "get-caller-file": "^2.0.1",
1116 | "require-directory": "^2.1.1",
1117 | "require-main-filename": "^2.0.0",
1118 | "set-blocking": "^2.0.0",
1119 | "string-width": "^3.0.0",
1120 | "which-module": "^2.0.0",
1121 | "y18n": "^4.0.0",
1122 | "yargs-parser": "^13.1.1"
1123 | },
1124 | "dependencies": {
1125 | "y18n": {
1126 | "version": "4.0.3",
1127 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
1128 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
1129 | }
1130 | }
1131 | },
1132 | "yargs-parser": {
1133 | "version": "13.1.1",
1134 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
1135 | "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
1136 | "requires": {
1137 | "camelcase": "^5.0.0",
1138 | "decamelize": "^1.2.0"
1139 | }
1140 | }
1141 | }
1142 | },
1143 | "mocha-junit-reporter": {
1144 | "version": "1.23.3",
1145 | "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-1.23.3.tgz",
1146 | "integrity": "sha512-ed8LqbRj1RxZfjt/oC9t12sfrWsjZ3gNnbhV1nuj9R/Jb5/P3Xb4duv2eCfCDMYH+fEu0mqca7m4wsiVjsxsvA==",
1147 | "requires": {
1148 | "debug": "^2.2.0",
1149 | "md5": "^2.1.0",
1150 | "mkdirp": "~0.5.1",
1151 | "strip-ansi": "^4.0.0",
1152 | "xml": "^1.0.0"
1153 | }
1154 | },
1155 | "mocha-multi-reporters": {
1156 | "version": "1.1.7",
1157 | "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz",
1158 | "integrity": "sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI=",
1159 | "requires": {
1160 | "debug": "^3.1.0",
1161 | "lodash": "^4.16.4"
1162 | },
1163 | "dependencies": {
1164 | "debug": {
1165 | "version": "3.2.6",
1166 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1167 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1168 | "requires": {
1169 | "ms": "^2.1.1"
1170 | }
1171 | },
1172 | "ms": {
1173 | "version": "2.1.2",
1174 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1175 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1176 | }
1177 | }
1178 | },
1179 | "morgan": {
1180 | "version": "1.9.1",
1181 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
1182 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
1183 | "requires": {
1184 | "basic-auth": "~2.0.0",
1185 | "debug": "2.6.9",
1186 | "depd": "~1.1.2",
1187 | "on-finished": "~2.3.0",
1188 | "on-headers": "~1.0.1"
1189 | }
1190 | },
1191 | "ms": {
1192 | "version": "2.0.0",
1193 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1194 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1195 | },
1196 | "negotiator": {
1197 | "version": "0.6.2",
1198 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1199 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
1200 | },
1201 | "node-environment-flags": {
1202 | "version": "1.0.6",
1203 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
1204 | "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
1205 | "requires": {
1206 | "object.getownpropertydescriptors": "^2.0.3",
1207 | "semver": "^5.7.0"
1208 | }
1209 | },
1210 | "normalize-path": {
1211 | "version": "3.0.0",
1212 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1213 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
1214 | },
1215 | "object-inspect": {
1216 | "version": "1.7.0",
1217 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
1218 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
1219 | },
1220 | "object-keys": {
1221 | "version": "1.1.1",
1222 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1223 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
1224 | },
1225 | "object.assign": {
1226 | "version": "4.1.0",
1227 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
1228 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
1229 | "requires": {
1230 | "define-properties": "^1.1.2",
1231 | "function-bind": "^1.1.1",
1232 | "has-symbols": "^1.0.0",
1233 | "object-keys": "^1.0.11"
1234 | }
1235 | },
1236 | "object.getownpropertydescriptors": {
1237 | "version": "2.1.0",
1238 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
1239 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
1240 | "requires": {
1241 | "define-properties": "^1.1.3",
1242 | "es-abstract": "^1.17.0-next.1"
1243 | }
1244 | },
1245 | "on-finished": {
1246 | "version": "2.3.0",
1247 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1248 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1249 | "requires": {
1250 | "ee-first": "1.1.1"
1251 | }
1252 | },
1253 | "on-headers": {
1254 | "version": "1.0.2",
1255 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1256 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
1257 | },
1258 | "once": {
1259 | "version": "1.4.0",
1260 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1261 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1262 | "requires": {
1263 | "wrappy": "1"
1264 | }
1265 | },
1266 | "optimist": {
1267 | "version": "0.3.7",
1268 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
1269 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
1270 | "requires": {
1271 | "wordwrap": "~0.0.2"
1272 | }
1273 | },
1274 | "p-limit": {
1275 | "version": "2.2.2",
1276 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
1277 | "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
1278 | "requires": {
1279 | "p-try": "^2.0.0"
1280 | }
1281 | },
1282 | "p-locate": {
1283 | "version": "3.0.0",
1284 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
1285 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
1286 | "requires": {
1287 | "p-limit": "^2.0.0"
1288 | }
1289 | },
1290 | "p-try": {
1291 | "version": "2.2.0",
1292 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1293 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
1294 | },
1295 | "parseurl": {
1296 | "version": "1.3.3",
1297 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1298 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1299 | },
1300 | "path-exists": {
1301 | "version": "3.0.0",
1302 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1303 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
1304 | },
1305 | "path-is-absolute": {
1306 | "version": "1.0.1",
1307 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1308 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
1309 | },
1310 | "path-key": {
1311 | "version": "3.1.1",
1312 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1313 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1314 | "dev": true
1315 | },
1316 | "path-to-regexp": {
1317 | "version": "0.1.7",
1318 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1319 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1320 | },
1321 | "pathval": {
1322 | "version": "1.1.1",
1323 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
1324 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="
1325 | },
1326 | "picomatch": {
1327 | "version": "2.2.1",
1328 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
1329 | "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA=="
1330 | },
1331 | "process-nextick-args": {
1332 | "version": "2.0.1",
1333 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1334 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
1335 | },
1336 | "promise": {
1337 | "version": "6.1.0",
1338 | "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
1339 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
1340 | "requires": {
1341 | "asap": "~1.0.0"
1342 | }
1343 | },
1344 | "proxy-addr": {
1345 | "version": "2.0.6",
1346 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
1347 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
1348 | "requires": {
1349 | "forwarded": "~0.1.2",
1350 | "ipaddr.js": "1.9.1"
1351 | }
1352 | },
1353 | "qs": {
1354 | "version": "6.5.2",
1355 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1356 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
1357 | },
1358 | "range-parser": {
1359 | "version": "1.2.1",
1360 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1361 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1362 | },
1363 | "raw-body": {
1364 | "version": "2.3.3",
1365 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
1366 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
1367 | "requires": {
1368 | "bytes": "3.0.0",
1369 | "http-errors": "1.6.3",
1370 | "iconv-lite": "0.4.23",
1371 | "unpipe": "1.0.0"
1372 | }
1373 | },
1374 | "readable-stream": {
1375 | "version": "2.3.7",
1376 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1377 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1378 | "requires": {
1379 | "core-util-is": "~1.0.0",
1380 | "inherits": "~2.0.3",
1381 | "isarray": "~1.0.0",
1382 | "process-nextick-args": "~2.0.0",
1383 | "safe-buffer": "~5.1.1",
1384 | "string_decoder": "~1.1.1",
1385 | "util-deprecate": "~1.0.1"
1386 | }
1387 | },
1388 | "readdirp": {
1389 | "version": "3.2.0",
1390 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
1391 | "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
1392 | "requires": {
1393 | "picomatch": "^2.0.4"
1394 | }
1395 | },
1396 | "repeat-string": {
1397 | "version": "1.6.1",
1398 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1399 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
1400 | },
1401 | "require-directory": {
1402 | "version": "2.1.1",
1403 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1404 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
1405 | },
1406 | "require-main-filename": {
1407 | "version": "2.0.0",
1408 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
1409 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
1410 | },
1411 | "right-align": {
1412 | "version": "0.1.3",
1413 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
1414 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
1415 | "requires": {
1416 | "align-text": "^0.1.1"
1417 | }
1418 | },
1419 | "safe-buffer": {
1420 | "version": "5.1.2",
1421 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1422 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1423 | },
1424 | "safer-buffer": {
1425 | "version": "2.1.2",
1426 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1427 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1428 | },
1429 | "semver": {
1430 | "version": "5.7.1",
1431 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1432 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
1433 | },
1434 | "send": {
1435 | "version": "0.16.2",
1436 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
1437 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
1438 | "requires": {
1439 | "debug": "2.6.9",
1440 | "depd": "~1.1.2",
1441 | "destroy": "~1.0.4",
1442 | "encodeurl": "~1.0.2",
1443 | "escape-html": "~1.0.3",
1444 | "etag": "~1.8.1",
1445 | "fresh": "0.5.2",
1446 | "http-errors": "~1.6.2",
1447 | "mime": "1.4.1",
1448 | "ms": "2.0.0",
1449 | "on-finished": "~2.3.0",
1450 | "range-parser": "~1.2.0",
1451 | "statuses": "~1.4.0"
1452 | }
1453 | },
1454 | "serve-static": {
1455 | "version": "1.13.2",
1456 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
1457 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
1458 | "requires": {
1459 | "encodeurl": "~1.0.2",
1460 | "escape-html": "~1.0.3",
1461 | "parseurl": "~1.3.2",
1462 | "send": "0.16.2"
1463 | }
1464 | },
1465 | "set-blocking": {
1466 | "version": "2.0.0",
1467 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1468 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
1469 | },
1470 | "setprototypeof": {
1471 | "version": "1.1.0",
1472 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
1473 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
1474 | },
1475 | "shebang-command": {
1476 | "version": "2.0.0",
1477 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1478 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1479 | "dev": true,
1480 | "requires": {
1481 | "shebang-regex": "^3.0.0"
1482 | }
1483 | },
1484 | "shebang-regex": {
1485 | "version": "3.0.0",
1486 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1487 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1488 | "dev": true
1489 | },
1490 | "source-map": {
1491 | "version": "0.4.4",
1492 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
1493 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
1494 | "requires": {
1495 | "amdefine": ">=0.0.4"
1496 | }
1497 | },
1498 | "sprintf-js": {
1499 | "version": "1.0.3",
1500 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1501 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
1502 | },
1503 | "statuses": {
1504 | "version": "1.4.0",
1505 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
1506 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
1507 | },
1508 | "string-width": {
1509 | "version": "2.1.1",
1510 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1511 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1512 | "requires": {
1513 | "is-fullwidth-code-point": "^2.0.0",
1514 | "strip-ansi": "^4.0.0"
1515 | }
1516 | },
1517 | "string.prototype.trimleft": {
1518 | "version": "2.1.1",
1519 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
1520 | "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
1521 | "requires": {
1522 | "define-properties": "^1.1.3",
1523 | "function-bind": "^1.1.1"
1524 | }
1525 | },
1526 | "string.prototype.trimright": {
1527 | "version": "2.1.1",
1528 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
1529 | "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
1530 | "requires": {
1531 | "define-properties": "^1.1.3",
1532 | "function-bind": "^1.1.1"
1533 | }
1534 | },
1535 | "string_decoder": {
1536 | "version": "1.1.1",
1537 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1538 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1539 | "requires": {
1540 | "safe-buffer": "~5.1.0"
1541 | }
1542 | },
1543 | "strip-ansi": {
1544 | "version": "4.0.0",
1545 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1546 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1547 | "requires": {
1548 | "ansi-regex": "^3.0.0"
1549 | }
1550 | },
1551 | "strip-json-comments": {
1552 | "version": "2.0.1",
1553 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1554 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
1555 | },
1556 | "superagent": {
1557 | "version": "3.8.3",
1558 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
1559 | "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
1560 | "requires": {
1561 | "component-emitter": "^1.2.0",
1562 | "cookiejar": "^2.1.0",
1563 | "debug": "^3.1.0",
1564 | "extend": "^3.0.0",
1565 | "form-data": "^2.3.1",
1566 | "formidable": "^1.2.0",
1567 | "methods": "^1.1.1",
1568 | "mime": "^1.4.1",
1569 | "qs": "^6.5.1",
1570 | "readable-stream": "^2.3.5"
1571 | },
1572 | "dependencies": {
1573 | "debug": {
1574 | "version": "3.2.6",
1575 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1576 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1577 | "requires": {
1578 | "ms": "^2.1.1"
1579 | }
1580 | },
1581 | "ms": {
1582 | "version": "2.1.2",
1583 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1584 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1585 | }
1586 | }
1587 | },
1588 | "supports-color": {
1589 | "version": "6.0.0",
1590 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
1591 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
1592 | "requires": {
1593 | "has-flag": "^3.0.0"
1594 | }
1595 | },
1596 | "to-regex-range": {
1597 | "version": "5.0.1",
1598 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1599 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1600 | "requires": {
1601 | "is-number": "^7.0.0"
1602 | }
1603 | },
1604 | "transformers": {
1605 | "version": "2.1.0",
1606 | "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
1607 | "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
1608 | "requires": {
1609 | "css": "~1.0.8",
1610 | "promise": "~2.0",
1611 | "uglify-js": "~2.2.5"
1612 | },
1613 | "dependencies": {
1614 | "is-promise": {
1615 | "version": "1.0.1",
1616 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
1617 | "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU="
1618 | },
1619 | "promise": {
1620 | "version": "2.0.0",
1621 | "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
1622 | "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
1623 | "requires": {
1624 | "is-promise": "~1"
1625 | }
1626 | },
1627 | "source-map": {
1628 | "version": "0.1.43",
1629 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
1630 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
1631 | "requires": {
1632 | "amdefine": ">=0.0.4"
1633 | }
1634 | },
1635 | "uglify-js": {
1636 | "version": "2.2.5",
1637 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
1638 | "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
1639 | "requires": {
1640 | "optimist": "~0.3.5",
1641 | "source-map": "~0.1.7"
1642 | }
1643 | }
1644 | }
1645 | },
1646 | "type-detect": {
1647 | "version": "4.0.8",
1648 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
1649 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
1650 | },
1651 | "type-is": {
1652 | "version": "1.6.18",
1653 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1654 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1655 | "requires": {
1656 | "media-typer": "0.3.0",
1657 | "mime-types": "~2.1.24"
1658 | }
1659 | },
1660 | "uglify-js": {
1661 | "version": "2.8.29",
1662 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
1663 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
1664 | "requires": {
1665 | "source-map": "~0.5.1",
1666 | "uglify-to-browserify": "~1.0.0",
1667 | "yargs": "~3.10.0"
1668 | },
1669 | "dependencies": {
1670 | "source-map": {
1671 | "version": "0.5.7",
1672 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1673 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1674 | }
1675 | }
1676 | },
1677 | "uglify-to-browserify": {
1678 | "version": "1.0.2",
1679 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
1680 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
1681 | "optional": true
1682 | },
1683 | "unpipe": {
1684 | "version": "1.0.0",
1685 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1686 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1687 | },
1688 | "util-deprecate": {
1689 | "version": "1.0.2",
1690 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1691 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1692 | },
1693 | "utils-merge": {
1694 | "version": "1.0.1",
1695 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1696 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1697 | },
1698 | "vary": {
1699 | "version": "1.1.2",
1700 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1701 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1702 | },
1703 | "void-elements": {
1704 | "version": "2.0.1",
1705 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
1706 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
1707 | },
1708 | "which": {
1709 | "version": "1.3.1",
1710 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1711 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1712 | "requires": {
1713 | "isexe": "^2.0.0"
1714 | }
1715 | },
1716 | "which-module": {
1717 | "version": "2.0.0",
1718 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
1719 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
1720 | },
1721 | "wide-align": {
1722 | "version": "1.1.3",
1723 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
1724 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
1725 | "requires": {
1726 | "string-width": "^1.0.2 || 2"
1727 | }
1728 | },
1729 | "window-size": {
1730 | "version": "0.1.0",
1731 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
1732 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
1733 | },
1734 | "with": {
1735 | "version": "4.0.3",
1736 | "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz",
1737 | "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
1738 | "requires": {
1739 | "acorn": "^1.0.1",
1740 | "acorn-globals": "^1.0.3"
1741 | },
1742 | "dependencies": {
1743 | "acorn": {
1744 | "version": "1.2.2",
1745 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
1746 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
1747 | }
1748 | }
1749 | },
1750 | "wordwrap": {
1751 | "version": "0.0.3",
1752 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
1753 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
1754 | },
1755 | "wrap-ansi": {
1756 | "version": "5.1.0",
1757 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
1758 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
1759 | "requires": {
1760 | "ansi-styles": "^3.2.0",
1761 | "string-width": "^3.0.0",
1762 | "strip-ansi": "^5.0.0"
1763 | },
1764 | "dependencies": {
1765 | "ansi-regex": {
1766 | "version": "4.1.1",
1767 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
1768 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="
1769 | },
1770 | "string-width": {
1771 | "version": "3.1.0",
1772 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1773 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1774 | "requires": {
1775 | "emoji-regex": "^7.0.1",
1776 | "is-fullwidth-code-point": "^2.0.0",
1777 | "strip-ansi": "^5.1.0"
1778 | }
1779 | },
1780 | "strip-ansi": {
1781 | "version": "5.2.0",
1782 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1783 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1784 | "requires": {
1785 | "ansi-regex": "^4.1.0"
1786 | }
1787 | }
1788 | }
1789 | },
1790 | "wrappy": {
1791 | "version": "1.0.2",
1792 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1793 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1794 | },
1795 | "xml": {
1796 | "version": "1.0.1",
1797 | "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
1798 | "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU="
1799 | },
1800 | "yargs": {
1801 | "version": "3.10.0",
1802 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
1803 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
1804 | "requires": {
1805 | "camelcase": "^1.0.2",
1806 | "cliui": "^2.1.0",
1807 | "decamelize": "^1.0.0",
1808 | "window-size": "0.1.0"
1809 | }
1810 | },
1811 | "yargs-unparser": {
1812 | "version": "1.6.0",
1813 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
1814 | "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
1815 | "requires": {
1816 | "flat": "^4.1.0",
1817 | "lodash": "^4.17.15",
1818 | "yargs": "^13.3.0"
1819 | },
1820 | "dependencies": {
1821 | "ansi-regex": {
1822 | "version": "4.1.0",
1823 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1824 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
1825 | },
1826 | "camelcase": {
1827 | "version": "5.3.1",
1828 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
1829 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
1830 | },
1831 | "cliui": {
1832 | "version": "5.0.0",
1833 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
1834 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
1835 | "requires": {
1836 | "string-width": "^3.1.0",
1837 | "strip-ansi": "^5.2.0",
1838 | "wrap-ansi": "^5.1.0"
1839 | }
1840 | },
1841 | "string-width": {
1842 | "version": "3.1.0",
1843 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1844 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1845 | "requires": {
1846 | "emoji-regex": "^7.0.1",
1847 | "is-fullwidth-code-point": "^2.0.0",
1848 | "strip-ansi": "^5.1.0"
1849 | }
1850 | },
1851 | "strip-ansi": {
1852 | "version": "5.2.0",
1853 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1854 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1855 | "requires": {
1856 | "ansi-regex": "^4.1.0"
1857 | }
1858 | },
1859 | "yargs": {
1860 | "version": "13.3.0",
1861 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
1862 | "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
1863 | "requires": {
1864 | "cliui": "^5.0.0",
1865 | "find-up": "^3.0.0",
1866 | "get-caller-file": "^2.0.1",
1867 | "require-directory": "^2.1.1",
1868 | "require-main-filename": "^2.0.0",
1869 | "set-blocking": "^2.0.0",
1870 | "string-width": "^3.0.0",
1871 | "which-module": "^2.0.0",
1872 | "y18n": "^4.0.0",
1873 | "yargs-parser": "^13.1.1"
1874 | },
1875 | "dependencies": {
1876 | "y18n": {
1877 | "version": "4.0.3",
1878 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
1879 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
1880 | },
1881 | "yargs-parser": {
1882 | "version": "13.1.2",
1883 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
1884 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
1885 | "requires": {
1886 | "camelcase": "^5.0.0",
1887 | "decamelize": "^1.2.0"
1888 | }
1889 | }
1890 | }
1891 | }
1892 | }
1893 | }
1894 | }
1895 | }
1896 |
--------------------------------------------------------------------------------