code: function reactdown(source: string): ?string {
    this.cacheable();
  
    let compiler = this._compiler;
  
    // We read the config once. That means on changes to config one must restart
    // the compiler.
    //
    // TODO: Improve on that, so changes to configration do not require restarting
    // Webpack compiler.
    if (compiler.__reactdownConfig === undefined) {
      try {
        compiler.__reactdownConfig = discoverConfig(compiler.context).config;
      } catch (error) {
        if (error instanceof ValidationError) {
          this.emitError(formatConfigurationError(error));
          return;
        }
        throw error;
      }
    }
  
    let config = mergeConfig(
      compiler.__reactdownConfig,
      parseConfigFromQuery(this.query)
    );
  
    config.buildImageURL = url => new TaggedCodeRef(url);
  
    let code;
    try {
      code = renderToString(source, config).code;
    } catch (error) {
      // TODO: this is a hackyway how we distinguish errors from parser
      if (error.ruleId !== undefined) {
        this.emitError(formatSyntaxError(error));
      } else {
        throw error;
      }
    }
    return code;
  }
docs: Webpack loader for reactdown documents.