@zohodesk/react-cli 1.0.3-beta.1 → 1.0.3-exp.2
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 +1209 -1189
- package/bin/cli.js +489 -483
- package/docs/ComposeMinification.md +14 -0
- package/docs/CustomChunks.md +26 -26
- 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/SelectorWeight.md +8 -8
- package/docs/TODOS.md +10 -10
- package/docs/ValueReplacer.md +60 -60
- package/docs/VariableConversion.md +729 -729
- package/docs/warnings_while_install.txt +35 -35
- package/files/eslintrc.js +62 -62
- package/files/prettierrc.js +3 -3
- package/lib/common/buildEs.js +12 -0
- package/lib/configs/webpack.css.umd.config.js +4 -4
- package/lib/configs/webpack.dev.config.js +6 -0
- package/lib/configs/webpack.docs.config.js +4 -0
- package/lib/configs/webpack.impact.config.js +4 -0
- package/lib/configs/webpack.prod.config.js +6 -0
- package/lib/loaderUtils/configsAssetsLoaders.js +33 -33
- package/lib/loaderUtils/getCSSLoaders.js +80 -46
- package/lib/loaderUtils/tests/windowsModification.test.js +10 -0
- package/lib/loaderUtils/windowsModification.js +6 -1
- package/lib/loaders/composeLoader.js +172 -0
- package/lib/loaders/workerLoader.js +9 -9
- package/lib/pluginUtils/getDevPlugins.js +18 -8
- package/lib/pluginUtils/getProdPlugins.js +16 -8
- package/lib/pluginUtils/getUMDCSSPlugins.js +1 -1
- package/lib/pluginUtils/getUMDComponentPlugins.js +1 -1
- 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/{UglifyCSSPlugin.js → MinifyPlugin.js} +3 -3
- 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 +64 -40
- package/lib/plugins/ServiceWorkerPlugin.js +9 -9
- package/lib/plugins/TPHashMappingPlugin.js +4 -4
- package/lib/plugins/VariableConversionCollector.js +94 -84
- package/lib/plugins/index.js +7 -7
- package/lib/plugins/utils/classHandling.js +20 -0
- package/lib/plugins/utils/fileHandling.js +107 -0
- package/lib/plugins/utils/tests/fileHandling.test.js +30 -0
- package/lib/postcss-plugins/EmptyPlugin.js +8 -0
- package/lib/postcss-plugins/ExcludePlugin.js +1 -1
- package/lib/postcss-plugins/RTLSplitPlugin.js +10 -10
- package/lib/postcss-plugins/ValueReplacer.js +5 -14
- 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/postcss-plugins/variableModificationPlugin/index.js +1 -19
- package/lib/schemas/index.js +31 -3
- package/lib/servers/server.js +2 -2
- 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 +40 -13
- package/lib/utils/getOptions.js +9 -0
- package/lib/utils/resultSchema.json +73 -73
- package/lib/utils/variableConvertor.js +159 -0
- package/npm8.md +9 -9
- package/{npm-shrinkwrap.json → package-lock.json} +14412 -14407
- package/package.json +121 -121
- 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 +249 -249
- package/templates/docs/component.html +178 -178
- package/templates/docs/components.html +221 -221
- 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/style.css +1022 -1022
- package/templates/docs/impactReportTemplate.html +154 -154
- package/templates/docs/index.html +1501 -1501
- 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/lib/plugins/composeCommonPlugin.js +0 -30
- package/lib/postcss-plugins/variableModifier.js +0 -210
|
@@ -0,0 +1,172 @@
|
|
|
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
|
+
}; // const preNames = {
|
|
119
|
+
// height: 'zd-height-',
|
|
120
|
+
// 'max-height': 'zd-height-',
|
|
121
|
+
// 'min-height': 'zd-height-',
|
|
122
|
+
// width: 'zd-width-',
|
|
123
|
+
// 'max-width': 'zd-width-',
|
|
124
|
+
// 'min-width': 'zd-width-',
|
|
125
|
+
// top: 'zd-position-',
|
|
126
|
+
// bottom: 'zd-position-',
|
|
127
|
+
// left: 'zd-position-',
|
|
128
|
+
// right: 'zd-position-',
|
|
129
|
+
// 'padding-top': 'zd-padding-',
|
|
130
|
+
// 'padding-bottom': 'zd-padding-',
|
|
131
|
+
// 'padding-left': 'zd-padding-',
|
|
132
|
+
// 'padding-right': 'zd-padding-',
|
|
133
|
+
// 'margin-top': 'zd-margin-',
|
|
134
|
+
// 'margin-bottom': 'zd-margin-',
|
|
135
|
+
// 'margin-left': 'zd-margin-',
|
|
136
|
+
// 'margin-right': 'zd-margin-'
|
|
137
|
+
// };
|
|
138
|
+
|
|
139
|
+
function allowParent(rule) {
|
|
140
|
+
return rule.parent.type === 'root' || rule.parent.type === 'atrule' && rule.parent.name === 'media';
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
module.exports = function (source) {
|
|
144
|
+
const {
|
|
145
|
+
resourcePath
|
|
146
|
+
} = this;
|
|
147
|
+
|
|
148
|
+
let root = _postcss.default.parse(source);
|
|
149
|
+
|
|
150
|
+
root.walkRules(rule => {
|
|
151
|
+
rule.walkDecls(decl => {
|
|
152
|
+
if (!allowParent(rule)) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
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)) {
|
|
157
|
+
let composeString = `from "${_path.default.relative(_path.default.parse(resourcePath).dir, // resourcePath
|
|
158
|
+
commonFilePath[decl.prop]).replace(/\\/gi, '/')}"`; // n++ < 10 && console.log(composeString);
|
|
159
|
+
|
|
160
|
+
if (!composeString.includes('src')) {
|
|
161
|
+
const cls = objToClassName(decl.prop, parseInt(decl.value));
|
|
162
|
+
composeString = `${cls} ${composeString}`;
|
|
163
|
+
decl.value = composeString;
|
|
164
|
+
decl.prop = 'composes'; // n < 10 && console.log(rule.selector, decl.prop, decl.value);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
const output = root.toString(); // console.log(output);
|
|
170
|
+
|
|
171
|
+
return output;
|
|
172
|
+
};
|
|
@@ -16,7 +16,7 @@ var _SingleEntryPlugin = _interopRequireDefault(require("webpack/lib/SingleEntry
|
|
|
16
16
|
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
18
|
|
|
19
|
-
/* import WebWorkerTemplatePlugin from 'webpack/lib/webworker/WebWorkerTemplatePlugin';
|
|
19
|
+
/* import WebWorkerTemplatePlugin from 'webpack/lib/webworker/WebWorkerTemplatePlugin';
|
|
20
20
|
import ExternalsPlugin from 'webpack/lib/ExternalsPlugin'; */
|
|
21
21
|
const schema = {
|
|
22
22
|
'type': 'object',
|
|
@@ -80,14 +80,14 @@ function pitch(request) {
|
|
|
80
80
|
globalObject: 'self'
|
|
81
81
|
};
|
|
82
82
|
workerContext.compiler = this._compilation.createChildCompiler(`worker-loader ${request}`, workerContext.options);
|
|
83
|
-
/*
|
|
84
|
-
new WebWorkerTemplatePlugin().apply(workerContext.compiler);
|
|
85
|
-
|
|
86
|
-
if (compilerOptions.externals) {
|
|
87
|
-
new ExternalsPlugin(
|
|
88
|
-
getExternalsType(compilerOptions),
|
|
89
|
-
compilerOptions.externals
|
|
90
|
-
).apply(workerContext.compiler);
|
|
83
|
+
/*
|
|
84
|
+
new WebWorkerTemplatePlugin().apply(workerContext.compiler);
|
|
85
|
+
|
|
86
|
+
if (compilerOptions.externals) {
|
|
87
|
+
new ExternalsPlugin(
|
|
88
|
+
getExternalsType(compilerOptions),
|
|
89
|
+
compilerOptions.externals
|
|
90
|
+
).apply(workerContext.compiler);
|
|
91
91
|
} */
|
|
92
92
|
|
|
93
93
|
new _SingleEntryPlugin.default(this.context, `!!${request}`, _path.default.parse(this.resourcePath).name).apply(workerContext.compiler);
|
|
@@ -51,6 +51,8 @@ const getDevPlugins = (options, publicPath) => {
|
|
|
51
51
|
hasShadowDOM,
|
|
52
52
|
cssVariableReplacementConfig,
|
|
53
53
|
plugins: pluginObject,
|
|
54
|
+
patterns,
|
|
55
|
+
patternsRootDir,
|
|
54
56
|
exclude,
|
|
55
57
|
selectorWeightConfig,
|
|
56
58
|
server: {
|
|
@@ -113,11 +115,11 @@ const getDevPlugins = (options, publicPath) => {
|
|
|
113
115
|
}
|
|
114
116
|
|
|
115
117
|
const i18nManifestFileName = 'i18n-manifest.json';
|
|
116
|
-
/**
|
|
117
|
-
* NOTE:
|
|
118
|
-
* this file name ext .i18n.js added
|
|
119
|
-
* Because, in service worker they maintain cache as file name based
|
|
120
|
-
* So, to make differce we added .i18n.js ext.
|
|
118
|
+
/**
|
|
119
|
+
* NOTE:
|
|
120
|
+
* this file name ext .i18n.js added
|
|
121
|
+
* Because, in service worker they maintain cache as file name based
|
|
122
|
+
* So, to make differce we added .i18n.js ext.
|
|
121
123
|
*/
|
|
122
124
|
|
|
123
125
|
const i18nFileNameTemplate = 'i18n-chunk/[locale]/[name].i18n.js';
|
|
@@ -199,16 +201,24 @@ const getDevPlugins = (options, publicPath) => {
|
|
|
199
201
|
|
|
200
202
|
if (pluginObject.cssVariableReplacement) {
|
|
201
203
|
pluginsArr.push(new _VariableConversionCollector.default({
|
|
202
|
-
cssVariableReplacementConfig
|
|
204
|
+
cssVariableReplacementConfig,
|
|
205
|
+
patterns,
|
|
206
|
+
patternsRootDir
|
|
203
207
|
}));
|
|
204
208
|
}
|
|
205
209
|
|
|
206
210
|
if (pluginObject.selectorWeight) {
|
|
207
211
|
pluginsArr.push(new _SelectorPlugin.default({
|
|
208
212
|
selectorWeightConfig,
|
|
209
|
-
exclude: exclude.selectorWeight
|
|
213
|
+
exclude: exclude.selectorWeight,
|
|
214
|
+
patterns,
|
|
215
|
+
patternsRootDir
|
|
210
216
|
}));
|
|
211
|
-
}
|
|
217
|
+
} // if (pluginObject.minifier) {
|
|
218
|
+
// // console.log('minifier active');
|
|
219
|
+
// pluginsArr.push(new MinifierPlugin());
|
|
220
|
+
// }
|
|
221
|
+
|
|
212
222
|
|
|
213
223
|
return pluginsArr.filter(Boolean);
|
|
214
224
|
};
|
|
@@ -47,12 +47,15 @@ const getProdPlugins = (options, publicPath = '') => {
|
|
|
47
47
|
bundleAnalyze,
|
|
48
48
|
optimize,
|
|
49
49
|
publicPaths,
|
|
50
|
+
patterns,
|
|
51
|
+
patternsRootDir,
|
|
50
52
|
hasEFC: prevOptionForEnableEFC,
|
|
51
53
|
enableSMapHook,
|
|
52
54
|
tpFolder,
|
|
53
55
|
folder,
|
|
54
56
|
outputFolder,
|
|
55
57
|
context,
|
|
58
|
+
exclude,
|
|
56
59
|
enableSMap,
|
|
57
60
|
server: {
|
|
58
61
|
mode
|
|
@@ -105,7 +108,7 @@ const getProdPlugins = (options, publicPath = '') => {
|
|
|
105
108
|
// ignoreOrder: true,
|
|
106
109
|
filename: cssLTRFileNameTempalte,
|
|
107
110
|
chunkFilename: cssLTRFileNameTempalte
|
|
108
|
-
}), new _plugins.ResourceHintsPlugin(), new _plugins.
|
|
111
|
+
}), new _plugins.ResourceHintsPlugin(), new _plugins.MinifyPlugin()];
|
|
109
112
|
|
|
110
113
|
if (enableRTLSplit) {
|
|
111
114
|
pluginsArr.push(new _RtlCssPlugin.RtlCssPlugin({
|
|
@@ -119,11 +122,11 @@ const getProdPlugins = (options, publicPath = '') => {
|
|
|
119
122
|
}
|
|
120
123
|
|
|
121
124
|
const i18nManifestFileName = 'i18n-manifest.json';
|
|
122
|
-
/**
|
|
123
|
-
* NOTE:
|
|
124
|
-
* this file name ext .i18n.js added
|
|
125
|
-
* Because, in service worker they maintain cache as file name based
|
|
126
|
-
* So, to make differce we added .i18n.js ext.
|
|
125
|
+
/**
|
|
126
|
+
* NOTE:
|
|
127
|
+
* this file name ext .i18n.js added
|
|
128
|
+
* Because, in service worker they maintain cache as file name based
|
|
129
|
+
* So, to make differce we added .i18n.js ext.
|
|
127
130
|
*/
|
|
128
131
|
|
|
129
132
|
const i18nFileNameTemplate = 'i18n-chunk/[locale]/[name].[chunkhash].i18n.js';
|
|
@@ -271,13 +274,18 @@ const getProdPlugins = (options, publicPath = '') => {
|
|
|
271
274
|
|
|
272
275
|
if (pluginObject.cssVariableReplacement) {
|
|
273
276
|
pluginsArr.push(new _VariableConversionCollector.default({
|
|
274
|
-
cssVariableReplacementConfig
|
|
277
|
+
cssVariableReplacementConfig,
|
|
278
|
+
patterns,
|
|
279
|
+
patternsRootDir
|
|
275
280
|
}));
|
|
276
281
|
}
|
|
277
282
|
|
|
278
283
|
if (pluginObject.selectorWeight) {
|
|
279
284
|
pluginsArr.push(new _SelectorPlugin.default({
|
|
280
|
-
selectorWeightConfig
|
|
285
|
+
selectorWeightConfig,
|
|
286
|
+
exclude: exclude.selectorWeight,
|
|
287
|
+
patterns,
|
|
288
|
+
patternsRootDir
|
|
281
289
|
}));
|
|
282
290
|
} // plugins.push(new VariableConversionCollector({}));
|
|
283
291
|
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
# CustomAttributePlugin
|
|
2
|
-
In this plugin we added all dynamic chunks tags (like js script tags , css script tags, i18n split script tags) to extra custom attribute
|
|
3
|
-
|
|
4
|
-
## Options
|
|
5
|
-
|
|
6
|
-
```json
|
|
7
|
-
{
|
|
8
|
-
"name": "some",
|
|
9
|
-
"react-cli": {
|
|
10
|
-
"app": {
|
|
11
|
-
"customAttributes": {// this is the all options
|
|
12
|
-
"enable": false,
|
|
13
|
-
"attributes": null,
|
|
14
|
-
"jsAttributes": null,
|
|
15
|
-
"cssAttributes": null,
|
|
16
|
-
"i18nAttributes": null
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### enable [Boolean]
|
|
23
|
-
this decides is this plugin or feature needs to be enabled of not.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
### attributes [Object]
|
|
27
|
-
It was object of key value pairs Example Given Option {"data-app-name":"myapp"}
|
|
28
|
-
Then all dynamically (js script tags , css script tags, i18n split script tags) added tags via webpack
|
|
29
|
-
|
|
30
|
-
### jsAttributes [Object]
|
|
31
|
-
same as [attributes] but only for js script tags
|
|
32
|
-
### cssAttributes [Object]
|
|
33
|
-
same as [attributes] but only for css script tags
|
|
34
|
-
### i18nAttributes [Object]
|
|
35
|
-
same as [attributes] but only for i18n split script tags
|
|
1
|
+
# CustomAttributePlugin
|
|
2
|
+
In this plugin we added all dynamic chunks tags (like js script tags , css script tags, i18n split script tags) to extra custom attribute
|
|
3
|
+
|
|
4
|
+
## Options
|
|
5
|
+
|
|
6
|
+
```json
|
|
7
|
+
{
|
|
8
|
+
"name": "some",
|
|
9
|
+
"react-cli": {
|
|
10
|
+
"app": {
|
|
11
|
+
"customAttributes": {// this is the all options
|
|
12
|
+
"enable": false,
|
|
13
|
+
"attributes": null,
|
|
14
|
+
"jsAttributes": null,
|
|
15
|
+
"cssAttributes": null,
|
|
16
|
+
"i18nAttributes": null
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### enable [Boolean]
|
|
23
|
+
this decides is this plugin or feature needs to be enabled of not.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### attributes [Object]
|
|
27
|
+
It was object of key value pairs Example Given Option {"data-app-name":"myapp"}
|
|
28
|
+
Then all dynamically (js script tags , css script tags, i18n split script tags) added tags via webpack
|
|
29
|
+
|
|
30
|
+
### jsAttributes [Object]
|
|
31
|
+
same as [attributes] but only for js script tags
|
|
32
|
+
### cssAttributes [Object]
|
|
33
|
+
same as [attributes] but only for css script tags
|
|
34
|
+
### i18nAttributes [Object]
|
|
35
|
+
same as [attributes] but only for i18n split script tags
|
package/lib/plugins/EFCPlugin.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# EFC Plugin
|
|
2
|
-
|
|
3
|
-
In EFC plugin we are create sdk file for efc related purpose
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# document will be soon
|
|
1
|
+
# EFC Plugin
|
|
2
|
+
|
|
3
|
+
In EFC plugin we are create sdk file for efc related purpose
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# document will be soon
|
|
@@ -115,10 +115,10 @@ class I18NInjectIntoIndexPlugin {
|
|
|
115
115
|
i18nObj = i18nFiles.reduce((res, next) => {
|
|
116
116
|
const fileName = next.replace(`i18n${_path.default.sep}`, '');
|
|
117
117
|
const splittedFileName = fileName.split('.');
|
|
118
|
-
/* if (this.isDevelopment) {
|
|
119
|
-
res[splittedFileName[0]] = `${this.publicPath}/i18n/${fileName}`;
|
|
120
|
-
} else {
|
|
121
|
-
res[splittedFileName[0]] = fileName;
|
|
118
|
+
/* if (this.isDevelopment) {
|
|
119
|
+
res[splittedFileName[0]] = `${this.publicPath}/i18n/${fileName}`;
|
|
120
|
+
} else {
|
|
121
|
+
res[splittedFileName[0]] = fileName;
|
|
122
122
|
} */
|
|
123
123
|
|
|
124
124
|
res[splittedFileName[0]] = `${this.publicPath}/i18n/${fileName}`;
|
|
@@ -13,23 +13,23 @@ var _hashUtils = require("./utils/hashUtils");
|
|
|
13
13
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
|
-
/**
|
|
17
|
-
* this plugin for the download i18n files
|
|
18
|
-
* So, if need to downoad i18n in browser this plugin handle that
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* this plugin works
|
|
22
|
-
* how it works?
|
|
23
|
-
* this plugin hook the requireEnsure method and we write logic for current compiled file download logic
|
|
24
|
-
*
|
|
25
|
-
* hinds:-
|
|
26
|
-
* requireEnsure method was loader for all js chunk's ,
|
|
27
|
-
* which means if we use dynamic import then this function will create script tag for that dynamic resource
|
|
28
|
-
* so every dynamic js chunk will load by this function,
|
|
29
|
-
* So we update this function with when dynamic jschunk call the nour code also execute
|
|
30
|
-
*
|
|
31
|
-
* some thing missing in this definetion
|
|
32
|
-
*
|
|
16
|
+
/**
|
|
17
|
+
* this plugin for the download i18n files
|
|
18
|
+
* So, if need to downoad i18n in browser this plugin handle that
|
|
19
|
+
*
|
|
20
|
+
*
|
|
21
|
+
* this plugin works
|
|
22
|
+
* how it works?
|
|
23
|
+
* this plugin hook the requireEnsure method and we write logic for current compiled file download logic
|
|
24
|
+
*
|
|
25
|
+
* hinds:-
|
|
26
|
+
* requireEnsure method was loader for all js chunk's ,
|
|
27
|
+
* which means if we use dynamic import then this function will create script tag for that dynamic resource
|
|
28
|
+
* so every dynamic js chunk will load by this function,
|
|
29
|
+
* So we update this function with when dynamic jschunk call the nour code also execute
|
|
30
|
+
*
|
|
31
|
+
* some thing missing in this definetion
|
|
32
|
+
*
|
|
33
33
|
*/
|
|
34
34
|
// import { REGEXP_HASH, REGEXP_CHUNKHASH } from './utils/hashUtils';
|
|
35
35
|
const pluginName = 'DownloadLogicOfI18n'; // const pluginName = 'i18n-plugin';
|
|
@@ -126,20 +126,20 @@ class I18nDownlodLogic {
|
|
|
126
126
|
return _webpack.Template.asString([source, '', '// object to store loaded I18N chunks', 'var installedI18nChunks = {', _webpack.Template.indent(mainChunk.ids.map(id => `${JSON.stringify(id)}: 0`).join(',\n')), '};']);
|
|
127
127
|
});
|
|
128
128
|
mainTemplate.hooks.requireEnsure.tap(pluginName, (source, mainChunk, hash) => {
|
|
129
|
-
/**
|
|
130
|
-
* for Information this is tapped in mainTemplate ,
|
|
131
|
-
* So this hooks argument chunk is main chunk means entry chunk mostly.
|
|
132
|
-
* if any chunk has i18n then we must write our download i18n logic,
|
|
129
|
+
/**
|
|
130
|
+
* for Information this is tapped in mainTemplate ,
|
|
131
|
+
* So this hooks argument chunk is main chunk means entry chunk mostly.
|
|
132
|
+
* if any chunk has i18n then we must write our download i18n logic,
|
|
133
133
|
*/
|
|
134
134
|
const chunkMap = this.getI18nChunkObject(mainChunk);
|
|
135
135
|
|
|
136
136
|
if (!Object.keys(chunkMap).length) {
|
|
137
137
|
return source;
|
|
138
138
|
}
|
|
139
|
-
/**
|
|
140
|
-
* chunkMaps has
|
|
141
|
-
* @property {Object} hash [it has key as chunk id and value as chunkHash ]
|
|
142
|
-
* @property {Object} name [it has key as chunk id and value as chunk name ]
|
|
139
|
+
/**
|
|
140
|
+
* chunkMaps has
|
|
141
|
+
* @property {Object} hash [it has key as chunk id and value as chunkHash ]
|
|
142
|
+
* @property {Object} name [it has key as chunk id and value as chunk name ]
|
|
143
143
|
*/
|
|
144
144
|
|
|
145
145
|
|
|
@@ -176,22 +176,22 @@ class I18nDownlodLogic {
|
|
|
176
176
|
},
|
|
177
177
|
contentHashType: MODULE_TYPE
|
|
178
178
|
});
|
|
179
|
-
/** IDEA:
|
|
180
|
-
* as my suggestion ignore this `jsop` approch,
|
|
181
|
-
* Because json parse is faster then js parse.
|
|
182
|
-
* my suggestion is make ajax or fetch request
|
|
179
|
+
/** IDEA:
|
|
180
|
+
* as my suggestion ignore this `jsop` approch,
|
|
181
|
+
* Because json parse is faster then js parse.
|
|
182
|
+
* my suggestion is make ajax or fetch request
|
|
183
183
|
*/
|
|
184
184
|
|
|
185
185
|
const buf = [];
|
|
186
|
-
/*
|
|
187
|
-
if (REGEXP_HASH.test(filenameTemplate)) {
|
|
188
|
-
buf.push(
|
|
189
|
-
`var hash = ${mainTemplate.renderCurrentHashCode(hash)};`
|
|
190
|
-
);
|
|
191
|
-
}
|
|
192
|
-
if (REGEXP_CHUNKHASH.test(filenameTemplate)) {
|
|
193
|
-
buf.push(`var chunkHashes = ${JSON.stringify(chunkMaps.hash)};`);
|
|
194
|
-
}
|
|
186
|
+
/*
|
|
187
|
+
if (REGEXP_HASH.test(filenameTemplate)) {
|
|
188
|
+
buf.push(
|
|
189
|
+
`var hash = ${mainTemplate.renderCurrentHashCode(hash)};`
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
if (REGEXP_CHUNKHASH.test(filenameTemplate)) {
|
|
193
|
+
buf.push(`var chunkHashes = ${JSON.stringify(chunkMaps.hash)};`);
|
|
194
|
+
}
|
|
195
195
|
*/
|
|
196
196
|
|
|
197
197
|
if ((0, _hashUtils.hasContentHash)(filenameTemplate)) {
|
|
@@ -13,8 +13,8 @@ var _getI18nKeysFormModules = _interopRequireDefault(require("./utils/getI18nKey
|
|
|
13
13
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
|
-
/**
|
|
17
|
-
* this plugin was creating the chunk specific i18n chunk's.
|
|
16
|
+
/**
|
|
17
|
+
* this plugin was creating the chunk specific i18n chunk's.
|
|
18
18
|
*/
|
|
19
19
|
// this plugin's kick starter is apply method
|
|
20
20
|
const pluginName = 'I18nFilesEmitter';
|
|
@@ -141,40 +141,40 @@ class I18nFilesEmitter {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
apply(compiler) {
|
|
144
|
-
/*
|
|
145
|
-
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
146
|
-
compilation.mainTemplate.hooks.renderManifest.tap(
|
|
147
|
-
pluginName,
|
|
148
|
-
(result, { chunk }) => {
|
|
149
|
-
this.renderChunk(result, compilation, chunk);
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
|
|
153
|
-
pluginName,
|
|
154
|
-
(result, { chunk }) => {
|
|
155
|
-
this.renderChunk(result, compilation, chunk);
|
|
156
|
-
}
|
|
157
|
-
);
|
|
158
|
-
});
|
|
144
|
+
/*
|
|
145
|
+
compiler.hooks.thisCompilation.tap(pluginName, compilation => {
|
|
146
|
+
compilation.mainTemplate.hooks.renderManifest.tap(
|
|
147
|
+
pluginName,
|
|
148
|
+
(result, { chunk }) => {
|
|
149
|
+
this.renderChunk(result, compilation, chunk);
|
|
150
|
+
}
|
|
151
|
+
);
|
|
152
|
+
compilation.chunkTemplate.hooks.renderManifest.tap(
|
|
153
|
+
pluginName,
|
|
154
|
+
(result, { chunk }) => {
|
|
155
|
+
this.renderChunk(result, compilation, chunk);
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
});
|
|
159
159
|
*/
|
|
160
160
|
// this below hook was tapped for create asssets(file) for chunk specific i18nChunk Files
|
|
161
161
|
compiler.hooks.emit.tap(pluginName, compilation => {
|
|
162
162
|
this.emitI18nAssert(compilation);
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
|
-
/*
|
|
166
|
-
renderChunk(result, compilation, chunk) {
|
|
167
|
-
const i18nKeys = getI18nKeysFormModules(chunk.modulesIterable);
|
|
168
|
-
// TODO: need to discuss with vimal ji can we chose this place for add i18n locale files ????
|
|
169
|
-
// IDEA: we chose this place for add i18n locale files ????
|
|
170
|
-
if (i18nKeys.length > 0) {
|
|
171
|
-
Object.keys(this.allI18nObject).forEach(locale => {
|
|
172
|
-
result.push(
|
|
173
|
-
this.renderI18nLocaleChunk(chunk, locale, i18nKeys, compilation)
|
|
174
|
-
);
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
}
|
|
165
|
+
/*
|
|
166
|
+
renderChunk(result, compilation, chunk) {
|
|
167
|
+
const i18nKeys = getI18nKeysFormModules(chunk.modulesIterable);
|
|
168
|
+
// TODO: need to discuss with vimal ji can we chose this place for add i18n locale files ????
|
|
169
|
+
// IDEA: we chose this place for add i18n locale files ????
|
|
170
|
+
if (i18nKeys.length > 0) {
|
|
171
|
+
Object.keys(this.allI18nObject).forEach(locale => {
|
|
172
|
+
result.push(
|
|
173
|
+
this.renderI18nLocaleChunk(chunk, locale, i18nKeys, compilation)
|
|
174
|
+
);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
178
|
*/
|
|
179
179
|
|
|
180
180
|
|
|
@@ -14,14 +14,14 @@ var _NullFactory = _interopRequireDefault(require("webpack/lib/NullFactory"));
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
16
|
const pluginName = 'I18nKeysIdentifer';
|
|
17
|
-
/**
|
|
18
|
-
* this plugin search the i18 keys and make it as I18nDependency.
|
|
19
|
-
* how it works?
|
|
20
|
-
* this plugin get jsResourceI18nKeys in constructor.
|
|
21
|
-
* we walk throught the js files AST
|
|
22
|
-
* if any string literal in that AST is in jsResourceI18nKeys then we consider that string as I18n key
|
|
23
|
-
* after the walk of AST we get some I18n keys
|
|
24
|
-
* then we make it as I18nDependency.
|
|
17
|
+
/**
|
|
18
|
+
* this plugin search the i18 keys and make it as I18nDependency.
|
|
19
|
+
* how it works?
|
|
20
|
+
* this plugin get jsResourceI18nKeys in constructor.
|
|
21
|
+
* we walk throught the js files AST
|
|
22
|
+
* if any string literal in that AST is in jsResourceI18nKeys then we consider that string as I18n key
|
|
23
|
+
* after the walk of AST we get some I18n keys
|
|
24
|
+
* then we make it as I18nDependency.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
class I18nKeysIdentifer {
|