UNPKG

11.3 kBTypeScriptView Raw
1import { RawSourceMap, SourceMapGenerator } from 'source-map-js'
2
3import AtRule, { AtRuleProps } from './at-rule.js'
4import Comment, { CommentProps } from './comment.js'
5import Container, { ContainerProps, NewChild } from './container.js'
6import CssSyntaxError from './css-syntax-error.js'
7import Declaration, { DeclarationProps } from './declaration.js'
8import Document, { DocumentProps } from './document.js'
9import Input, { FilePosition } from './input.js'
10import LazyResult from './lazy-result.js'
11import list from './list.js'
12import Node, {
13 AnyNode,
14 ChildNode,
15 ChildProps,
16 NodeErrorOptions,
17 NodeProps,
18 Position,
19 Source
20} from './node.js'
21import Processor from './processor.js'
22import Result, { Message } from './result.js'
23import Root, { RootProps } from './root.js'
24import Rule, { RuleProps } from './rule.js'
25import Warning, { WarningOptions } from './warning.js'
26
27type DocumentProcessor = (
28 document: Document,
29 helper: postcss.Helpers
30) => Promise<void> | void
31type RootProcessor = (
32 root: Root,
33 helper: postcss.Helpers
34) => Promise<void> | void
35type DeclarationProcessor = (
36 decl: Declaration,
37 helper: postcss.Helpers
38) => Promise<void> | void
39type RuleProcessor = (
40 rule: Rule,
41 helper: postcss.Helpers
42) => Promise<void> | void
43type AtRuleProcessor = (
44 atRule: AtRule,
45 helper: postcss.Helpers
46) => Promise<void> | void
47type CommentProcessor = (
48 comment: Comment,
49 helper: postcss.Helpers
50) => Promise<void> | void
51
52interface Processors {
53 /**
54 * Will be called on all`AtRule` nodes.
55 *
56 * Will be called again on node or children changes.
57 */
58 AtRule?: { [name: string]: AtRuleProcessor } | AtRuleProcessor
59
60 /**
61 * Will be called on all `AtRule` nodes, when all children will be processed.
62 *
63 * Will be called again on node or children changes.
64 */
65 AtRuleExit?: { [name: string]: AtRuleProcessor } | AtRuleProcessor
66
67 /**
68 * Will be called on all `Comment` nodes.
69 *
70 * Will be called again on node or children changes.
71 */
72 Comment?: CommentProcessor
73
74 /**
75 * Will be called on all `Comment` nodes after listeners
76 * for `Comment` event.
77 *
78 * Will be called again on node or children changes.
79 */
80 CommentExit?: CommentProcessor
81
82 /**
83 * Will be called on all `Declaration` nodes after listeners
84 * for `Declaration` event.
85 *
86 * Will be called again on node or children changes.
87 */
88 Declaration?: { [prop: string]: DeclarationProcessor } | DeclarationProcessor
89
90 /**
91 * Will be called on all `Declaration` nodes.
92 *
93 * Will be called again on node or children changes.
94 */
95 DeclarationExit?:
96 | { [prop: string]: DeclarationProcessor }
97 | DeclarationProcessor
98
99 /**
100 * Will be called on `Document` node.
101 *
102 * Will be called again on children changes.
103 */
104 Document?: DocumentProcessor
105
106 /**
107 * Will be called on `Document` node, when all children will be processed.
108 *
109 * Will be called again on children changes.
110 */
111 DocumentExit?: DocumentProcessor
112
113 /**
114 * Will be called on `Root` node once.
115 */
116 Once?: RootProcessor
117
118 /**
119 * Will be called on `Root` node once, when all children will be processed.
120 */
121 OnceExit?: RootProcessor
122
123 /**
124 * Will be called on `Root` node.
125 *
126 * Will be called again on children changes.
127 */
128 Root?: RootProcessor
129
130 /**
131 * Will be called on `Root` node, when all children will be processed.
132 *
133 * Will be called again on children changes.
134 */
135 RootExit?: RootProcessor
136
137 /**
138 * Will be called on all `Rule` nodes.
139 *
140 * Will be called again on node or children changes.
141 */
142 Rule?: RuleProcessor
143
144 /**
145 * Will be called on all `Rule` nodes, when all children will be processed.
146 *
147 * Will be called again on node or children changes.
148 */
149 RuleExit?: RuleProcessor
150}
151
152declare namespace postcss {
153 export {
154 AnyNode,
155 AtRule,
156 AtRuleProps,
157 ChildNode,
158 ChildProps,
159 Comment,
160 CommentProps,
161 Container,
162 ContainerProps,
163 CssSyntaxError,
164 Declaration,
165 DeclarationProps,
166 Document,
167 DocumentProps,
168 FilePosition,
169 Input,
170 LazyResult,
171 list,
172 Message,
173 NewChild,
174 Node,
175 NodeErrorOptions,
176 NodeProps,
177 Position,
178 Processor,
179 Result,
180 Root,
181 RootProps,
182 Rule,
183 RuleProps,
184 Source,
185 Warning,
186 WarningOptions
187 }
188
189 export type SourceMap = {
190 toJSON(): RawSourceMap
191 } & SourceMapGenerator
192
193 export type Helpers = { postcss: Postcss; result: Result } & Postcss
194
195 export interface Plugin extends Processors {
196 postcssPlugin: string
197 prepare?: (result: Result) => Processors
198 }
199
200 export interface PluginCreator<PluginOptions> {
201 (opts?: PluginOptions): Plugin | Processor
202 postcss: true
203 }
204
205 export interface Transformer extends TransformCallback {
206 postcssPlugin: string
207 postcssVersion: string
208 }
209
210 export interface TransformCallback {
211 (root: Root, result: Result): Promise<void> | void
212 }
213
214 export interface OldPlugin<T> extends Transformer {
215 (opts?: T): Transformer
216 postcss: Transformer
217 }
218
219 export type AcceptedPlugin =
220 | {
221 postcss: Processor | TransformCallback
222 }
223 | OldPlugin<any>
224 | Plugin
225 | PluginCreator<any>
226 | Processor
227 | TransformCallback
228
229 export interface Parser<RootNode = Document | Root> {
230 (
231 css: { toString(): string } | string,
232 opts?: Pick<ProcessOptions, 'from' | 'map'>
233 ): RootNode
234 }
235
236 export interface Builder {
237 (part: string, node?: AnyNode, type?: 'end' | 'start'): void
238 }
239
240 export interface Stringifier {
241 (node: AnyNode, builder: Builder): void
242 }
243
244 export interface JSONHydrator {
245 (data: object): Node
246 (data: object[]): Node[]
247 }
248
249 export interface Syntax<RootNode = Document | Root> {
250 /**
251 * Function to generate AST by string.
252 */
253 parse?: Parser<RootNode>
254
255 /**
256 * Class to generate string by AST.
257 */
258 stringify?: Stringifier
259 }
260
261 export interface SourceMapOptions {
262 /**
263 * Use absolute path in generated source map.
264 */
265 absolute?: boolean
266
267 /**
268 * Indicates that PostCSS should add annotation comments to the CSS.
269 * By default, PostCSS will always add a comment with a path
270 * to the source map. PostCSS will not add annotations to CSS files
271 * that do not contain any comments.
272 *
273 * By default, PostCSS presumes that you want to save the source map as
274 * `opts.to + '.map'` and will use this path in the annotation comment.
275 * A different path can be set by providing a string value for annotation.
276 *
277 * If you have set `inline: true`, annotation cannot be disabled.
278 */
279 annotation?: ((file: string, root: Root) => string) | boolean | string
280
281 /**
282 * Override `from` in maps sources.
283 */
284 from?: string
285
286 /**
287 * Indicates that the source map should be embedded in the output CSS
288 * as a Base64-encoded comment. By default, it is `true`.
289 * But if all previous maps are external, not inline, PostCSS will not embed
290 * the map even if you do not set this option.
291 *
292 * If you have an inline source map, the result.map property will be empty,
293 * as the source map will be contained within the text of `result.css`.
294 */
295 inline?: boolean
296
297 /**
298 * Source map content from a previous processing step (e.g., Sass).
299 *
300 * PostCSS will try to read the previous source map
301 * automatically (based on comments within the source CSS), but you can use
302 * this option to identify it manually.
303 *
304 * If desired, you can omit the previous map with prev: `false`.
305 */
306 prev?: ((file: string) => string) | boolean | object | string
307
308 /**
309 * Indicates that PostCSS should set the origin content (e.g., Sass source)
310 * of the source map. By default, it is true. But if all previous maps do not
311 * contain sources content, PostCSS will also leave it out even if you
312 * do not set this option.
313 */
314 sourcesContent?: boolean
315 }
316
317 export interface ProcessOptions<RootNode = Document | Root> {
318 /**
319 * The path of the CSS source file. You should always set `from`,
320 * because it is used in source map generation and syntax error messages.
321 */
322 from?: string | undefined
323
324 /**
325 * Source map options
326 */
327 map?: boolean | SourceMapOptions
328
329 /**
330 * Function to generate AST by string.
331 */
332 parser?: Parser<RootNode> | Syntax<RootNode>
333
334 /**
335 * Class to generate string by AST.
336 */
337 stringifier?: Stringifier | Syntax<RootNode>
338
339 /**
340 * Object with parse and stringify.
341 */
342 syntax?: Syntax<RootNode>
343
344 /**
345 * The path where you'll put the output CSS file. You should always set `to`
346 * to generate correct source maps.
347 */
348 to?: string
349 }
350
351 export type Postcss = typeof postcss
352
353 /**
354 * Default function to convert a node tree into a CSS string.
355 */
356 export let stringify: Stringifier
357
358 /**
359 * Parses source css and returns a new `Root` or `Document` node,
360 * which contains the source CSS nodes.
361 *
362 * ```js
363 * // Simple CSS concatenation with source map support
364 * const root1 = postcss.parse(css1, { from: file1 })
365 * const root2 = postcss.parse(css2, { from: file2 })
366 * root1.append(root2).toResult().css
367 * ```
368 */
369 export let parse: Parser<Root>
370
371 /**
372 * Rehydrate a JSON AST (from `Node#toJSON`) back into the AST classes.
373 *
374 * ```js
375 * const json = root.toJSON()
376 * // save to file, send by network, etc
377 * const root2 = postcss.fromJSON(json)
378 * ```
379 */
380 export let fromJSON: JSONHydrator
381
382 /**
383 * Creates a new `Comment` node.
384 *
385 * @param defaults Properties for the new node.
386 * @return New comment node
387 */
388 export function comment(defaults?: CommentProps): Comment
389
390 /**
391 * Creates a new `AtRule` node.
392 *
393 * @param defaults Properties for the new node.
394 * @return New at-rule node.
395 */
396 export function atRule(defaults?: AtRuleProps): AtRule
397
398 /**
399 * Creates a new `Declaration` node.
400 *
401 * @param defaults Properties for the new node.
402 * @return New declaration node.
403 */
404 export function decl(defaults?: DeclarationProps): Declaration
405
406 /**
407 * Creates a new `Rule` node.
408 *
409 * @param default Properties for the new node.
410 * @return New rule node.
411 */
412 export function rule(defaults?: RuleProps): Rule
413
414 /**
415 * Creates a new `Root` node.
416 *
417 * @param defaults Properties for the new node.
418 * @return New root node.
419 */
420 export function root(defaults?: RootProps): Root
421
422 /**
423 * Creates a new `Document` node.
424 *
425 * @param defaults Properties for the new node.
426 * @return New document node.
427 */
428 export function document(defaults?: DocumentProps): Document
429
430 export { postcss as default }
431}
432
433/**
434 * Create a new `Processor` instance that will apply `plugins`
435 * as CSS processors.
436 *
437 * ```js
438 * let postcss = require('postcss')
439 *
440 * postcss(plugins).process(css, { from, to }).then(result => {
441 * console.log(result.css)
442 * })
443 * ```
444 *
445 * @param plugins PostCSS plugins.
446 * @return Processor to process multiple CSS.
447 */
448declare function postcss(
449 plugins?: readonly postcss.AcceptedPlugin[]
450): Processor
451declare function postcss(...plugins: postcss.AcceptedPlugin[]): Processor
452
453export = postcss
454
\No newline at end of file