@zohodesk/react-cli 1.0.1-exp.1 → 1.0.2-exp.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +13 -0
  2. package/docs/SelectorWeight.md +3 -0
  3. package/docs/VariableConversion.md +6 -1
  4. package/lib/configs/webpack.dev.config.js +6 -0
  5. package/lib/configs/webpack.docs.config.js +4 -0
  6. package/lib/configs/webpack.impact.config.js +4 -0
  7. package/lib/configs/webpack.prod.config.js +6 -0
  8. package/lib/loaderUtils/getCSSLoaders.js +79 -50
  9. package/lib/loaderUtils/tests/windowsModification.test.js +10 -0
  10. package/lib/loaderUtils/windowsModification.js +6 -1
  11. package/lib/loaders/composeLoader.js +175 -0
  12. package/lib/pluginUtils/getDevPlugins.js +13 -2
  13. package/lib/pluginUtils/getProdPlugins.js +1 -1
  14. package/lib/pluginUtils/getUMDCSSPlugins.js +1 -1
  15. package/lib/pluginUtils/getUMDComponentPlugins.js +1 -1
  16. package/lib/plugins/{UglifyCSSPlugin.js → MinifyPlugin.js} +3 -3
  17. package/lib/plugins/SelectorPlugin.js +60 -72
  18. package/lib/plugins/VariableConversionCollector.js +38 -29
  19. package/lib/plugins/index.js +15 -7
  20. package/lib/plugins/utils/classHandling.js +2 -10
  21. package/lib/plugins/utils/fileHandling.js +70 -100
  22. package/lib/plugins/utils/tests/fileHandling.test.js +30 -0
  23. package/lib/postcss-plugins/EmptyPlugin.js +8 -0
  24. package/lib/postcss-plugins/ExcludePlugin.js +1 -1
  25. package/lib/postcss-plugins/SelectorReplace.js +80 -0
  26. package/lib/postcss-plugins/ValueReplacer.js +2 -13
  27. package/lib/postcss-plugins/__test__/selectorReplace.test.js +28 -0
  28. package/lib/postcss-plugins/variableModificationPlugin/ErrorHandler.js +0 -1
  29. package/lib/postcss-plugins/variableModificationPlugin/index.js +14 -32
  30. package/lib/postcss-plugins/variableModifier.js +1 -1
  31. package/lib/schemas/index.js +34 -3
  32. package/lib/servers/server.js +2 -2
  33. package/lib/utils/cssClassNameGenerate.js +35 -7
  34. package/package.json +3 -2
  35. package/lib/plugins/composeCommonPlugin.js +0 -30
  36. package/lib/plugins/cssoPlugin.js +0 -37
  37. package/lib/plugins/utils/checkPattern.js +0 -57
package/README.md CHANGED
@@ -44,6 +44,19 @@ Now to run app
44
44
 
45
45
  # Change Logs
46
46
 
47
+ # 1.0.2
48
+
49
+ **Feature Update**
50
+ - Selector replace plugin made as a custom postcss-plugin with update to code that was unpublished in package.
51
+
52
+ # 1.0.1
53
+
54
+ **Issue Fix**
55
+ - variable conversion for px and var(--) values in same declaration was not supported, now it is supported.
56
+ - package-lock.json removed from `.npmignore`
57
+
58
+ **Feature Update**
59
+ - exclude added to Selector Plugin
47
60
  # 1.0.0
48
61
  ## Major Release
49
62
  **Changes:**
@@ -4,3 +4,6 @@
4
4
  * all classes in all files will be added with the `defaultSelector` provided in package.json to increase selector weight
5
5
  * in case a specific chunk file is supposed to have a different selector, it can be mentioned in the `customFileSelectorWeight.json`. This will add the new selector to that particular chunk file.
6
6
  * `excludeStrings` is an array used to exclude selectors that should not be converted. Default selectors such as body, html are excluded through this way.
7
+
8
+ # v1.0.1 update:
9
+ * exclude support added, file paths to be added in `react-cli > app > exclude > selectorWeight` to be excluded from conversion.
@@ -4,8 +4,13 @@
4
4
 
5
5
  Conversion for Variables from Variables to px in Supportapp completed (`variableIgnore.js` && `pxParserPostcss.js` to be referred to), and px to custom variables through the new `variableModificationPlugin`. Error Log generation can also be converted on enabling
6
6
 
7
+
8
+ **Issue Fix**
9
+ # Issue fix done in `1.0.1`
10
+ - variable conversion for px and var(--) values in same declaration was not supported, now it is supported.
11
+
7
12
  **Features:**
8
- # Features below are added form `0.0.1-beta.173`
13
+ # Features below are added from `0.0.1-beta.173`
9
14
  1. variables are converted from px to custom variables ( options are consumed from `cssVariableReplacementOptions.json` present in source folder )
10
15
  2. To enable the error log generation `errorLog` is to be made `true` in `cssVariableReplacementOptions.json` ( it will take a little longer than usual build time )
11
16
  3. To enable the console display of errors that are generated, `errorInConsole` is to be made `true` in `cssVariableReplacementOptions.json`
@@ -25,6 +25,8 @@ const {
25
25
  outputFolder,
26
26
  plugins,
27
27
  exclude,
28
+ patterns,
29
+ patternsRootDir,
28
30
  mediaQueryHoverActiveString,
29
31
  cssVariableReplacementConfig,
30
32
  selectorWeightConfig,
@@ -102,6 +104,8 @@ module.exports = {
102
104
  use: (0, _loaderUtils.getCSSLoaders)({
103
105
  plugins,
104
106
  exclude,
107
+ patterns,
108
+ patternsRootDir,
105
109
  mediaQueryHoverActiveString,
106
110
  cssVariableReplacementConfig,
107
111
  selectorWeightConfig,
@@ -114,6 +118,8 @@ module.exports = {
114
118
  use: (0, _loaderUtils.getCSSLoaders)({
115
119
  plugins,
116
120
  exclude,
121
+ patterns,
122
+ patternsRootDir,
117
123
  mediaQueryHoverActiveString,
118
124
  cssVariableReplacementConfig,
119
125
  selectorWeightConfig,
@@ -22,6 +22,8 @@ const {
22
22
  cssUniqueness,
23
23
  plugins,
24
24
  exclude,
25
+ patterns,
26
+ patternsRootDir,
25
27
  mediaQueryHoverActiveString,
26
28
  cssVariableReplacementConfig,
27
29
  selectorWeightConfig,
@@ -77,6 +79,8 @@ module.exports = isSSTest => ({
77
79
  use: (0, _loaderUtils.getCSSLoaders)({
78
80
  plugins,
79
81
  exclude,
82
+ patterns,
83
+ patternsRootDir,
80
84
  mediaQueryHoverActiveString,
81
85
  cssVariableReplacementConfig,
82
86
  selectorWeightConfig,
@@ -21,6 +21,8 @@ const {
21
21
  cssUniqueness,
22
22
  plugins,
23
23
  exclude,
24
+ patterns,
25
+ patternsRootDir,
24
26
  mediaQueryHoverActiveString,
25
27
  cssVariableReplacementConfig,
26
28
  selectorWeightConfig,
@@ -77,6 +79,8 @@ module.exports = {
77
79
  use: (0, _loaderUtils.getCSSLoaders)({
78
80
  plugins,
79
81
  exclude,
82
+ patterns,
83
+ patternsRootDir,
80
84
  mediaQueryHoverActiveString,
81
85
  cssVariableReplacementConfig,
82
86
  selectorWeightConfig,
@@ -29,6 +29,8 @@ const {
29
29
  server,
30
30
  plugins,
31
31
  exclude,
32
+ patterns,
33
+ patternsRootDir,
32
34
  mediaQueryHoverActiveString,
33
35
  cssVariableReplacementConfig,
34
36
  selectorWeightConfig,
@@ -153,6 +155,8 @@ module.exports = {
153
155
  use: (0, _loaderUtils.getCSSLoaders)({
154
156
  plugins,
155
157
  exclude,
158
+ patterns,
159
+ patternsRootDir,
156
160
  cssVariableReplacementConfig,
157
161
  selectorWeightConfig,
158
162
  mediaQueryHoverActiveString,
@@ -165,6 +169,8 @@ module.exports = {
165
169
  use: (0, _loaderUtils.getCSSLoaders)({
166
170
  plugins,
167
171
  exclude,
172
+ patterns,
173
+ patternsRootDir,
168
174
  mediaQueryHoverActiveString,
169
175
  cssVariableReplacementConfig,
170
176
  selectorWeightConfig,
@@ -11,7 +11,7 @@ var _cssClassNameGenerate = _interopRequireDefault(require("../utils/cssClassNam
11
11
 
12
12
  var _utils = require("../utils");
13
13
 
14
- var _windowsModification = require("./windowsModification");
14
+ var _fileHandling = require("../plugins/utils/fileHandling");
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
@@ -19,21 +19,11 @@ const fs = require('fs');
19
19
 
20
20
  const options = (0, _utils.getOptions)();
21
21
 
22
- function excludeEmptyCheckPlugin({
23
- enable,
24
- ignore,
25
- plugins
26
- }) {
27
- return enable ? ignore.length === 0 ? plugins : [require('../postcss-plugins/ExcludePlugin')({
28
- ignore,
29
- plugins
30
- })] : [];
31
- }
32
-
33
22
  const getCSSLoaders = optionsObj => {
34
23
  const {
35
24
  plugins,
36
- exclude,
25
+ patterns,
26
+ patternsRootDir,
37
27
  mediaQueryHoverActiveString,
38
28
  cssVariableReplacementConfig,
39
29
  classNameBlob,
@@ -41,11 +31,7 @@ const getCSSLoaders = optionsObj => {
41
31
  selectorReplace,
42
32
  cssHashSelectors,
43
33
  classNamePrefix
44
- } = optionsObj; // console.log('plugins:')
45
- // console.log(plugins)
46
- // console.log('exclude:')
47
- // console.log(exclude)
48
-
34
+ } = optionsObj;
49
35
  const {
50
36
  devCssFileBountry
51
37
  } = options.app;
@@ -55,10 +41,6 @@ const getCSSLoaders = optionsObj => {
55
41
  const {
56
42
  cssSelectorZipPath
57
43
  } = options.impactService;
58
- const rtlExcludeLocal = (0, _windowsModification.windowsModification)(exclude.rtl);
59
- const hoverActiveExcludeLocal = (0, _windowsModification.windowsModification)(exclude.hoverActive);
60
- const combinerMediaQueryExcludeLocal = (0, _windowsModification.windowsModification)(exclude.combinerMediaQuery);
61
- const cssVariableReplacementExcludeLocal = (0, _windowsModification.windowsModification)(exclude.cssVariableReplacement);
62
44
  const cssLoaderOptions = {
63
45
  // importLoaders: hasRTL||hoverActive ? 1 : 0,
64
46
  importLoaders: 1,
@@ -69,35 +51,19 @@ const getCSSLoaders = optionsObj => {
69
51
  if (classNameBlob) {
70
52
  cssLoaderOptions.modules.localIdentName = classNameBlob;
71
53
  } else {
72
- cssLoaderOptions.modules.getLocalIdent = (0, _cssClassNameGenerate.default)(cssUniqueness, cssHashSelectors, classNamePrefix);
54
+ cssLoaderOptions.modules.getLocalIdent = (0, _cssClassNameGenerate.default)(cssUniqueness, cssHashSelectors, classNamePrefix, patterns, patternsRootDir);
73
55
  } // console.log('selector weight config : ', selectorWeightConfig);
74
56
 
75
57
 
76
- const postcssPlugins = [valueReplacer && require('../postcss-plugins/ValueReplacer')(valueReplacer), selectorReplace && require('postcss-selector-replace')(selectorReplace), ...excludeEmptyCheckPlugin({
77
- enable: plugins.hasRTL,
78
- ignore: rtlExcludeLocal,
79
- plugins: [require('@zohodesk/postcss-rtl')({
80
- addPrefixToSelector: function addPrefixToSelector(selector, prefix) {
81
- if (prefix === '[dir]') {
82
- return selector;
83
- }
84
-
85
- return `${prefix} ${selector}`; // Make selectors like [dir=rtl] > .selector
58
+ let postcssPlugins = [plugins.valueReplacer && require('../postcss-plugins/ValueReplacer')(valueReplacer), plugins.selectorReplace && require('../postcss-plugins/SelectorReplace')(selectorReplace), plugins.hasRTL && require('@zohodesk/postcss-rtl')({
59
+ addPrefixToSelector: function addPrefixToSelector(selector, prefix) {
60
+ if (prefix === '[dir]') {
61
+ return selector;
86
62
  }
87
- })]
88
- }), ...excludeEmptyCheckPlugin({
89
- enable: plugins.combinerMediaQuery,
90
- ignore: combinerMediaQueryExcludeLocal,
91
- plugins: [require('postcss-combine-media-query')]
92
- }), ...excludeEmptyCheckPlugin({
93
- enable: plugins.hoverActive,
94
- ignore: hoverActiveExcludeLocal,
95
- plugins: [require('../postcss-plugins/hoverActivePlugin')(mediaQueryHoverActiveString)]
96
- }), ...excludeEmptyCheckPlugin({
97
- enable: plugins.cssVariableReplacement,
98
- ignore: cssVariableReplacementExcludeLocal,
99
- plugins: [fs.existsSync(cssVariableReplacementConfig) && require('../postcss-plugins/variableModificationPlugin/index').plugin(cssVariableReplacementConfig)]
100
- })].filter(Boolean);
63
+
64
+ return `${prefix} ${selector}`; // Make selectors like [dir=rtl] > .selector
65
+ }
66
+ }), plugins.combinerMediaQuery && require('postcss-combine-media-query')(), plugins.hoverActive && require('../postcss-plugins/hoverActivePlugin')(mediaQueryHoverActiveString), plugins.cssVariableReplacement && fs.existsSync(cssVariableReplacementConfig) && require('../postcss-plugins/variableModificationPlugin/index').plugin(cssVariableReplacementConfig)].filter(Boolean);
101
67
  return [cssSelectorZipPath && {
102
68
  loader: require.resolve('../loaders/selectorMappingLoader')
103
69
  }, {
@@ -117,11 +83,74 @@ const getCSSLoaders = optionsObj => {
117
83
  loader: 'postcss-loader',
118
84
  options: {
119
85
  ident: 'postcss',
120
- plugins: function () {
121
- return postcssPlugins;
86
+ plugins: function (params) {
87
+ // console.log('check here : ', params.resourcePath);
88
+ // getCSSLoaders for all postcss filtering
89
+
90
+ /*
91
+ input :
92
+ params.resourcePath : 'D:/MyWork/..../desk_client_app/supportapp/src/components/Avatar/Avatar.module.css,
93
+ patterns : [
94
+ // include all files
95
+ "valueReplacer": [
96
+ "*"
97
+ ],
98
+ // include all files
99
+ "selectorReplace": [
100
+ "*"
101
+ ],
102
+ // include src folder, include deskapp folder, exclude node modules
103
+ "hoverActive": [
104
+ "src",
105
+ "deskapp",
106
+ "!node_modules"
107
+ ],
108
+ // include src folder, include deskapp folder, exclude node modules
109
+ "combinerMediaQuery": [
110
+ "src",
111
+ "deskapp",
112
+ "!node_modules"
113
+ ],
114
+ // include src folder, include deskapp folder, exclude node modules
115
+ "hasRTL": [
116
+ "src",
117
+ "deskapp",
118
+ "!node_modules"
119
+ ],
120
+ // include src folder, include deskapp folder, exclude node modules
121
+ "cssVariableReplacement": [
122
+ "src",
123
+ "deskapp",
124
+ "!node_modules"
125
+ ],
126
+ // include src folder, include deskapp folder, exclude node modules
127
+ "selectorWeight": [
128
+ "src",
129
+ "deskapp",
130
+ "!node_modules"
131
+ ],
132
+ // include all files
133
+ "cssUniqueness": [
134
+ "*"
135
+ ]
136
+ ],
137
+
138
+ [ postcssPlugins that are implemented ]
139
+ rootDir : patternsRootDir : 'supportapp'
140
+ */
141
+ postcssPlugins = (0, _fileHandling.isFileNameMatchingPattern)({
142
+ filename: params.resourcePath,
143
+ filterObject: patterns,
144
+ plugins: postcssPlugins,
145
+ rootDir: patternsRootDir
146
+ }); // postcssPlugins that are allowed
147
+
148
+ return postcssPlugins.length > 0 ? postcssPlugins : [require('../postcss-plugins/EmptyPlugin')()];
122
149
  }
123
150
  }
124
- } : null].filter(Boolean);
151
+ } : null, {
152
+ loader: require.resolve('../loaders/composeLoader')
153
+ }].filter(Boolean);
125
154
  };
126
155
 
127
156
  var _default = getCSSLoaders;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ const {
4
+ windowsModificationFile
5
+ } = require('../windowsModification');
6
+
7
+ const tests = ['D:\\MyWork\\React Build\\desk_client_app\\jsapps\\supportapp\\src\\components\\Accessibility\\Accessibility.module.css', 'D:/MyWork/React Build/desk_client_app/jsapps/supportapp/src/components/Accessibility/Accessibility.module.css', 'desk_client_app\\jsapps\\supportapp\\src\\components\\Accessibility\\Accessibility.module.css', 'desk_client_app/jsapps/supportapp/src/components/Accessibility/Accessibility.module.css', 'src\\components\\Accessibility\\Accessibility.module.css', 'src/components/Accessibility/Accessibility.module.css', 'Accessibility.module.css', ''];
8
+ tests.forEach(test => {
9
+ console.log(windowsModificationFile(test));
10
+ });
@@ -4,8 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.windowsModification = windowsModification;
7
+ exports.windowsModificationFile = windowsModificationFile;
7
8
  const isWin = process.platform === 'win32';
8
9
 
9
10
  function windowsModification(array) {
10
11
  return isWin ? array && Array.isArray(array) && array.map(r => r.replace(/\//g, '\\')) : array;
11
- }
12
+ }
13
+
14
+ function windowsModificationFile(filename) {
15
+ return isWin ? filename.replace(/\//g, '\\') : filename;
16
+ } // module.exports = { windowsModification, windowsModificationFile };
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+
3
+ var _path = _interopRequireDefault(require("path"));
4
+
5
+ var _postcss = _interopRequireDefault(require("postcss"));
6
+
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+
9
+ const supportedProps = ['margin-top', 'margin-bottom', 'margin-left', 'margin-right', // 'margin',
10
+ 'padding-top', 'padding-bottom', 'padding-left', 'padding-right', // 'padding',
11
+ 'top', 'bottom', 'left', 'right', 'height', 'width', 'min-height', 'min-width', 'max-height', 'max-width'];
12
+ const renameProps = {
13
+ 'margin-top': {
14
+ pos: 'mt',
15
+ neg: 'mt_'
16
+ },
17
+ 'margin-bottom': {
18
+ pos: 'mb',
19
+ neg: 'mb_'
20
+ },
21
+ 'margin-left': {
22
+ pos: 'ml',
23
+ neg: 'ml_'
24
+ },
25
+ 'margin-right': {
26
+ pos: 'mr',
27
+ neg: 'mr_'
28
+ },
29
+ margin: {
30
+ pos: 'm',
31
+ neg: 'm_'
32
+ },
33
+ 'padding-top': {
34
+ pos: 'pt',
35
+ neg: 'pt_'
36
+ },
37
+ 'padding-bottom': {
38
+ pos: 'pb',
39
+ neg: 'pb_'
40
+ },
41
+ 'padding-left': {
42
+ pos: 'pl',
43
+ neg: 'pl_'
44
+ },
45
+ 'padding-right': {
46
+ pos: 'pr',
47
+ neg: 'pr_'
48
+ },
49
+ padding: {
50
+ pos: 'p',
51
+ neg: 'p_'
52
+ },
53
+ top: {
54
+ pos: 'post',
55
+ neg: 'post_'
56
+ },
57
+ bottom: {
58
+ pos: 'posb',
59
+ neg: 'posb_'
60
+ },
61
+ left: {
62
+ pos: 'posl',
63
+ neg: 'posl_'
64
+ },
65
+ right: {
66
+ pos: 'posr',
67
+ neg: 'posr_'
68
+ },
69
+ height: {
70
+ pos: 'h',
71
+ neg: 'h_'
72
+ },
73
+ width: {
74
+ pos: 'w',
75
+ neg: 'w_'
76
+ },
77
+ 'min-height': {
78
+ pos: 'minh',
79
+ neg: 'minh_'
80
+ },
81
+ 'min-width': {
82
+ pos: 'minw',
83
+ neg: 'minw_'
84
+ },
85
+ 'max-height': {
86
+ pos: 'maxh',
87
+ neg: 'maxh_'
88
+ },
89
+ 'max-width': {
90
+ pos: 'maxw',
91
+ neg: 'maxw_'
92
+ }
93
+ };
94
+
95
+ function objToClassName(prop, data) {
96
+ return renameProps[prop] ? data < 0 ? renameProps[prop].neg ? `${renameProps[prop].neg}${data * -1}` : `undef${data * -1}` : renameProps[prop].pos ? `${renameProps[prop].pos}${data}` : `undef${data}` : `undef${data}`;
97
+ }
98
+
99
+ const commonFilePath = {
100
+ 'margin-left': 'src/common/css/margin.css',
101
+ 'margin-right': 'src/common/css/margin.css',
102
+ 'margin-top': 'src/common/css/margin.css',
103
+ 'margin-bottom': 'src/common/css/margin.css',
104
+ 'padding-left': 'src/common/css/padding.css',
105
+ 'padding-right': 'src/common/css/padding.css',
106
+ 'padding-top': 'src/common/css/padding.css',
107
+ 'padding-bottom': 'src/common/css/padding.css',
108
+ top: 'src/common/css/position.css',
109
+ bottom: 'src/common/css/position.css',
110
+ left: 'src/common/css/position.css',
111
+ right: 'src/common/css/position.css',
112
+ height: 'src/common/css/height.css',
113
+ width: 'src/common/css/width.css',
114
+ 'min-height': 'src/common/css/height.css',
115
+ 'min-width': 'src/common/css/width.css',
116
+ 'max-height': 'src/common/css/height.css',
117
+ 'max-width': 'src/common/css/width.css'
118
+ };
119
+ const preNames = {
120
+ height: 'zd-height-',
121
+ 'max-height': 'zd-height-',
122
+ 'min-height': 'zd-height-',
123
+ width: 'zd-width-',
124
+ 'max-width': 'zd-width-',
125
+ 'min-width': 'zd-width-',
126
+ top: 'zd-position-',
127
+ bottom: 'zd-position-',
128
+ left: 'zd-position-',
129
+ right: 'zd-position-',
130
+ 'padding-top': 'zd-padding-',
131
+ 'padding-bottom': 'zd-padding-',
132
+ 'padding-left': 'zd-padding-',
133
+ 'padding-right': 'zd-padding-',
134
+ 'margin-top': 'zd-margin-',
135
+ 'margin-bottom': 'zd-margin-',
136
+ 'margin-left': 'zd-margin-',
137
+ 'margin-right': 'zd-margin-'
138
+ };
139
+
140
+ function allowParent(rule) {
141
+ return rule.parent.type === 'root' || rule.parent.type === 'atrule' && rule.parent.name === 'media';
142
+ }
143
+
144
+ module.exports = function (source) {
145
+ const {
146
+ rootContext,
147
+ resourcePath,
148
+ query
149
+ } = this;
150
+
151
+ let root = _postcss.default.parse(source);
152
+
153
+ root.walkRules(rule => {
154
+ rule.walkDecls(decl => {
155
+ if (!allowParent(rule)) {
156
+ return;
157
+ }
158
+
159
+ if (supportedProps.includes(decl.prop) && /px$/gi.test(decl.value) && !/^--/gi.test(decl.prop) && commonFilePath[decl.prop] && !decl.value.includes('calc') && !/[,\s+]+|(\w+)\.|:|(\d+)%/gi.test(rule.selector)) {
160
+ let composeString = `from "${_path.default.relative(_path.default.parse(resourcePath).dir, // resourcePath
161
+ commonFilePath[decl.prop]).replace(/\\/gi, '/')}"`; // n++ < 10 && console.log(composeString);
162
+
163
+ if (!composeString.includes('src')) {
164
+ const cls = objToClassName(decl.prop, parseInt(decl.value));
165
+ composeString = `${cls} ${composeString}`;
166
+ decl.value = composeString;
167
+ decl.prop = 'composes'; // n < 10 && console.log(rule.selector, decl.prop, decl.value);
168
+ }
169
+ }
170
+ });
171
+ });
172
+ const output = root.toString(); // console.log(output);
173
+
174
+ return output;
175
+ };
@@ -48,6 +48,8 @@ const getDevPlugins = (options, publicPath) => {
48
48
  hasShadowDOM,
49
49
  cssVariableReplacementConfig,
50
50
  plugins: pluginObject,
51
+ patterns,
52
+ patternsRootDir,
51
53
  exclude,
52
54
  selectorWeightConfig,
53
55
  server: {
@@ -194,17 +196,26 @@ const getDevPlugins = (options, publicPath) => {
194
196
 
195
197
  if (pluginObject.cssVariableReplacement) {
196
198
  pluginsArr.push(new _VariableConversionCollector.default({
197
- cssVariableReplacementConfig
199
+ cssVariableReplacementConfig,
200
+ patterns,
201
+ patternsRootDir
198
202
  }));
199
203
  }
200
204
 
201
205
  if (pluginObject.selectorWeight) {
202
206
  pluginsArr.push(new _SelectorPlugin.default({
203
207
  selectorWeightConfig,
204
- exclude: exclude.selectorWeight
208
+ exclude: exclude.selectorWeight,
209
+ patterns,
210
+ patternsRootDir
205
211
  }));
206
212
  }
207
213
 
214
+ if (pluginObject.minifier) {
215
+ // console.log('minifier active');
216
+ pluginsArr.push(new _plugins.MinifierPlugin());
217
+ }
218
+
208
219
  return pluginsArr.filter(Boolean);
209
220
  };
210
221
 
@@ -102,7 +102,7 @@ const getProdPlugins = (options, publicPath = '') => {
102
102
  // ignoreOrder: true,
103
103
  filename: cssLTRFileNameTempalte,
104
104
  chunkFilename: cssLTRFileNameTempalte
105
- }), new _plugins.ResourceHintsPlugin(), new _plugins.UglifyCSSPlugin()];
105
+ }), new _plugins.ResourceHintsPlugin(), new _plugins.MinifyPlugin()];
106
106
 
107
107
  if (enableRTLSplit) {
108
108
  pluginsArr.push(new _RtlCssPlugin.RtlCssPlugin({
@@ -27,7 +27,7 @@ let getUMDCSSPlugins = () => {
27
27
  }), new _miniCssExtractPlugin.default({
28
28
  filename: 'css/[name].css',
29
29
  chunkFilename: 'css/[id].css'
30
- }), new _plugins.UglifyCSSPlugin()];
30
+ }), new _plugins.MinifyPlugin()];
31
31
  return plugins;
32
32
  };
33
33
 
@@ -27,7 +27,7 @@ let getUMDComponentPlugins = isDocs => {
27
27
  }), new _miniCssExtractPlugin.default({
28
28
  filename: 'css/[name].css',
29
29
  chunkFilename: 'css/[name].css'
30
- }), new _plugins.UglifyCSSPlugin()];
30
+ }), new _plugins.MinifyPlugin()];
31
31
  return plugins;
32
32
  };
33
33
 
@@ -11,9 +11,9 @@ var _uglifycss = _interopRequireDefault(require("uglifycss"));
11
11
 
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
 
14
- class UglifyCSSPlugin {
14
+ class MinifierPlugin {
15
15
  apply(compiler) {
16
- compiler.hooks.emit.tap('UglifyCSSPlugin', compilation => {
16
+ compiler.hooks.emit.tap('MinifierPlugin', compilation => {
17
17
  Object.keys(compilation.assets).forEach(filename => {
18
18
  if (/\.css$/.test(filename)) {
19
19
  try {
@@ -36,4 +36,4 @@ class UglifyCSSPlugin {
36
36
 
37
37
  }
38
38
 
39
- exports.default = UglifyCSSPlugin;
39
+ exports.default = MinifierPlugin;