forked from rDrama/rDrama
197 lines
4.0 KiB
TypeScript
197 lines
4.0 KiB
TypeScript
|
import {
|
||
|
ProcessOptions,
|
||
|
Plugin,
|
||
|
SourceMap,
|
||
|
TransformCallback,
|
||
|
Root,
|
||
|
Document,
|
||
|
Node,
|
||
|
Warning,
|
||
|
WarningOptions
|
||
|
} from './postcss.js'
|
||
|
import Processor from './processor.js'
|
||
|
|
||
|
export interface Message {
|
||
|
/**
|
||
|
* Message type.
|
||
|
*/
|
||
|
type: string
|
||
|
|
||
|
/**
|
||
|
* Source PostCSS plugin name.
|
||
|
*/
|
||
|
plugin?: string
|
||
|
|
||
|
[others: string]: any
|
||
|
}
|
||
|
|
||
|
export interface ResultOptions extends ProcessOptions {
|
||
|
/**
|
||
|
* The CSS node that was the source of the warning.
|
||
|
*/
|
||
|
node?: Node
|
||
|
|
||
|
/**
|
||
|
* Name of plugin that created this warning. `Result#warn` will fill it
|
||
|
* automatically with `Plugin#postcssPlugin` value.
|
||
|
*/
|
||
|
plugin?: string
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Provides the result of the PostCSS transformations.
|
||
|
*
|
||
|
* A Result instance is returned by `LazyResult#then`
|
||
|
* or `Root#toResult` methods.
|
||
|
*
|
||
|
* ```js
|
||
|
* postcss([autoprefixer]).process(css).then(result => {
|
||
|
* console.log(result.css)
|
||
|
* })
|
||
|
* ```
|
||
|
*
|
||
|
* ```js
|
||
|
* const result2 = postcss.parse(css).toResult()
|
||
|
* ```
|
||
|
*/
|
||
|
export default class Result {
|
||
|
/**
|
||
|
* The Processor instance used for this transformation.
|
||
|
*
|
||
|
* ```js
|
||
|
* for (const plugin of result.processor.plugins) {
|
||
|
* if (plugin.postcssPlugin === 'postcss-bad') {
|
||
|
* throw 'postcss-good is incompatible with postcss-bad'
|
||
|
* }
|
||
|
* })
|
||
|
* ```
|
||
|
*/
|
||
|
processor: Processor
|
||
|
|
||
|
/**
|
||
|
* Contains messages from plugins (e.g., warnings or custom messages).
|
||
|
* Each message should have type and plugin properties.
|
||
|
*
|
||
|
* ```js
|
||
|
* AtRule: {
|
||
|
* import: (atRule, { result }) {
|
||
|
* const importedFile = parseImport(atRule)
|
||
|
* result.messages.push({
|
||
|
* type: 'dependency',
|
||
|
* plugin: 'postcss-import',
|
||
|
* file: importedFile,
|
||
|
* parent: result.opts.from
|
||
|
* })
|
||
|
* }
|
||
|
* }
|
||
|
* ```
|
||
|
*/
|
||
|
messages: Message[]
|
||
|
|
||
|
/**
|
||
|
* Root node after all transformations.
|
||
|
*
|
||
|
* ```js
|
||
|
* root.toResult().root === root
|
||
|
* ```
|
||
|
*/
|
||
|
root: Root | Document
|
||
|
|
||
|
/**
|
||
|
* Options from the `Processor#process` or `Root#toResult` call
|
||
|
* that produced this Result instance.]
|
||
|
*
|
||
|
* ```js
|
||
|
* root.toResult(opts).opts === opts
|
||
|
* ```
|
||
|
*/
|
||
|
opts: ResultOptions
|
||
|
|
||
|
/**
|
||
|
* A CSS string representing of `Result#root`.
|
||
|
*
|
||
|
* ```js
|
||
|
* postcss.parse('a{}').toResult().css //=> "a{}"
|
||
|
* ```
|
||
|
*/
|
||
|
css: string
|
||
|
|
||
|
/**
|
||
|
* An instance of `SourceMapGenerator` class from the `source-map` library,
|
||
|
* representing changes to the `Result#root` instance.
|
||
|
*
|
||
|
* ```js
|
||
|
* result.map.toJSON() //=> { version: 3, file: 'a.css', … }
|
||
|
* ```
|
||
|
*
|
||
|
* ```js
|
||
|
* if (result.map) {
|
||
|
* fs.writeFileSync(result.opts.to + '.map', result.map.toString())
|
||
|
* }
|
||
|
* ```
|
||
|
*/
|
||
|
map: SourceMap
|
||
|
|
||
|
/**
|
||
|
* Last runned PostCSS plugin.
|
||
|
*/
|
||
|
lastPlugin: Plugin | TransformCallback
|
||
|
|
||
|
/**
|
||
|
* @param processor Processor used for this transformation.
|
||
|
* @param root Root node after all transformations.
|
||
|
* @param opts Options from the `Processor#process` or `Root#toResult`.
|
||
|
*/
|
||
|
constructor(processor: Processor, root: Root | Document, opts: ResultOptions)
|
||
|
|
||
|
/**
|
||
|
* An alias for the `Result#css` property.
|
||
|
* Use it with syntaxes that generate non-CSS output.
|
||
|
*
|
||
|
* ```js
|
||
|
* result.css === result.content
|
||
|
* ```
|
||
|
*/
|
||
|
get content(): string
|
||
|
|
||
|
/**
|
||
|
* Returns for `Result#css` content.
|
||
|
*
|
||
|
* ```js
|
||
|
* result + '' === result.css
|
||
|
* ```
|
||
|
*
|
||
|
* @return String representing of `Result#root`.
|
||
|
*/
|
||
|
toString(): string
|
||
|
|
||
|
/**
|
||
|
* Creates an instance of `Warning` and adds it to `Result#messages`.
|
||
|
*
|
||
|
* ```js
|
||
|
* if (decl.important) {
|
||
|
* result.warn('Avoid !important', { node: decl, word: '!important' })
|
||
|
* }
|
||
|
* ```
|
||
|
*
|
||
|
* @param text Warning message.
|
||
|
* @param opts Warning options.
|
||
|
* @return Created warning.
|
||
|
*/
|
||
|
warn(message: string, options?: WarningOptions): Warning
|
||
|
|
||
|
/**
|
||
|
* Returns warnings from plugins. Filters `Warning` instances
|
||
|
* from `Result#messages`.
|
||
|
*
|
||
|
* ```js
|
||
|
* result.warnings().forEach(warn => {
|
||
|
* console.warn(warn.toString())
|
||
|
* })
|
||
|
* ```
|
||
|
*
|
||
|
* @return Warnings from plugins.
|
||
|
*/
|
||
|
warnings(): Warning[]
|
||
|
}
|