@marp-team/marpit
Version:
The skinny framework for creating slide deck from Markdown
53 lines (42 loc) • 1.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _postcss = _interopRequireDefault(require("postcss"));
var _parse = _interopRequireDefault(require("./parse"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @module */
/**
* Marpit PostCSS import replace plugin.
*
* Replace parsed `@import` / `@import-theme` rules.
*
* Please see {@link module:postcss/import/parse} about the specification of
* each syntax.
*
* @alias module:postcss/import/replace
* @param {ThemeSet} themeSet ThemeSet instance.
*/
const plugin = _postcss.default.plugin('marpit-postcss-import-replace', (themeSet, importedThemes = []) => (0, _postcss.default)([_parse.default, css => {
const prepends = [];
css.walk(node => {
const name = node.marpitImportParse;
if (name) {
const theme = themeSet.get(name);
if (theme) {
if (importedThemes.includes(name)) throw new Error(`Circular "${name}" theme import is detected.`);
const processed = (0, _postcss.default)([plugin(themeSet, [...importedThemes, name])]).process(theme.css);
if (node.name === 'import') {
node.replaceWith(processed.root);
} else {
node.remove();
prepends.unshift(processed.root);
}
}
}
});
for (const root of prepends) css.first.before(root);
}]));
var _default = plugin;
exports.default = _default;