diff --git a/app.js b/app.js index 2ee3e2d..cb055d0 100644 --- a/app.js +++ b/app.js @@ -42,16 +42,16 @@ app.get('*', function(req, res, next) { }); app.use('/api/login', new RateLimit({ - windowMs: settings.rateLimitWindow, - max: settings.loginRequestLimit, - delayMs: 0 -})); + windowMs: settings.rateLimitWindow, + max: settings.loginRequestLimit, + delayMs: 0 + })); app.use('/api', new RateLimit({ - windowMs: settings.rateLimitWindow, - max: settings.requestLimit, - delayMs: 0 -})); + windowMs: settings.rateLimitWindow, + max: settings.requestLimit, + delayMs: 0 + })); app.use(function(req, res, next) { if (req.path === '/api/login' || req.path.indexOf('/api/external-upload') === 0) { @@ -71,7 +71,7 @@ app.use(function(req, res, next) { for (let route of routes) { app.use('/api', route); } -const cronexample = require('./lib/cron'); +require('./lib/cron'); require('./error_handler')(app); // Teardown can be passed any modules necessary for proper teardown diff --git a/bin/create_programs.js b/bin/create_programs.js new file mode 100644 index 0000000..97b98ab --- /dev/null +++ b/bin/create_programs.js @@ -0,0 +1,170 @@ +#!/usr/bin/env node +'use strict'; +require('dotenv').config(); + +const csv = require('csv'); +const fs = require('fs'); +const mongoose = require('mongoose'); +mongoose.promise = Promise; +mongoose.connect(process.env.DB_HOST, {useMongoClient: true}); + +const College = require('../models/college.model'); +const Department = require('../models/department.model'); +const Program = require('../models/program.model'); + +let completed = 0; +let toComplete; + +function loadCSV(callback) { + fs.readFile('./bin/raw-programs.csv', 'utf-8', (error, data) => { + if (error) + return console.log(error); + + csv.parse(data, {columns: true}, (error, data) => { + if (error) + return console.log('There was an error parsing data!') + toComplete = data.length; + callback(data); + }); + }); +} + +function createCollege(currentCollege, currentDepartment, currentProgram) { + return new Promise((resolve, reject) => { + const college = new College(currentCollege); + college.save((err, savedCollege) => { + if (!err) { + currentDepartment.college = savedCollege._id; + return createDepartment(currentDepartment, currentProgram).then(function() { + resolve(); + }, err => { + console.log(err); + reject(); + }); + } else { + console.log(err); + reject(); + } + }); + }); +} + +function createDepartment(currentDepartment, currentProgram) { + return new Promise((resolve, reject) => { + const department = new Department(currentDepartment); + + department.save((err, savedDepartment) => { + + if (!err) { + currentProgram.department = savedDepartment._id; + createProgram(currentProgram).then(function() { + resolve(); + }, err => { + console.log(err); + reject(); + }); + } else { + console.log(err); + reject(); + } + }); + }); +} + +function createProgram(currentProgram) { + return new Promise((resolve, reject) => { + const program = new Program(currentProgram); + program.save((err, savedProgram) => { + if (!err) { + completed += 1; + resolve(); + } else { + console.log(err); + reject(); + } + }); + }); +} + +async function applyImport(entries) { + for (let entry of entries) { + await importEntry(entry); + } +} + +function importEntry(entry) { + return new Promise((resolve, reject) => { + College.findOne({name: entry.college}, '_id', (err, foundCollege) => { + if (foundCollege) { + Department.findOne({name: entry.department}, '_id', (err, foundDepartment) => { + if (foundDepartment) { + createProgram({ + name: entry.program, + department: foundDepartment._id, + nextReviewDate: entry.nextReviewDate + }).then(resolve, reject); + ; + } else { + createDepartment({name: entry.department, college: foundCollege._id, abbreviation: entry.departmentAbbreviation}, {name: entry.program, nextReviewDate: entry.nextReviewDate}).then(resolve, reject); + ; + } + }); + } else { + createCollege({name: entry.college, abbreviation: entry.collegeAbbreviation}, {name: entry.department, abbreviation: entry.departmentAbbreviation}, {name: entry.program, nextReviewDate: entry.nextReviewDate}).then(resolve, reject); + } + }); + }); +} + +function removePrograms() { + return new Promise((resolve, reject) => { + Program.find({}).remove(function(err) { + if (!err) { + resolve(); + } else { + reject(); + } + }); + }); +} + +function removeDepartments() { + return new Promise((resolve, reject) => { + Department.find({}).remove(function(err) { + if (!err) { + resolve(); + } else { + reject(); + } + }); + }); +} + +function removeColleges() { + return new Promise((resolve, reject) => { + College.find({}).remove(function(err) { + if (!err) { + resolve(); + } else { + reject(); + } + }); + }); +} + +removePrograms().then(function() { + return removeDepartments(); + }) + .then(function() { + return removeColleges(); + }) + .then(function() { + loadCSV(applyImport); + }); + +setInterval(() => { + if (completed === toComplete) { + console.log('Successfully added colleges, departments, and programs'); + process.exit(0); + } +}, 100); diff --git a/lib/cron/cronexample.js b/lib/cron/cronexample.js index f5e9942..76e111b 100644 --- a/lib/cron/cronexample.js +++ b/lib/cron/cronexample.js @@ -1,69 +1,71 @@ const mongoose = require('mongoose'); +const winston = require('winston'); const nodemailer = require('nodemailer'); const hbs = require('nodemailer-express-handlebars'); const Review = mongoose.model('Review'); +const Document = mongoose.model('Document'); +const User = mongoose.model('User'); const _ = require('lodash'); + const CronJob = require('cron').CronJob; const job = new CronJob({ cronTime: '5,10,15,20,25,30,35,40,45,50,55,59 * * * * *', onTick: function() { - Review.find({}, (err,reviews) => { - if(err) { - console.log("error"); - } - reviews.forEach(function(review) { - for (let node of _.values(review.nodes)) { - if (node.title === 'Questions' && node.completionEstimate === 3){ - nodemailer.createTestAccount((err, account) => { - if (err) { - console.error('Failed to create a testing account. ' + err.message); - return process.exit(1); - } - - console.log('Credentials obtained, sending message...'); - - // Create a SMTP transporter object - let transporter = nodemailer.createTransport({ - host: account.smtp.host, - port: account.smtp.port, - secure: account.smtp.secure, - auth: { - user: account.user, - pass: account.pass - } - }); - transporter.use('compile', hbs ({ - viewPath: 'templates', - extName: '.hbs' - })); + Review.find({}, (err, reviews) => { + if (err) { + console.log('error'); + } + reviews.forEach(function(review) { + for (let node of _.values(review.nodes)) { + let currentDate = Date.now(); + let documentDate = node.finishDate.getTime(); + let daysRemaining = Math.floor((documentDate - currentDate) / 86400000); + if (daysRemaining === 1) { + console.log(node.title); + Document.findById(node.document).then(function(document) { + for (let id of document.subscribers) { + User.findById(id).then(function(user) { + // Create a SMTP transporter object + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); - const memberArray = ['Justin', 'Andrew', 'Ben']; - let message = { - from: 'allen3just@yahoo.com', - to: 'example@example.com', - subject: 'Notification email', - template: '../lib/templates/document_deadline_notification', - context: { - Member: memberArray - } - }; - - transporter.sendMail(message, (err, info) => { - if (err) { + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../templates/document_deadline_notification', + context: { + first: user.name.first, + last: user.name.last, + document: document.title + } + }; + transporter.sendMail(message, (err, info) => { + if (err) { console.log('Error occurred. ' + err.message); return process.exit(1); - } + } - console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info)); - }); - }); - }; - }; + }); + }, winston.error); + } + }, winston.error); + } + } + }); }); - }); }, start: true, timeZone: 'America/Los_Angeles' @@ -71,5 +73,4 @@ const job = new CronJob({ - -// module.exports = job(); +module.exports = job; diff --git a/lib/cron/document_deadline.js b/lib/cron/document_deadline.js index 4fbb2f7..00576e6 100644 --- a/lib/cron/document_deadline.js +++ b/lib/cron/document_deadline.js @@ -1,69 +1,80 @@ +const winston = require('winston'); const mongoose = require('mongoose'); const nodemailer = require('nodemailer'); const hbs = require('nodemailer-express-handlebars'); const Review = mongoose.model('Review'); +const Document = mongoose.model('Document'); +const User = mongoose.model('User'); const _ = require('lodash'); const CronJob = require('cron').CronJob; -const job = new CronJob({ +const deadlineJob = new CronJob({ cronTime: '* 30 08 * * *', onTick: function() { - Review.find({}, (err,reviews) => { - if(err) { - console.log("error"); - } - reviews.forEach(function(review) { - for (let node of _.values(review.nodes)) { - if (node.title === 'Self-study Document' && node.completionEstimate === 3){ - nodemailer.createTestAccount((err, account) => { - if (err) { - console.error('Failed to create a testing account. ' + err.message); - return process.exit(1); - } - - console.log('Credentials obtained, sending message...'); + Review.find({}, (err, reviews) => { + if (err) { + console.log('error'); + } + reviews.forEach(function(review) { + for (let node of _.values(review.nodes)) { + let currentDate = Date.now(); + let documentDate = node.finishDate.getTime(); + let daysRemaining = Math.floor((documentDate - currentDate) / 86400000); + if (daysRemaining === 1) { + Document.findById(node.document).then(function(document) { + for (let id of document.subscribers) { + User.findById(id).then(function(user) { + nodemailer.createTestAccount((err, account) => { + if (err) { + console.error('Failed to create a testing account. ' + err.message); + return process.exit(1); + } - // Create a SMTP transporter object - let transporter = nodemailer.createTransport({ - host: account.smtp.host, - port: account.smtp.port, - secure: account.smtp.secure, - auth: { - user: account.user, - pass: account.pass - } - }); - transporter.use('compile', hbs ({ - viewPath: 'templates', - extName: '.hbs' - })); + console.log('Credentials obtained, sending message...'); - const memberArray = ['Justin', 'Andrew', 'Ben']; - let message = { - from: 'allen3just@yahoo.com', - to: 'example@example.com', - subject: 'Notification email', - template: '../lib/templates/document_deadline_notification', - context: { - Member: memberArray - } - }; + // Create a SMTP transporter object + let transporter = nodemailer.createTransport({ + host: account.smtp.host, + port: account.smtp.port, + secure: account.smtp.secure, + auth: { + user: account.user, + pass: account.pass + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); - transporter.sendMail(message, (err, info) => { - if (err) { - console.log('Error occurred. ' + err.message); - return process.exit(1); - } + let message = { + from: 'allen3just@yahoo.com', + to: user.email, + subject: 'Notification email', + template: '../lib/templates/document_deadline_notification', + context: { + doc: document.title, + member: user.name + } + }; - console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info)); - }); - }); + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } - }; - }; + console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info)); + }); + }); + }, winston.error); + } + }, winston.error); + } + } + }); }); - }); }, start: true, timeZone: 'America/Los_Angeles' @@ -71,5 +82,4 @@ const job = new CronJob({ - -// module.exports = job(); +module.exports = deadlineJob; diff --git a/lib/cron/index.js b/lib/cron/index.js index 01e7838..2c4e556 100644 --- a/lib/cron/index.js +++ b/lib/cron/index.js @@ -1,4 +1,5 @@ module.exports = [ require('./document_deadline'), - require('./questions_notification') + require('./questions_notification'), + require('./cronexample') ]; diff --git a/lib/review_node.js b/lib/review_node.js index 938401f..f8b35cd 100644 --- a/lib/review_node.js +++ b/lib/review_node.js @@ -9,6 +9,7 @@ module.exports = { finishDateOverriden: Boolean, finalized: Boolean, email: Object, + emailSent: Boolean, document: mongoose.Schema.Types.ObjectId, prerequisites: { type: [mongoose.Schema.Types.ObjectId], diff --git a/lib/templates/document_deadline_notification.hbs b/lib/templates/document_deadline_notification.hbs index d338276..7f45b60 100644 --- a/lib/templates/document_deadline_notification.hbs +++ b/lib/templates/document_deadline_notification.hbs @@ -1,4 +1,21 @@ -To {{Member}}:
-There is an upcoming deadline for document {{Document}}. Please review and update any changes that you may have. + +
+
-Thank you. + Hello {{first}} {{last}}, +
+
+ +The following Document "{{document}}" has an upcoming deadline.
+Please check PRISM for more details or click the link below. +
+
+ Link to dashboard +
+
+
+ +From, +
+Program Review Information System Management +
diff --git a/lib/templates/event_cancel.hbs b/lib/templates/event_cancel.hbs new file mode 100644 index 0000000..6220c48 --- /dev/null +++ b/lib/templates/event_cancel.hbs @@ -0,0 +1,22 @@ + +
+
+ + Hello {{first}} {{last}}, +
+
+ +The following event "{{title}}" has been canceled.
+Please check PRISM calendar for more details or click the link below. +
+
+ Link to calendar + +
+
+
+ +From, +
+Program Review Information System Management +
diff --git a/lib/templates/event_change_date.hbs b/lib/templates/event_change_date.hbs new file mode 100644 index 0000000..8d33174 --- /dev/null +++ b/lib/templates/event_change_date.hbs @@ -0,0 +1,22 @@ + +
+
+ + Hello {{first}} {{last}}, +
+
+ +The following event "{{title}}" has been moved to a new date.
+Please check PRISM calendar for more details or click the link below. +
+
+ Link to calendar + +
+
+
+ +From, +
+Program Review Information System Management +
diff --git a/lib/templates/event_created.hbs b/lib/templates/event_created.hbs new file mode 100644 index 0000000..7784111 --- /dev/null +++ b/lib/templates/event_created.hbs @@ -0,0 +1,22 @@ + +
+
+ + Hello {{first}} {{last}}, +
+
+ +The following event "{{title}}" has been created.
+Please check PRISM calendar for more details or click the link below. +
+
+ Link to calendar + +
+
+
+ +From, +
+Program Review Information System Management +
diff --git a/lib/templates/external_upload.hbs b/lib/templates/external_upload.hbs new file mode 100644 index 0000000..f3630ab --- /dev/null +++ b/lib/templates/external_upload.hbs @@ -0,0 +1,2 @@ +Hello {{name}}, +Please visit the following link http://ecst-csproj2.calstatela.edu:4188/{{token}} in order to upload your external review document. diff --git a/lib/templates/review_created.hbs b/lib/templates/review_created.hbs new file mode 100644 index 0000000..ab7e9cf --- /dev/null +++ b/lib/templates/review_created.hbs @@ -0,0 +1,21 @@ + +
+
+ + Hello {{first}} {{last}}, +
+
+ +The following review for program "{{program}}" has been created.
+Please check PRISM for more details or click the link below. +
+
+ Link to Review +
+
+
+ +From, +
+Program Review Information System Management +
diff --git a/models/document.model.js b/models/document.model.js index bc5bdff..a2d32f8 100644 --- a/models/document.model.js +++ b/models/document.model.js @@ -54,7 +54,7 @@ const documentSchema = new mongoose.Schema({ required: true }, creationDate: { - type: String, + type: Date, required: true }, revision: { diff --git a/models/event.model.js b/models/event.model.js index 6ef32f4..c68be58 100644 --- a/models/event.model.js +++ b/models/event.model.js @@ -4,6 +4,14 @@ const mongoose = require('mongoose'); const Document = mongoose.model('Document'); +const Group = mongoose.model('Group'); + +const User = mongoose.model('User'); + + +const nodemailer = require('nodemailer'); +const hbs = require('nodemailer-express-handlebars'); + const eventSchema = new mongoose.Schema({ title: { type: String, @@ -74,14 +82,161 @@ eventSchema.methods.deleteDocument = function(document) { eventSchema.methods.changeDate = function(newDate, sendNotifications = true) { this.date = newDate; if (sendNotifications && this.sendNotifications) { - // Send the notifications via the email manager + for (let id of this.people) { + User.findById(id).then(function(user) { + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); + + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../lib/templates/event_change_date', + context: { + first: user.name.first, + last: user.name.last, + title: this.title + } + }; + + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } + }); + }); + } + for (let groupid of this.groups) { + Group.findById(groupid).then(function(group) { + for (let id of group.members) { + User.findById(id).then(function(user) { + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); + + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../lib/templates/event_change_date', + context: { + first: user.name.first, + last: user.name.last, + title: this.title + } + }; + + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } + + }); + + }); + } + }); + } } }; eventSchema.methods.cancel = function() { this.canceled = true; if (this.sendNotifications) { - // Send the notifications via the email manager + for (let id of this.people) { + User.findById(id).then(function(user) { + + + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); + + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../lib/templates/event_cancel', + context: { + first: user.name.first, + last: user.name.last, + title: this.title + } + }; + + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } + }); + }); + } + for (let groupid of this.groups) { + Group.findById(groupid).then(function(group) { + for (let id of group.members) { + User.findById(id).then(function(user) { + + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); + + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../lib/templates/event_cancel', + context: { + first: user.name.first, + last: user.name.last, + title: this.title + } + }; + + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } + }); + }); + } + }); + } } }; diff --git a/models/index.js b/models/index.js index 12165ea..957e60d 100644 --- a/models/index.js +++ b/models/index.js @@ -3,9 +3,9 @@ exports.College = require('./college.model'); exports.Department = require('./department.model'); exports.Document = require('./document.model'); exports.Group = require('./group.model'); +exports.User = require('./user.model'); exports.Event = require('./event.model'); exports.ExternalUpload = require('./external_upload.model'); exports.Program = require('./program.model'); exports.Resource = require('./resource.model'); exports.Review = require('./review.model'); -exports.User = require('./user.model'); diff --git a/models/resource.model.js b/models/resource.model.js index 0a00823..4969d75 100644 --- a/models/resource.model.js +++ b/models/resource.model.js @@ -35,7 +35,9 @@ const resourceSchema = new mongoose.Schema({ } -}, {usePushEach: true}); + +}, + {usePushEach: true}); resourceSchema.methods.addFiles = function(message, user) { this.files.push({ diff --git a/models/review.model.js b/models/review.model.js index 653dcce..bc25488 100644 --- a/models/review.model.js +++ b/models/review.model.js @@ -80,6 +80,7 @@ const nodeValidators = { 'finishDateOverriden': _.isBoolean, 'finalized': _.isBoolean, 'email': validEmailSettings, + 'emailSent': _.isBoolean, 'document': validObjectId, 'prerequisites': validPrerequisites, 'title': _.isString diff --git a/package-lock.json b/package-lock.json index 0eb0bc5..b4a027d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,16 @@ "resolved": "https://registry.npmjs.org/@ladjs/i18n/-/i18n-0.2.0.tgz", "integrity": "sha512-e9gkXFmpoAJfX4louxiX07Yawv8vNEoxvekK0AYWK2HKOFNSNxeJKjNJ80B6CKt1z42P7AESFw17TIsMUMwSqg==", "requires": { - "auto-bind": "^1.1.0", - "boolean": "^0.1.3", + "auto-bind": "1.2.0", + "boolean": "0.1.3", "boom": "5.2.0", - "country-language": "^0.1.7", - "i18n": "^0.8.3", - "i18n-locales": "^0.0.2", - "lodash": "^4.17.4", - "moment": "^2.18.1", - "qs": "^6.5.1", - "underscore.string": "^3.3.4" + "country-language": "0.1.7", + "i18n": "0.8.3", + "i18n-locales": "0.0.2", + "lodash": "4.17.10", + "moment": "2.22.1", + "qs": "6.5.1", + "underscore.string": "3.3.4" } }, "@types/babel-types": { @@ -31,7 +31,7 @@ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz", "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==", "requires": { - "@types/babel-types": "*" + "@types/babel-types": "7.0.1" } }, "abbrev": { @@ -44,7 +44,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.18", "negotiator": "0.6.1" } }, @@ -58,7 +58,7 @@ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", "requires": { - "acorn": "^4.0.4" + "acorn": "4.0.13" }, "dependencies": { "acorn": { @@ -73,10 +73,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "align-text": { @@ -84,9 +84,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" } }, "ambi": { @@ -94,8 +94,8 @@ "resolved": "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz", "integrity": "sha1-fI43K+SIkRV+fOoBy2+RQ9H3QiA=", "requires": { - "editions": "^1.1.1", - "typechecker": "^4.3.0" + "editions": "1.3.4", + "typechecker": "4.5.0" }, "dependencies": { "typechecker": { @@ -103,7 +103,7 @@ "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.5.0.tgz", "integrity": "sha512-bqPE/ck3bVIaXP7gMKTKSHrypT32lpYTpiqzPYeYzdSQnmaGvaGhy7TnN/M/+5R+2rs/kKcp9ZLPRp/Q9Yj+4w==", "requires": { - "editions": "^1.3.4" + "editions": "1.3.4" } } } @@ -133,7 +133,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" }, "dependencies": { "sprintf-js": { @@ -198,8 +198,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.5.6", + "regenerator-runtime": "0.11.1" } }, "babel-types": { @@ -207,10 +207,10 @@ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" } }, "babylon": { @@ -268,8 +268,8 @@ "version": "1.1.4", "bundled": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.5" } }, "balanced-match": { @@ -280,7 +280,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -327,7 +327,7 @@ "version": "1.2.5", "bundled": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { @@ -338,26 +338,26 @@ "version": "2.7.4", "bundled": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" } }, "glob": { "version": "7.1.2", "bundled": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -368,22 +368,22 @@ "version": "0.4.21", "bundled": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": "2.1.2" } }, "ignore-walk": { "version": "3.0.1", "bundled": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -398,7 +398,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -409,7 +409,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -420,8 +420,8 @@ "version": "2.2.4", "bundled": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "safe-buffer": "5.1.1", + "yallist": "3.0.2" }, "dependencies": { "yallist": { @@ -434,7 +434,7 @@ "version": "1.1.0", "bundled": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "mkdirp": { @@ -452,33 +452,33 @@ "version": "2.2.0", "bundled": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" } }, "node-pre-gyp": { "version": "0.9.1", "bundled": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.6", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" } }, "nopt": { "version": "4.0.1", "bundled": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -489,18 +489,18 @@ "version": "1.1.10", "bundled": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npmlog": { "version": "4.1.2", "bundled": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -515,7 +515,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -530,8 +530,8 @@ "version": "0.1.5", "bundled": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -546,10 +546,10 @@ "version": "1.2.6", "bundled": true, "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -562,20 +562,20 @@ "version": "2.3.5", "bundled": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" } }, "rimraf": { "version": "2.6.2", "bundled": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { @@ -606,23 +606,23 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { "version": "1.0.3", "bundled": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -633,13 +633,13 @@ "version": "4.4.1", "bundled": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" }, "dependencies": { "yallist": { @@ -656,7 +656,7 @@ "version": "1.1.2", "bundled": true, "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "wrappy": { @@ -671,7 +671,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "bluebird": { @@ -685,15 +685,15 @@ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "~1.6.15" + "type-is": "1.6.16" } }, "boolbase": { @@ -711,7 +711,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" }, "dependencies": { "hoek": { @@ -726,7 +726,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -761,7 +761,7 @@ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", "requires": { "dicer": "0.2.5", - "readable-stream": "1.1.x" + "readable-stream": "1.1.14" }, "dependencies": { "isarray": { @@ -774,10 +774,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.3", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "string_decoder": { @@ -802,8 +802,8 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "2.1.1", + "map-obj": "1.0.1" }, "dependencies": { "camelcase": { @@ -823,8 +823,8 @@ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, "chalk": { @@ -832,11 +832,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "character-parser": { @@ -844,7 +844,7 @@ "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", "requires": { - "is-regex": "^1.0.3" + "is-regex": "1.0.4" } }, "cheerio": { @@ -852,22 +852,22 @@ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.1", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" } }, "clean-css": { @@ -875,7 +875,7 @@ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "requires": { - "source-map": "0.5.x" + "source-map": "0.5.7" } }, "cliui": { @@ -883,8 +883,8 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", + "center-align": "0.1.3", + "right-align": "0.1.3", "wordwrap": "0.0.2" }, "dependencies": { @@ -920,7 +920,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -928,7 +928,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "requires": { - "graceful-readlink": ">= 1.0.0" + "graceful-readlink": "1.0.1" } }, "concat-map": { @@ -941,10 +941,10 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "consolidate": { @@ -952,7 +952,7 @@ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", "requires": { - "bluebird": "^3.1.1" + "bluebird": "3.5.1" } }, "constantinople": { @@ -960,10 +960,10 @@ "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", "requires": { - "@types/babel-types": "^7.0.0", - "@types/babylon": "^6.16.2", - "babel-types": "^6.26.0", - "babylon": "^6.18.0" + "@types/babel-types": "7.0.1", + "@types/babylon": "6.16.2", + "babel-types": "6.26.0", + "babylon": "6.18.0" } }, "content-disposition": { @@ -1010,8 +1010,8 @@ "resolved": "https://registry.npmjs.org/country-language/-/country-language-0.1.7.tgz", "integrity": "sha1-eHD0uhJduaYHHxlze9nvk0OuNds=", "requires": { - "underscore": "~1.7.0", - "underscore.deep": "~0.5.1" + "underscore": "1.7.0", + "underscore.deep": "0.5.1" } }, "cron": { @@ -1019,7 +1019,7 @@ "resolved": "https://registry.npmjs.org/cron/-/cron-1.3.0.tgz", "integrity": "sha512-K/SF7JlgMmNjcThWxkKvsHhey2EDB4CeOEWJ9aXWj3fbQJppsvTPIeyLdHfNq5IbbsMUUjRW1nr5dSO95f2E4w==", "requires": { - "moment-timezone": "^0.5.x" + "moment-timezone": "0.5.16" } }, "cross-spawn": { @@ -1027,9 +1027,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" } }, "cryptiles": { @@ -1037,7 +1037,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "requires": { - "boom": "5.x.x" + "boom": "5.2.0" } }, "csextends": { @@ -1050,10 +1050,10 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", + "boolbase": "1.0.0", + "css-what": "2.1.0", "domutils": "1.5.1", - "nth-check": "~1.0.1" + "nth-check": "1.0.1" }, "dependencies": { "domutils": { @@ -1061,8 +1061,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" } } } @@ -1077,10 +1077,10 @@ "resolved": "https://registry.npmjs.org/csv/-/csv-2.0.0.tgz", "integrity": "sha1-DVHY+j7OJ4tUCfeVcX/PzVrOmz4=", "requires": { - "csv-generate": "^2.0.0", - "csv-parse": "^2.0.0", - "csv-stringify": "^2.0.0", - "stream-transform": "^1.0.0" + "csv-generate": "2.0.2", + "csv-parse": "2.4.0", + "csv-stringify": "2.1.0", + "stream-transform": "1.0.2" } }, "csv-generate": { @@ -1098,7 +1098,7 @@ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-2.1.0.tgz", "integrity": "sha512-wEmZksjlGEZEP0Ai7eyCQuVd68CUqP1TmQ7ay4bchtxTY37tAm1DgM1xPj2L9isEylGEmvfFwA6RXwnqLzKfuA==", "requires": { - "lodash.get": "~4.4.2" + "lodash.get": "4.4.2" } }, "currently-unhandled": { @@ -1106,7 +1106,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "requires": { - "array-find-index": "^1.0.1" + "array-find-index": "1.0.2" } }, "cycle": { @@ -1119,7 +1119,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "datauri": { @@ -1127,9 +1127,9 @@ "resolved": "https://registry.npmjs.org/datauri/-/datauri-1.1.0.tgz", "integrity": "sha512-0q+cTTKx7q8eDteZRIQLTFJuiIsVing17UbWTPssY4JLSMaYsk/VKpNulBDo9NSgQWcvlPrkEHW8kUO67T/7mQ==", "requires": { - "image-size": "^0.6.2", - "mimer": "^0.3.2", - "semver": "^5.5.0" + "image-size": "0.6.2", + "mimer": "0.3.2", + "semver": "5.5.0" } }, "dateformat": { @@ -1137,8 +1137,8 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" + "get-stdin": "4.0.1", + "meow": "3.7.0" } }, "debug": { @@ -1164,7 +1164,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "requires": { - "clone": "^1.0.2" + "clone": "1.0.4" } }, "define-properties": { @@ -1172,8 +1172,8 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" + "foreach": "2.0.5", + "object-keys": "1.0.11" } }, "delayed-stream": { @@ -1196,7 +1196,7 @@ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", "requires": { - "readable-stream": "1.1.x", + "readable-stream": "1.1.14", "streamsearch": "0.1.2" }, "dependencies": { @@ -1210,10 +1210,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.3", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "string_decoder": { @@ -1233,8 +1233,8 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "domelementtype": "1.1.3", + "entities": "1.1.1" }, "dependencies": { "domelementtype": { @@ -1254,7 +1254,7 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", "requires": { - "domelementtype": "1" + "domelementtype": "1.3.0" } }, "domutils": { @@ -1262,8 +1262,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" } }, "dotenv": { @@ -1276,7 +1276,7 @@ "resolved": "https://registry.npmjs.org/eachr/-/eachr-2.0.4.tgz", "integrity": "sha1-Rm98qhBwj2EFCeMsgHqv5X/BIr8=", "requires": { - "typechecker": "^2.0.8" + "typechecker": "2.1.0" } }, "ecc-jsbn": { @@ -1285,7 +1285,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "0.1.1" } }, "ecdsa-sig-formatter": { @@ -1293,8 +1293,8 @@ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", "requires": { - "base64url": "^2.0.0", - "safe-buffer": "^5.0.1" + "base64url": "2.0.0", + "safe-buffer": "5.1.2" } }, "editions": { @@ -1312,19 +1312,19 @@ "resolved": "https://registry.npmjs.org/email-templates/-/email-templates-3.6.0.tgz", "integrity": "sha512-y7ZDYBTbLjLX4DUdVnMaG6B6Yl0QNyvkYsqWHsV1L1FAXRqxGMlNmfgqmUYhgaShjyxQT1bFcUrB/ZfTGorlFw==", "requires": { - "@ladjs/i18n": "^0.2.0", - "auto-bind": "^1.1.0", - "bluebird": "^3.5.1", - "consolidate": "^0.15.0", - "debug": "^3.1.0", - "fs-extra": "^5.0.0", - "get-paths": "^0.0.2", - "html-to-text": "^3.3.0", - "juice": "^4.2.2", - "juice-resources-promise": "^0.0.2", - "lodash": "^4.17.4", - "nodemailer": "^4.4.1", - "preview-email": "^0.0.7" + "@ladjs/i18n": "0.2.0", + "auto-bind": "1.2.0", + "bluebird": "3.5.1", + "consolidate": "0.15.1", + "debug": "3.1.0", + "fs-extra": "5.0.0", + "get-paths": "0.0.2", + "html-to-text": "3.3.0", + "juice": "4.2.3", + "juice-resources-promise": "0.0.2", + "lodash": "4.17.10", + "nodemailer": "4.6.4", + "preview-email": "0.0.7" }, "dependencies": { "debug": { @@ -1352,7 +1352,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es6-promise": { @@ -1400,34 +1400,34 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=", "requires": { - "accepts": "~1.3.3", + "accepts": "1.3.5", "array-flatten": "1.1.1", "content-disposition": "0.5.2", - "content-type": "~1.0.2", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.1", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "etag": "~1.8.0", - "finalhandler": "~1.0.6", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.0.6", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~1.1.5", + "proxy-addr": "1.1.5", "qs": "6.5.0", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "send": "0.15.6", "serve-static": "1.12.6", "setprototypeof": "1.0.3", - "statuses": "~1.3.1", - "type-is": "~1.6.15", + "statuses": "1.3.1", + "type-is": "1.6.16", "utils-merge": "1.0.0", - "vary": "~1.1.1" + "vary": "1.1.2" }, "dependencies": { "qs": { @@ -1452,11 +1452,11 @@ "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.0.0.tgz", "integrity": "sha1-gKBwu4GbCeSvLKbQeA91zgXnXC8=", "requires": { - "glob": "^6.0.4", - "graceful-fs": "^4.1.2", - "handlebars": "^4.0.5", - "object.assign": "^4.0.3", - "promise": "^7.0.0" + "glob": "6.0.4", + "graceful-fs": "4.1.11", + "handlebars": "4.0.11", + "object.assign": "4.1.0", + "promise": "7.3.1" } }, "express-rate-limit": { @@ -1464,7 +1464,7 @@ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-2.11.0.tgz", "integrity": "sha512-KMZayDxj3Wr7zYuwTuDZj5hMW0nhnyJVBVCwMEVKwMdW6CkYh4vnfnUbRJYhKC0v6UuIbPerwKY0dqWmEzFjKA==", "requires": { - "defaults": "^1.0.3" + "defaults": "1.0.3" } }, "extend": { @@ -1477,7 +1477,7 @@ "resolved": "https://registry.npmjs.org/extendr/-/extendr-2.1.0.tgz", "integrity": "sha1-MBqgu+pWX00tyPVw8qImEahSe1Y=", "requires": { - "typechecker": "~2.0.1" + "typechecker": "2.0.8" }, "dependencies": { "typechecker": { @@ -1492,7 +1492,7 @@ "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-2.2.0.tgz", "integrity": "sha1-H6KOunNSxttID4hc63GkaBC+bX0=", "requires": { - "typechecker": "~2.0.1" + "typechecker": "2.0.8" }, "dependencies": { "typechecker": { @@ -1528,12 +1528,12 @@ "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" }, "dependencies": { "statuses": { @@ -1548,8 +1548,8 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "findup-sync": { @@ -1557,7 +1557,7 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", "requires": { - "glob": "~5.0.0" + "glob": "5.0.15" }, "dependencies": { "glob": { @@ -1565,11 +1565,11 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -1589,9 +1589,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.18" } }, "forwarded": { @@ -1609,9 +1609,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" } }, "fs.realpath": { @@ -1629,7 +1629,7 @@ "resolved": "https://registry.npmjs.org/get-paths/-/get-paths-0.0.2.tgz", "integrity": "sha512-cB/Yr1D8Ug9IzBqor1maxVCOtcaQgUBZpZtq6Mf9RKkyRe6ohEdgx/zMLcPcOaXaegxNIt2vSij8YcuZGF3tXA==", "requires": { - "fs-extra": "^4.0.2" + "fs-extra": "4.0.3" }, "dependencies": { "fs-extra": { @@ -1637,9 +1637,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" } } } @@ -1659,7 +1659,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -1667,11 +1667,11 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "graceful-fs": { @@ -1689,22 +1689,22 @@ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.2.tgz", "integrity": "sha1-TmpeaVtwRy/VME9fqeNCNoNqc7w=", "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~1.0.0", - "grunt-legacy-util": "~1.0.0", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", - "minimatch": "~3.0.2", - "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.2.8" + "coffeescript": "1.10.0", + "dateformat": "1.0.12", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.3.0", + "glob": "7.0.6", + "grunt-cli": "1.2.0", + "grunt-known-options": "1.1.0", + "grunt-legacy-log": "1.0.2", + "grunt-legacy-util": "1.0.0", + "iconv-lite": "0.4.19", + "js-yaml": "3.5.5", + "minimatch": "3.0.4", + "nopt": "3.0.6", + "path-is-absolute": "1.0.1", + "rimraf": "2.2.8" }, "dependencies": { "glob": { @@ -1748,10 +1748,10 @@ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.2.tgz", "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==", "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" + "colors": "1.1.2", + "grunt-legacy-log-utils": "1.0.0", + "hooker": "0.2.3", + "lodash": "4.17.10" } }, "grunt-legacy-log-utils": { @@ -1759,8 +1759,8 @@ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", "requires": { - "chalk": "~1.1.1", - "lodash": "~4.3.0" + "chalk": "1.1.3", + "lodash": "4.3.0" }, "dependencies": { "lodash": { @@ -1775,13 +1775,13 @@ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~4.3.0", - "underscore.string": "~3.2.3", - "which": "~1.2.1" + "async": "1.5.2", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "4.3.0", + "underscore.string": "3.2.3", + "which": "1.2.14" }, "dependencies": { "lodash": { @@ -1799,7 +1799,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } } } @@ -1809,10 +1809,10 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" }, "dependencies": { "source-map": { @@ -1820,7 +1820,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -1835,8 +1835,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "has": { @@ -1844,7 +1844,7 @@ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "requires": { - "function-bind": "^1.0.2" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -1852,7 +1852,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-symbols": { @@ -1865,10 +1865,10 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" }, "dependencies": { "boom": { @@ -1876,7 +1876,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } }, "hoek": { @@ -1916,11 +1916,11 @@ "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-3.3.0.tgz", "integrity": "sha1-aptjxpm4hbt7qEsURr/mh2u/z7c=", "requires": { - "he": "^1.0.0", - "htmlparser2": "^3.9.2", - "optimist": "^0.6.1", - "underscore": "^1.8.3", - "underscore.string": "^3.2.3" + "he": "1.1.1", + "htmlparser2": "3.9.2", + "optimist": "0.6.1", + "underscore": "1.9.0", + "underscore.string": "3.3.4" }, "dependencies": { "underscore": { @@ -1935,12 +1935,12 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.7.0", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "http-errors": { @@ -1948,10 +1948,10 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.5.0" } }, "http-signature": { @@ -1959,9 +1959,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" } }, "i18n": { @@ -1969,12 +1969,12 @@ "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.8.3.tgz", "integrity": "sha1-LYzxwkciYCwgQdAbpq5eqlE4jw4=", "requires": { - "debug": "*", - "make-plural": "^3.0.3", - "math-interval-parser": "^1.1.0", - "messageformat": "^0.3.1", - "mustache": "*", - "sprintf-js": ">=1.0.3" + "debug": "2.6.9", + "make-plural": "3.0.6", + "math-interval-parser": "1.1.0", + "messageformat": "0.3.1", + "mustache": "2.3.0", + "sprintf-js": "1.1.1" } }, "i18n-locales": { @@ -1992,8 +1992,8 @@ "resolved": "https://registry.npmjs.org/ignorefs/-/ignorefs-1.2.0.tgz", "integrity": "sha1-2ln7hYl25KXkNwLM0fKC/byeV1Y=", "requires": { - "editions": "^1.3.3", - "ignorepatterns": "^1.1.0" + "editions": "1.3.4", + "ignorepatterns": "1.1.0" } }, "ignorepatterns": { @@ -2011,7 +2011,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "inflight": { @@ -2019,8 +2019,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -2048,7 +2048,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, "is-expression": { @@ -2056,8 +2056,8 @@ "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", "requires": { - "acorn": "~4.0.2", - "object-assign": "^4.0.1" + "acorn": "4.0.13", + "object-assign": "4.1.1" }, "dependencies": { "acorn": { @@ -2072,7 +2072,7 @@ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-promise": { @@ -2085,7 +2085,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "requires": { - "has": "^1.0.1" + "has": "1.0.1" } }, "is-typedarray": { @@ -2129,9 +2129,9 @@ "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=", "dev": true, "requires": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.99.0" + "exit": "0.1.2", + "glob": "7.1.2", + "jasmine-core": "2.99.1" }, "dependencies": { "glob": { @@ -2140,12 +2140,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -2161,10 +2161,10 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", "requires": { - "hoek": "2.x.x", - "isemail": "1.x.x", - "moment": "2.x.x", - "topo": "1.x.x" + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.22.1", + "topo": "1.1.0" }, "dependencies": { "hoek": { @@ -2184,8 +2184,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" + "argparse": "1.0.10", + "esprima": "2.7.3" } }, "jsbn": { @@ -2214,7 +2214,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } }, "jsonwebtoken": { @@ -2222,16 +2222,16 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz", "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==", "requires": { - "jws": "^3.1.4", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "xtend": "^4.0.1" + "jws": "3.1.4", + "lodash.includes": "4.3.0", + "lodash.isboolean": "3.0.3", + "lodash.isinteger": "4.0.4", + "lodash.isnumber": "3.0.3", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", + "lodash.once": "4.1.1", + "ms": "2.1.1", + "xtend": "4.0.1" }, "dependencies": { "ms": { @@ -2257,8 +2257,8 @@ "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", "requires": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" + "is-promise": "2.1.0", + "promise": "7.3.1" } }, "juice": { @@ -2266,13 +2266,13 @@ "resolved": "https://registry.npmjs.org/juice/-/juice-4.2.3.tgz", "integrity": "sha512-Jisv2A20k7y/aqLpEevSm0E+1JfWmd13jY2s5aST54cHJQKHkKES2RlDtkdOM/ecGnvUKAjG/j+KcDbkzoGjKg==", "requires": { - "cheerio": "^0.22.0", + "cheerio": "0.22.0", "commander": "2.9.0", - "cross-spawn": "^5.0.1", - "deep-extend": "^0.5.0", - "mensch": "^0.3.3", + "cross-spawn": "5.1.0", + "deep-extend": "0.5.1", + "mensch": "0.3.3", "slick": "1.12.2", - "web-resource-inliner": "^4.2.0" + "web-resource-inliner": "4.2.1" } }, "juice-resources-promise": { @@ -2288,7 +2288,7 @@ "base64url": "2.0.0", "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.9", - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "jws": { @@ -2296,9 +2296,9 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", "requires": { - "base64url": "^2.0.0", - "jwa": "^1.1.4", - "safe-buffer": "^5.0.1" + "base64url": "2.0.0", + "jwa": "1.1.5", + "safe-buffer": "5.1.2" } }, "jwt-simple": { @@ -2316,7 +2316,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "lazy-cache": { @@ -2329,11 +2329,11 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" } }, "lodash": { @@ -2456,8 +2456,8 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" } }, "lru-cache": { @@ -2465,8 +2465,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "make-plural": { @@ -2474,7 +2474,7 @@ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-3.0.6.tgz", "integrity": "sha1-IDOgO6wpC487uRJY9lud9+iwHKc=", "requires": { - "minimist": "^1.2.0" + "minimist": "1.2.0" } }, "map-obj": { @@ -2487,7 +2487,7 @@ "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-1.1.0.tgz", "integrity": "sha1-2+2lsGsySZc8bfYXD94jhvCv2JM=", "requires": { - "xregexp": "^2.0.0" + "xregexp": "2.0.0" } }, "media-typer": { @@ -2505,16 +2505,16 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" } }, "merge-descriptors": { @@ -2527,11 +2527,11 @@ "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-0.3.1.tgz", "integrity": "sha1-5Y//gkXps5cXmeW0PbWLPpQX9aI=", "requires": { - "async": "~1.5.2", - "glob": "~6.0.4", - "make-plural": "~3.0.3", - "nopt": "~3.0.6", - "watchr": "~2.4.13" + "async": "1.5.2", + "glob": "6.0.4", + "make-plural": "3.0.6", + "nopt": "3.0.6", + "watchr": "2.4.13" } }, "methods": { @@ -2554,7 +2554,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.33.0" } }, "mimer": { @@ -2567,7 +2567,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -2600,7 +2600,7 @@ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.16.tgz", "integrity": "sha512-4d1l92plNNqnMkqI/7boWNVXJvwGL2WyByl1Hxp3h/ao3HZiAqaoQY+6KBkYdiN5QtNDpndq+58ozl8W4GVoNw==", "requires": { - "moment": ">= 2.9.0" + "moment": "2.22.1" } }, "mongodb": { @@ -2637,7 +2637,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -2647,8 +2647,8 @@ "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz", "integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=", "requires": { - "bson": "~1.0.4", - "require_optional": "~1.0.0" + "bson": "1.0.6", + "require_optional": "1.0.1" } }, "mongoose": { @@ -2657,7 +2657,7 @@ "integrity": "sha512-pH8NK5AYGbnPeEFFGs5ACk18vzzcy4DFT48U9kKvkfg6SI3nJZkzGfN7o1NDWjy+kP26hWyU/AMhYTfe5hSVnA==", "requires": { "async": "2.1.4", - "bson": "~1.0.4", + "bson": "1.0.6", "hooks-fixed": "2.0.2", "kareem": "1.5.0", "lodash.get": "4.4.2", @@ -2686,11 +2686,11 @@ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", "requires": { - "basic-auth": "~2.0.0", + "basic-auth": "2.0.0", "debug": "2.6.9", - "depd": "~1.1.1", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" + "depd": "1.1.2", + "on-finished": "2.3.0", + "on-headers": "1.0.1" } }, "mpath": { @@ -2736,14 +2736,14 @@ "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz", "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=", "requires": { - "append-field": "^0.1.0", - "busboy": "^0.2.11", - "concat-stream": "^1.5.0", - "mkdirp": "^0.5.1", - "object-assign": "^3.0.0", - "on-finished": "^2.3.0", - "type-is": "^1.6.4", - "xtend": "^4.0.0" + "append-field": "0.1.0", + "busboy": "0.2.14", + "concat-stream": "1.6.2", + "mkdirp": "0.5.1", + "object-assign": "3.0.0", + "on-finished": "2.3.0", + "type-is": "1.6.16", + "xtend": "4.0.1" }, "dependencies": { "object-assign": { @@ -2783,7 +2783,7 @@ "resolved": "https://registry.npmjs.org/nodemailer-express-handlebars/-/nodemailer-express-handlebars-2.0.0.tgz", "integrity": "sha1-nCd16bVZOMYyad/0WO81wmQ0Njc=", "requires": { - "express-handlebars": "^3.0.0" + "express-handlebars": "3.0.0" } }, "nopt": { @@ -2791,7 +2791,7 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { - "abbrev": "1" + "abbrev": "1.1.1" } }, "normalize-package-data": { @@ -2799,10 +2799,10 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" } }, "nth-check": { @@ -2810,7 +2810,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "requires": { - "boolbase": "~1.0.0" + "boolbase": "1.0.0" } }, "number-is-nan": { @@ -2838,10 +2838,10 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" } }, "on-finished": { @@ -2862,7 +2862,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "opn": { @@ -2870,7 +2870,7 @@ "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "requires": { - "is-wsl": "^1.1.0" + "is-wsl": "1.1.0" } }, "optimist": { @@ -2878,8 +2878,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.10", + "wordwrap": "0.0.3" }, "dependencies": { "minimist": { @@ -2894,7 +2894,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.1" } }, "parseurl": { @@ -2907,7 +2907,7 @@ "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", "requires": { - "passport-strategy": "1.x.x", + "passport-strategy": "1.0.0", "pause": "0.0.1" } }, @@ -2916,8 +2916,8 @@ "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-3.0.1.tgz", "integrity": "sha1-5Pcnba2L0lHUPG/DiIMTC5YycvY=", "requires": { - "jsonwebtoken": "^7.0.0", - "passport-strategy": "^1.0.0" + "jsonwebtoken": "7.4.3", + "passport-strategy": "1.0.0" }, "dependencies": { "jsonwebtoken": { @@ -2925,11 +2925,11 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", "requires": { - "joi": "^6.10.1", - "jws": "^3.1.4", - "lodash.once": "^4.0.0", - "ms": "^2.0.0", - "xtend": "^4.0.1" + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "2.0.0", + "xtend": "4.0.1" } } } @@ -2944,8 +2944,8 @@ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", "requires": { - "process": "^0.11.1", - "util": "^0.10.3" + "process": "0.11.10", + "util": "0.10.3" } }, "path-exists": { @@ -2953,7 +2953,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "path-is-absolute": { @@ -2976,9 +2976,9 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "pause": { @@ -3006,7 +3006,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "preview-email": { @@ -3014,12 +3014,12 @@ "resolved": "https://registry.npmjs.org/preview-email/-/preview-email-0.0.7.tgz", "integrity": "sha512-VBXartEr84WVw5kWTe6y1gDzF1+HWX+GDZ0NGOyGjRq2V5tZr1o8gMLa5lxc7da3IQ7Xy4yd0a8o4zgpb+uisA==", "requires": { - "fs-extra": "^4.0.2", - "moment": "^2.18.1", - "nodemailer": "^4.2.0", - "opn": "^5.1.0", - "pug": "^2.0.0-rc.4", - "uuid": "^3.1.0" + "fs-extra": "4.0.3", + "moment": "2.22.1", + "nodemailer": "4.6.4", + "opn": "5.3.0", + "pug": "2.0.3", + "uuid": "3.2.1" }, "dependencies": { "fs-extra": { @@ -3027,9 +3027,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" } } } @@ -3049,7 +3049,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "asap": "~2.0.3" + "asap": "2.0.6" } }, "proxy-addr": { @@ -3057,7 +3057,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", "requires": { - "forwarded": "~0.1.0", + "forwarded": "0.1.2", "ipaddr.js": "1.4.0" } }, @@ -3071,14 +3071,14 @@ "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", "requires": { - "pug-code-gen": "^2.0.1", - "pug-filters": "^3.1.0", - "pug-lexer": "^4.0.0", - "pug-linker": "^3.0.5", - "pug-load": "^2.0.11", - "pug-parser": "^5.0.0", - "pug-runtime": "^2.0.4", - "pug-strip-comments": "^1.0.3" + "pug-code-gen": "2.0.1", + "pug-filters": "3.1.0", + "pug-lexer": "4.0.0", + "pug-linker": "3.0.5", + "pug-load": "2.0.11", + "pug-parser": "5.0.0", + "pug-runtime": "2.0.4", + "pug-strip-comments": "1.0.3" } }, "pug-attrs": { @@ -3086,9 +3086,9 @@ "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", "requires": { - "constantinople": "^3.0.1", - "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.4" + "constantinople": "3.1.2", + "js-stringify": "1.0.2", + "pug-runtime": "2.0.4" } }, "pug-code-gen": { @@ -3096,14 +3096,14 @@ "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", "requires": { - "constantinople": "^3.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.3", - "pug-error": "^1.3.2", - "pug-runtime": "^2.0.4", - "void-elements": "^2.0.1", - "with": "^5.0.0" + "constantinople": "3.1.2", + "doctypes": "1.1.0", + "js-stringify": "1.0.2", + "pug-attrs": "2.0.3", + "pug-error": "1.3.2", + "pug-runtime": "2.0.4", + "void-elements": "2.0.1", + "with": "5.1.1" } }, "pug-error": { @@ -3116,13 +3116,13 @@ "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", "requires": { - "clean-css": "^4.1.11", - "constantinople": "^3.0.1", + "clean-css": "4.1.11", + "constantinople": "3.1.2", "jstransformer": "1.0.0", - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7", - "resolve": "^1.1.6", - "uglify-js": "^2.6.1" + "pug-error": "1.3.2", + "pug-walk": "1.1.7", + "resolve": "1.7.1", + "uglify-js": "2.8.29" } }, "pug-lexer": { @@ -3130,9 +3130,9 @@ "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", "requires": { - "character-parser": "^2.1.1", - "is-expression": "^3.0.0", - "pug-error": "^1.3.2" + "character-parser": "2.2.0", + "is-expression": "3.0.0", + "pug-error": "1.3.2" } }, "pug-linker": { @@ -3140,8 +3140,8 @@ "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", "requires": { - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7" + "pug-error": "1.3.2", + "pug-walk": "1.1.7" } }, "pug-load": { @@ -3149,8 +3149,8 @@ "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", "requires": { - "object-assign": "^4.1.0", - "pug-walk": "^1.1.7" + "object-assign": "4.1.1", + "pug-walk": "1.1.7" } }, "pug-parser": { @@ -3158,7 +3158,7 @@ "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", "requires": { - "pug-error": "^1.3.2", + "pug-error": "1.3.2", "token-stream": "0.0.1" } }, @@ -3172,7 +3172,7 @@ "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", "requires": { - "pug-error": "^1.3.2" + "pug-error": "1.3.2" } }, "pug-walk": { @@ -3219,7 +3219,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "statuses": "1.5.0" } }, "setprototypeof": { @@ -3234,9 +3234,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" } }, "read-pkg-up": { @@ -3244,8 +3244,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" } }, "readable-stream": { @@ -3253,13 +3253,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "redent": { @@ -3267,8 +3267,8 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "2.1.0", + "strip-indent": "1.0.1" } }, "regenerator-runtime": { @@ -3291,7 +3291,7 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "request": { @@ -3299,28 +3299,28 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" } }, "require_optional": { @@ -3328,8 +3328,8 @@ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" + "resolve-from": "2.0.0", + "semver": "5.5.0" } }, "resolve": { @@ -3337,7 +3337,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "requires": { - "path-parse": "^1.0.5" + "path-parse": "1.0.5" } }, "resolve-from": { @@ -3350,7 +3350,7 @@ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { - "align-text": "^0.1.1" + "align-text": "0.1.4" } }, "rimraf": { @@ -3368,7 +3368,7 @@ "resolved": "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz", "integrity": "sha1-gXDBRE1wOOCMrqBaN0+uL6NJ4Vw=", "requires": { - "graceful-fs": "*" + "graceful-fs": "4.1.11" } }, "scandirectory": { @@ -3376,9 +3376,9 @@ "resolved": "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz", "integrity": "sha1-bOA/VKCQtmjjy+2/IO354xBZPnI=", "requires": { - "ignorefs": "^1.0.0", - "safefs": "^3.1.2", - "taskgroup": "^4.0.5" + "ignorefs": "1.2.0", + "safefs": "3.2.2", + "taskgroup": "4.3.1" } }, "semver": { @@ -3392,18 +3392,18 @@ "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=", "requires": { "debug": "2.6.9", - "depd": "~1.1.1", - "destroy": "~1.0.4", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.3.4", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.3.1" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" }, "dependencies": { "statuses": { @@ -3418,10 +3418,10 @@ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz", "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==", "requires": { - "etag": "~1.8.1", + "etag": "1.8.1", "fresh": "0.5.2", "ms": "2.0.0", - "parseurl": "~1.3.2", + "parseurl": "1.3.2", "safe-buffer": "5.1.1" }, "dependencies": { @@ -3437,9 +3437,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=", "requires": { - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.15.6" } }, @@ -3453,7 +3453,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -3481,7 +3481,7 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" }, "dependencies": { "hoek": { @@ -3501,8 +3501,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, "spdx-exceptions": { @@ -3515,8 +3515,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" } }, "spdx-license-ids": { @@ -3534,14 +3534,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" } }, "stack-trace": { @@ -3569,7 +3569,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "stringstream": { @@ -3582,7 +3582,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -3590,7 +3590,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } }, "strip-indent": { @@ -3598,7 +3598,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "requires": { - "get-stdin": "^4.0.1" + "get-stdin": "4.0.1" } }, "supports-color": { @@ -3611,8 +3611,8 @@ "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz", "integrity": "sha1-feGT/r12gnPEV3MElwJNUSwnkVo=", "requires": { - "ambi": "^2.2.0", - "csextends": "^1.0.3" + "ambi": "2.5.0", + "csextends": "1.2.0" } }, "to-fast-properties": { @@ -3630,7 +3630,7 @@ "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", "requires": { - "hoek": "2.x.x" + "hoek": "2.16.3" }, "dependencies": { "hoek": { @@ -3645,7 +3645,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" } }, "trim-newlines": { @@ -3658,7 +3658,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -3673,7 +3673,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.18" } }, "typechecker": { @@ -3691,9 +3691,9 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" } }, "uglify-to-browserify": { @@ -3717,8 +3717,8 @@ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", "requires": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" + "sprintf-js": "1.1.1", + "util-deprecate": "1.0.2" } }, "universalify": { @@ -3771,8 +3771,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "validator": { @@ -3790,9 +3790,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "void-elements": { @@ -3805,14 +3805,14 @@ "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.4.13.tgz", "integrity": "sha1-10hHu01vkPYf4sdPn2hmKqDgdgE=", "requires": { - "eachr": "^2.0.2", - "extendr": "^2.1.0", - "extract-opts": "^2.2.0", - "ignorefs": "^1.0.0", - "safefs": "^3.1.2", - "scandirectory": "^2.5.0", - "taskgroup": "^4.2.0", - "typechecker": "^2.0.8" + "eachr": "2.0.4", + "extendr": "2.1.0", + "extract-opts": "2.2.0", + "ignorefs": "1.2.0", + "safefs": "3.2.2", + "scandirectory": "2.5.0", + "taskgroup": "4.3.1", + "typechecker": "2.1.0" } }, "web-resource-inliner": { @@ -3820,14 +3820,14 @@ "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.2.1.tgz", "integrity": "sha512-fOWnBQHVX8zHvEbECDTxtYL0FXIIZZ5H3LWoez8mGopYJK7inEru1kVMDzM1lVdeJBNEqUnNP5FBGxvzuMcwwQ==", "requires": { - "async": "^2.1.2", - "chalk": "^1.1.3", - "datauri": "^1.0.4", - "htmlparser2": "^3.9.2", - "lodash.unescape": "^4.0.1", - "request": "^2.78.0", - "valid-data-url": "^0.1.4", - "xtend": "^4.0.0" + "async": "2.6.0", + "chalk": "1.1.3", + "datauri": "1.1.0", + "htmlparser2": "3.9.2", + "lodash.unescape": "4.0.1", + "request": "2.85.0", + "valid-data-url": "0.1.6", + "xtend": "4.0.1" }, "dependencies": { "async": { @@ -3835,7 +3835,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { - "lodash": "^4.14.0" + "lodash": "4.17.10" } } } @@ -3845,7 +3845,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "window-size": { @@ -3858,12 +3858,12 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" }, "dependencies": { "async": { @@ -3883,8 +3883,8 @@ "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", "requires": { - "acorn": "^3.1.0", - "acorn-globals": "^3.0.0" + "acorn": "3.3.0", + "acorn-globals": "3.1.0" } }, "wordwrap": { @@ -3917,9 +3917,9 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", "window-size": "0.1.0" } } diff --git a/routes/event.route.js b/routes/event.route.js index c5d0331..3c979f3 100644 --- a/routes/event.route.js +++ b/routes/event.route.js @@ -6,11 +6,17 @@ const router = express.Router(); const mongoose = require('mongoose'); const Event = mongoose.model('Event'); +const User = mongoose.model('User'); +const Group = mongoose.model('Group'); const access = require('../lib/access'); const actionLogger = require('../lib/action_logger'); const subscribeMiddlewareFactory = require('../lib/subscribe_middleware_factory'); +const nodemailer = require('nodemailer'); +const hbs = require('nodemailer-express-handlebars'); + + router.route('/event/:event_id') .get(access.allowGroups(['Administrators', 'Program Review Subcommittee']), function(req, res, next) { Event.findById(req.params.event_id).populate('documents').then(function(event) { @@ -70,9 +76,84 @@ router.route('/event/:event_id') router.route('/event').post(access.allowGroups(['Administrators', 'Program Review Subcommittee']), function(req, res, next) { Event.create({ 'title': req.body.title, - 'date': req.body.date + 'date': req.body.date, + 'people': req.body.people, + 'documents': req.body.documents, + 'groups': req.body.groups }) .then(function(newEvent) { + //send out email of event + for (let id of newEvent.people) { + User.findById(id).then(function(user) { + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); + + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../lib/templates/event_created', + context: { + first: user.name.first, + last: user.name.last, + title: newEvent.title + } + }; + + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } + }); + }); + } + for (let groupid of newEvent.groups) { + Group.findById(groupid).then(function(group) { + for (let id of group.members) { + User.findById(id).then(function(user) { + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); + + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../lib/templates/event_created', + context: { + first: user.name.first, + last: user.name.last, + title: newEvent.title + } + }; + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } + }); + }); + } + }); + } res.status(201); res.json(newEvent); winston.info(`Created event with id ${newEvent._id}`); diff --git a/routes/review.route.js b/routes/review.route.js index 1f6d48b..afe8554 100644 --- a/routes/review.route.js +++ b/routes/review.route.js @@ -3,10 +3,15 @@ const winston = require('winston'); const express = require('express'); const router = express.Router(); +const nodemailer = require('nodemailer'); +const hbs = require('nodemailer-express-handlebars'); const mongoose = require('mongoose'); const Document = mongoose.model('Document'); const Review = mongoose.model('Review'); +const Program = mongoose.model('Program'); +const Department = mongoose.model('Department'); +const User = mongoose.model('User'); const access = require('../lib/access'); const actionLogger = require('../lib/action_logger'); @@ -76,7 +81,58 @@ router.post('/review/:review_id/restore', access.allowGroups(['Administrators']) router.route('/review').post(access.allowGroups(['Administrators']), function(req, res, next) { reviewFactory.getReview(req.body).then(function(newReview) { newReview.recalculateDates(); + console.log('review created'); newReview.save().then(function() { + console.log('review created1'); + //put email here to send to department chairs, review>program>department>department chairs + Program.findById(newReview.program).then(function(program) { + console.log('review created2'); + Department.findById(program.department).then(function(dept) { + console.log('review created3'); + for (let id of dept.chairs) { + console.log('review created4'); + User.findById(id).then(function(user) { + console.log('review created5'); + + // Create a SMTP transporter object + let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'prismtestserver@gmail.com', + pass: 'Answer30' + } + }); + transporter.use('compile', hbs({ + viewPath: 'templates', + extName: '.hbs' + })); + + let message = { + from: 'prismtestserver@gmail.com', + to: 'allen3just@yahoo.com', + subject: 'Notification email', + template: '../lib/templates/review_created', + context: { + first: user.name.first, + last: user.name.last, + program: program.name, + reviewID: newReview._id + } + }; + + transporter.sendMail(message, (err, info) => { + if (err) { + console.log('Error occurred. ' + err.message); + return process.exit(1); + } else { + console.log(info); + } + }); + + }); + } + }); + }); res.status(201); res.json(newReview); winston.info(`Created review with id ${newReview._id}`);