From 7af378a7bbff27ab169c804516c4cbc6e71ca9ef Mon Sep 17 00:00:00 2001 From: Mark Moffat Date: Fri, 12 Jul 2019 17:36:34 +0930 Subject: [PATCH] Linting --- app.js | 6 +- gulpfile.js | 4 +- lib/auth.js | 2 +- lib/common.js | 52 +-- lib/indexing.js | 30 +- lib/testdata.js | 2 +- package-lock.json | 772 ++------------------------------ routes/admin.js | 44 +- routes/customer.js | 20 +- routes/index.js | 72 +-- routes/payments/authorizenet.js | 6 +- routes/payments/paypal.js | 58 +-- routes/payments/stripe.js | 22 +- routes/product.js | 18 +- routes/user.js | 9 +- 15 files changed, 205 insertions(+), 912 deletions(-) diff --git a/app.js b/app.js index 87a85e6..8d0d573 100644 --- a/app.js +++ b/app.js @@ -72,7 +72,7 @@ app.engine('hbs', handlebars({ extname: 'hbs', layoutsDir: path.join(__dirname, 'views', 'layouts'), defaultLayout: 'layout.hbs', - partialsDir: [ path.join(__dirname, 'views') ] + partialsDir: [path.join(__dirname, 'views')] })); app.set('view engine', 'hbs'); @@ -224,7 +224,7 @@ handlebars = handlebars.create({ }); // session store -let store = new MongoStore({ +const store = new MongoStore({ uri: config.databaseConnectionString, collection: 'sessions' }); @@ -286,7 +286,7 @@ app.use('/authorizenet', authorizenet); // catch 404 and forward to error handler app.use((req, res, next) => { - let err = new Error('Not Found'); + const err = new Error('Not Found'); err.status = 404; next(err); }); diff --git a/gulpfile.js b/gulpfile.js index da62414..195ce3f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -18,7 +18,7 @@ gulp.task('compressCss', () => { return gulp.src(['public/stylesheets/*.css', '!public/stylesheets/*.min.css' ]) - .pipe(cleanCSS({compatibility: 'ie8'})) + .pipe(cleanCSS({ compatibility: 'ie8' })) .pipe(rename({ dirname: 'public/stylesheets', extname: '.min.css' @@ -30,7 +30,7 @@ gulp.task('compressThemeCss', () => { return gulp.src(['views/themes/**/*.css', '!views/themes/**/*.min.css' ]) - .pipe(cleanCSS({compatibility: 'ie8'})) + .pipe(cleanCSS({ compatibility: 'ie8' })) .pipe(rename({ extname: '.min.css' })) diff --git a/lib/auth.js b/lib/auth.js index 95bbbf8..95f49fd 100644 --- a/lib/auth.js +++ b/lib/auth.js @@ -67,7 +67,7 @@ const checkLogin = async (req, res, next) => { // Middleware to check for admin access for certain route const checkAccess = (req, res, next) => { - const routeCheck = _.find(restrictedRoutes, { 'route': req.route.path }); + const routeCheck = _.find(restrictedRoutes, { route: req.route.path }); // If the user is not an admin and route is restricted, show message and redirect to /admin if(req.session.isAdmin === false && routeCheck){ diff --git a/lib/common.js b/lib/common.js index f3a31c7..b210f85 100755 --- a/lib/common.js +++ b/lib/common.js @@ -77,18 +77,18 @@ const showCartCloseBtn = (page) => { // adds products to sitemap.xml const addSitemapProducts = (req, res, cb) => { - let db = req.app.db; + const db = req.app.db; - let config = getConfig(); - let hostname = config.baseUrl; + const config = getConfig(); + const hostname = config.baseUrl; db.products.find({ productPublished: 'true' }).toArray((err, products) => { - let posts = []; + const posts = []; if(err){ cb(null, posts); } async.eachSeries(products, (item, callback) => { - let post = {}; + const post = {}; let url = item._id; if(item.productPermalink){ url = item.productPermalink; @@ -114,7 +114,7 @@ const clearSessionValue = (session, sessionVar) => { }; const updateTotalCartAmount = (req, res) => { - let config = getConfig(); + const config = getConfig(); req.session.totalCartAmount = 0; @@ -148,7 +148,7 @@ const getThemes = () => { }; const getImages = (dir, req, res, callback) => { - let db = req.app.db; + const db = req.app.db; db.products.findOne({ _id: getId(dir) }, (err, product) => { if(err){ @@ -161,14 +161,14 @@ const getImages = (dir, req, res, callback) => { files.sort(); // declare the array of objects - let fileList = []; + const fileList = []; // loop these files for(let i = 0; i < files.length; i++){ // only want files if(fs.lstatSync(files[i]).isDirectory() === false){ // declare the file object and set its values - let file = { + const file = { id: i, path: files[i].substring(6) }; @@ -219,7 +219,7 @@ const getConfig = () => { }; const getPaymentConfig = () => { - let siteConfig = getConfig(); + const siteConfig = getConfig(); const gateConfigFile = path.join(__dirname, '../config', `${siteConfig.paymentGateway}.json`); let config = []; @@ -228,7 +228,7 @@ const getPaymentConfig = () => { } // If a local config we combine the objects. Local configs are .gitignored - let localConfig = path.join(__dirname, '../config', `${siteConfig.paymentGateway}-local.json`); + const localConfig = path.join(__dirname, '../config', `${siteConfig.paymentGateway}-local.json`); if(fs.existsSync(localConfig)){ const localConfigObj = JSON.parse(fs.readFileSync(localConfig, 'utf8')); config = Object.assign(config, localConfigObj); @@ -238,7 +238,7 @@ const getPaymentConfig = () => { }; const updateConfig = (fields) => { - let settingsFile = getConfig(); + const settingsFile = getConfig(); _.forEach(fields, (value, key) => { settingsFile[key] = value; @@ -246,11 +246,11 @@ const updateConfig = (fields) => { settingsFile['customCss'] = escape.encode(uglifycss.processString(value)); } if(key === 'footerHtml_input'){ - let footerHtml = typeof value !== 'undefined' || value === '' ? escape.encode(value) : ''; + const footerHtml = typeof value !== 'undefined' || value === '' ? escape.encode(value) : ''; settingsFile['footerHtml'] = footerHtml; } if(key === 'googleAnalytics_input'){ - let googleAnalytics = typeof value !== 'undefined' ? escape.encode(value) : ''; + const googleAnalytics = typeof value !== 'undefined' ? escape.encode(value) : ''; settingsFile['googleAnalytics'] = googleAnalytics; } }); @@ -337,7 +337,7 @@ const newMenu = (req, res) => { menu = {}; menu.items = []; } - let newNav = { + const newNav = { title: req.body.navMenu, link: req.body.navLink, order: Object.keys(menu.items).length + 1 @@ -378,7 +378,7 @@ const updateMenu = (req, res) => { return getMenu(db) .then((menu) => { // find menu item and update it - let menuIndex = _.findIndex(menu.items, ['title', req.body.navId]); + const menuIndex = _.findIndex(menu.items, ['title', req.body.navId]); menu.items[menuIndex].title = req.body.navMenu; menu.items[menuIndex].link = req.body.navLink; return db.menu.updateOne({}, { $set: { items: menu.items } }, { upsert: true }) @@ -419,9 +419,9 @@ const orderMenu = (req, res) => { }; const getEmailTemplate = (result) => { - let config = getConfig(); + const config = getConfig(); - let template = fs.readFileSync(path.join(__dirname, '../public/email_template.html'), 'utf8'); + const template = fs.readFileSync(path.join(__dirname, '../public/email_template.html'), 'utf8'); $ = cheerio.load(template); $('#brand').text(config.cartTitle); @@ -438,9 +438,9 @@ const getEmailTemplate = (result) => { }; const sendEmail = (to, subject, body) => { - let config = getConfig(); + const config = getConfig(); - let emailSettings = { + const emailSettings = { host: config.emailHost, port: config.emailPort, secure: config.emailSecure, @@ -455,9 +455,9 @@ const sendEmail = (to, subject, body) => { emailSettings.tls = { ciphers: 'SSLv3' }; } - let transporter = nodemailer.createTransport(emailSettings); + const transporter = nodemailer.createTransport(emailSettings); - let mailOptions = { + const mailOptions = { from: config.emailAddress, // sender address to: to, // list of receivers subject: subject, // Subject line @@ -483,9 +483,9 @@ const getId = (id) => { }; const getData = (req, page, query) => { - let db = req.app.db; - let config = getConfig(); - let numberProducts = config.productsPerPage ? config.productsPerPage : 6; + const db = req.app.db; + const config = getConfig(); + const numberProducts = config.productsPerPage ? config.productsPerPage : 6; let skip = 0; if(page > 1){ @@ -513,7 +513,7 @@ const getData = (req, page, query) => { }; const hooker = (order) => { - let config = getConfig(); + const config = getConfig(); return axios.post(config.orderHook, order, { responseType: 'application/json' }) .then((response) => { diff --git a/lib/indexing.js b/lib/indexing.js index 039b24b..0d6de1f 100644 --- a/lib/indexing.js +++ b/lib/indexing.js @@ -20,11 +20,11 @@ const indexProducts = (app) => { // add to lunr index productsList.forEach((product) => { - let doc = { - 'productTitle': product.productTitle, - 'productTags': product.productTags, - 'productDescription': product.productDescription, - 'id': product._id + const doc = { + productTitle: product.productTitle, + productTags: product.productTags, + productDescription: product.productDescription, + id: product._id }; lunrIndex.add(doc); }); @@ -56,11 +56,11 @@ const indexCustomers = (app) => { // add to lunr index customerList.forEach((customer) => { - let doc = { - 'email': customer.email, - 'name': `${customer.firstName} ${customer.lastName}`, - 'phone': customer.phone, - 'id': customer._id + const doc = { + email: customer.email, + name: `${customer.firstName} ${customer.lastName}`, + phone: customer.phone, + id: customer._id }; lunrIndex.add(doc); }); @@ -92,11 +92,11 @@ const indexOrders = (app, cb) => { // add to lunr index ordersList.forEach((order) => { - let doc = { - 'orderLastname': order.orderLastname, - 'orderEmail': order.orderEmail, - 'orderPostcode': order.orderPostcode, - 'id': order._id + const doc = { + orderLastname: order.orderLastname, + orderEmail: order.orderEmail, + orderPostcode: order.orderPostcode, + id: order._id }; lunrIndex.add(doc); }); diff --git a/lib/testdata.js b/lib/testdata.js index d7bac8d..cf9d038 100644 --- a/lib/testdata.js +++ b/lib/testdata.js @@ -8,7 +8,7 @@ const testData = fs.readFileSync(path.join(__dirname, '..', 'bin', 'testdata.jso const jsonData = JSON.parse(testData); // get config -let config = getConfig(); +const config = getConfig(); initDb(config.databaseConnectionString, (err, db) => { Promise.all([ diff --git a/package-lock.json b/package-lock.json index fd44f27..1181171 100644 --- a/package-lock.json +++ b/package-lock.json @@ -647,15 +647,8 @@ "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" - }, - "ansi-yellow": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", - "integrity": "sha1-y5NW8vRscy8OMZnmEClVp32oPB0=", - "requires": { - "ansi-wrap": "0.1.0" - } + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true }, "anymatch": { "version": "3.0.3", @@ -722,7 +715,8 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, "arr-map": { "version": "2.0.2", @@ -2130,7 +2124,8 @@ "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -2788,11 +2783,6 @@ "is-obj": "^2.0.0" } }, - "dotdir-regex": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dotdir-regex/-/dotdir-regex-0.1.0.tgz", - "integrity": "sha1-1F30yIY75vVZPXFpFDgXZ+k4wLY=" - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -2862,11 +2852,6 @@ "once": "^1.4.0" } }, - "ends-with": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ends-with/-/ends-with-0.2.0.tgz", - "integrity": "sha1-L52pjVelDP2kVxzkM5AAUA9Oa4o=" - }, "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", @@ -3550,44 +3535,6 @@ } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -3602,21 +3549,6 @@ "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz", "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g==" }, - "export-files": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/export-files/-/export-files-2.1.1.tgz", - "integrity": "sha1-u/ZFdAU6CeTrmOX0NQHVcrLDzn8=", - "requires": { - "lazy-cache": "^1.0.3" - }, - "dependencies": { - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - } - } - }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -3972,11 +3904,6 @@ "flat-cache": "^2.0.1" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -4135,7 +4062,8 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "for-own": { "version": "1.0.0", @@ -4187,11 +4115,6 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=" - }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -4273,447 +4196,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-fs": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/glob-fs/-/glob-fs-0.1.7.tgz", - "integrity": "sha512-f0U3u9xK8MEYtKDCnZXvZrZAy4uNp+KSA4xfaKI/NxbE6HXhqUBQ485Uwd6jQa/Q6z1yKi804WT9y53RrwuMxQ==", - "requires": { - "async": "^1.3.0", - "bluebird": "^2.9.33", - "component-emitter": "^1.2.0", - "ends-with": "^0.2.0", - "export-files": "^2.0.1", - "extend-shallow": "^2.0.0", - "get-value": "^1.1.5", - "glob-fs-dotfiles": "^0.1.6", - "glob-fs-gitignore": "^0.1.5", - "glob-parent": "^1.2.0", - "graceful-fs": "^4.1.2", - "is-dotdir": "^0.1.0", - "is-dotfile": "^1.0.1", - "is-glob": "^2.0.0", - "is-windows": "^0.1.0", - "kind-of": "^2.0.0", - "lazy-cache": "^0.1.0", - "micromatch": "github:jonschlinkert/micromatch#2.2.0", - "mixin-object": "^2.0.0", - "object-visit": "^0.1.0", - "object.omit": "^1.1.0", - "parse-filepath": "^0.6.1", - "relative": "^3.0.1", - "set-value": "^0.2.0", - "starts-with": "^1.0.2", - "through2": "^2.0.0" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "get-value": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-1.3.1.tgz", - "integrity": "sha1-isfvTyA4I5KyZGVI+bmtLcbIlkI=", - "requires": { - "arr-flatten": "^1.0.1", - "is-extendable": "^0.1.1", - "lazy-cache": "^0.2.4", - "noncharacters": "^1.1.0" - }, - "dependencies": { - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" - } - } - }, - "glob-parent": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-1.3.0.tgz", - "integrity": "sha1-lx7dgW7V21hwW1gHlkemTQrveWg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - } - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "requires": { - "is-unc-path": "^0.1.1" - } - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "requires": { - "unc-path-regex": "^0.1.0" - } - }, - "is-windows": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.1.1.tgz", - "integrity": "sha1-vjEHFUMc+rzMVKs5USEPoLbQGr4=" - }, - "isobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", - "integrity": "sha1-8Pm4zpLdVA+gdAiC44NaLgIux4o=" - }, - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "requires": { - "is-buffer": "^1.0.2" - } - }, - "micromatch": { - "version": "github:jonschlinkert/micromatch#5017fd78202e04c684cc31d3c2fb1f469ea222ff", - "from": "github:jonschlinkert/micromatch#2.2.0", - "requires": { - "arr-diff": "^1.0.1", - "array-unique": "^0.2.1", - "braces": "^1.8.0", - "expand-brackets": "^0.1.1", - "extglob": "^0.3.0", - "filename-regex": "^2.0.0", - "is-glob": "^1.1.3", - "kind-of": "^1.1.0", - "object.omit": "^1.1.0", - "parse-glob": "^3.0.1", - "regex-cache": "^0.4.2" - }, - "dependencies": { - "is-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-1.1.3.tgz", - "integrity": "sha1-tMZLgwPTkRRJKkYNNkzPsNPAoEU=" - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" - } - } - }, - "object-visit": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.1.0.tgz", - "integrity": "sha1-sbtnSfIo7nbgxC84UdKKFNIzziY=", - "requires": { - "isobject": "^1.0.0" - } - }, - "parse-filepath": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-0.6.3.tgz", - "integrity": "sha1-OOF6c+Xk5ndrrpUG/DzLFLw6K4A=", - "requires": { - "is-absolute": "^0.2.2", - "map-cache": "^0.2.0" - } - }, - "set-value": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.2.0.tgz", - "integrity": "sha1-c7CmglwVjGoWqCu9yVd1vyqCX6s=", - "requires": { - "isobject": "^1.0.0", - "noncharacters": "^1.1.0" - } - } - } - }, - "glob-fs-dotfiles": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/glob-fs-dotfiles/-/glob-fs-dotfiles-0.1.6.tgz", - "integrity": "sha1-tPF7c8GIQYq6R80gbPWnImtKiUk=" - }, - "glob-fs-gitignore": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/glob-fs-gitignore/-/glob-fs-gitignore-0.1.6.tgz", - "integrity": "sha1-iF5vQS+FnMWXVhVIKdvVVybN6ZI=", - "requires": { - "findup-sync": "^1.0.0", - "micromatch": "^2.3.11", - "parse-gitignore": "^0.2.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "requires": { - "fs-exists-sync": "^0.1.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "requires": { - "os-homedir": "^1.0.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "findup-sync": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-1.0.0.tgz", - "integrity": "sha1-b35LV7buOkA3tEFOrt6j9Y9x4Ow=", - "requires": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" - } - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "requires": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "requires": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" - } - } - } - }, "glob-parent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", @@ -5741,6 +5223,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, "requires": { "parse-passwd": "^1.0.0" } @@ -5903,7 +5386,8 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "inquirer": { "version": "6.5.0", @@ -6038,7 +5522,8 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-builtin-module": { "version": "1.0.0", @@ -6098,27 +5583,6 @@ } } }, - "is-dotdir": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-dotdir/-/is-dotdir-0.1.0.tgz", - "integrity": "sha1-2h5UZPWfw6g8HYIrWs4JG0X+azE=", - "requires": { - "dotdir-regex": "^0.1.0" - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-error": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", @@ -6128,7 +5592,8 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -6247,16 +5712,6 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -6349,7 +5804,8 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", @@ -6443,6 +5899,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -6466,14 +5923,6 @@ "package-json": "^6.3.0" } }, - "lazy-cache": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.1.0.tgz", - "integrity": "sha1-1s1FAlHUFbcBA3ZfYxMKAEmgN5U=", - "requires": { - "ansi-yellow": "^0.1.1" - } - }, "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", @@ -6745,7 +6194,8 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-obj": { "version": "2.0.0", @@ -6814,11 +6264,6 @@ } } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, "md5-hex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.0.tgz", @@ -7029,22 +6474,6 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -7258,11 +6687,6 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==" }, - "noncharacters": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/noncharacters/-/noncharacters-1.1.0.tgz", - "integrity": "sha1-rzPfMP1Q7TxTzSAiWPJa2pC1QNI=" - }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -7279,6 +6703,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -7411,30 +6836,6 @@ "make-iterator": "^1.0.0" } }, - "object.omit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-1.1.0.tgz", - "integrity": "sha1-nRfqFneOUFfeundSxvVfFJaCnpQ=", - "requires": { - "for-own": "^0.1.3", - "isobject": "^1.0.0" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, - "isobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", - "integrity": "sha1-8Pm4zpLdVA+gdAiC44NaLgIux4o=" - } - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -7570,11 +6971,6 @@ "readable-stream": "^2.0.1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -7692,57 +7088,6 @@ "path-root": "^0.1.1" } }, - "parse-gitignore": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-0.2.0.tgz", - "integrity": "sha1-mHBtCfD5PuhjSLch/+4GBrwJPXQ=", - "requires": { - "ends-with": "^0.2.0", - "is-glob": "^2.0.0", - "starts-with": "^1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -7767,7 +7112,8 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true }, "parseurl": { "version": "1.3.3", @@ -8141,11 +7487,6 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -8242,28 +7583,6 @@ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -8459,14 +7778,6 @@ "regenerate": "^1.4.0" } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -8539,24 +7850,6 @@ } } }, - "relative": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", - "integrity": "sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8=", - "requires": { - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -8590,17 +7883,20 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "replace-ext": { "version": "1.0.0", @@ -9236,11 +8532,6 @@ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, - "starts-with": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/starts-with/-/starts-with-1.0.2.tgz", - "integrity": "sha1-Fnk6cp2J1M89T7LtovkIrjV/GW8=" - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -9605,6 +8896,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, "requires": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" @@ -9815,7 +9107,8 @@ "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true }, "underscore": { "version": "1.8.3", @@ -10199,6 +9492,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/routes/admin.js b/routes/admin.js index f37e2d3..0cf07d6 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -27,7 +27,7 @@ router.get('/admin/logout', (req, res) => { // login form router.get('/admin/login', (req, res) => { - let db = req.app.db; + const db = req.app.db; db.users.count({}, (err, userCount) => { if(err){ @@ -58,7 +58,7 @@ router.get('/admin/login', (req, res) => { // login the user and check the password router.post('/admin/login_action', (req, res) => { - let db = req.app.db; + const db = req.app.db; db.users.findOne({ userEmail: common.mongoSanitize(req.body.email) }, (err, user) => { if(err){ @@ -90,7 +90,7 @@ router.post('/admin/login_action', (req, res) => { // setup form is shown when there are no users setup in the DB router.get('/admin/setup', (req, res) => { - let db = req.app.db; + const db = req.app.db; db.users.count({}, (err, userCount) => { if(err){ @@ -119,7 +119,7 @@ router.get('/admin/setup', (req, res) => { router.post('/admin/setup_action', (req, res) => { const db = req.app.db; - let doc = { + const doc = { usersName: req.body.usersName, userEmail: req.body.userEmail, userPassword: bcrypt.hashSync(req.body.userPassword, 10), @@ -171,7 +171,7 @@ router.get('/admin/settings', restrict, (req, res) => { // settings update router.post('/admin/createApiKey', restrict, checkAccess, async (req, res) => { const db = req.app.db; - let result = await db.users.findOneAndUpdate({ + const result = await db.users.findOneAndUpdate({ _id: ObjectId(req.session.userId), isAdmin: true }, { @@ -208,7 +208,7 @@ router.post('/admin/settings/option/remove', restrict, checkAccess, (req, res) = console.info(err.stack); } if(product && product.productOptions){ - let optJson = JSON.parse(product.productOptions); + const optJson = JSON.parse(product.productOptions); delete optJson[req.body.optName]; db.products.update({ _id: common.getId(req.body.productId) }, { $set: { productOptions: JSON.stringify(optJson) } }, (err, numReplaced) => { @@ -321,7 +321,7 @@ router.get('/admin/settings/pages/edit/:page', restrict, checkAccess, (req, res) router.post('/admin/settings/pages/update', restrict, checkAccess, (req, res) => { const db = req.app.db; - let doc = { + const doc = { pageName: req.body.pageName, pageSlug: req.body.pageSlug, pageEnabled: req.body.pageEnabled, @@ -375,7 +375,7 @@ router.get('/admin/settings/pages/delete/:page', restrict, checkAccess, (req, re // new menu item router.post('/admin/settings/menu/new', restrict, checkAccess, (req, res) => { - let result = common.newMenu(req, res); + const result = common.newMenu(req, res); if(result === false){ req.session.message = 'Failed creating menu.'; req.session.messageType = 'danger'; @@ -385,7 +385,7 @@ router.post('/admin/settings/menu/new', restrict, checkAccess, (req, res) => { // update existing menu item router.post('/admin/settings/menu/update', restrict, checkAccess, (req, res) => { - let result = common.updateMenu(req, res); + const result = common.updateMenu(req, res); if(result === false){ req.session.message = 'Failed updating menu.'; req.session.messageType = 'danger'; @@ -395,7 +395,7 @@ router.post('/admin/settings/menu/update', restrict, checkAccess, (req, res) => // delete menu item router.get('/admin/settings/menu/delete/:menuid', restrict, checkAccess, (req, res) => { - let result = common.deleteMenu(req, res, req.params.menuid); + const result = common.deleteMenu(req, res, req.params.menuid); if(result === false){ req.session.message = 'Failed deleting menu.'; req.session.messageType = 'danger'; @@ -405,7 +405,7 @@ router.get('/admin/settings/menu/delete/:menuid', restrict, checkAccess, (req, r // We call this via a Ajax call to save the order from the sortable list router.post('/admin/settings/menu/save_order', restrict, checkAccess, (req, res) => { - let result = common.orderMenu(req, res); + const result = common.orderMenu(req, res); if(result === false){ res.status(400).json({ message: 'Failed saving menu order' }); return; @@ -439,12 +439,12 @@ router.post('/admin/api/validate_permalink', (req, res) => { }); // upload the file -let upload = multer({ dest: 'public/uploads/' }); +const upload = multer({ dest: 'public/uploads/' }); router.post('/admin/file/upload', restrict, checkAccess, upload.single('upload_file'), (req, res, next) => { const db = req.app.db; if(req.file){ - let file = req.file; + const file = req.file; // Get the mime type of the file const mimeType = mime.lookup(file.originalname); @@ -476,13 +476,13 @@ router.post('/admin/file/upload', restrict, checkAccess, upload.single('upload_f } const productPath = product.productPermalink; - let uploadDir = path.join('public/uploads', productPath); + const uploadDir = path.join('public/uploads', productPath); // Check directory and create (if needed) common.checkDirectorySync(uploadDir); - let source = fs.createReadStream(file.path); - let dest = fs.createWriteStream(path.join(uploadDir, file.originalname.replace(/ /g, '_'))); + const source = fs.createReadStream(file.path); + const dest = fs.createWriteStream(path.join(uploadDir, file.originalname.replace(/ /g, '_'))); // save the new file source.pipe(dest); @@ -491,7 +491,7 @@ router.post('/admin/file/upload', restrict, checkAccess, upload.single('upload_f // delete the temp file. fs.unlinkSync(file.path); - let imagePath = path.join('/uploads', productPath, file.originalname.replace(/ /g, '_')); + const imagePath = path.join('/uploads', productPath, file.originalname.replace(/ /g, '_')); // if there isn't a product featured image, set this one if(!product.productImage){ @@ -519,7 +519,7 @@ router.post('/admin/file/upload', restrict, checkAccess, upload.single('upload_f // delete a file via ajax request router.post('/admin/testEmail', restrict, (req, res) => { - let config = req.app.config; + const config = req.app.config; // TODO: Should fix this to properly handle result common.sendEmail(config.emailAddress, 'expressCart test email', 'Your email settings are working'); res.status(200).json({ message: 'Test email sent' }); @@ -549,15 +549,15 @@ router.get('/admin/files', restrict, (req, res) => { files.sort(); // declare the array of objects - let fileList = []; - let dirList = []; + const fileList = []; + const dirList = []; // loop these files for(let i = 0; i < files.length; i++){ // only want files if(fs.lstatSync(files[i]).isDirectory() === false){ // declare the file object and set its values - let file = { + const file = { id: i, path: files[i].substring(6) }; @@ -565,7 +565,7 @@ router.get('/admin/files', restrict, (req, res) => { // push the file object into the array fileList.push(file); }else{ - let dir = { + const dir = { id: i, path: files[i].substring(6) }; diff --git a/routes/customer.js b/routes/customer.js index 696936a..1dd2adf 100644 --- a/routes/customer.js +++ b/routes/customer.js @@ -10,7 +10,7 @@ const { restrict } = require('../lib/auth'); router.post('/customer/create', (req, res) => { const db = req.app.db; - let doc = { + const doc = { email: req.body.email, firstName: req.body.firstName, lastName: req.body.lastName, @@ -113,10 +113,10 @@ router.get('/admin/customers', restrict, (req, res) => { // Filtered customers list router.get('/admin/customers/filter/:search', restrict, (req, res, next) => { const db = req.app.db; - let searchTerm = req.params.search; - let customersIndex = req.app.customersIndex; + const searchTerm = req.params.search; + const customersIndex = req.app.customersIndex; - let lunrIdArray = []; + const lunrIdArray = []; customersIndex.search(searchTerm).forEach((id) => { lunrIdArray.push(common.getId(id.ref)); }); @@ -150,7 +150,7 @@ router.get('/admin/customers/filter/:search', restrict, (req, res, next) => { // login the customer and check the password router.post('/customer/login_action', async (req, res) => { - let db = req.app.db; + const db = req.app.db; db.customers.findOne({email: common.mongoSanitize(req.body.loginEmail)}, (err, customer) => { // eslint-disable-line if(err){ @@ -209,16 +209,16 @@ router.get('/customer/forgotten', (req, res) => { router.post('/customer/forgotten_action', (req, res) => { const db = req.app.db; const config = req.app.config; - let passwordToken = randtoken.generate(30); + const passwordToken = randtoken.generate(30); // find the user db.customers.findOne({ email: req.body.email }, (err, customer) => { // if we have a customer, set a token, expiry and email it if(customer){ - let tokenExpiry = Date.now() + 3600000; + const tokenExpiry = Date.now() + 3600000; db.customers.update({ email: req.body.email }, { $set: { resetToken: passwordToken, resetTokenExpiry: tokenExpiry } }, { multi: false }, (err, numReplaced) => { // send forgotten password email - let mailOpts = { + const mailOpts = { to: req.body.email, subject: 'Forgotten password request', body: `You are receiving this because you (or someone else) have requested the reset of the password for your user account.\n\n @@ -281,9 +281,9 @@ router.post('/customer/reset/:token', (req, res) => { } // update the password and remove the token - let newPassword = bcrypt.hashSync(req.body.password, 10); + const newPassword = bcrypt.hashSync(req.body.password, 10); db.customers.update({ email: customer.email }, { $set: { password: newPassword, resetToken: undefined, resetTokenExpiry: undefined } }, { multi: false }, (err, numReplaced) => { - let mailOpts = { + const mailOpts = { to: customer.email, subject: 'Password successfully reset', body: 'This is a confirmation that the password for your account ' + customer.email + ' has just been changed successfully.\n' diff --git a/routes/index.js b/routes/index.js index 24a00f0..9200490 100644 --- a/routes/index.js +++ b/routes/index.js @@ -19,8 +19,8 @@ const { // These is the customer facing routes router.get('/payment/:orderId', async (req, res, next) => { - let db = req.app.db; - let config = req.app.config; + const db = req.app.db; + const config = req.app.config; // render the payment complete message db.orders.findOne({ _id: getId(req.params.orderId) }, async (err, order) => { @@ -69,7 +69,7 @@ router.get('/payment/:orderId', async (req, res, next) => { }); router.get('/checkout', async (req, res, next) => { - let config = req.app.config; + const config = req.app.config; // if there is no items in the cart then render a failure if(!req.session.cart){ @@ -136,8 +136,8 @@ router.get('/cartPartial', (req, res) => { // show an individual product router.get('/product/:id', (req, res) => { - let db = req.app.db; - let config = req.app.config; + const db = req.app.db; + const config = req.app.config; db.products.findOne({ $or: [{ _id: getId(req.params.id) }, { productPermalink: req.params.id }] }, (err, result) => { // render 404 if page is not published @@ -147,7 +147,7 @@ router.get('/product/:id', (req, res) => { if(err || result == null || result.productPublished === 'false'){ res.render('error', { title: 'Not found', message: 'Product not found', helpers: req.handlebars.helpers, config }); }else{ - let productOptions = result.productOptions; + const productOptions = result.productOptions; // If JSON query param return json instead if(req.query.json === 'true'){ @@ -183,12 +183,12 @@ router.get('/product/:id', (req, res) => { router.post('/product/updatecart', (req, res, next) => { const db = req.app.db; const config = req.app.config; - let cartItems = JSON.parse(req.body.items); + const cartItems = JSON.parse(req.body.items); let hasError = false; let stockError = false; async.eachSeries(cartItems, (cartItem, callback) => { - let productQuantity = cartItem.itemQuantity ? cartItem.itemQuantity : 1; + const productQuantity = cartItem.itemQuantity ? cartItem.itemQuantity : 1; if(cartItem.itemQuantity === 0){ // quantity equals zero so we remove the item req.session.cart.splice(cartItem.cartIndex, 1); @@ -209,7 +209,7 @@ router.post('/product/updatecart', (req, res, next) => { } } - let productPrice = parseFloat(product.productPrice).toFixed(2); + const productPrice = parseFloat(product.productPrice).toFixed(2); if(req.session.cart[cartItem.cartIndex]){ req.session.cart[cartItem.cartIndex].quantity = productQuantity; req.session.cart[cartItem.cartIndex].totalItemPrice = productPrice * productQuantity; @@ -351,20 +351,20 @@ router.post('/product/addtocart', (req, res, next) => { } } - let productPrice = parseFloat(product.productPrice).toFixed(2); + const productPrice = parseFloat(product.productPrice).toFixed(2); // Doc used to test if existing in the cart with the options. If not found, we add new. let options = {}; if(req.body.productOptions){ options = JSON.parse(req.body.productOptions); } - let findDoc = { + const findDoc = { productId: req.body.productId, options: options }; // if exists we add to the existing value - let cartIndex = _.findIndex(req.session.cart, findDoc); + const cartIndex = _.findIndex(req.session.cart, findDoc); let cartQuantity = 0; if(cartIndex > -1){ cartQuantity = parseInt(req.session.cart[cartIndex].quantity) + productQuantity; @@ -378,7 +378,7 @@ router.post('/product/addtocart', (req, res, next) => { cartQuantity = productQuantity; // new product deets - let productObj = {}; + const productObj = {}; productObj.productId = req.body.productId; productObj.title = product.productTitle; productObj.quantity = productQuantity; @@ -412,13 +412,13 @@ router.post('/product/addtocart', (req, res, next) => { // search products router.get('/search/:searchTerm/:pageNum?', (req, res) => { - let db = req.app.db; - let searchTerm = req.params.searchTerm; - let productsIndex = req.app.productsIndex; - let config = req.app.config; - let numberProducts = config.productsPerPage ? config.productsPerPage : 6; + const db = req.app.db; + const searchTerm = req.params.searchTerm; + const productsIndex = req.app.productsIndex; + const config = req.app.config; + const numberProducts = config.productsPerPage ? config.productsPerPage : 6; - let lunrIdArray = []; + const lunrIdArray = []; productsIndex.search(searchTerm).forEach((id) => { lunrIdArray.push(getId(id.ref)); }); @@ -466,13 +466,13 @@ router.get('/search/:searchTerm/:pageNum?', (req, res) => { // search products router.get('/category/:cat/:pageNum?', (req, res) => { - let db = req.app.db; - let searchTerm = req.params.cat; - let productsIndex = req.app.productsIndex; - let config = req.app.config; - let numberProducts = config.productsPerPage ? config.productsPerPage : 6; + const db = req.app.db; + const searchTerm = req.params.cat; + const productsIndex = req.app.productsIndex; + const config = req.app.config; + const numberProducts = config.productsPerPage ? config.productsPerPage : 6; - let lunrIdArray = []; + const lunrIdArray = []; productsIndex.search(searchTerm).forEach((id) => { lunrIdArray.push(getId(id.ref)); }); @@ -523,14 +523,14 @@ router.get('/category/:cat/:pageNum?', (req, res) => { // return sitemap router.get('/sitemap.xml', (req, res, next) => { - let sm = require('sitemap'); - let config = req.app.config; + const sm = require('sitemap'); + const config = req.app.config; addSitemapProducts(req, res, (err, products) => { if(err){ console.error(colors.red('Error generating sitemap.xml', err)); } - let sitemap = sm.createSitemap( + const sitemap = sm.createSitemap( { hostname: config.baseUrl, cacheTime: 600000, @@ -539,8 +539,8 @@ router.get('/sitemap.xml', (req, res, next) => { ] }); - let currentUrls = sitemap.urls; - let mergedUrls = currentUrls.concat(products); + const currentUrls = sitemap.urls; + const mergedUrls = currentUrls.concat(products); sitemap.urls = mergedUrls; // render the sitemap sitemap.toXML((err, xml) => { @@ -555,9 +555,9 @@ router.get('/sitemap.xml', (req, res, next) => { }); router.get('/page/:pageNum', (req, res, next) => { - let db = req.app.db; - let config = req.app.config; - let numberProducts = config.productsPerPage ? config.productsPerPage : 6; + const db = req.app.db; + const config = req.app.config; + const numberProducts = config.productsPerPage ? config.productsPerPage : 6; Promise.all([ getData(req, req.params.pageNum), @@ -595,9 +595,9 @@ router.get('/page/:pageNum', (req, res, next) => { // The main entry point of the shop router.get('/:page?', (req, res, next) => { - let db = req.app.db; - let config = req.app.config; - let numberProducts = config.productsPerPage ? config.productsPerPage : 6; + const db = req.app.db; + const config = req.app.config; + const numberProducts = config.productsPerPage ? config.productsPerPage : 6; // if no page is specified, just render page 1 of the cart if(!req.params.page){ diff --git a/routes/payments/authorizenet.js b/routes/payments/authorizenet.js index d308899..f899f94 100644 --- a/routes/payments/authorizenet.js +++ b/routes/payments/authorizenet.js @@ -55,7 +55,7 @@ router.post('/checkout_action', (req, res, next) => { orderStatus = 'Declined'; } - let orderDoc = { + const orderDoc = { orderPaymentId: txn.transHash, orderPaymentGateway: 'AuthorizeNet', orderPaymentMessage: 'Your payment was successfully completed', @@ -82,7 +82,7 @@ router.post('/checkout_action', (req, res, next) => { } // get the new ID - let newId = newDoc.insertedIds['0']; + const newId = newDoc.insertedIds['0']; // add to lunr index indexOrders(req.app) @@ -98,7 +98,7 @@ router.post('/checkout_action', (req, res, next) => {

Transaction ID: ${txn.transHash}

`; // set payment results for email - let paymentResults = { + const paymentResults = { message: req.session.message, messageType: req.session.messageType, paymentEmailAddr: req.session.paymentEmailAddr, diff --git a/routes/payments/paypal.js b/routes/payments/paypal.js index 067d965..fdf35e0 100644 --- a/routes/payments/paypal.js +++ b/routes/payments/paypal.js @@ -1,8 +1,8 @@ -let express = require('express'); -let common = require('../../lib/common'); +const express = require('express'); +const common = require('../../lib/common'); const { indexOrders } = require('../../lib/indexing'); -let paypal = require('paypal-rest-sdk'); -let router = express.Router(); +const paypal = require('paypal-rest-sdk'); +const router = express.Router(); router.get('/checkout_cancel', (req, res, next) => { // return to checkout for adjustment or repayment @@ -10,12 +10,12 @@ router.get('/checkout_cancel', (req, res, next) => { }); router.get('/checkout_return', (req, res, next) => { - let db = req.app.db; - let config = req.app.config; - let paymentId = req.session.paymentId; - let payerId = req.query['PayerID']; + const db = req.app.db; + const config = req.app.config; + const paymentId = req.session.paymentId; + const payerId = req.query['PayerID']; - let details = { 'payer_id': payerId }; + const details = { payer_id: payerId }; paypal.payment.execute(paymentId, details, (error, payment) => { let paymentApproved = false; let paymentMessage = ''; @@ -41,7 +41,7 @@ router.get('/checkout_return', (req, res, next) => { return; } - let paymentOrderId = req.session.orderId; + const paymentOrderId = req.session.orderId; let paymentStatus = 'Approved'; // fully approved @@ -86,7 +86,7 @@ router.get('/checkout_return', (req, res, next) => { req.session.paymentApproved = paymentApproved; req.session.paymentDetails = paymentDetails; - let paymentResults = { + const paymentResults = { message: req.session.message, messageType: req.session.messageType, paymentEmailAddr: req.session.paymentEmailAddr, @@ -107,26 +107,26 @@ router.get('/checkout_return', (req, res, next) => { // The homepage of the site router.post('/checkout_action', (req, res, next) => { - let db = req.app.db; - let config = req.app.config; - let paypalConfig = common.getPaymentConfig(); + const db = req.app.db; + const config = req.app.config; + const paypalConfig = common.getPaymentConfig(); // setup the payment object - let payment = { - 'intent': 'sale', - 'payer': { - 'payment_method': 'paypal' + const payment = { + intent: 'sale', + payer: { + payment_method: 'paypal' }, - 'redirect_urls': { - 'return_url': config.baseUrl + '/paypal/checkout_return', - 'cancel_url': config.baseUrl + '/paypal/checkout_cancel' + redirect_urls: { + return_url: config.baseUrl + '/paypal/checkout_return', + cancel_url: config.baseUrl + '/paypal/checkout_cancel' }, - 'transactions': [{ - 'amount': { - 'total': req.session.totalCartAmount, - 'currency': paypalConfig.paypalCurrency + transactions: [{ + amount: { + total: req.session.totalCartAmount, + currency: paypalConfig.paypalCurrency }, - 'description': paypalConfig.paypalCartDescription + description: paypalConfig.paypalCartDescription }] }; @@ -145,7 +145,7 @@ router.post('/checkout_action', (req, res, next) => { req.session.paymentId = payment.id; let redirectUrl; for(let i = 0; i < payment.links.length; i++){ - let link = payment.links[i]; + const link = payment.links[i]; if(link.method === 'REDIRECT'){ redirectUrl = link.href; } @@ -160,7 +160,7 @@ router.post('/checkout_action', (req, res, next) => { } // new order doc - let orderDoc = { + const orderDoc = { orderPaymentId: payment.id, orderPaymentGateway: 'Paypal', orderTotal: req.session.totalCartAmount, @@ -192,7 +192,7 @@ router.post('/checkout_action', (req, res, next) => { } // get the new ID - let newId = newDoc.insertedIds['0']; + const newId = newDoc.insertedIds['0']; // set the order ID in the session req.session.orderId = newId; diff --git a/routes/payments/stripe.js b/routes/payments/stripe.js index 9bcb5f7..28203b7 100644 --- a/routes/payments/stripe.js +++ b/routes/payments/stripe.js @@ -1,15 +1,15 @@ -let express = require('express'); -let common = require('../../lib/common'); +const express = require('express'); +const common = require('../../lib/common'); const { indexOrders } = require('../../lib/indexing'); -let numeral = require('numeral'); -let stripe = require('stripe')(common.getPaymentConfig().secretKey); -let router = express.Router(); +const numeral = require('numeral'); +const stripe = require('stripe')(common.getPaymentConfig().secretKey); +const router = express.Router(); // The homepage of the site router.post('/checkout_action', (req, res, next) => { - let db = req.app.db; - let config = req.app.config; - let stripeConfig = common.getPaymentConfig(); + const db = req.app.db; + const config = req.app.config; + const stripeConfig = common.getPaymentConfig(); // charge via stripe stripe.charges.create({ @@ -35,7 +35,7 @@ router.post('/checkout_action', (req, res, next) => { } // new order doc - let orderDoc = { + const orderDoc = { orderPaymentId: charge.id, orderPaymentGateway: 'Stripe', orderPaymentMessage: charge.outcome.seller_message, @@ -62,7 +62,7 @@ router.post('/checkout_action', (req, res, next) => { } // get the new ID - let newId = newDoc.insertedIds['0']; + const newId = newDoc.insertedIds['0']; // add to lunr index indexOrders(req.app) @@ -77,7 +77,7 @@ router.post('/checkout_action', (req, res, next) => { req.session.paymentDetails = '

Order ID: ' + newId + '

Transaction ID: ' + charge.id + '

'; // set payment results for email - let paymentResults = { + const paymentResults = { message: req.session.message, messageType: req.session.messageType, paymentEmailAddr: req.session.paymentEmailAddr, diff --git a/routes/product.js b/routes/product.js index bf7560e..3901e9c 100644 --- a/routes/product.js +++ b/routes/product.js @@ -12,7 +12,7 @@ const router = express.Router(); router.get('/admin/products', restrict, (req, res, next) => { const db = req.app.db; // get the top results - db.products.find({}).sort({ 'productAddedDate': -1 }).limit(10).toArray((err, topResults) => { + db.products.find({}).sort({ productAddedDate: -1 }).limit(10).toArray((err, topResults) => { if(err){ console.info(err.stack); } @@ -31,10 +31,10 @@ router.get('/admin/products', restrict, (req, res, next) => { router.get('/admin/products/filter/:search', (req, res, next) => { const db = req.app.db; - let searchTerm = req.params.search; - let productsIndex = req.app.productsIndex; + const searchTerm = req.params.search; + const productsIndex = req.app.productsIndex; - let lunrIdArray = []; + const lunrIdArray = []; productsIndex.search(searchTerm).forEach((id) => { lunrIdArray.push(common.getId(id.ref)); }); @@ -90,7 +90,7 @@ router.post('/admin/product/insert', restrict, checkAccess, (req, res) => { } } - let doc = { + const doc = { productPermalink: req.body.productPermalink, productTitle: common.cleanHtml(req.body.productTitle), productPrice: common.safeParseInt(req.body.productPrice), @@ -131,7 +131,7 @@ router.post('/admin/product/insert', restrict, checkAccess, (req, res) => { return; } - db.products.count({ 'productPermalink': req.body.productPermalink }, (err, product) => { + db.products.count({ productPermalink: req.body.productPermalink }, (err, product) => { if(err){ console.info(err.stack); } @@ -188,7 +188,7 @@ router.post('/admin/product/insert', restrict, checkAccess, (req, res) => { return; } // get the new ID - let newId = newDoc.insertedIds[0]; + const newId = newDoc.insertedIds[0]; // add to lunr index indexProducts(req.app) @@ -259,7 +259,7 @@ router.post('/admin/product/update', restrict, checkAccess, (req, res) => { res.redirect('/admin/product/edit/' + req.body.productId); return; } - db.products.count({ 'productPermalink': req.body.productPermalink, _id: { $ne: common.getId(product._id) } }, (err, count) => { + db.products.count({ productPermalink: req.body.productPermalink, _id: { $ne: common.getId(product._id) } }, (err, count) => { if(err){ console.info(err.stack); @@ -310,7 +310,7 @@ router.post('/admin/product/update', restrict, checkAccess, (req, res) => { } } - let productDoc = { + const productDoc = { productId: req.body.productId, productPermalink: req.body.productPermalink, productTitle: common.cleanHtml(req.body.productTitle), diff --git a/routes/user.js b/routes/user.js index 5652a83..009840a 100644 --- a/routes/user.js +++ b/routes/user.js @@ -3,7 +3,6 @@ const common = require('../lib/common'); const { restrict } = require('../lib/auth'); const colors = require('colors'); const bcrypt = require('bcryptjs'); -const url = require('url'); const router = express.Router(); router.get('/admin/users', restrict, (req, res) => { @@ -114,7 +113,7 @@ router.post('/admin/user/update', restrict, (req, res) => { } // create the update doc - let updateDoc = {}; + const updateDoc = {}; updateDoc.isAdmin = isAdmin; updateDoc.usersName = req.body.usersName; if(req.body.userPassword){ @@ -145,7 +144,7 @@ router.post('/admin/user/insert', restrict, (req, res) => { const db = req.app.db; // set the account to admin if using the setup form. Eg: First user account - let urlParts = url.parse(req.header('Referer')); + const urlParts = new URL(req.header('Referer')); // Check number of users db.users.count({}, (err, userCount) => { @@ -156,7 +155,7 @@ router.post('/admin/user/insert', restrict, (req, res) => { isAdmin = true; } - let doc = { + const doc = { usersName: req.body.usersName, userEmail: req.body.userEmail, userPassword: bcrypt.hashSync(req.body.userPassword, 10), @@ -164,7 +163,7 @@ router.post('/admin/user/insert', restrict, (req, res) => { }; // check for existing user - db.users.findOne({ 'userEmail': req.body.userEmail }, (err, user) => { + db.users.findOne({ userEmail: req.body.userEmail }, (err, user) => { if(user){ // user already exists with that email address console.error(colors.red('Failed to insert user, possibly already exists: ' + err));