postcss.js 2.6 KB

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