60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"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?.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)
 | 
						|
    })
 | 
						|
}
 |