UNPKG

@marp-team/marpit

Version:

The skinny framework for creating slide deck from Markdown

53 lines (42 loc) 1.48 kB
"use strict"; 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;