UNPKG

@eventstore.net/event.store

Version:

A simple and fast EventStore that support multiple persistence and notification providers

69 lines 2.42 kB
"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