1
0
Files
malta-slides/node_modules/@marp-team/marpit/lib/postcss/import/hoisting.js

51 lines
1.4 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.importHoisting = exports.default = void 0;
var _postcss_plugin = _interopRequireDefault(require("../../helpers/postcss_plugin"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/** @module */
/**
* Marpit PostCSS import hoisting plugin.
*
* Hoist `@charset` and `@import` at-rule to the beginning of CSS. Marpit is
* manipulating CSS with many PostCSS plugins, so sometimes a few at-rules
* cannot keep specification.
*
* This plugin takes care of hoisting for invalid at-rules.
*
* @function importHoisting
*/
const importHoisting = exports.importHoisting = (0, _postcss_plugin.default)('marpit-postcss-import-hoisting', () => css => {
const hoisted = {
charset: undefined,
imports: []
};
css.walkAtRules(rule => {
if (rule.name === 'charset') {
rule.remove();
if (!hoisted.charset) hoisted.charset = rule;
} else if (rule.name === 'import') {
hoisted.imports.push(rule.remove());
}
});
const {
first
} = css
// Hoist at-rules
;
[hoisted.charset, ...hoisted.imports].filter(r => r).forEach((rule, idx) => {
// Strip whitespace from the beginning of first at-rule
const prependRule = idx === 0 ? rule.clone({
raws: {
before: undefined
}
}) : rule;
first.before(prependRule);
});
});
var _default = exports.default = importHoisting;