You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.3 KiB
59 lines
1.3 KiB
"use strict" |
|
|
|
// builtin tooling |
|
const path = require("path") |
|
|
|
// placeholder tooling |
|
let sugarss |
|
|
|
module.exports = function processContent( |
|
result, |
|
content, |
|
filename, |
|
options, |
|
postcss |
|
) { |
|
const { plugins } = options |
|
const ext = path.extname(filename) |
|
|
|
const parserList = [] |
|
|
|
// SugarSS support: |
|
if (ext === ".sss") { |
|
if (!sugarss) { |
|
try { |
|
sugarss = require("sugarss") |
|
} catch {} // Ignore |
|
} |
|
if (sugarss) |
|
return runPostcss(postcss, content, filename, plugins, [sugarss]) |
|
} |
|
|
|
// Syntax support: |
|
if (result.opts.syntax && result.opts.syntax.parse) { |
|
parserList.push(result.opts.syntax.parse) |
|
} |
|
|
|
// Parser support: |
|
if (result.opts.parser) parserList.push(result.opts.parser) |
|
// Try the default as a last resort: |
|
parserList.push(null) |
|
|
|
return runPostcss(postcss, content, filename, plugins, parserList) |
|
} |
|
|
|
function runPostcss(postcss, content, filename, plugins, parsers, index) { |
|
if (!index) index = 0 |
|
return postcss(plugins) |
|
.process(content, { |
|
from: filename, |
|
parser: parsers[index], |
|
}) |
|
.catch(err => { |
|
// If there's an error, try the next parser |
|
index++ |
|
// If there are no parsers left, throw it |
|
if (index === parsers.length) throw err |
|
return runPostcss(postcss, content, filename, plugins, parsers, index) |
|
}) |
|
}
|
|
|