index.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. 'use strict';
  2. /**
  3. * @author Ben Briggs
  4. * @license MIT
  5. * @module cssnano:preset:default
  6. * @overview
  7. *
  8. * This default preset for cssnano only includes transforms that make no
  9. * assumptions about your CSS other than what is passed in. In previous
  10. * iterations of cssnano, assumptions were made about your CSS which caused
  11. * output to look different in certain use cases, but not others. These
  12. * transforms have been moved from the defaults to other presets, to make
  13. * this preset require only minimal configuration.
  14. */
  15. const cssDeclarationSorter = require('css-declaration-sorter');
  16. const postcssDiscardComments = require('postcss-discard-comments');
  17. const postcssReduceInitial = require('postcss-reduce-initial');
  18. const postcssMinifyGradients = require('postcss-minify-gradients');
  19. const postcssSvgo = require('postcss-svgo');
  20. const postcssReduceTransforms = require('postcss-reduce-transforms');
  21. const postcssConvertValues = require('postcss-convert-values');
  22. const postcssCalc = require('postcss-calc');
  23. const postcssColormin = require('postcss-colormin');
  24. const postcssOrderedValues = require('postcss-ordered-values');
  25. const postcssMinifySelectors = require('postcss-minify-selectors');
  26. const postcssMinifyParams = require('postcss-minify-params');
  27. const postcssNormalizeCharset = require('postcss-normalize-charset');
  28. const postcssMinifyFontValues = require('postcss-minify-font-values');
  29. const postcssNormalizeUrl = require('postcss-normalize-url');
  30. const postcssMergeLonghand = require('postcss-merge-longhand');
  31. const postcssDiscardDuplicates = require('postcss-discard-duplicates');
  32. const postcssDiscardOverridden = require('postcss-discard-overridden');
  33. const postcssNormalizeRepeatStyle = require('postcss-normalize-repeat-style');
  34. const postcssMergeRules = require('postcss-merge-rules');
  35. const postcssDiscardEmpty = require('postcss-discard-empty');
  36. const postcssUniqueSelectors = require('postcss-unique-selectors');
  37. const postcssNormalizeString = require('postcss-normalize-string');
  38. const postcssNormalizePositions = require('postcss-normalize-positions');
  39. const postcssNormalizeWhitespace = require('postcss-normalize-whitespace');
  40. const postcssNormalizeUnicode = require('postcss-normalize-unicode');
  41. const postcssNormalizeDisplayValues = require('postcss-normalize-display-values');
  42. const postcssNormalizeTimingFunctions = require('postcss-normalize-timing-functions');
  43. const { rawCache } = require('cssnano-utils');
  44. /** @typedef {{
  45. discardComments?: false | import('postcss-discard-comments').Options & { exclude?: true},
  46. reduceInitial?: false | { exclude?: true}
  47. minifyGradients?: false | { exclude?: true}
  48. svgo?: false | import('postcss-svgo').Options & { exclude?: true},
  49. reduceTransforms?: false | { exclude?: true}
  50. convertValues?: false | import('postcss-convert-values').Options & { exclude?: true},
  51. calc?: false | import('postcss-calc').PostCssCalcOptions & { exclude?: true},
  52. colormin?: false | Record<string, any> & { exclude?: true},
  53. orderedValues?: false | { exclude?: true},
  54. minifySelectors?: false | { exclude?: true},
  55. minifyParams?: false | { exclude?: true},
  56. normalizeCharset?: false | import('postcss-normalize-charset').Options & { exclude?: true},
  57. minifyFontValues?: false | import('postcss-minify-font-values').Options & { exclude?: true},
  58. normalizeUrl?: false | import('postcss-normalize-url').Options & { exclude?: true},
  59. mergeLonghand?: false | { exclude?: true},
  60. discardDuplicates?: false | { exclude?: true},
  61. discardOverridden?: false | { exclude?: true},
  62. normalizeRepeatStyle?: false | { exclude?: true},
  63. mergeRules?: false | { exclude?: true},
  64. discardEmpty?: false | { exclude?: true},
  65. uniqueSelectors?: false | { exclude?: true},
  66. normalizeString?: false | import('postcss-normalize-string').Options & { exclude?: true},
  67. normalizePositions?: false | { exclude?: true},
  68. normalizeWhitespace?: false| { exclude?: true},
  69. normalizeUnicode?: false | { exclude?: true},
  70. normalizeDisplayValues?: false | { exclude?: true},
  71. normalizeTimingFunctions?: false | { exclude?: true},
  72. rawCache?: false | { exclude?: true}}} Options */
  73. const defaultOpts = {
  74. convertValues: {
  75. length: false,
  76. },
  77. normalizeCharset: {
  78. add: false,
  79. },
  80. cssDeclarationSorter: {
  81. keepOverrides: true,
  82. },
  83. };
  84. /**
  85. * @param {Options} opts
  86. * @return {{plugins: [import('postcss').PluginCreator<any>, boolean | Record<string, any> | undefined][]}}
  87. */
  88. function defaultPreset(opts = {}) {
  89. const options = Object.assign({}, defaultOpts, opts);
  90. /** @type {[import('postcss').PluginCreator<any>, boolean | Record<string, any> | undefined][]} **/
  91. const plugins = [
  92. [postcssDiscardComments, options.discardComments],
  93. [postcssMinifyGradients, options.minifyGradients],
  94. [postcssReduceInitial, options.reduceInitial],
  95. [postcssSvgo, options.svgo],
  96. [postcssNormalizeDisplayValues, options.normalizeDisplayValues],
  97. [postcssReduceTransforms, options.reduceTransforms],
  98. [postcssColormin, options.colormin],
  99. [postcssNormalizeTimingFunctions, options.normalizeTimingFunctions],
  100. [postcssCalc, options.calc],
  101. [postcssConvertValues, options.convertValues],
  102. [postcssOrderedValues, options.orderedValues],
  103. [postcssMinifySelectors, options.minifySelectors],
  104. [postcssMinifyParams, options.minifyParams],
  105. [postcssNormalizeCharset, options.normalizeCharset],
  106. [postcssDiscardOverridden, options.discardOverridden],
  107. [postcssNormalizeString, options.normalizeString],
  108. [postcssNormalizeUnicode, options.normalizeUnicode],
  109. [postcssMinifyFontValues, options.minifyFontValues],
  110. [postcssNormalizeUrl, options.normalizeUrl],
  111. [postcssNormalizeRepeatStyle, options.normalizeRepeatStyle],
  112. [postcssNormalizePositions, options.normalizePositions],
  113. [postcssNormalizeWhitespace, options.normalizeWhitespace],
  114. [postcssMergeLonghand, options.mergeLonghand],
  115. [postcssDiscardDuplicates, options.discardDuplicates],
  116. [postcssMergeRules, options.mergeRules],
  117. [postcssDiscardEmpty, options.discardEmpty],
  118. [postcssUniqueSelectors, options.uniqueSelectors],
  119. [cssDeclarationSorter, options.cssDeclarationSorter],
  120. [rawCache, options.rawCache],
  121. ];
  122. return { plugins };
  123. }
  124. module.exports = defaultPreset;