jsdoc/packages/jsdoc-core/lib/dependencies.js
Jeff Williams b850fa14b9 feature(@jsdoc/core): add simple inversion of control (IoC) tool
Currently unused. Intended to be used for JSDoc core dependencies that must be available everywhere, such as the config and the event bus.
2021-09-26 09:54:42 -07:00

43 lines
899 B
JavaScript

const yaioc = require('yaioc');
let dependencies;
/**
* Container for JSDoc classes, objects, and values that can be injected into other modules.
*
* @alias module:@jsdoc/core.deps
*/
class Dependencies {
constructor() {
// This class provides a lightweight facade for the `yaioc` package.
this._container = yaioc.container();
}
get(name) {
const dep = this._container.get(name);
if (dep === undefined) {
throw new Error(`No dependency registered for the name "${name}"`);
}
return dep;
}
registerClass(klass, opts = {}) {
if (opts.singleton) {
this._container.cache().register(klass);
} else {
this._container.register(klass);
}
}
registerValue(name, value) {
this._container.register(name, value);
}
}
dependencies = new Dependencies();
dependencies.Dependencies = Dependencies;
module.exports = dependencies;