You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											9 months ago
										 | '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.31' | ||
|  |     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) |