"use strict";

/** @module */

/**
 * Create Marpit plugin.
 *
 * Generate Marpit plugin from passed markdown-it plugin. Marpit plugin needs
 * markdown-it instance with `marpit` member.
 *
 * @example
 * import { marpitPlugin } from '@marp-team/marpit/plugin'
 *
 * export default marpitPlugin((md) => {
 *   // Compatible with markdown-it plugin
 *   md.renderer.rules.your_rule = (tokens, idx, options, env, self) => {
 *     // ...
 *   }
 *
 *   // And accessible to Marpit instance as `md.marpit`
 *   const { marpit } = md
 *
 *   marpit.customDirectives.local.yourDirective = (value) => {
 *     return { yourDirective: value }
 *   }
 * })
 *
 * @function marpitPlugin
 * @param {Function} plugin Base plugin for markdown-it.
 * @returns {Function} Generated Marpit plugin.
 */
function marpitPlugin(plugin) {
  return function (md, ...args) {
    if (md.marpit) return plugin.call(this, md, ...args);
    throw new Error('Marpit plugin has detected incompatible markdown-it instance.');
  };
}
Object.defineProperty(marpitPlugin, '__esModule', {
  value: true
});
Object.defineProperty(marpitPlugin, 'default', {
  value: marpitPlugin
});
Object.defineProperty(marpitPlugin, 'marpitPlugin', {
  value: marpitPlugin
});
module.exports = marpitPlugin;