@backstage/plugin-techdocs-node
Version:
Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli
55 lines (51 loc) • 1.72 kB
JavaScript
;
var pluginTechdocsCommon = require('@backstage/plugin-techdocs-common');
var helpers = require('../../helpers.cjs.js');
var dir = require('./dir.cjs.js');
var url = require('./url.cjs.js');
class Preparers {
preparerMap = /* @__PURE__ */ new Map();
/**
* Returns a generators instance containing a generator for TechDocs
* @public
* @param backstageConfig - A Backstage configuration
* @param preparerConfig - Options to configure preparers
*/
static async fromConfig(backstageConfig, options) {
const preparers = new Preparers();
const urlPreparer = url.UrlPreparer.fromConfig({
reader: options.reader,
logger: options.logger
});
preparers.register("url", urlPreparer);
const directoryPreparer = dir.DirectoryPreparer.fromConfig(backstageConfig, {
reader: options.reader,
logger: options.logger
});
preparers.register("dir", directoryPreparer);
return preparers;
}
/**
* Register a preparer in the preparers collection
* @param protocol - url or dir to associate with preparer
* @param preparer - The preparer instance to set
*/
register(protocol, preparer) {
this.preparerMap.set(protocol, preparer);
}
/**
* Returns the preparer for a given TechDocs entity
* @param entity - A TechDocs entity instance
* @returns
*/
get(entity) {
const { type } = helpers.parseReferenceAnnotation(pluginTechdocsCommon.TECHDOCS_ANNOTATION, entity);
const preparer = this.preparerMap.get(type);
if (!preparer) {
throw new Error(`No preparer registered for type: "${type}"`);
}
return preparer;
}
}
exports.Preparers = Preparers;
//# sourceMappingURL=preparers.cjs.js.map