Spaces:
Running
Running
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.12' | |
this.plugins = this.normalize(plugins) | |
} | |
use(plugin) { | |
this.plugins = this.plugins.concat(this.normalize([plugin])) | |
return this | |
} | |
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) | |
} | |
} | |
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 | |
} | |
} | |
module.exports = Processor | |
Processor.default = Processor | |
Root.registerProcessor(Processor) | |
Document.registerProcessor(Processor) | |