@zohodesk/react-cli 1.1.8-exp.2 → 1.1.9
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.
- package/.eslintignore +7 -7
- package/.eslintrc.js +180 -180
- package/.prettierrc +6 -6
- package/Changelog.md +1019 -1019
- package/README.md +1293 -1293
- package/bin/cli.js +501 -497
- package/docs/ComposeMinification.md +13 -13
- package/docs/CustomChunks.md +29 -29
- package/docs/DevServerPort.md +39 -39
- package/docs/DevStart.md +18 -18
- package/docs/HoverActive.md +12 -12
- package/docs/InstallNode.md +28 -28
- package/docs/MarkdownParser.md +17 -17
- package/docs/ReactLive.md +13 -13
- package/docs/SelectorWeight.md +8 -8
- package/docs/TODOS.md +10 -10
- package/docs/ValueReplacer.md +60 -60
- package/docs/VariableConversion.md +729 -729
- package/docs/patternFiltering.md +56 -56
- package/docs/warnings_while_install.txt +35 -35
- package/files/eslintrc.js +62 -62
- package/files/prettierrc.js +3 -3
- package/lib/configs/webpack.css.umd.config.js +4 -4
- package/lib/configs/webpack.dev.config.js +0 -18
- package/lib/configs/webpack.docs.config.js +0 -17
- package/lib/deprecationLogger.js +3 -3
- package/lib/loaderUtils/configsAssetsLoaders.js +33 -33
- package/lib/loaderUtils/getCSSLoaders.js +58 -62
- package/lib/loaders/workerLoader.js +9 -9
- package/lib/pluginUtils/getDevPlugins.js +5 -5
- package/lib/pluginUtils/getProdPlugins.js +5 -5
- package/lib/plugins/CustomAttributePlugin.md +35 -35
- package/lib/plugins/EFCPlugin.md +6 -6
- package/lib/plugins/I18NInjectIntoIndexPlugin.js +4 -4
- package/lib/plugins/I18nSplitPlugin/I18nDownlodLogic.js +38 -38
- package/lib/plugins/I18nSplitPlugin/I18nFilesEmitter.js +30 -30
- package/lib/plugins/I18nSplitPlugin/I18nKeysIdentifer.js +8 -8
- package/lib/plugins/I18nSplitPlugin/I18nSplit.md +95 -95
- package/lib/plugins/I18nSplitPlugin/README.md +25 -25
- package/lib/plugins/I18nSplitPlugin/index.js +57 -57
- package/lib/plugins/ReportGeneratePlugin.js +8 -6
- package/lib/plugins/ResourceHintsPlugin.js +17 -17
- package/lib/plugins/RtlSplitPlugin/RtlCssPlugin.js +6 -6
- package/lib/plugins/RtlSplitPlugin/RtrSplit.md +30 -30
- package/lib/plugins/SelectorPlugin.js +29 -29
- package/lib/plugins/ServiceWorkerPlugin.js +9 -9
- package/lib/plugins/TPHashMappingPlugin.js +4 -4
- package/lib/plugins/UnusedFilesFindPlugin.js +7 -5
- package/lib/plugins/VariableConversionCollector.js +59 -59
- package/lib/plugins/utils/fileHandling.js +8 -4
- package/lib/plugins/variableConvertorUtils.js +9 -9
- package/lib/postcss-plugins/RTLSplitPlugin.js +10 -10
- package/lib/postcss-plugins/__test__/test1Input.css +38 -38
- package/lib/postcss-plugins/__test__/test1Output.css +38 -38
- package/lib/postcss-plugins/hoverActivePlugin.js +3 -3
- package/lib/sh/pre-commit.sh +34 -34
- package/lib/sh/reportPublish.sh +45 -45
- package/lib/utils/buildstats.html +148 -148
- package/lib/utils/cssClassNameGenerate.js +13 -13
- package/lib/utils/deprecationSupport.js +83 -78
- package/lib/utils/getOptions.js +2 -2
- package/lib/utils/index.js +14 -12
- package/lib/utils/initPreCommitHook.js +5 -5
- package/lib/utils/log.js +11 -0
- package/lib/utils/pullOrigin.js +3 -3
- package/lib/utils/reinstallDependencies.js +3 -3
- package/lib/utils/resultSchema.json +73 -73
- package/lib/utils/switchBranch.js +4 -2
- package/npm-shrinkwrap.json +33393 -14454
- package/npm8.md +9 -9
- package/package.json +123 -123
- package/postpublish.js +8 -8
- package/templates/app/.eslintrc.js +140 -140
- package/templates/app/README.md +12 -12
- package/templates/app/app/index.html +24 -24
- package/templates/app/app/properties/ApplicationResources_en_US.properties +1 -1
- package/templates/app/app/properties/i18nkeys.json +3 -3
- package/templates/app/docs/all.html +69 -69
- package/templates/app/mockapi/index.js +18 -18
- package/templates/app/package.json +37 -37
- package/templates/app/src/actions/SampleActions/index.js +37 -37
- package/templates/app/src/actions/index.js +65 -65
- package/templates/app/src/appUrls.js +19 -19
- package/templates/app/src/components/Alert/Alert.js +134 -134
- package/templates/app/src/components/Alert/Alert.module.css +79 -79
- package/templates/app/src/components/FreezeLayer/FreezeLayer.css +37 -37
- package/templates/app/src/components/FreezeLayer/FreezeLayer.js +84 -84
- package/templates/app/src/components/Sample/Sample.module.css +11 -11
- package/templates/app/src/components/Sample/SampleList.js +61 -61
- package/templates/app/src/components/Slider/Slider.css +41 -41
- package/templates/app/src/components/Slider/Slider.js +55 -55
- package/templates/app/src/containers/AlertContainer/index.js +15 -15
- package/templates/app/src/containers/AppContainer/index.js +96 -96
- package/templates/app/src/containers/AppContainer/index.module.css +27 -27
- package/templates/app/src/containers/CustomMatch/index.js +65 -65
- package/templates/app/src/containers/DevTools/index.js +10 -10
- package/templates/app/src/containers/Header/index.js +67 -67
- package/templates/app/src/containers/Header/index.module.css +43 -43
- package/templates/app/src/containers/Redirect/index.js +63 -63
- package/templates/app/src/containers/Redirector/index.js +47 -47
- package/templates/app/src/containers/SampleListContainer/ListContainer.js +42 -42
- package/templates/app/src/containers/SampleListContainer/ListContainer.module.css +3 -3
- package/templates/app/src/historyChange.js +5 -5
- package/templates/app/src/index.html +10 -10
- package/templates/app/src/index.js +24 -24
- package/templates/app/src/middleware/PromiseMiddleware.js +59 -59
- package/templates/app/src/reducers/alertData.js +11 -11
- package/templates/app/src/reducers/index.js +6 -6
- package/templates/app/src/reducers/samples.js +19 -19
- package/templates/app/src/store/configureStore.dev.js +51 -51
- package/templates/app/src/store/configureStore.js +5 -5
- package/templates/app/src/store/configureStore.prod.js +26 -26
- package/templates/app/src/util/Common.js +5 -5
- package/templates/app/src/util/RequestAPI.js +132 -132
- package/templates/docs/all.html +250 -250
- package/templates/docs/component.html +179 -179
- package/templates/docs/components.html +222 -222
- package/templates/docs/css/b.min.css +6 -6
- package/templates/docs/css/component.css +42 -42
- package/templates/docs/css/componentTest.css +6 -6
- package/templates/docs/css/hopscotch.css +585 -585
- package/templates/docs/css/markdown.css +202 -202
- package/templates/docs/css/style.css +1022 -1022
- package/templates/docs/impactReportTemplate.html +154 -154
- package/templates/docs/index.html +1502 -1502
- package/templates/docs/js/active-line.js +72 -72
- package/templates/docs/js/b.min.js +7 -7
- package/templates/docs/js/codemirror.js +9680 -9680
- package/templates/docs/js/designTokens.js +334 -334
- package/templates/docs/js/j.min.js +4 -4
- package/templates/docs/js/javascript.js +874 -874
- package/templates/docs/js/matchbrackets.js +145 -145
- package/result.json +0 -1
- package/unittest/index.html +0 -37
|
@@ -21,23 +21,23 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
21
21
|
|
|
22
22
|
// #region initial
|
|
23
23
|
|
|
24
|
-
/**
|
|
25
|
-
* @TODO:
|
|
26
|
-
* [?] add comment line options for properties file and get all keys form property file do right way to genarate them
|
|
27
|
-
* [?] need to discuss with collectI18n Keys with js comment need to conform "what is the comment? "
|
|
24
|
+
/**
|
|
25
|
+
* @TODO:
|
|
26
|
+
* [?] add comment line options for properties file and get all keys form property file do right way to genarate them
|
|
27
|
+
* [?] need to discuss with collectI18n Keys with js comment need to conform "what is the comment? "
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
/**
|
|
31
|
-
* Notes: this plugin has done below works
|
|
32
|
-
* 1. collect I18n Keys from js files and make it as Depenencies
|
|
33
|
-
* 2. we create file(asset) for chunk specific i18nChunk Files
|
|
34
|
-
* 3. create hash for the specific i18nChunk Files
|
|
35
|
-
* 4. write logic to requireEnsure method for dowlod I18n chunk download dynamicaly
|
|
36
|
-
* 5. create manifest.json file which has the mapping of chunk-locales-i18nChunkFile
|
|
37
|
-
* for the external referrece.
|
|
38
|
-
* Hints :-
|
|
39
|
-
* - file means your machine files
|
|
40
|
-
* - asset means that also file but that will create by webpack after build
|
|
30
|
+
/**
|
|
31
|
+
* Notes: this plugin has done below works
|
|
32
|
+
* 1. collect I18n Keys from js files and make it as Depenencies
|
|
33
|
+
* 2. we create file(asset) for chunk specific i18nChunk Files
|
|
34
|
+
* 3. create hash for the specific i18nChunk Files
|
|
35
|
+
* 4. write logic to requireEnsure method for dowlod I18n chunk download dynamicaly
|
|
36
|
+
* 5. create manifest.json file which has the mapping of chunk-locales-i18nChunkFile
|
|
37
|
+
* for the external referrece.
|
|
38
|
+
* Hints :-
|
|
39
|
+
* - file means your machine files
|
|
40
|
+
* - asset means that also file but that will create by webpack after build
|
|
41
41
|
*/
|
|
42
42
|
// const getI18nLocales = require('./utils/getI18nLocales');
|
|
43
43
|
// const { ConcatSource, SourceMapSource, OriginalSource } = sources;
|
|
@@ -49,16 +49,16 @@ const MODULE_TYPE = 'json/i18n';
|
|
|
49
49
|
const i18ntype = locale => `${MODULE_TYPE}/${locale}`;
|
|
50
50
|
|
|
51
51
|
const pluginName = 'i18n-plugin';
|
|
52
|
-
/**
|
|
53
|
-
* @typedef I18nPluginOptions
|
|
54
|
-
* @property {String} filenameTemplate this was template for i18n chunk
|
|
55
|
-
* @property {String} jsResource this was path for jsResource i18n file
|
|
56
|
-
* @property {String} propertiesFolder this was path for propertiesFolder i18n file
|
|
57
|
-
* @property {Boolean} disableDefault this option for disable defulat value for i18n keys, means if the language file does not have some key we don't give jsResource value
|
|
58
|
-
* @property {String} i18nManifestFileName this was ouput path for i18n manifest.
|
|
59
|
-
* @property {String} jsonpFunc this was function name, we will call that function everytime i18n chunk download.
|
|
60
|
-
* @property {String} localeVarName this was variable name, we will call that function everytime i18n chunk download.
|
|
61
|
-
*
|
|
52
|
+
/**
|
|
53
|
+
* @typedef I18nPluginOptions
|
|
54
|
+
* @property {String} filenameTemplate this was template for i18n chunk
|
|
55
|
+
* @property {String} jsResource this was path for jsResource i18n file
|
|
56
|
+
* @property {String} propertiesFolder this was path for propertiesFolder i18n file
|
|
57
|
+
* @property {Boolean} disableDefault this option for disable defulat value for i18n keys, means if the language file does not have some key we don't give jsResource value
|
|
58
|
+
* @property {String} i18nManifestFileName this was ouput path for i18n manifest.
|
|
59
|
+
* @property {String} jsonpFunc this was function name, we will call that function everytime i18n chunk download.
|
|
60
|
+
* @property {String} localeVarName this was variable name, we will call that function everytime i18n chunk download.
|
|
61
|
+
*
|
|
62
62
|
*/
|
|
63
63
|
|
|
64
64
|
class I18nPlugin {
|
|
@@ -104,13 +104,13 @@ class I18nPlugin {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
maintainHashForAllI18nAssets(compilation) {
|
|
107
|
-
/**
|
|
108
|
-
* we write chunkHash logic inside of our plugin Because we only add Dependency not Module.
|
|
109
|
-
* So we need to update chunkHash for our assets
|
|
110
|
-
* and we not able tell with just Modules.
|
|
111
|
-
* Because, if we add Module for the Depenentcy then that module must has some hash.
|
|
112
|
-
* But our I18n Hash is no module specific it was chunk specific,
|
|
113
|
-
* that's why we do the stuf in the chunkHash hook.
|
|
107
|
+
/**
|
|
108
|
+
* we write chunkHash logic inside of our plugin Because we only add Dependency not Module.
|
|
109
|
+
* So we need to update chunkHash for our assets
|
|
110
|
+
* and we not able tell with just Modules.
|
|
111
|
+
* Because, if we add Module for the Depenentcy then that module must has some hash.
|
|
112
|
+
* But our I18n Hash is no module specific it was chunk specific,
|
|
113
|
+
* that's why we do the stuf in the chunkHash hook.
|
|
114
114
|
*/
|
|
115
115
|
compilation.hooks.chunkHash.tap(pluginName, (chunk, chunkHash) => {
|
|
116
116
|
const {
|
|
@@ -154,31 +154,31 @@ class I18nPlugin {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
}
|
|
157
|
-
/*
|
|
158
|
-
// TODO: need to reimplement this logic
|
|
159
|
-
// NOTE: this logic for split all content hash per mani chunk
|
|
160
|
-
// like add chunk content hash to main locale i18n file
|
|
161
|
-
|
|
162
|
-
// let isEntry = chunk.name === this.options.mainChunkName;
|
|
163
|
-
// if (chunk.name === 'main' && chunk.hasEntryModule()) {
|
|
164
|
-
if (isEntry) {
|
|
165
|
-
const hashSource = new ConcatSource();
|
|
166
|
-
const dummyChunk = new chunk.constructor();
|
|
167
|
-
hashSource.add('// it wil be I18N file hash');
|
|
168
|
-
const templateHooks = compilation.chunkTemplate.hooks;
|
|
169
|
-
let c = templateHooks.render.call(
|
|
170
|
-
templateHooks.module.call(
|
|
171
|
-
hashSource,
|
|
172
|
-
dummyChunk,
|
|
173
|
-
compilation.moduleTemplate.javascript,
|
|
174
|
-
compilation.dependencyTemplates
|
|
175
|
-
),
|
|
176
|
-
dummyChunk,
|
|
177
|
-
compilation.moduleTemplate.javascript,
|
|
178
|
-
compilation.dependencyTemplates
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
}
|
|
157
|
+
/*
|
|
158
|
+
// TODO: need to reimplement this logic
|
|
159
|
+
// NOTE: this logic for split all content hash per mani chunk
|
|
160
|
+
// like add chunk content hash to main locale i18n file
|
|
161
|
+
|
|
162
|
+
// let isEntry = chunk.name === this.options.mainChunkName;
|
|
163
|
+
// if (chunk.name === 'main' && chunk.hasEntryModule()) {
|
|
164
|
+
if (isEntry) {
|
|
165
|
+
const hashSource = new ConcatSource();
|
|
166
|
+
const dummyChunk = new chunk.constructor();
|
|
167
|
+
hashSource.add('// it wil be I18N file hash');
|
|
168
|
+
const templateHooks = compilation.chunkTemplate.hooks;
|
|
169
|
+
let c = templateHooks.render.call(
|
|
170
|
+
templateHooks.module.call(
|
|
171
|
+
hashSource,
|
|
172
|
+
dummyChunk,
|
|
173
|
+
compilation.moduleTemplate.javascript,
|
|
174
|
+
compilation.dependencyTemplates
|
|
175
|
+
),
|
|
176
|
+
dummyChunk,
|
|
177
|
+
compilation.moduleTemplate.javascript,
|
|
178
|
+
compilation.dependencyTemplates
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
}
|
|
182
182
|
*/
|
|
183
183
|
|
|
184
184
|
|
|
@@ -13,6 +13,8 @@ var _redis = _interopRequireDefault(require("redis"));
|
|
|
13
13
|
|
|
14
14
|
var _utils = require("../utils");
|
|
15
15
|
|
|
16
|
+
var _log = require("../utils/log");
|
|
17
|
+
|
|
16
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
19
|
|
|
18
20
|
let options = (0, _utils.getOptions)();
|
|
@@ -68,10 +70,10 @@ class reportGeneratePlugin {
|
|
|
68
70
|
let client = _redis.default.createClient(redisPort, redisHost);
|
|
69
71
|
|
|
70
72
|
client.on('connect', () => {
|
|
71
|
-
(0,
|
|
73
|
+
(0, _log.log)('Redis client connected');
|
|
72
74
|
});
|
|
73
75
|
client.on('error', err => {
|
|
74
|
-
(0,
|
|
76
|
+
(0, _log.log)(`Something went wrong ${err}`);
|
|
75
77
|
});
|
|
76
78
|
|
|
77
79
|
if (_fs.default.existsSync(_path.default.resolve(process.cwd(), 'build', 'stats.json'))) {
|
|
@@ -80,7 +82,7 @@ class reportGeneratePlugin {
|
|
|
80
82
|
statsJSON = JSON.parse(statsJSON);
|
|
81
83
|
let finalObj = {};
|
|
82
84
|
let branchName = branch ? branch : (0, _utils.getCurrentBranch)();
|
|
83
|
-
(0,
|
|
85
|
+
(0, _log.log)(branchName);
|
|
84
86
|
statsJSON.assets.forEach(assetObj => {
|
|
85
87
|
let nameSplitList = assetObj.name.split('/')[assetObj.name.split('/').length - 1].split('.'); // eslint-disable-line
|
|
86
88
|
|
|
@@ -111,7 +113,7 @@ class reportGeneratePlugin {
|
|
|
111
113
|
};
|
|
112
114
|
client.get(branchName, (err, reply) => {
|
|
113
115
|
if (err) {
|
|
114
|
-
(0,
|
|
116
|
+
(0, _log.log)(err);
|
|
115
117
|
} else {
|
|
116
118
|
reply = JSON.parse(reply); // eslint-disable-line
|
|
117
119
|
|
|
@@ -147,7 +149,7 @@ class reportGeneratePlugin {
|
|
|
147
149
|
throw err;
|
|
148
150
|
}
|
|
149
151
|
|
|
150
|
-
(0,
|
|
152
|
+
(0, _log.log)('Stats Json generated!');
|
|
151
153
|
});
|
|
152
154
|
}
|
|
153
155
|
});
|
|
@@ -169,7 +171,7 @@ class reportGeneratePlugin {
|
|
|
169
171
|
}
|
|
170
172
|
|
|
171
173
|
if (err) {
|
|
172
|
-
(0,
|
|
174
|
+
(0, _log.log)(err);
|
|
173
175
|
}
|
|
174
176
|
});
|
|
175
177
|
}
|
|
@@ -43,25 +43,25 @@ class ResourceHintsPlugin {
|
|
|
43
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
44
|
${mainTemplate.requireFn}.e(idOfAChunk);
|
|
45
45
|
})`]), '};',
|
|
46
|
-
/*
|
|
47
|
-
(needsMap
|
|
48
|
-
? [`chunkId = ${JSON.stringify(nameIdMap)}[chunkId]||chunkId;`]
|
|
49
|
-
: []
|
|
50
|
-
).concat([
|
|
51
|
-
'var promises = [];',
|
|
52
|
-
'if(installedChunks[chunkId] === undefined) {',
|
|
53
|
-
Template.indent([
|
|
54
|
-
'installedChunks[chunkId] = null;',
|
|
55
|
-
/* mainTemplate.hooks.linkPrefetch.call('', chunk, hash),
|
|
46
|
+
/*
|
|
47
|
+
(needsMap
|
|
48
|
+
? [`chunkId = ${JSON.stringify(nameIdMap)}[chunkId]||chunkId;`]
|
|
49
|
+
: []
|
|
50
|
+
).concat([
|
|
51
|
+
'var promises = [];',
|
|
52
|
+
'if(installedChunks[chunkId] === undefined) {',
|
|
53
|
+
Template.indent([
|
|
54
|
+
'installedChunks[chunkId] = null;',
|
|
55
|
+
/* mainTemplate.hooks.linkPrefetch.call('', chunk, hash),
|
|
56
56
|
'document.head.appendChild(link);', */
|
|
57
57
|
|
|
58
|
-
/*
|
|
59
|
-
mainTemplate.hooks.requireEnsure.call('', chunk, hash)
|
|
60
|
-
]),
|
|
61
|
-
'}'
|
|
62
|
-
])
|
|
63
|
-
),
|
|
64
|
-
'}',
|
|
58
|
+
/*
|
|
59
|
+
mainTemplate.hooks.requireEnsure.call('', chunk, hash)
|
|
60
|
+
]),
|
|
61
|
+
'}'
|
|
62
|
+
])
|
|
63
|
+
),
|
|
64
|
+
'}',
|
|
65
65
|
*/
|
|
66
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];',
|
|
67
67
|
// mainTemplate.hooks.jsonpScript.call('', chunk, hash),
|
|
@@ -24,12 +24,12 @@ const isCss = filename => _path.default.extname(filename) === '.css'; // this p
|
|
|
24
24
|
|
|
25
25
|
class RtlCssPlugin {
|
|
26
26
|
constructor(options = {}) {
|
|
27
|
-
/**
|
|
28
|
-
* @typedef {Object} Options
|
|
29
|
-
* @property {String} filename [not used]
|
|
30
|
-
* @property {String} dirVarName
|
|
31
|
-
* @property {Boolean} sourcemap
|
|
32
|
-
* @property {Object} config
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {Object} Options
|
|
29
|
+
* @property {String} filename [not used]
|
|
30
|
+
* @property {String} dirVarName
|
|
31
|
+
* @property {Boolean} sourcemap
|
|
32
|
+
* @property {Object} config
|
|
33
33
|
*/
|
|
34
34
|
this.options = {
|
|
35
35
|
filename: options.filename || '[name].rtl.css',
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
# RTL Split
|
|
2
|
-
|
|
3
|
-
we are doing in build time generating rtl related css code by using @zohodesk/postcss-rt npm.
|
|
4
|
-
It was automated, That postcss plugin create rtl reacted css and put them into same file, with css selector [dir=rtl] and ltr realted css with [dir=ltr].
|
|
5
|
-
Here is problem mostly no one need rtl and ltr related css at the same time in browser,
|
|
6
|
-
we are try to split them by [dir] and load which type of css is needed.
|
|
7
|
-
For this purpose we created RTL Split Plugin
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# To Try it out rtl-ltr split
|
|
11
|
-
### how to use this feature?
|
|
12
|
-
|
|
13
|
-
to use this feature use have give the below oprtions
|
|
14
|
-
`package.json`
|
|
15
|
-
```json
|
|
16
|
-
{
|
|
17
|
-
/// ...some things
|
|
18
|
-
"react-cli": {
|
|
19
|
-
// ...some things
|
|
20
|
-
"css": {
|
|
21
|
-
"enableRTLSplit": true,
|
|
22
|
-
"templateLabel": "{{--dir}}",// this is for html template css file path dir template
|
|
23
|
-
"disableMiniFiySelector": false,
|
|
24
|
-
"dirVarName": "document.dir" // this will be used for download css based on dir
|
|
25
|
-
},
|
|
26
|
-
// ...some things
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
1
|
+
# RTL Split
|
|
2
|
+
|
|
3
|
+
we are doing in build time generating rtl related css code by using @zohodesk/postcss-rt npm.
|
|
4
|
+
It was automated, That postcss plugin create rtl reacted css and put them into same file, with css selector [dir=rtl] and ltr realted css with [dir=ltr].
|
|
5
|
+
Here is problem mostly no one need rtl and ltr related css at the same time in browser,
|
|
6
|
+
we are try to split them by [dir] and load which type of css is needed.
|
|
7
|
+
For this purpose we created RTL Split Plugin
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# To Try it out rtl-ltr split
|
|
11
|
+
### how to use this feature?
|
|
12
|
+
|
|
13
|
+
to use this feature use have give the below oprtions
|
|
14
|
+
`package.json`
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
/// ...some things
|
|
18
|
+
"react-cli": {
|
|
19
|
+
// ...some things
|
|
20
|
+
"css": {
|
|
21
|
+
"enableRTLSplit": true,
|
|
22
|
+
"templateLabel": "{{--dir}}",// this is for html template css file path dir template
|
|
23
|
+
"disableMiniFiySelector": false,
|
|
24
|
+
"dirVarName": "document.dir" // this will be used for download css based on dir
|
|
25
|
+
},
|
|
26
|
+
// ...some things
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
@@ -86,20 +86,20 @@ class SelectorPlugin {
|
|
|
86
86
|
const rootOriginal = _postcss.default.parse(module.content);
|
|
87
87
|
|
|
88
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
|
-
|
|
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
|
|
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
103
|
*/
|
|
104
104
|
|
|
105
105
|
if (!(0, _fileHandling.isFileNameMatchingPluginPattern)({
|
|
@@ -108,21 +108,21 @@ class SelectorPlugin {
|
|
|
108
108
|
})) {
|
|
109
109
|
return;
|
|
110
110
|
}
|
|
111
|
-
/*
|
|
112
|
-
|
|
113
|
-
filename : Deskapp.module.css ?
|
|
114
|
-
|
|
115
|
-
{
|
|
116
|
-
"DeskApp.module.css": {"defaultSelector" : ".desk_app_ui "}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
case filename = 'DeskApp.module.css' ?
|
|
122
|
-
data[filename].defaultSelector = '.desk_app_ui'
|
|
123
|
-
|
|
124
|
-
defaultSelector = '.zoho_desk_ui'
|
|
125
|
-
|
|
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
126
|
|
|
127
127
|
|
|
128
128
|
module.content = selectorWeightPrefixAdder(rootOriginal, data[filename] ? data[filename].defaultSelector : defaultSelector, excludeStrings).toString();
|
|
@@ -51,11 +51,11 @@ class ServiceWorkerPlugin {
|
|
|
51
51
|
if (err) {
|
|
52
52
|
throw new Error(err);
|
|
53
53
|
} else {
|
|
54
|
-
/* const extractedChunks = compilation.chunks.filter(chunk => {
|
|
55
|
-
if ('canBeInitial' in chunk) {
|
|
56
|
-
return chunk.canBeInitial();
|
|
57
|
-
}
|
|
58
|
-
return chunk.isInitial();
|
|
54
|
+
/* const extractedChunks = compilation.chunks.filter(chunk => {
|
|
55
|
+
if ('canBeInitial' in chunk) {
|
|
56
|
+
return chunk.canBeInitial();
|
|
57
|
+
}
|
|
58
|
+
return chunk.isInitial();
|
|
59
59
|
}); */
|
|
60
60
|
// let [js, css, , , i18nPublicPath] = this.publicPaths;
|
|
61
61
|
// let initialChunkUrls = [];
|
|
@@ -64,10 +64,10 @@ class ServiceWorkerPlugin {
|
|
|
64
64
|
let entrypoint = compilation.entrypoints.get('main');
|
|
65
65
|
let initialChunkUrls = entrypoint.getFiles();
|
|
66
66
|
const cssDirTemplate = '@dir@';
|
|
67
|
-
/**
|
|
68
|
-
* NOTE:
|
|
69
|
-
* if chunkSplitEnable is false means,
|
|
70
|
-
* serviceWorker will get i18n files path for html
|
|
67
|
+
/**
|
|
68
|
+
* NOTE:
|
|
69
|
+
* if chunkSplitEnable is false means,
|
|
70
|
+
* serviceWorker will get i18n files path for html
|
|
71
71
|
*/
|
|
72
72
|
|
|
73
73
|
let initalI18nAssets = chunkSplitEnable ? entrypoint.chunks.filter(chunk => _I18nKeysIdentifer.default.isChunkHasI18n(chunk)).map(chunk => (0, _getI18nFileUrlPathTemplate.getI18nFileUrlPathTemplate)(compilation, chunk, this.i18nFileNameTemplate, '@locale@')) : [];
|
|
@@ -15,10 +15,10 @@ var _crypto = _interopRequireDefault(require("crypto"));
|
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* Plugin that generates hash for the provided list of third party files
|
|
20
|
-
* Map the provided key with the file hash and add it to the list of exisiting global constants.
|
|
21
|
-
* Plugin in turn uses the defineplugin to generate global constants.
|
|
18
|
+
/**
|
|
19
|
+
* Plugin that generates hash for the provided list of third party files
|
|
20
|
+
* Map the provided key with the file hash and add it to the list of exisiting global constants.
|
|
21
|
+
* Plugin in turn uses the defineplugin to generate global constants.
|
|
22
22
|
*/
|
|
23
23
|
class TPHashMappingPlugin {
|
|
24
24
|
constructor(options) {
|
|
@@ -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,
|
|
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,
|
|
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,
|
|
167
|
+
(0, _log.log)('There is no unused files');
|
|
166
168
|
} else {
|
|
167
169
|
if (this.outputFileName) {
|
|
168
|
-
(0,
|
|
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,
|
|
184
|
+
(0, _log.log)(`Deleted - ${file}`);
|
|
183
185
|
});
|
|
184
186
|
}
|
|
185
187
|
});
|
|
@@ -28,14 +28,14 @@ const {
|
|
|
28
28
|
|
|
29
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 --
|
|
30
30
|
|
|
31
|
-
/*
|
|
32
|
-
input :
|
|
33
|
-
var(--zdt_uploadlist_default_width)
|
|
34
|
-
output :
|
|
35
|
-
--zdt_uploadlist_default_width
|
|
36
|
-
|
|
37
|
-
comment :
|
|
38
|
-
to make the variable object using the output as key and decl.prop such as font-size as value
|
|
31
|
+
/*
|
|
32
|
+
input :
|
|
33
|
+
var(--zdt_uploadlist_default_width)
|
|
34
|
+
output :
|
|
35
|
+
--zdt_uploadlist_default_width
|
|
36
|
+
|
|
37
|
+
comment :
|
|
38
|
+
to make the variable object using the output as key and decl.prop such as font-size as value
|
|
39
39
|
*/
|
|
40
40
|
|
|
41
41
|
function createFolderIfNonExistant(path) {
|
|
@@ -95,13 +95,13 @@ class VariableConversionCollector {
|
|
|
95
95
|
}
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
|
-
/*
|
|
99
|
-
purpose of tap : to create a variable object such as:
|
|
100
|
-
{
|
|
101
|
-
--zdt_uploadlist_default_width : width,
|
|
102
|
-
--zdt_uploadlist_default_height : height,
|
|
103
|
-
}
|
|
104
|
-
which will help in the conversion further
|
|
98
|
+
/*
|
|
99
|
+
purpose of tap : to create a variable object such as:
|
|
100
|
+
{
|
|
101
|
+
--zdt_uploadlist_default_width : width,
|
|
102
|
+
--zdt_uploadlist_default_height : height,
|
|
103
|
+
}
|
|
104
|
+
which will help in the conversion further
|
|
105
105
|
*/
|
|
106
106
|
|
|
107
107
|
|
|
@@ -153,19 +153,19 @@ class VariableConversionCollector {
|
|
|
153
153
|
});
|
|
154
154
|
});
|
|
155
155
|
});
|
|
156
|
-
/*
|
|
157
|
-
current value example:
|
|
158
|
-
{
|
|
159
|
-
--zdt_uploadlist_default_width : --zd_upload_width,
|
|
160
|
-
--zd_upload_width : width
|
|
161
|
-
}
|
|
162
|
-
expected value :
|
|
163
|
-
{
|
|
164
|
-
--zdt_uploadlist_default_width : width,
|
|
165
|
-
--zd_upload_width : width
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
conversion is done in the while loop below
|
|
156
|
+
/*
|
|
157
|
+
current value example:
|
|
158
|
+
{
|
|
159
|
+
--zdt_uploadlist_default_width : --zd_upload_width,
|
|
160
|
+
--zd_upload_width : width
|
|
161
|
+
}
|
|
162
|
+
expected value :
|
|
163
|
+
{
|
|
164
|
+
--zdt_uploadlist_default_width : width,
|
|
165
|
+
--zd_upload_width : width
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
conversion is done in the while loop below
|
|
169
169
|
*/
|
|
170
170
|
|
|
171
171
|
Object.keys(variables).forEach(key => {
|
|
@@ -177,37 +177,37 @@ class VariableConversionCollector {
|
|
|
177
177
|
});
|
|
178
178
|
}); // -- conversion for the root using variableConvertor --
|
|
179
179
|
|
|
180
|
-
/*
|
|
181
|
-
input :
|
|
182
|
-
.a{
|
|
183
|
-
padding : 20px
|
|
184
|
-
}
|
|
185
|
-
output :
|
|
186
|
-
// on settingObject file :
|
|
187
|
-
{ padding : { replacements : { px : 'zd_size$$' }}}
|
|
188
|
-
.a{
|
|
189
|
-
padding : zd_size20;
|
|
190
|
-
}
|
|
180
|
+
/*
|
|
181
|
+
input :
|
|
182
|
+
.a{
|
|
183
|
+
padding : 20px
|
|
184
|
+
}
|
|
185
|
+
output :
|
|
186
|
+
// on settingObject file :
|
|
187
|
+
{ padding : { replacements : { px : 'zd_size$$' }}}
|
|
188
|
+
.a{
|
|
189
|
+
padding : zd_size20;
|
|
190
|
+
}
|
|
191
191
|
*/
|
|
192
192
|
|
|
193
193
|
compilation.hooks.optimizeModules.tap('VariableConversionCollector', modules => {
|
|
194
194
|
const mods = modules.filter(x => x.type.includes('css'));
|
|
195
195
|
mods.forEach(module => {
|
|
196
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
|
-
|
|
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
|
|
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
211
|
*/
|
|
212
212
|
|
|
213
213
|
if (!(0, _fileHandling.isFileNameMatchingPluginPattern)({
|
|
@@ -223,12 +223,12 @@ class VariableConversionCollector {
|
|
|
223
223
|
});
|
|
224
224
|
});
|
|
225
225
|
});
|
|
226
|
-
/*
|
|
227
|
-
purpose of tap : to display the errors encountered so far
|
|
228
|
-
input :
|
|
229
|
-
all css files
|
|
230
|
-
output :
|
|
231
|
-
all errors that are present in the errTable arr
|
|
226
|
+
/*
|
|
227
|
+
purpose of tap : to display the errors encountered so far
|
|
228
|
+
input :
|
|
229
|
+
all css files
|
|
230
|
+
output :
|
|
231
|
+
all errors that are present in the errTable arr
|
|
232
232
|
*/
|
|
233
233
|
|
|
234
234
|
compiler.hooks.afterEmit.tap('error-display', () => {
|