mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 11:35:55 +01:00
Promisify modules (#6723)
* WIP promisify * promisify psql * ability to skip some keys * dont promisify client object * remove async * clone entire module so it has all properties * add shim for node 6 * ignore sessionStore as well * ignore pool on psql
This commit is contained in:
committed by
GitHub
parent
e882a091a1
commit
0519f84734
@@ -109,6 +109,7 @@
|
|||||||
"spider-detector": "1.0.18",
|
"spider-detector": "1.0.18",
|
||||||
"toobusy-js": "^0.5.1",
|
"toobusy-js": "^0.5.1",
|
||||||
"uglify-es": "^3.3.9",
|
"uglify-es": "^3.3.9",
|
||||||
|
"util.promisify": "1.0.0",
|
||||||
"validator": "10.7.0",
|
"validator": "10.7.0",
|
||||||
"winston": "^2.4.0",
|
"winston": "^2.4.0",
|
||||||
"xml": "^1.0.1",
|
"xml": "^1.0.1",
|
||||||
|
|||||||
@@ -386,3 +386,5 @@ Categories.filterIgnoringUids = function (cid, uids, callback) {
|
|||||||
},
|
},
|
||||||
], callback);
|
], callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Categories.async = require('./promisify')(Categories);
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ mongoModule.init = function (callback) {
|
|||||||
}
|
}
|
||||||
client = _client;
|
client = _client;
|
||||||
db = client.db();
|
db = client.db();
|
||||||
|
|
||||||
mongoModule.client = db;
|
mongoModule.client = db;
|
||||||
|
|
||||||
require('./mongo/main')(db, mongoModule);
|
require('./mongo/main')(db, mongoModule);
|
||||||
@@ -127,6 +126,9 @@ mongoModule.init = function (callback) {
|
|||||||
require('./mongo/sorted')(db, mongoModule);
|
require('./mongo/sorted')(db, mongoModule);
|
||||||
require('./mongo/list')(db, mongoModule);
|
require('./mongo/list')(db, mongoModule);
|
||||||
require('./mongo/transaction')(db, mongoModule);
|
require('./mongo/transaction')(db, mongoModule);
|
||||||
|
|
||||||
|
mongoModule.async = require('../promisify')(mongoModule, ['client', 'sessionStore']);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -123,6 +123,8 @@ postgresModule.init = function (callback) {
|
|||||||
require('./postgres/list')(wrappedDB, postgresModule);
|
require('./postgres/list')(wrappedDB, postgresModule);
|
||||||
require('./postgres/transaction')(db, dbNamespace, postgresModule);
|
require('./postgres/transaction')(db, dbNamespace, postgresModule);
|
||||||
|
|
||||||
|
postgresModule.async = require('../promisify')(postgresModule, ['client', 'sessionStore', 'pool']);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ redisModule.init = function (callback) {
|
|||||||
require('./redis/list')(redisClient, redisModule);
|
require('./redis/list')(redisClient, redisModule);
|
||||||
require('./redis/transaction')(redisClient, redisModule);
|
require('./redis/transaction')(redisClient, redisModule);
|
||||||
|
|
||||||
|
redisModule.async = require('../promisify')(redisModule, ['client', 'sessionStore']);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -301,3 +301,5 @@ Groups.existsBySlug = function (slug, callback) {
|
|||||||
db.isObjectField('groupslug:groupname', slug, callback);
|
db.isObjectField('groupslug:groupname', slug, callback);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Groups.async = require('./promisify')(Groups);
|
||||||
|
|||||||
@@ -383,3 +383,5 @@ Messaging.hasPrivateChat = function (uid, withUid, callback) {
|
|||||||
},
|
},
|
||||||
], callback);
|
], callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Messaging.async = require('./promisify')(Messaging);
|
||||||
|
|||||||
@@ -608,3 +608,5 @@ Notifications.merge = function (notifications, callback) {
|
|||||||
callback(err, data.notifications);
|
callback(err, data.notifications);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Notifications.async = require('./promisify')(Notifications);
|
||||||
|
|||||||
@@ -321,3 +321,5 @@ Posts.modifyPostByPrivilege = function (post, privileges) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Posts.async = require('./promisify')(Posts);
|
||||||
|
|||||||
@@ -49,3 +49,5 @@ require('./privileges/categories')(privileges);
|
|||||||
require('./privileges/topics')(privileges);
|
require('./privileges/topics')(privileges);
|
||||||
require('./privileges/posts')(privileges);
|
require('./privileges/posts')(privileges);
|
||||||
require('./privileges/users')(privileges);
|
require('./privileges/users')(privileges);
|
||||||
|
|
||||||
|
privileges.async = require('./promisify')(privileges);
|
||||||
|
|||||||
37
src/promisify.js
Normal file
37
src/promisify.js
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
// remove once node 6 support is removed
|
||||||
|
require('util.promisify/shim')();
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
|
module.exports = function (theModule, ignoreKeys) {
|
||||||
|
ignoreKeys = ignoreKeys || [];
|
||||||
|
function isCallbackedFunction(func) {
|
||||||
|
if (typeof func !== 'function') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var str = func.toString().split('\n')[0];
|
||||||
|
return str.includes('callback)');
|
||||||
|
}
|
||||||
|
function promisifyRecursive(module) {
|
||||||
|
if (!module) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var keys = Object.keys(module);
|
||||||
|
keys.forEach(function (key) {
|
||||||
|
if (ignoreKeys.includes(key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isCallbackedFunction(module[key])) {
|
||||||
|
module[key] = util.promisify(module[key]);
|
||||||
|
} else if (typeof module[key] === 'object') {
|
||||||
|
promisifyRecursive(module[key]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const asyncModule = _.cloneDeep(theModule);
|
||||||
|
promisifyRecursive(asyncModule);
|
||||||
|
return asyncModule;
|
||||||
|
};
|
||||||
@@ -368,3 +368,5 @@ Topics.search = function (tid, term, callback) {
|
|||||||
callback(err, Array.isArray(pids) ? pids : []);
|
callback(err, Array.isArray(pids) ? pids : []);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Topics.async = require('./promisify')(Topics);
|
||||||
|
|||||||
@@ -435,3 +435,4 @@ User.addInterstitials = function (callback) {
|
|||||||
callback();
|
callback();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
User.async = require('./promisify')(User);
|
||||||
|
|||||||
Reference in New Issue
Block a user