@zohodesk/react-cli 1.1.14-kubernetes → 1.1.15

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 (101) hide show
  1. package/.vscode/settings.json +25 -0
  2. package/README.md +294 -16
  3. package/bin/cli.js +30 -55
  4. package/docs/ComposeMinification.md +13 -0
  5. package/docs/CustomChunks.md +12 -9
  6. package/docs/MarkdownParser.md +18 -0
  7. package/docs/ReactLive.md +14 -0
  8. package/docs/SelectorWeight.md +3 -0
  9. package/docs/ValueReplacer.md +27 -0
  10. package/docs/VariableConversion.md +6 -1
  11. package/docs/patternFiltering.md +57 -0
  12. package/lib/common/buildEs.js +12 -0
  13. package/lib/common/runPreProcess.js +71 -0
  14. package/lib/common/splitChunks.js +65 -45
  15. package/lib/common/testPattern.js +9 -11
  16. package/lib/common/valueReplacer.js +1 -3
  17. package/lib/configs/resolvers.js +16 -5
  18. package/lib/configs/webpack.css.umd.config.js +3 -2
  19. package/lib/configs/webpack.dev.config.js +15 -5
  20. package/lib/configs/webpack.docs.config.js +17 -5
  21. package/lib/configs/webpack.impact.config.js +11 -4
  22. package/lib/configs/webpack.prod.config.js +15 -5
  23. package/lib/constants.js +3 -3
  24. package/lib/deprecationLogger.js +40 -0
  25. package/lib/loaderUtils/getCSSLoaders.js +98 -49
  26. package/lib/loaderUtils/tests/windowsModification.test.js +10 -0
  27. package/lib/loaderUtils/windowsModification.js +6 -1
  28. package/lib/loaders/__test__/markdownLoader.spec.js +145 -0
  29. package/lib/loaders/composeLoader.js +298 -0
  30. package/lib/loaders/docsLoader.js +18 -7
  31. package/lib/loaders/markdownLoader.js +71 -0
  32. package/lib/loaders/reactLiveConvertor.js +105 -0
  33. package/lib/loaders/selectorMappingLoader.js +9 -9
  34. package/lib/logger.js +27 -0
  35. package/lib/pluginUtils/getDevPlugins.js +25 -6
  36. package/lib/pluginUtils/getProdPlugins.js +32 -5
  37. package/lib/pluginUtils/getUMDCSSPlugins.js +1 -1
  38. package/lib/pluginUtils/getUMDComponentPlugins.js +1 -1
  39. package/lib/plugins/CustomAttributePlugin.js +82 -0
  40. package/lib/plugins/CustomAttributePlugin.md +35 -0
  41. package/lib/plugins/EFCPlugin.js +9 -9
  42. package/lib/plugins/EFCTemplatePlugin.js +10 -12
  43. package/lib/plugins/EfcResourceCleanupPlugin.js +43 -0
  44. package/lib/plugins/I18NInjectIntoIndexPlugin.js +8 -9
  45. package/lib/plugins/I18nSplitPlugin/I18nDebugPlugin.js +2 -3
  46. package/lib/plugins/I18nSplitPlugin/I18nKeysIdentifer.js +2 -7
  47. package/lib/plugins/I18nSplitPlugin/index.js +1 -1
  48. package/lib/plugins/I18nSplitPlugin/utils/propertiesUtils.js +8 -8
  49. package/lib/plugins/{UglifyCSSPlugin.js → MinifyPlugin.js} +3 -3
  50. package/lib/plugins/ReportGeneratePlugin.js +8 -6
  51. package/lib/plugins/ResourceHintsPlugin.js +13 -3
  52. package/lib/plugins/SelectorPlugin.js +77 -37
  53. package/lib/plugins/StatsPlugin.js +82 -0
  54. package/lib/plugins/UnusedFilesFindPlugin.js +7 -5
  55. package/lib/plugins/VariableConversionCollector.js +40 -101
  56. package/lib/plugins/index.js +7 -7
  57. package/lib/plugins/utils/classHandling.js +35 -0
  58. package/lib/plugins/utils/fileHandling.js +92 -0
  59. package/lib/plugins/utils/tests/fileHandling.test.js +30 -0
  60. package/lib/plugins/variableConvertorUtils.js +133 -0
  61. package/lib/postcss-plugins/EmptyPlugin.js +8 -0
  62. package/lib/postcss-plugins/ExcludePlugin.js +1 -1
  63. package/lib/postcss-plugins/IncludePlugin.js +23 -0
  64. package/lib/postcss-plugins/RTLSplitPlugin.js +4 -10
  65. package/lib/postcss-plugins/SelectorReplace.js +80 -0
  66. package/lib/postcss-plugins/ValueReplacer.js +8 -29
  67. package/lib/postcss-plugins/__test__/selectorReplace.test.js +28 -0
  68. package/lib/postcss-plugins/__test__/valueReplacer.spec.js +43 -0
  69. package/lib/postcss-plugins/hoverActivePlugin.js +0 -6
  70. package/lib/postcss-plugins/variableModificationPlugin/ErrorHandler.js +0 -1
  71. package/lib/postcss-plugins/variableModificationPlugin/index.js +94 -38
  72. package/lib/schemas/index.js +95 -18
  73. package/lib/servers/devBuild.js +13 -11
  74. package/lib/servers/getCliPath.js +3 -5
  75. package/lib/servers/httpsOptions.js +12 -13
  76. package/lib/servers/nowatchserver.js +62 -55
  77. package/lib/servers/requireLocalOrGlobal.js +61 -0
  78. package/lib/servers/server.js +53 -52
  79. package/lib/utils/cssClassNameGenerate.js +70 -13
  80. package/lib/utils/deprecationSupport.js +134 -0
  81. package/lib/utils/getOptions.js +35 -28
  82. package/lib/utils/getServerURL.js +1 -9
  83. package/lib/utils/index.js +14 -12
  84. package/lib/utils/initPreCommitHook.js +5 -5
  85. package/lib/utils/log.js +11 -0
  86. package/lib/utils/object-manipulation.js +88 -0
  87. package/lib/utils/pullOrigin.js +3 -3
  88. package/lib/utils/reinstallDependencies.js +3 -3
  89. package/lib/utils/selectorReplacer.js +47 -0
  90. package/lib/utils/switchBranch.js +4 -2
  91. package/lib/utils/variableConverter.js +104 -0
  92. package/npm-shrinkwrap.json +33485 -0
  93. package/package.json +5 -3
  94. package/templates/docs/all.html +1 -0
  95. package/templates/docs/component.html +1 -0
  96. package/templates/docs/components.html +1 -0
  97. package/templates/docs/css/markdown.css +202 -0
  98. package/templates/docs/css/style.css +136 -169
  99. package/templates/docs/index.html +796 -632
  100. package/lib/plugins/composeCommonPlugin.js +0 -30
  101. package/lib/postcss-plugins/variableModifier.js +0 -244
@@ -12,14 +12,21 @@ const {
12
12
  const pluginName = 'prefetch-preload-chunk-plugin';
13
13
 
14
14
  class ResourceHintsPlugin {
15
+ constructor(options) {
16
+ this.options = options;
17
+ }
18
+
15
19
  apply(compiler) {
16
20
  compiler.hooks.thisCompilation.tap(pluginName, ({
17
21
  mainTemplate
18
22
  }) => {
19
23
  mainTemplate.hooks.requireExtensions.tap(pluginName, (source, chunk, hash) => {
24
+ const {
25
+ allowPrefetchingMultipleChunks
26
+ } = this.options;
20
27
  const idNameMap = chunk.getChunkMaps().name;
21
28
  const nameIdMap = {};
22
- let needsMap = false;
29
+ let needsMap = allowPrefetchingMultipleChunks;
23
30
 
24
31
  for (const key in idNameMap) {
25
32
  if (Object.prototype.hasOwnProperty.call(idNameMap, key)) {
@@ -32,7 +39,10 @@ class ResourceHintsPlugin {
32
39
  }
33
40
  }
34
41
 
35
- return Template.asString([source, '', `${mainTemplate.requireFn}.getChunkId = function getChunkId(chunkId) {`, Template.indent((needsMap ? [`chunkId = ${JSON.stringify(nameIdMap)}[chunkId]||chunkId;`] : []).concat(['return chunkId;'])), '}', `// Prefetch a chunk (${pluginName})`, `${mainTemplate.requireFn}.pfc = function prefetchChunk(chunkId) {`, Template.indent([`chunkId = ${mainTemplate.requireFn}.getChunkId(chunkId)`, `${mainTemplate.requireFn}.e(chunkId);`]), '};',
42
+ return Template.asString([source, Template.indent([`const nameToChunkIdMap = ${JSON.stringify(needsMap ? nameIdMap : {})};`, 'const chunkNames = Object.keys(nameToChunkIdMap);']), `${mainTemplate.requireFn}.getChunkIds = function getChunkIds(chunkId) {`, Template.indent([allowPrefetchingMultipleChunks ? `const isRegExAsChunkId = chunkId instanceof RegExp;
43
+ return isRegExAsChunkId ? chunkNames.filter(chunkName => chunkId.test(chunkName)).map(chunkName => nameToChunkIdMap[chunkName]) : [nameToChunkIdMap[chunkId] || chunkId];` : needsMap ? 'return [nameToChunkIdMap[chunkId] || chunkId];' : 'return [chunkId];']), '}', `// Prefetch a chunk (${pluginName})`, `${mainTemplate.requireFn}.pfc = function prefetchChunk(chunkId) {`, Template.indent([`let chunkIds = ${mainTemplate.requireFn}.getChunkIds(chunkId)`, `chunkIds.forEach(idOfAChunk => {
44
+ ${mainTemplate.requireFn}.e(idOfAChunk);
45
+ })`]), '};',
36
46
  /*
37
47
  (needsMap
38
48
  ? [`chunkId = ${JSON.stringify(nameIdMap)}[chunkId]||chunkId;`]
@@ -53,7 +63,7 @@ class ResourceHintsPlugin {
53
63
  ),
54
64
  '}',
55
65
  */
56
- `// Preload a chunk (${pluginName})`, `${mainTemplate.requireFn}.plc = function preloadChunk(chunkId) {`, Template.indent([`chunkId = ${mainTemplate.requireFn}.getChunkId(chunkId)`, 'if(installedChunks[chunkId] === undefined) {', Template.indent(['installedChunks[chunkId] = null;', mainTemplate.hooks.linkPreload.call('', chunk, hash), 'document.head.appendChild(link);', `${mainTemplate.requireFn}.e(chunkId);` // 'var head = document.getElementsByTagName(\'head\')[0];',
66
+ `// Preload a chunk (${pluginName})`, `${mainTemplate.requireFn}.plc = function preloadChunk(chunkId) {`, Template.indent([`chunkId = ${mainTemplate.requireFn}.getChunkIds(chunkId)[0]`, 'if(installedChunks[chunkId] === undefined) {', Template.indent(['installedChunks[chunkId] = null;', mainTemplate.hooks.linkPreload.call('', chunk, hash), 'document.head.appendChild(link);', `${mainTemplate.requireFn}.e(chunkId);` // 'var head = document.getElementsByTagName(\'head\')[0];',
57
67
  // mainTemplate.hooks.jsonpScript.call('', chunk, hash),
58
68
  // 'head.appendChild(script);'
59
69
  ]), '}']), '};']);
@@ -9,51 +9,53 @@ var _postcss = _interopRequireDefault(require("postcss"));
9
9
 
10
10
  var _fs = _interopRequireDefault(require("fs"));
11
11
 
12
- var _webpackSources = require("webpack-sources");
12
+ var _classHandling = require("./utils/classHandling");
13
13
 
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ var _fileHandling = require("./utils/fileHandling");
15
15
 
16
- const path = require('path');
16
+ var _windowsModification = require("../loaderUtils/windowsModification");
17
17
 
18
- const isCss = filename => path.extname(filename) === '.css';
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
 
20
- function rootConvertor(rootOriginal, defaultSelector, data, chunkFilename, excludeStrings) {
20
+ function selectorWeightPrefixAdder(rootOriginal, selector, excludeStrings) {
21
21
  rootOriginal.walkRules((rule, index) => {
22
- const prevNode = rootOriginal.nodes[index - 1];
22
+ const prevNode = rootOriginal.nodes[index - 1] || null;
23
23
 
24
- if (index !== 0 && prevNode.type && prevNode.type === 'comment' && prevNode.text.toLowerCase() === 'updateselector:ignore') {
24
+ if ((0, _classHandling.hasPrevNodeIgnore)(index, prevNode, 'updateselector:ignore')) {
25
25
  return;
26
- }
26
+ } // console.log(rule.selector.split(','));
27
+
27
28
 
28
- if (rule.parent && rule.parent.type === 'atrule') {
29
- if (rule.parent.name !== 'media') {
29
+ const selectorArr = rule.selector.split(',');
30
+ selectorArr.forEach((singleSelectorStr, index) => {
31
+ if (excludeStrings.includes(singleSelectorStr.trim())) {
30
32
  return;
31
- }
32
- }
33
+ } // NOTE: below logic for attrbute related
33
34
 
34
- if (excludeStrings.includes(rule.selector)) {
35
- return;
36
- }
37
35
 
38
- let ruleArr = rule.selector.split(',');
39
- ruleArr.forEach((rule, index) => {
40
- if (rule.includes(']')) {
41
- if (rule.slice(rule.lastIndexOf(']') + 2).trim() === '') {
36
+ if (singleSelectorStr.includes(']')) {
37
+ // console.log(singleSelectorStr);
38
+ const prefixPart = singleSelectorStr.slice(0, singleSelectorStr.lastIndexOf(']') + 1).trim();
39
+ const selectorPart = singleSelectorStr.slice(singleSelectorStr.lastIndexOf(']') + 1).trim();
40
+
41
+ if (excludeStrings.includes(selectorPart.trim())) {
42
42
  return;
43
- } // console.log(
44
- // rule.slice(rule.lastIndexOf(']') + 2).trim(),
45
- // rule.slice(rule.lastIndexOf(']') + 2).trim() !== ''
46
- // );
43
+ }
47
44
 
45
+ if (/^:/gi.test(selectorPart)) {
46
+ return;
47
+ }
48
48
 
49
- ruleArr[index] = `${rule.slice(0, rule.lastIndexOf(']') + 1).trim()} ${defaultSelector}${rule.slice(rule.lastIndexOf(']') + 2).trim()}`; // console.log(ruleArr[index]);
49
+ if (selectorPart !== '') {
50
+ selectorArr[index] = `${prefixPart} ${selector}${selectorPart}`;
51
+ }
50
52
 
51
53
  return;
52
54
  }
53
55
 
54
- ruleArr[index] = data[chunkFilename] ? `${data[chunkFilename].defaultSelector}${rule}` : `${defaultSelector}${rule}`;
56
+ selectorArr[index] = `${selector}${singleSelectorStr}`;
55
57
  });
56
- rule.selector = ruleArr.join(',\n'); // console.log(`${rule.selector} converted`);
58
+ rule.selector = selectorArr.join(',\n');
57
59
  });
58
60
  return rootOriginal;
59
61
  }
@@ -62,6 +64,8 @@ class SelectorPlugin {
62
64
  constructor(options = {}) {
63
65
  this.optimize = options.optimize;
64
66
  this.selectorWeightConfig = options.selectorWeightConfig;
67
+ this.exclude = options.exclude;
68
+ this.patterns = options.patterns;
65
69
  }
66
70
 
67
71
  apply(compiler) {
@@ -74,19 +78,55 @@ class SelectorPlugin {
74
78
  const rawdata = _fs.default.readFileSync(customFileDetails);
75
79
 
76
80
  const data = JSON.parse(rawdata);
81
+ this.exclude = (0, _windowsModification.windowsModification)(this.exclude);
77
82
  compiler.hooks.compilation.tap('selector-weight-rewrite', compilation => {
78
- compilation.hooks.optimizeChunkAssets.tapAsync('selector-weight-rewrite', (chunks, callback) => {
79
- chunks.forEach(chunk => {
80
- chunk.files.filter(isCss).forEach(chunkFilename => {
81
- const asset = compilation.assets[chunkFilename];
82
- const sourceStr = asset.source();
83
-
84
- const rootOriginal = _postcss.default.parse(sourceStr);
85
-
86
- compilation.assets[chunkFilename] = new _webpackSources.RawSource(rootConvertor(rootOriginal, defaultSelector, data, chunkFilename, excludeStrings).toString());
87
- });
83
+ compilation.hooks.optimizeModules.tap('selector-weight-rewrite', modules => {
84
+ const mods = modules.filter(x => x.type.includes('css'));
85
+ mods.forEach(module => {
86
+ const rootOriginal = _postcss.default.parse(module.content);
87
+
88
+ const filename = module.issuer.resource;
89
+ /*
90
+ input :
91
+ filename : 'D:/MyWork/..../desk_client_app/supportapp/src/components/Avatar/Avatar.module.css,
92
+
93
+ patterns.cssVariableReplacement:
94
+ // include src folder, include deskapp folder, exclude node modules
95
+ "selectorWeight": [
96
+ "src",
97
+ "deskapp",
98
+ "!node_modules"
99
+ ]
100
+
101
+ output :
102
+ true or false
103
+ */
104
+
105
+ if (!(0, _fileHandling.isFileNameMatchingPluginPattern)({
106
+ filename,
107
+ filterArr: this.patterns.selectorWeight
108
+ })) {
109
+ return;
110
+ }
111
+ /*
112
+
113
+ filename : Deskapp.module.css ?
114
+ data :
115
+ {
116
+ "DeskApp.module.css": {"defaultSelector" : ".desk_app_ui "}
117
+ }
118
+ selectorWeightConfig :
119
+ defaultSelector : .zoho_desk_ui
120
+
121
+ case filename = 'DeskApp.module.css' ?
122
+ data[filename].defaultSelector = '.desk_app_ui'
123
+ case filename is different ?
124
+ defaultSelector = '.zoho_desk_ui'
125
+ */
126
+
127
+
128
+ module.content = selectorWeightPrefixAdder(rootOriginal, data[filename] ? data[filename].defaultSelector : defaultSelector, excludeStrings).toString();
88
129
  });
89
- callback();
90
130
  });
91
131
  });
92
132
  }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ const fs = require('fs');
4
+
5
+ const path = require('path');
6
+
7
+ const {
8
+ Readable
9
+ } = require('stream');
10
+
11
+ const {
12
+ removeKeysFromObject,
13
+ convertObjectToStringGen
14
+ } = require('../utils/object-manipulation');
15
+
16
+ const pluginName = 'stats-plugin';
17
+ const statsSchema = {
18
+ all: true
19
+ };
20
+
21
+ class StatsPlugin {
22
+ constructor({
23
+ statsOptions,
24
+ statsOutputExcludeKeys,
25
+ statsFileName
26
+ }) {
27
+ this.excludeKeysInStat = statsOutputExcludeKeys || [];
28
+ this.statsFileName = statsFileName || 'bundle-report-integrity.json';
29
+ this.statsOptions = Object.assign({}, statsSchema, statsOptions || {});
30
+ }
31
+
32
+ apply(compiler) {
33
+ compiler.hooks.done.tapAsync(pluginName, (stats, callback) => {
34
+ const statsJson = removeKeysFromObject(stats.toJson(this.statsOptions), this.excludeKeysInStat);
35
+ this.emitStats(statsJson).on('end', () => {
36
+ callback();
37
+ }).on('error', e => {
38
+ callback(e);
39
+ });
40
+ });
41
+ }
42
+
43
+ writeStatsFileInAStream(statsObj) {
44
+ const {
45
+ outputPath
46
+ } = statsObj;
47
+ const ouputFileName = path.join(outputPath, this.statsFileName);
48
+ return this.createReadStream(statsObj).pipe(fs.createWriteStream(ouputFileName));
49
+ }
50
+
51
+ createReadStream(statsObj) {
52
+ const excludeKeys = this.excludeKeysInStat;
53
+ return new Readable({
54
+ read() {
55
+ let isDone = false;
56
+ const objToStringGen = convertObjectToStringGen(statsObj, excludeKeys);
57
+
58
+ while (!isDone) {
59
+ const {
60
+ done,
61
+ value
62
+ } = objToStringGen.next();
63
+
64
+ if (done) {
65
+ isDone = true;
66
+ this.push(null);
67
+ } else {
68
+ this.push(value);
69
+ }
70
+ }
71
+ }
72
+
73
+ });
74
+ }
75
+
76
+ emitStats(statsJson) {
77
+ return this.writeStatsFileInAStream(statsJson);
78
+ }
79
+
80
+ }
81
+
82
+ module.exports = StatsPlugin;
@@ -11,6 +11,8 @@ var _fs = _interopRequireDefault(require("fs"));
11
11
 
12
12
  var _utils = require("../utils");
13
13
 
14
+ var _log = require("../utils/log");
15
+
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
17
 
16
18
  let excludeDocsJSON = '{}';
@@ -97,10 +99,10 @@ class UnusedFilesFindPlugin {
97
99
  Object.keys(unDocsCompObj).forEach(key => {
98
100
  if (unDocsCompObj[key].length > 0) {
99
101
  if (key === 'withoutDocs') {
100
- (0, _utils.log)('\x1b[36m%s\x1b[0m', '\nPlease write docs file for below componenst :- \n');
102
+ (0, _log.log)('\x1b[36m%s\x1b[0m', '\nPlease write docs file for below componenst :- \n');
101
103
  unDocsCompObj[key].forEach(value => {
102
104
  if (!excludeDocsArray.docs.exclude.includes(value)) {
103
- (0, _utils.log)('\x1b[33m%s\x1b[0m', `${value}`);
105
+ (0, _log.log)('\x1b[33m%s\x1b[0m', `${value}`);
104
106
  }
105
107
  });
106
108
  }
@@ -162,10 +164,10 @@ class UnusedFilesFindPlugin {
162
164
  });
163
165
 
164
166
  if (!unusedFiles.length) {
165
- (0, _utils.log)('There is no unused files');
167
+ (0, _log.log)('There is no unused files');
166
168
  } else {
167
169
  if (this.outputFileName) {
168
- (0, _utils.log)(`You can see unused files info from ${_path.default.join(outputPath, this.outputFileName)} path`);
170
+ (0, _log.log)(`You can see unused files info from ${_path.default.join(outputPath, this.outputFileName)} path`);
169
171
  (0, _utils.makeDir)(outputPath);
170
172
  (0, _utils.writeFile)(_path.default.join(outputPath, this.outputFileName), JSON.stringify(unusedFiles)).then(() => {
171
173
  if (this.sstest) {
@@ -179,7 +181,7 @@ class UnusedFilesFindPlugin {
179
181
  unusedFiles.forEach(file => {
180
182
  _fs.default.unlinkSync(file);
181
183
 
182
- (0, _utils.log)(`Deleted - ${file}`);
184
+ (0, _log.log)(`Deleted - ${file}`);
183
185
  });
184
186
  }
185
187
  });
@@ -9,12 +9,15 @@ var _postcss = _interopRequireDefault(require("postcss"));
9
9
 
10
10
  var _ErrorHandler = require("../postcss-plugins/variableModificationPlugin/ErrorHandler");
11
11
 
12
+ var _fileHandling = require("./utils/fileHandling");
13
+
14
+ var _variableConvertorUtils = require("./variableConvertorUtils");
15
+
12
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
17
 
14
18
  // import { RawSource } from 'webpack-sources';
15
19
  const fs = require('fs');
16
20
 
17
- const ignoreVals = ['--zd_size', '--zd_font_size', '--size', '--size_'];
18
21
  let variablesRead = {};
19
22
 
20
23
  const {
@@ -23,29 +26,7 @@ const {
23
26
  errHandler
24
27
  } = require('../postcss-plugins/variableModificationPlugin/index');
25
28
 
26
- const supportedProps = ['font-size', 'margin', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'padding', 'padding-top', 'padding-bottom', 'padding-left', 'padding-right', '^top', '^right', '^bottom', '^left', '^width', 'min-width', 'max-width', '^height', 'min-height', 'max-height', 'text-indent', 'clip', 'flex-basis', 'row-gap', 'gap', 'column-gap', 'flex']; // const avoidProps = [];
27
- // -- is issue IO --
28
-
29
- /*
30
- issues eg :
31
- issues = ['--zd_size', '--zd_font_size', '--size', '--size_'];
32
- input :
33
- --zd_size
34
- output :
35
- true
36
- comment :
37
- do not execute when --zd_size comes as prop
38
- */
39
-
40
- function isIgnoreValuePresent(ignoreVals, prop) {
41
- let present = false;
42
- ignoreVals.forEach(issue => {
43
- if (prop && prop.includes(issue)) {
44
- present = true;
45
- }
46
- });
47
- return present;
48
- } // -- to convert the hyphen values to values --
29
+ const supportedProps = ['font-size', 'margin', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'padding', 'padding-top', 'padding-bottom', 'padding-left', 'padding-right', '^top', '^right', '^bottom', '^left', '^width', 'min-width', 'max-width', '^height', 'min-height', 'max-height', 'text-indent', 'clip', 'flex-basis', 'row-gap', 'gap', 'column-gap', 'flex']; // -- to convert the hyphen values to values --
49
30
 
50
31
  /*
51
32
  input :
@@ -57,49 +38,6 @@ comment :
57
38
  to make the variable object using the output as key and decl.prop such as font-size as value
58
39
  */
59
40
 
60
-
61
- function extractVariableName(val) {
62
- return val.replace(/calc\((.+)\)/gi, '$1').replace(/var\((.+)\)/gi, '$1').replace('-1', '').replace('*', '').replace('\n', '').trim();
63
- }
64
-
65
- function rootConvertor(rootOriginal, variables, settingsObject) {
66
- rootOriginal.walkRules(rule => {
67
- rule.nodes.forEach((decl, index) => {
68
- const prevNode = rule.nodes[index - 1];
69
- const currentNode = rule.nodes[index];
70
-
71
- if (decl.prop && decl.prop.includes('--')) {
72
- if (prevNode && prevNode.type === 'comment' && prevNode.text.toLowerCase() === 'variable:ignore') {
73
- return;
74
- }
75
-
76
- if (isIgnoreValuePresent(ignoreVals, decl.prop)) {
77
- return;
78
- }
79
-
80
- if (settingsObject[variables[decl.prop]]) {
81
- /* if there is no value for property, set it to default so that undefined doesn't get called as key */
82
- if (!variables[decl.prop]) {
83
- variables[decl.prop] = 'default';
84
- }
85
-
86
- const pxReplacement = settingsObject[variables[decl.prop]].replacements.px;
87
- const valArr = decl.value.split(' '); // single values are considered in the above array and converted below
88
-
89
- valArr.forEach((value, index) => {
90
- if (value.includes('px')) {
91
- const num = value.replace('px', '');
92
- valArr[index] = pxReplacement.replace('$$', num);
93
- }
94
- });
95
- currentNode.value = valArr.join(' ');
96
- }
97
- }
98
- });
99
- });
100
- return rootOriginal;
101
- }
102
-
103
41
  function createFolderIfNonExistant(path) {
104
42
  if (!fs.existsSync(path)) {
105
43
  fs.mkdirSync(path, {
@@ -118,10 +56,12 @@ class VariableConversionCollector {
118
56
  constructor(options = {}) {
119
57
  this.optimize = options.optimize;
120
58
  this.filename = options.cssVariableReplacementConfig;
121
- this.fileHandler();
59
+ this.patterns = options.patterns; // console.log(options.patterns, this.patterns);
60
+
61
+ this.initializeFiles();
122
62
  }
123
63
 
124
- fileHandler() {
64
+ initializeFiles() {
125
65
  createFolderIfNonExistant('./.cli/logs/');
126
66
  createFolderIfNonExistant('./.cli/config/variables/');
127
67
  createFolderIfNonExistant('./.cli/config/selectorWeight/');
@@ -131,7 +71,8 @@ class VariableConversionCollector {
131
71
 
132
72
  apply(compiler) {
133
73
  const variables = {};
134
- const unassigned = {};
74
+ const unassigned = {}; // console.log(windowsModification([this.filename])[0]);
75
+
135
76
  const rawdata = fs.readFileSync(this.filename);
136
77
  const data = JSON.parse(rawdata);
137
78
  const {
@@ -183,16 +124,13 @@ class VariableConversionCollector {
183
124
  rootOriginal.walkRules(rule => {
184
125
  rule.walkDecls(decl => {
185
126
  decl.value.split(' ').forEach(val => {
186
- if (val && val.includes('--') && !new RegExp(ignoreVals.join('|'), 'gi').test(val) && decl.prop) {
187
- const extractedValue = extractVariableName(val);
127
+ if (val && val.includes('--') && !new RegExp(_variableConvertorUtils.ignoreVals.join('|'), 'gi').test(val) && decl.prop) {
128
+ const extractedValue = (0, _variableConvertorUtils.extractVariableName)(val);
188
129
 
189
130
  if (!variables[extractedValue]) {
190
131
  variables[extractedValue] = decl.prop;
191
132
  } else {
192
133
  if (new RegExp(supportedProps.join('|'), 'gi').test(decl.prop)) {
193
- // console.log(
194
- // `${extractedValue} : ${variables[extractedValue]} already exists please check!`
195
- // );
196
134
  if (errorsAllowed.MULTIPLE_OCCURANCES) {
197
135
  const errObj = {
198
136
  decl,
@@ -206,7 +144,6 @@ class VariableConversionCollector {
206
144
  }
207
145
  }
208
146
  } else {
209
- // console.log(decl.prop);
210
147
  if (/^--/gi.test(decl.prop) && val.trim() !== '' && !variables[decl.prop]) {
211
148
  if (!Object.keys(variablesRead.ignore).includes(decl.prop)) {
212
149
  unassigned[decl.prop] = variables[decl.prop];
@@ -238,7 +175,7 @@ class VariableConversionCollector {
238
175
  });
239
176
  }
240
177
  });
241
- }); // -- conversion for the root using rootConvertor --
178
+ }); // -- conversion for the root using variableConvertor --
242
179
 
243
180
  /*
244
181
  input :
@@ -256,9 +193,33 @@ class VariableConversionCollector {
256
193
  compilation.hooks.optimizeModules.tap('VariableConversionCollector', modules => {
257
194
  const mods = modules.filter(x => x.type.includes('css'));
258
195
  mods.forEach(module => {
196
+ const filename = module.issuer.resource;
197
+ /*
198
+ input :
199
+ filename : 'D:/MyWork/..../desk_client_app/supportapp/src/components/Avatar/Avatar.module.css,
200
+
201
+ patterns.cssVariableReplacement:
202
+ // include src folder, include deskapp folder, exclude node modules
203
+ "cssVariableReplacement": [
204
+ "src",
205
+ "deskapp",
206
+ "!node_modules"
207
+ ]
208
+
209
+ output :
210
+ true or false
211
+ */
212
+
213
+ if (!(0, _fileHandling.isFileNameMatchingPluginPattern)({
214
+ filename,
215
+ filterArr: this.patterns.cssVariableReplacement
216
+ })) {
217
+ return;
218
+ }
219
+
259
220
  const rootOriginal = _postcss.default.parse(module.content);
260
221
 
261
- module.content = rootConvertor(rootOriginal, variables, settingsObject).toString();
222
+ module.content = (0, _variableConvertorUtils.variableConverter)(rootOriginal, variables, settingsObject).toString();
262
223
  });
263
224
  });
264
225
  });
@@ -292,29 +253,7 @@ class VariableConversionCollector {
292
253
  if (a.type < b.type) {
293
254
  return -1;
294
255
  }
295
- }); // variable constructed now to be written in a json file
296
- // const newVars = Object.keys(variables)
297
- // //Filter Object with key contanis "NAME"
298
- // .filter(key => variables[key].includes('--'))
299
- // .reduce(
300
- // (obj, key) =>
301
- // Object.assign(obj, {
302
- // [key]: variables[key]
303
- // }),
304
- // {}
305
- // );
306
- // console.log('new variables: ', newVars);
307
- // try {
308
- // fs.writeFileSync('./variableMapping.json', JSON.stringify(variables));
309
- // } catch (err) {
310
- // console.log(err);
311
- // }
312
- // fs.writeFile('./variableMapping.json', JSON.stringify(variables), err => {
313
- // if (err) {
314
- // throw err;
315
- // }
316
- // console.log('variable mapping file generated.');
317
- // });
256
+ });
318
257
 
319
258
  if (errorConsoleStatus) {
320
259
  const errorHandler = new _ErrorHandler.ErrorHandler();
@@ -33,6 +33,12 @@ Object.defineProperty(exports, "ManifestPlugin", {
33
33
  return _ManifestPlugin.default;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "MinifyPlugin", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _MinifyPlugin.default;
40
+ }
41
+ });
36
42
  Object.defineProperty(exports, "ModuleStatsPlugin", {
37
43
  enumerable: true,
38
44
  get: function () {
@@ -99,12 +105,6 @@ Object.defineProperty(exports, "TPHashMappingPlugin", {
99
105
  return _TPHashMappingPlugin.default;
100
106
  }
101
107
  });
102
- Object.defineProperty(exports, "UglifyCSSPlugin", {
103
- enumerable: true,
104
- get: function () {
105
- return _UglifyCSSPlugin.default;
106
- }
107
- });
108
108
  Object.defineProperty(exports, "UnusedFilesFindPlugin", {
109
109
  enumerable: true,
110
110
  get: function () {
@@ -126,7 +126,7 @@ var _OptimizeJSPlugin = _interopRequireDefault(require("./OptimizeJSPlugin"));
126
126
 
127
127
  var _ResourceHintsPlugin = _interopRequireDefault(require("./ResourceHintsPlugin"));
128
128
 
129
- var _UglifyCSSPlugin = _interopRequireDefault(require("./UglifyCSSPlugin"));
129
+ var _MinifyPlugin = _interopRequireDefault(require("./MinifyPlugin"));
130
130
 
131
131
  var _ManifestPlugin = _interopRequireDefault(require("./ManifestPlugin"));
132
132
 
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hasPrevNodeIgnore = hasPrevNodeIgnore;
7
+ exports.isAtRule = isAtRule;
8
+ exports.isComment = isComment;
9
+ exports.isCommentContentSame = isCommentContentSame;
10
+ exports.isInsideMediaQuery = isInsideMediaQuery;
11
+ exports.isThisComment = isThisComment;
12
+
13
+ function isComment(node) {
14
+ return node && node.type && node.type === 'comment';
15
+ }
16
+
17
+ function isCommentContentSame(node, content) {
18
+ return node.text.toLowerCase() === content;
19
+ }
20
+
21
+ function isThisComment(node, ignoreComment) {
22
+ return isComment(node) && isCommentContentSame(node, ignoreComment);
23
+ }
24
+
25
+ function hasPrevNodeIgnore(index, prevNode, ignoreComment) {
26
+ return index !== 0 && isThisComment(prevNode, ignoreComment);
27
+ }
28
+
29
+ function isAtRule(rule) {
30
+ return rule.parent && rule.parent.type === 'atrule';
31
+ }
32
+
33
+ function isInsideMediaQuery(rule) {
34
+ return isAtRule(rule) && rule.parent && rule.parent.name === 'media' ? true : false;
35
+ }