/** @module */
import postcssPlugin from '../helpers/postcss_plugin'
/**
* Marpit PostCSS meta plugin.
*
* Parse CSS comment written in the format of `@key value`.
*
* @function meta
* @param {Object} [opts]
* @param {Object} [opts.metaType] An object for defined types for metadata.
*/
export const meta = postcssPlugin(
'marpit-postcss-meta',
(opts = {}) =>
(css, { result }) => {
const metaType = opts.metaType || {}
result.marpitMeta = result.marpitMeta || {}
css.walkComments((comment) => {
comment.text
.slice(0)
.replace(/^[*!\s]*@([\w-]+)\s+(.+)$/gim, (_, metaName, value) => {
if (metaType[metaName] === Array) {
// Array meta
result.marpitMeta[metaName] = [
...(result.marpitMeta[metaName] || []),
value,
]
} else {
// String meta (default)
result.marpitMeta[metaName] = value
}
})
})
}
)
export default meta