loopback-connector-bull
Version:
Loopback Bull Connector
91 lines • 6.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Promise = require("bluebird");
const Bull = require("bull");
const Redis = require("ioredis");
const loopback_connector_1 = require("loopback-connector");
const url_1 = require("url");
const data_access_object_1 = require("./data-access-object");
function redisUrlParse(url) {
const redisConfig = url_1.parse(url);
return {
database: (redisConfig.pathname || '/0').substr(1) || '0',
host: redisConfig.hostname || 'localhost',
password: (redisConfig.auth && redisConfig.auth.split(':')[1]) || undefined,
port: Number(redisConfig.port) || 6379
};
}
class BullConnector extends loopback_connector_1.Connector {
constructor(settings) {
super(settings);
this.queues = {};
this.queuesIndex = [];
this.name = settings.name;
this.setupQueue(settings);
}
queueForName(name) {
return this.queues[name];
}
setupQueue(settings) {
const redisUrl = redisUrlParse(settings.url || '');
let clientRedis;
let subscriberRedis;
let createClient;
if (settings.sharedConnection !== false) {
clientRedis = new Redis(redisUrl);
subscriberRedis = new Redis(redisUrl);
createClient = (type) => {
switch (type) {
case 'client':
return clientRedis;
case 'subscriber':
return subscriberRedis;
default:
return new Redis(redisUrl);
}
};
}
const queues = settings.queues;
for (const queue of queues) {
const name = queue.name;
const options = queue.options || {};
const queueOptions = Object.assign({}, options, { redis: redisUrl });
if (settings.sharedConnection !== false) {
queueOptions.createClient = createClient;
}
this.queues[name] = new Bull(name, queueOptions);
this.queuesIndex.push(name);
}
}
get DataAccessObject() {
return data_access_object_1.DataAccessObject;
}
connect() {
return;
}
disconnect(cb) {
if (this.queuesIndex.length > 0) {
Promise.map(this.queuesIndex, (queueName) => {
const queue = this.queues[queueName];
return new Promise(resolve => {
queue.on('completed', () => {
queue
.close()
.then(() => resolve())
.catch(() => resolve());
});
});
})
.then(cb)
.catch(cb);
}
else if (cb) {
process.nextTick(cb);
}
}
ping() {
return;
}
}
exports.BullConnector = BullConnector;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsbC1jb25uZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYnVsbC1jb25uZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBRTdCLGlDQUFpQztBQUNqQywyREFBK0M7QUFDL0MsNkJBQXdDO0FBQ3hDLDZEQUF3RDtBQUV4RCx1QkFBdUIsR0FBVztJQUNoQyxNQUFNLFdBQVcsR0FBRyxXQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsT0FBTztRQUNMLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUc7UUFDekQsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLElBQUksV0FBVztRQUN6QyxRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztRQUMzRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsbUJBQTJCLFNBQVEsOEJBQVM7SUFLMUMsWUFBWSxRQUFpQjtRQUMzQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKVixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBS2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLFVBQVUsQ0FBQyxR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