68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
 | 
						|
let NoWorkResult = require('./no-work-result')
 | 
						|
let LazyResult = require('./lazy-result')
 | 
						|
let Document = require('./document')
 | 
						|
let Root = require('./root')
 | 
						|
 | 
						|
class Processor {
 | 
						|
  constructor(plugins = []) {
 | 
						|
    this.version = '8.4.27'
 | 
						|
    this.plugins = this.normalize(plugins)
 | 
						|
  }
 | 
						|
 | 
						|
  normalize(plugins) {
 | 
						|
    let normalized = []
 | 
						|
    for (let i of plugins) {
 | 
						|
      if (i.postcss === true) {
 | 
						|
        i = i()
 | 
						|
      } else if (i.postcss) {
 | 
						|
        i = i.postcss
 | 
						|
      }
 | 
						|
 | 
						|
      if (typeof i === 'object' && Array.isArray(i.plugins)) {
 | 
						|
        normalized = normalized.concat(i.plugins)
 | 
						|
      } else if (typeof i === 'object' && i.postcssPlugin) {
 | 
						|
        normalized.push(i)
 | 
						|
      } else if (typeof i === 'function') {
 | 
						|
        normalized.push(i)
 | 
						|
      } else if (typeof i === 'object' && (i.parse || i.stringify)) {
 | 
						|
        if (process.env.NODE_ENV !== 'production') {
 | 
						|
          throw new Error(
 | 
						|
            'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +
 | 
						|
              'one of the syntax/parser/stringifier options as outlined ' +
 | 
						|
              'in your PostCSS runner documentation.'
 | 
						|
          )
 | 
						|
        }
 | 
						|
      } else {
 | 
						|
        throw new Error(i + ' is not a PostCSS plugin')
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return normalized
 | 
						|
  }
 | 
						|
 | 
						|
  process(css, opts = {}) {
 | 
						|
    if (
 | 
						|
      this.plugins.length === 0 &&
 | 
						|
      typeof opts.parser === 'undefined' &&
 | 
						|
      typeof opts.stringifier === 'undefined' &&
 | 
						|
      typeof opts.syntax === 'undefined'
 | 
						|
    ) {
 | 
						|
      return new NoWorkResult(this, css, opts)
 | 
						|
    } else {
 | 
						|
      return new LazyResult(this, css, opts)
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  use(plugin) {
 | 
						|
    this.plugins = this.plugins.concat(this.normalize([plugin]))
 | 
						|
    return this
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = Processor
 | 
						|
Processor.default = Processor
 | 
						|
 | 
						|
Root.registerProcessor(Processor)
 | 
						|
Document.registerProcessor(Processor)
 |