UNPKG

2.79 kBJavaScriptView Raw
1'use strict'
2
3let CssSyntaxError = require('./css-syntax-error')
4let Declaration = require('./declaration')
5let LazyResult = require('./lazy-result')
6let Container = require('./container')
7let Processor = require('./processor')
8let stringify = require('./stringify')
9let fromJSON = require('./fromJSON')
10let Document = require('./document')
11let Warning = require('./warning')
12let Comment = require('./comment')
13let AtRule = require('./at-rule')
14let Result = require('./result.js')
15let Input = require('./input')
16let parse = require('./parse')
17let list = require('./list')
18let Rule = require('./rule')
19let Root = require('./root')
20let Node = require('./node')
21
22function postcss(...plugins) {
23 if (plugins.length === 1 && Array.isArray(plugins[0])) {
24 plugins = plugins[0]
25 }
26 return new Processor(plugins)
27}
28
29postcss.plugin = function plugin(name, initializer) {
30 // eslint-disable-next-line no-console
31 if (console && console.warn) {
32 // eslint-disable-next-line no-console
33 console.warn(
34 name +
35 ': postcss.plugin was deprecated. Migration guide:\n' +
36 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
37 )
38 if (process.env.LANG && process.env.LANG.startsWith('cn')) {
39 /* c8 ignore next 7 */
40 // eslint-disable-next-line no-console
41 console.warn(
42 name +
43 ': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
44 'https://www.w3ctech.com/topic/2226'
45 )
46 }
47 }
48 function creator(...args) {
49 let transformer = initializer(...args)
50 transformer.postcssPlugin = name
51 transformer.postcssVersion = new Processor().version
52 return transformer
53 }
54
55 let cache
56 Object.defineProperty(creator, 'postcss', {
57 get() {
58 if (!cache) cache = creator()
59 return cache
60 }
61 })
62
63 creator.process = function (css, processOpts, pluginOpts) {
64 return postcss([creator(pluginOpts)]).process(css, processOpts)
65 }
66
67 return creator
68}
69
70postcss.stringify = stringify
71postcss.parse = parse
72postcss.fromJSON = fromJSON
73postcss.list = list
74
75postcss.comment = defaults => new Comment(defaults)
76postcss.atRule = defaults => new AtRule(defaults)
77postcss.decl = defaults => new Declaration(defaults)
78postcss.rule = defaults => new Rule(defaults)
79postcss.root = defaults => new Root(defaults)
80postcss.document = defaults => new Document(defaults)
81
82postcss.CssSyntaxError = CssSyntaxError
83postcss.Declaration = Declaration
84postcss.Container = Container
85postcss.Processor = Processor
86postcss.Document = Document
87postcss.Comment = Comment
88postcss.Warning = Warning
89postcss.AtRule = AtRule
90postcss.Result = Result
91postcss.Input = Input
92postcss.Rule = Rule
93postcss.Root = Root
94postcss.Node = Node
95
96LazyResult.registerPostcss(postcss)
97
98module.exports = postcss
99postcss.default = postcss