@eventstore.net/event.store
Version:
A simple and fast EventStore that support multiple persistence and notification providers
69 lines • 2.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Redis = require("ioredis");
const Joi = require("joi");
const _ = require("lodash");
const redisNodeSchema = Joi.object().keys({
host: Joi.string().required(),
password: Joi.string(),
port: Joi.alternatives([Joi.string(), Joi.number().positive()])
});
const redisConfigSchema = Joi.object().keys({
cluster: Joi.alternatives([Joi.array().items(redisNodeSchema), redisNodeSchema]),
options: Joi.object().keys({
connectionName: Joi.string(),
db: Joi.number().positive(),
keyPrefix: Joi.string(),
password: Joi.string()
}),
sentinel: Joi.object().keys({
name: Joi.string().required(),
nodes: Joi.alternatives([Joi.array().items(redisNodeSchema), redisNodeSchema]).required()
}),
standalone: redisNodeSchema
}).xor('standalone', 'sentinel', 'cluster');
class RedisFactory {
static createClient(config) {
config = RedisFactory.validateParams(config);
let client;
config = _.defaults(config, {
options: {}
});
if (config.cluster) {
config.cluster.forEach(node => {
node.port = _.toSafeInteger(node.port);
});
client = new Redis.Cluster(config.cluster, {
redisOptions: config.options,
scaleReads: 'all'
});
}
else if (config.sentinel) {
const params = _.defaults(config.options, {
name: config.sentinel.name,
sentinels: config.sentinel.nodes
});
config.sentinel.nodes.forEach(node => {
node.port = _.toSafeInteger(node.port);
});
client = new Redis(params);
}
else {
config.standalone = _.defaults(config.standalone, {
port: 6379
});
config.options.password = config.standalone.password;
client = new Redis(_.toSafeInteger(config.standalone.port), config.standalone.host, config.options);
}
return client;
}
static validateParams(config) {
const result = Joi.validate(config, redisConfigSchema);
if (result.error) {
throw result.error;
}
return result.value;
}
}
exports.RedisFactory = RedisFactory;
//# sourceMappingURL=connect.js.map