@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