|
|
import { SourceMapGenerator, RawSourceMap } from 'source-map-js'
import Node, { Position, Source, ChildNode, NodeErrorOptions, NodeProps, ChildProps, AnyNode } from './node.js' import Declaration, { DeclarationProps } from './declaration.js' import Container, { ContainerProps } from './container.js' import Document, { DocumentProps } from './document.js' import Warning, { WarningOptions } from './warning.js' import Comment, { CommentProps } from './comment.js' import AtRule, { AtRuleProps } from './at-rule.js' import Input, { FilePosition } from './input.js' import Result, { Message } from './result.js' import Root, { RootProps } from './root.js' import Rule, { RuleProps } from './rule.js' import CssSyntaxError from './css-syntax-error.js' import list, { List } from './list.js' import LazyResult from './lazy-result.js' import Processor from './processor.js'
export { NodeErrorOptions, DeclarationProps, CssSyntaxError, ContainerProps, WarningOptions, DocumentProps, FilePosition, CommentProps, AtRuleProps, Declaration, ChildProps, LazyResult, ChildNode, NodeProps, Processor, RuleProps, RootProps, Container, Position, Document, AnyNode, Warning, Message, Comment, Source, AtRule, Result, Input, Node, list, Rule, Root }
export type SourceMap = SourceMapGenerator & { toJSON(): RawSourceMap }
export type Helpers = { result: Result; postcss: Postcss } & Postcss
type DocumentProcessor = ( document: Document, helper: Helpers ) => Promise<void> | void type RootProcessor = (root: Root, helper: Helpers) => Promise<void> | void type DeclarationProcessor = ( decl: Declaration, helper: Helpers ) => Promise<void> | void type RuleProcessor = (rule: Rule, helper: Helpers) => Promise<void> | void type AtRuleProcessor = (atRule: AtRule, helper: Helpers) => Promise<void> | void type CommentProcessor = ( comment: Comment, helper: Helpers ) => Promise<void> | void
interface Processors { /** * Will be called on `Document` node. * * Will be called again on children changes. */ Document?: DocumentProcessor
/** * Will be called on `Document` node, when all children will be processed. * * Will be called again on children changes. */ DocumentExit?: DocumentProcessor
/** * Will be called on `Root` node once. */ Once?: RootProcessor
/** * Will be called on `Root` node once, when all children will be processed. */ OnceExit?: RootProcessor
/** * Will be called on `Root` node. * * Will be called again on children changes. */ Root?: RootProcessor
/** * Will be called on `Root` node, when all children will be processed. * * Will be called again on children changes. */ RootExit?: RootProcessor
/** * Will be called on all `Declaration` nodes after listeners * for `Declaration` event. * * Will be called again on node or children changes. */ Declaration?: DeclarationProcessor | { [prop: string]: DeclarationProcessor }
/** * Will be called on all `Declaration` nodes. * * Will be called again on node or children changes. */ DeclarationExit?: | DeclarationProcessor | { [prop: string]: DeclarationProcessor }
/** * Will be called on all `Rule` nodes. * * Will be called again on node or children changes. */ Rule?: RuleProcessor
/** * Will be called on all `Rule` nodes, when all children will be processed. * * Will be called again on node or children changes. */ RuleExit?: RuleProcessor
/** * Will be called on all`AtRule` nodes. * * Will be called again on node or children changes. */ AtRule?: AtRuleProcessor | { [name: string]: AtRuleProcessor }
/** * Will be called on all `AtRule` nodes, when all children will be processed. * * Will be called again on node or children changes. */ AtRuleExit?: AtRuleProcessor | { [name: string]: AtRuleProcessor }
/** * Will be called on all `Comment` nodes. * * Will be called again on node or children changes. */ Comment?: CommentProcessor
/** * Will be called on all `Comment` nodes after listeners * for `Comment` event. * * Will be called again on node or children changes. */ CommentExit?: CommentProcessor
/** * Will be called when all other listeners processed the document. * * This listener will not be called again. */ Exit?: RootProcessor }
export interface Plugin extends Processors { postcssPlugin: string prepare?: (result: Result) => Processors }
export interface PluginCreator<PluginOptions> { (opts?: PluginOptions): Plugin | Processor postcss: true }
export interface Transformer extends TransformCallback { postcssPlugin: string postcssVersion: string }
export interface TransformCallback { (root: Root, result: Result): Promise<void> | void }
export interface OldPlugin<T> extends Transformer { (opts?: T): Transformer postcss: Transformer }
export type AcceptedPlugin = | Plugin | PluginCreator<any> | OldPlugin<any> | TransformCallback | { postcss: TransformCallback | Processor } | Processor
export interface Parser<RootNode = Root | Document> { ( css: string | { toString(): string }, opts?: Pick<ProcessOptions, 'map' | 'from'> ): RootNode }
export interface Builder { (part: string, node?: AnyNode, type?: 'start' | 'end'): void }
export interface Stringifier { (node: AnyNode, builder: Builder): void }
export interface JSONHydrator { (data: object[]): Node[] (data: object): Node }
export interface Syntax { /** * Function to generate AST by string. */ parse?: Parser
/** * Class to generate string by AST. */ stringify?: Stringifier }
export interface SourceMapOptions { /** * Indicates that the source map should be embedded in the output CSS * as a Base64-encoded comment. By default, it is `true`. * But if all previous maps are external, not inline, PostCSS will not embed * the map even if you do not set this option. * * If you have an inline source map, the result.map property will be empty, * as the source map will be contained within the text of `result.css`. */ inline?: boolean
/** * Source map content from a previous processing step (e.g., Sass). * * PostCSS will try to read the previous source map * automatically (based on comments within the source CSS), but you can use * this option to identify it manually. * * If desired, you can omit the previous map with prev: `false`. */ prev?: string | boolean | object | ((file: string) => string)
/** * Indicates that PostCSS should set the origin content (e.g., Sass source) * of the source map. By default, it is true. But if all previous maps do not * contain sources content, PostCSS will also leave it out even if you * do not set this option. */ sourcesContent?: boolean
/** * Indicates that PostCSS should add annotation comments to the CSS. * By default, PostCSS will always add a comment with a path * to the source map. PostCSS will not add annotations to CSS files * that do not contain any comments. * * By default, PostCSS presumes that you want to save the source map as * `opts.to + '.map'` and will use this path in the annotation comment. * A different path can be set by providing a string value for annotation. * * If you have set `inline: true`, annotation cannot be disabled. */ annotation?: string | boolean | ((file: string, root: Root) => string)
/** * Override `from` in map’s sources. */ from?: string
/** * Use absolute path in generated source map. */ absolute?: boolean }
export interface ProcessOptions { /** * The path of the CSS source file. You should always set `from`, * because it is used in source map generation and syntax error messages. */ from?: string
/** * The path where you'll put the output CSS file. You should always set `to` * to generate correct source maps. */ to?: string
/** * Function to generate AST by string. */ parser?: Syntax | Parser
/** * Class to generate string by AST. */ stringifier?: Syntax | Stringifier
/** * Object with parse and stringify. */ syntax?: Syntax
/** * Source map options */ map?: SourceMapOptions | boolean }
export interface Postcss { /** * Create a new `Processor` instance that will apply `plugins` * as CSS processors. * * ```js
* let postcss = require('postcss') * * postcss(plugins).process(css, { from, to }).then(result => { * console.log(result.css) * }) * ```
* * @param plugins PostCSS plugins. * @return Processor to process multiple CSS. */ (plugins?: AcceptedPlugin[]): Processor (...plugins: AcceptedPlugin[]): Processor
/** * Default function to convert a node tree into a CSS string. */ stringify: Stringifier
/** * Parses source css and returns a new `Root` or `Document` node, * which contains the source CSS nodes. * * ```js
* // Simple CSS concatenation with source map support
* const root1 = postcss.parse(css1, { from: file1 }) * const root2 = postcss.parse(css2, { from: file2 }) * root1.append(root2).toResult().css * ```
*/ parse: Parser<Root>
/** * Rehydrate a JSON AST (from `Node#toJSON`) back into the AST classes. * * ```js
* const json = root.toJSON() * // save to file, send by network, etc
* const root2 = postcss.fromJSON(json) * ```
*/ fromJSON: JSONHydrator
/** * Contains the `list` module. */ list: List
/** * Creates a new `Comment` node. * * @param defaults Properties for the new node. * @return New comment node */ comment(defaults?: CommentProps): Comment
/** * Creates a new `AtRule` node. * * @param defaults Properties for the new node. * @return New at-rule node. */ atRule(defaults?: AtRuleProps): AtRule
/** * Creates a new `Declaration` node. * * @param defaults Properties for the new node. * @return New declaration node. */ decl(defaults?: DeclarationProps): Declaration
/** * Creates a new `Rule` node. * * @param default Properties for the new node. * @return New rule node. */ rule(defaults?: RuleProps): Rule
/** * Creates a new `Root` node. * * @param defaults Properties for the new node. * @return New root node. */ root(defaults?: RootProps): Root
/** * Creates a new `Document` node. * * @param defaults Properties for the new node. * @return New document node. */ document(defaults?: DocumentProps): Document
CssSyntaxError: typeof CssSyntaxError Declaration: typeof Declaration Container: typeof Container Comment: typeof Comment Warning: typeof Warning AtRule: typeof AtRule Result: typeof Result Input: typeof Input Rule: typeof Rule Root: typeof Root Node: typeof Node }
export const stringify: Stringifier export const parse: Parser<Root> export const fromJSON: JSONHydrator
export const comment: Postcss['comment'] export const atRule: Postcss['atRule'] export const decl: Postcss['decl'] export const rule: Postcss['rule'] export const root: Postcss['root']
declare const postcss: Postcss
export default postcss
|