Permalink
Cannot retrieve contributors at this time
178 lines (169 sloc)
4.59 KB
| let Warning = require('./warning') | |
| /** | |
| * Provides the result of the PostCSS transformations. | |
| * | |
| * A Result instance is returned by {@link LazyResult#then} | |
| * or {@link Root#toResult} methods. | |
| * | |
| * @example | |
| * postcss([autoprefixer]).process(css).then(result => { | |
| * console.log(result.css) | |
| * }) | |
| * | |
| * @example | |
| * const result2 = postcss.parse(css).toResult() | |
| */ | |
| class Result { | |
| /** | |
| * @param {Processor} processor Processor used for this transformation. | |
| * @param {Root} root Root node after all transformations. | |
| * @param {processOptions} opts Options from the {@link Processor#process} | |
| * or {@link Root#toResult}. | |
| */ | |
| constructor (processor, root, opts) { | |
| /** | |
| * The Processor instance used for this transformation. | |
| * | |
| * @type {Processor} | |
| * | |
| * @example | |
| * for (const plugin of result.processor.plugins) { | |
| * if (plugin.postcssPlugin === 'postcss-bad') { | |
| * throw 'postcss-good is incompatible with postcss-bad' | |
| * } | |
| * }) | |
| */ | |
| this.processor = processor | |
| /** | |
| * Contains messages from plugins (e.g., warnings or custom messages). | |
| * Each message should have type and plugin properties. | |
| * | |
| * @type {Message[]} | |
| * | |
| * @example | |
| * postcss.plugin('postcss-min-browser', () => { | |
| * return (root, result) => { | |
| * const browsers = detectMinBrowsersByCanIUse(root) | |
| * result.messages.push({ | |
| * type: 'min-browser', | |
| * plugin: 'postcss-min-browser', | |
| * browsers | |
| * }) | |
| * } | |
| * }) | |
| */ | |
| this.messages = [] | |
| /** | |
| * Root node after all transformations. | |
| * | |
| * @type {Root} | |
| * | |
| * @example | |
| * root.toResult().root === root | |
| */ | |
| this.root = root | |
| /** | |
| * Options from the {@link Processor#process} or {@link Root#toResult} call | |
| * that produced this Result instance. | |
| * | |
| * @type {processOptions} | |
| * | |
| * @example | |
| * root.toResult(opts).opts === opts | |
| */ | |
| this.opts = opts | |
| /** | |
| * A CSS string representing of {@link Result#root}. | |
| * | |
| * @type {string} | |
| * | |
| * @example | |
| * postcss.parse('a{}').toResult().css //=> "a{}" | |
| */ | |
| this.css = undefined | |
| /** | |
| * An instance of `SourceMapGenerator` class from the `source-map` library, | |
| * representing changes to the {@link Result#root} instance. | |
| * | |
| * @type {SourceMapGenerator} | |
| * | |
| * @example | |
| * result.map.toJSON() //=> { version: 3, file: 'a.css', … } | |
| * | |
| * @example | |
| * if (result.map) { | |
| * fs.writeFileSync(result.opts.to + '.map', result.map.toString()) | |
| * } | |
| */ | |
| this.map = undefined | |
| } | |
| /** | |
| * Returns for @{link Result#css} content. | |
| * | |
| * @example | |
| * result + '' === result.css | |
| * | |
| * @return {string} String representing of {@link Result#root}. | |
| */ | |
| toString () { | |
| return this.css | |
| } | |
| /** | |
| * Creates an instance of {@link Warning} and adds it | |
| * to {@link Result#messages}. | |
| * | |
| * @param {string} text Warning message. | |
| * @param {Object} [opts] Warning options. | |
| * @param {Node} opts.node CSS node that caused the warning. | |
| * @param {string} opts.word Word in CSS source that caused the warning. | |
| * @param {number} opts.index Index in CSS node string that caused | |
| * the warning. | |
| * @param {string} opts.plugin Name of the plugin that created | |
| * this warning. {@link Result#warn} fills | |
| * this property automatically. | |
| * | |
| * @return {Warning} Created warning. | |
| */ | |
| warn (text, opts = { }) { | |
| if (!opts.plugin) { | |
| if (this.lastPlugin && this.lastPlugin.postcssPlugin) { | |
| opts.plugin = this.lastPlugin.postcssPlugin | |
| } | |
| } | |
| let warning = new Warning(text, opts) | |
| this.messages.push(warning) | |
| return warning | |
| } | |
| /** | |
| * Returns warnings from plugins. Filters {@link Warning} instances | |
| * from {@link Result#messages}. | |
| * | |
| * @example | |
| * result.warnings().forEach(warn => { | |
| * console.warn(warn.toString()) | |
| * }) | |
| * | |
| * @return {Warning[]} Warnings from plugins. | |
| */ | |
| warnings () { | |
| return this.messages.filter(i => i.type === 'warning') | |
| } | |
| /** | |
| * An alias for the {@link Result#css} property. | |
| * Use it with syntaxes that generate non-CSS output. | |
| * | |
| * @type {string} | |
| * | |
| * @example | |
| * result.css === result.content | |
| */ | |
| get content () { | |
| return this.css | |
| } | |
| } | |
| module.exports = Result | |
| /** | |
| * @typedef {object} Message | |
| * @property {string} type Message type. | |
| * @property {string} plugin Source PostCSS plugin name. | |
| */ |