@stoplight/moleculer
Version:
Fast & powerful microservices framework for Node.JS
63 lines (50 loc) • 1.55 kB
JavaScript
/*
* moleculer
* Copyright (c) 2020 MoleculerJS (https://github.com/moleculerjs/moleculer)
* MIT Licensed
*/
;
const { BrokerOptionsError } = require("../../errors");
const { isObject, isString } = require("../../utils");
const Discoverers = {
Base: require("./base"),
Local: require("./local"),
Etcd3: require("./etcd3"),
Redis: require("./redis")
};
function getByName(name) {
/* istanbul ignore next */
if (!name) return null;
let n = Object.keys(Discoverers).find(n => n.toLowerCase() == name.toLowerCase());
if (n) return Discoverers[n];
}
/**
* Resolve discoverer by name
*
* @param {object|string} opt
* @returns {Discoverer}
* @memberof ServiceBroker
*/
function resolve(opt) {
if (opt instanceof Discoverers.Base) {
return opt;
} else if (isString(opt)) {
let DiscovererClass = getByName(opt);
if (DiscovererClass) return new DiscovererClass();
if (opt.startsWith("redis://")) return new Discoverers.Redis(opt);
if (opt.startsWith("etcd3://")) return new Discoverers.Etcd3(opt);
throw new BrokerOptionsError(`Invalid Discoverer type '${opt}'.`, { type: opt });
} else if (isObject(opt)) {
let DiscovererClass = getByName(opt.type || "Local");
if (DiscovererClass) return new DiscovererClass(opt.options);
else
throw new BrokerOptionsError(`Invalid Discoverer type '${opt.type}'.`, {
type: opt.type
});
}
return new Discoverers.Local();
}
function register(name, value) {
Discoverers[name] = value;
}
module.exports = Object.assign(Discoverers, { resolve, register });