ac-koa
Version:
Modules for building Atlassian Connect and HipChat Connect add-ons
39 lines (34 loc) • 1.19 kB
JavaScript
var check = require('check-types');
var verify = check.verify;
var adapters = {};
var descriptors = {};
exports.require = function (adapterName, _adapter) {
adapters[adapterName] = _adapter || require('ac-koa-' + adapterName);
};
exports.create = function (descriptor, baseUrl, services, options, config) {
check.map(descriptor, {
modules: verify.maybe.object,
capabilities: verify.maybe.object
});
var compatibleAdapters = Object.keys(adapters).filter(function (name) {
return adapters[name].recognizes(descriptor);
}).map(function (name) {
return adapters[name];
});
if (compatibleAdapters.length === 0) {
var inspected = require('util').inspect(descriptor, {depth: 10});
throw new Error('No adapter found that recognizes descriptor:', inspected);
}
var Adapter = compatibleAdapters[0];
return Adapter(baseUrl, services, options, config);
};
exports.factories = function (app, scope) {
var chooser = {};
Object.keys(adapters).forEach(function (adapterName) {
var Adapter = adapters[adapterName];
chooser[adapterName] = function () {
return app.addon(scope, Adapter.emptyDescriptor());
};
});
return chooser;
};