blob: b03bb1803eb6998d910b12ca46a1d8e183c2f43d [file] [log] [blame]
Tim van der Lippe16b82282021-11-08 13:50:26 +00001'use strict'
Mathias Bynens79e2cf02020-05-29 16:46:17 +02002
Tim van der Lippe16b82282021-11-08 13:50:26 +00003let 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')
Mathias Bynens79e2cf02020-05-29 16:46:17 +020021
Tim van der Lippe16b82282021-11-08 13:50:26 +000022function postcss(...plugins) {
Tim van der Lippe2b4a9df2021-11-08 12:58:12 +000023 if (plugins.length === 1 && Array.isArray(plugins[0])) {
Tim van der Lippe16b82282021-11-08 13:50:26 +000024 plugins = plugins[0]
Tim van der Lippe2b4a9df2021-11-08 12:58:12 +000025 }
Tim van der Lippe16b82282021-11-08 13:50:26 +000026 return new Processor(plugins)
Mathias Bynens79e2cf02020-05-29 16:46:17 +020027}
Mathias Bynens79e2cf02020-05-29 16:46:17 +020028
29postcss.plugin = function plugin(name, initializer) {
Tim van der Lippe16b82282021-11-08 13:50:26 +000030 if (console && console.warn) {
31 console.warn(
32 name +
33 ': postcss.plugin was deprecated. Migration guide:\n' +
34 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
35 )
36 if (process.env.LANG && process.env.LANG.startsWith('cn')) {
37 // istanbul ignore next
38 console.warn(
39 name +
40 ': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
41 'https://www.w3ctech.com/topic/2226'
42 )
43 }
44 }
45 function creator(...args) {
46 let transformer = initializer(...args)
47 transformer.postcssPlugin = name
48 transformer.postcssVersion = new Processor().version
49 return transformer
Mathias Bynens79e2cf02020-05-29 16:46:17 +020050 }
51
Tim van der Lippe16b82282021-11-08 13:50:26 +000052 let cache
Mathias Bynens79e2cf02020-05-29 16:46:17 +020053 Object.defineProperty(creator, 'postcss', {
Tim van der Lippe16b82282021-11-08 13:50:26 +000054 get() {
55 if (!cache) cache = creator()
56 return cache
Mathias Bynens79e2cf02020-05-29 16:46:17 +020057 }
Tim van der Lippe16b82282021-11-08 13:50:26 +000058 })
Mathias Bynens79e2cf02020-05-29 16:46:17 +020059
60 creator.process = function (css, processOpts, pluginOpts) {
Tim van der Lippe16b82282021-11-08 13:50:26 +000061 return postcss([creator(pluginOpts)]).process(css, processOpts)
62 }
Mathias Bynens79e2cf02020-05-29 16:46:17 +020063
Tim van der Lippe16b82282021-11-08 13:50:26 +000064 return creator
65}
Mathias Bynens79e2cf02020-05-29 16:46:17 +020066
Tim van der Lippe16b82282021-11-08 13:50:26 +000067postcss.stringify = stringify
68postcss.parse = parse
69postcss.fromJSON = fromJSON
70postcss.list = list
Mathias Bynens79e2cf02020-05-29 16:46:17 +020071
Tim van der Lippe16b82282021-11-08 13:50:26 +000072postcss.comment = defaults => new Comment(defaults)
73postcss.atRule = defaults => new AtRule(defaults)
74postcss.decl = defaults => new Declaration(defaults)
75postcss.rule = defaults => new Rule(defaults)
76postcss.root = defaults => new Root(defaults)
77postcss.document = defaults => new Document(defaults)
Mathias Bynens79e2cf02020-05-29 16:46:17 +020078
Tim van der Lippe16b82282021-11-08 13:50:26 +000079postcss.CssSyntaxError = CssSyntaxError
80postcss.Declaration = Declaration
81postcss.Container = Container
82postcss.Document = Document
83postcss.Comment = Comment
84postcss.Warning = Warning
85postcss.AtRule = AtRule
86postcss.Result = Result
87postcss.Input = Input
88postcss.Rule = Rule
89postcss.Root = Root
90postcss.Node = Node
Mathias Bynens79e2cf02020-05-29 16:46:17 +020091
Tim van der Lippe16b82282021-11-08 13:50:26 +000092LazyResult.registerPostcss(postcss)
Mathias Bynens79e2cf02020-05-29 16:46:17 +020093
Tim van der Lippe16b82282021-11-08 13:50:26 +000094module.exports = postcss
95postcss.default = postcss