From e1ca2d81f9c6ebd326d74a4287172fb5d08f6081 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Sat, 12 Jan 2019 12:28:53 -0700
Subject: [PATCH] refactor: use loash when possible (#7230)
---
src/database/postgres/sets.js | 5 ++--
src/meta/build.js | 21 ++++++---------
src/notifications.js | 6 ++---
src/plugins/load.js | 51 ++++++++++++++---------------------
4 files changed, 32 insertions(+), 51 deletions(-)
diff --git a/src/database/postgres/sets.js b/src/database/postgres/sets.js
index 615cb6ad42..d0c41e6233 100644
--- a/src/database/postgres/sets.js
+++ b/src/database/postgres/sets.js
@@ -1,6 +1,7 @@
'use strict';
var async = require('async');
+var _ = require('lodash');
module.exports = function (db, module) {
var helpers = module.helpers.postgres;
@@ -44,9 +45,7 @@ SELECT $1::TEXT, m
value = [value];
}
- keys = keys.filter(function (k, i, a) {
- return a.indexOf(k) === i;
- });
+ keys = _.uniq(keys);
module.transaction(function (tx, done) {
var query = tx.client.query.bind(tx.client);
diff --git a/src/meta/build.js b/src/meta/build.js
index c5fc937d30..224f22d508 100644
--- a/src/meta/build.js
+++ b/src/meta/build.js
@@ -167,19 +167,14 @@ function build(targets, options, callback) {
return aliases[target];
})
// filter nonexistent targets
- .filter(Boolean)
- // map multitargets to their sets
- .reduce(function (prev, target) {
- if (Array.isArray(targetHandlers[target])) {
- return prev.concat(targetHandlers[target]);
- }
-
- return prev.concat(target);
- }, [])
- // unique
- .filter(function (target, i, arr) {
- return arr.indexOf(target) === i;
- });
+ .filter(Boolean);
+
+ // map multitargets to their sets
+ targets = _.uniq(_.flatMap(targets, target => (
+ Array.isArray(targetHandlers[target]) ?
+ targetHandlers[target] :
+ target
+ )));
winston.verbose('[build] building the following targets: ' + targets.join(', '));
diff --git a/src/notifications.js b/src/notifications.js
index 91fb573991..2f0f5ab916 100644
--- a/src/notifications.js
+++ b/src/notifications.js
@@ -558,11 +558,9 @@ Notifications.merge = function (notifications, callback) {
case 'notifications:user_posted_to':
case 'notifications:user_flagged_post_in':
case 'notifications:user_flagged_user':
- var usernames = set.map(function (notifObj) {
+ var usernames = _.uniq(set.map(function (notifObj) {
return notifObj && notifObj.user && notifObj.user.username;
- }).filter(function (username, idx, array) {
- return array.indexOf(username) === idx;
- });
+ }));
var numUsers = usernames.length;
var title = utils.decodeHTMLEntities(notifications[modifyIndex].topicTitle || '');
diff --git a/src/plugins/load.js b/src/plugins/load.js
index 903d2b46c8..3d39b24d44 100644
--- a/src/plugins/load.js
+++ b/src/plugins/load.js
@@ -81,31 +81,6 @@ module.exports = function (Plugins) {
}
Plugins.prepareForBuild = function (targets, callback) {
- if (targets.includes('client js bundle')) {
- Plugins.clientScripts.length = 0;
- }
-
- if (targets.includes('admin js bundle')) {
- Plugins.acpScripts.length = 0;
- }
-
- if (targets.includes('client side styles') || targets.includes('admin control panel styles')) {
- Plugins.cssFiles.length = 0;
- Plugins.lessFiles.length = 0;
- if (targets.includes('admin control panel styles')) {
- Plugins.acpLessFiles.length = 0;
- }
- }
-
- if (targets.includes('sounds')) {
- Plugins.soundpacks.length = 0;
- }
-
- if (targets.includes('languages')) {
- Plugins.languageData.languages = [];
- Plugins.languageData.namespaces = [];
- }
-
var map = {
'plugin static dirs': ['staticDirs'],
'requirejs modules': ['modules'],
@@ -117,13 +92,27 @@ module.exports = function (Plugins) {
languages: ['languageData'],
};
- var fields = targets.reduce(function (prev, target) {
- if (!map[target]) {
- return prev;
+ var fields = _.uniq(_.flatMap(targets, target => map[target] || []));
+
+ // clear old data before build
+ fields.forEach((field) => {
+ switch (field) {
+ case 'clientScripts':
+ case 'acpScripts':
+ case 'cssFiles':
+ case 'lessFiles':
+ case 'acpLessFiles':
+ Plugins[field].length = 0;
+ break;
+ case 'soundpack':
+ Plugins.soundpacks.length = 0;
+ break;
+ case 'languageData':
+ Plugins.languageData.languages = [];
+ Plugins.languageData.namespaces = [];
+ break;
+ // do nothing for modules and staticDirs
}
- return prev.concat(map[target]);
- }, []).filter(function (field, i, arr) {
- return arr.indexOf(field) === i;
});
winston.verbose('[plugins] loading the following fields from plugin data: ' + fields.join(', '));