@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.
Files changed (138) hide show
  1. package/.eslintignore +7 -7
  2. package/.eslintrc.js +180 -180
  3. package/.prettierrc +6 -6
  4. package/Changelog.md +1019 -1019
  5. package/README.md +1209 -1189
  6. package/bin/cli.js +489 -483
  7. package/docs/ComposeMinification.md +14 -0
  8. package/docs/CustomChunks.md +26 -26
  9. package/docs/DevServerPort.md +39 -39
  10. package/docs/DevStart.md +18 -18
  11. package/docs/HoverActive.md +12 -12
  12. package/docs/InstallNode.md +28 -28
  13. package/docs/SelectorWeight.md +8 -8
  14. package/docs/TODOS.md +10 -10
  15. package/docs/ValueReplacer.md +60 -60
  16. package/docs/VariableConversion.md +729 -729
  17. package/docs/warnings_while_install.txt +35 -35
  18. package/files/eslintrc.js +62 -62
  19. package/files/prettierrc.js +3 -3
  20. package/lib/common/buildEs.js +12 -0
  21. package/lib/configs/webpack.css.umd.config.js +4 -4
  22. package/lib/configs/webpack.dev.config.js +6 -0
  23. package/lib/configs/webpack.docs.config.js +4 -0
  24. package/lib/configs/webpack.impact.config.js +4 -0
  25. package/lib/configs/webpack.prod.config.js +6 -0
  26. package/lib/loaderUtils/configsAssetsLoaders.js +33 -33
  27. package/lib/loaderUtils/getCSSLoaders.js +80 -46
  28. package/lib/loaderUtils/tests/windowsModification.test.js +10 -0
  29. package/lib/loaderUtils/windowsModification.js +6 -1
  30. package/lib/loaders/composeLoader.js +172 -0
  31. package/lib/loaders/workerLoader.js +9 -9
  32. package/lib/pluginUtils/getDevPlugins.js +18 -8
  33. package/lib/pluginUtils/getProdPlugins.js +16 -8
  34. package/lib/pluginUtils/getUMDCSSPlugins.js +1 -1
  35. package/lib/pluginUtils/getUMDComponentPlugins.js +1 -1
  36. package/lib/plugins/CustomAttributePlugin.md +35 -35
  37. package/lib/plugins/EFCPlugin.md +6 -6
  38. package/lib/plugins/I18NInjectIntoIndexPlugin.js +4 -4
  39. package/lib/plugins/I18nSplitPlugin/I18nDownlodLogic.js +38 -38
  40. package/lib/plugins/I18nSplitPlugin/I18nFilesEmitter.js +30 -30
  41. package/lib/plugins/I18nSplitPlugin/I18nKeysIdentifer.js +8 -8
  42. package/lib/plugins/I18nSplitPlugin/I18nSplit.md +95 -95
  43. package/lib/plugins/I18nSplitPlugin/README.md +25 -25
  44. package/lib/plugins/I18nSplitPlugin/index.js +57 -57
  45. package/lib/plugins/{UglifyCSSPlugin.js → MinifyPlugin.js} +3 -3
  46. package/lib/plugins/ResourceHintsPlugin.js +17 -17
  47. package/lib/plugins/RtlSplitPlugin/RtlCssPlugin.js +6 -6
  48. package/lib/plugins/RtlSplitPlugin/RtrSplit.md +30 -30
  49. package/lib/plugins/SelectorPlugin.js +64 -40
  50. package/lib/plugins/ServiceWorkerPlugin.js +9 -9
  51. package/lib/plugins/TPHashMappingPlugin.js +4 -4
  52. package/lib/plugins/VariableConversionCollector.js +94 -84
  53. package/lib/plugins/index.js +7 -7
  54. package/lib/plugins/utils/classHandling.js +20 -0
  55. package/lib/plugins/utils/fileHandling.js +107 -0
  56. package/lib/plugins/utils/tests/fileHandling.test.js +30 -0
  57. package/lib/postcss-plugins/EmptyPlugin.js +8 -0
  58. package/lib/postcss-plugins/ExcludePlugin.js +1 -1
  59. package/lib/postcss-plugins/RTLSplitPlugin.js +10 -10
  60. package/lib/postcss-plugins/ValueReplacer.js +5 -14
  61. package/lib/postcss-plugins/__test__/test1Input.css +38 -38
  62. package/lib/postcss-plugins/__test__/test1Output.css +38 -38
  63. package/lib/postcss-plugins/hoverActivePlugin.js +3 -3
  64. package/lib/postcss-plugins/variableModificationPlugin/index.js +1 -19
  65. package/lib/schemas/index.js +31 -3
  66. package/lib/servers/server.js +2 -2
  67. package/lib/sh/pre-commit.sh +34 -34
  68. package/lib/sh/reportPublish.sh +45 -45
  69. package/lib/utils/buildstats.html +148 -148
  70. package/lib/utils/cssClassNameGenerate.js +40 -13
  71. package/lib/utils/getOptions.js +9 -0
  72. package/lib/utils/resultSchema.json +73 -73
  73. package/lib/utils/variableConvertor.js +159 -0
  74. package/npm8.md +9 -9
  75. package/{npm-shrinkwrap.json → package-lock.json} +14412 -14407
  76. package/package.json +121 -121
  77. package/postpublish.js +8 -8
  78. package/templates/app/.eslintrc.js +140 -140
  79. package/templates/app/README.md +12 -12
  80. package/templates/app/app/index.html +24 -24
  81. package/templates/app/app/properties/ApplicationResources_en_US.properties +1 -1
  82. package/templates/app/app/properties/i18nkeys.json +3 -3
  83. package/templates/app/docs/all.html +69 -69
  84. package/templates/app/mockapi/index.js +18 -18
  85. package/templates/app/package.json +37 -37
  86. package/templates/app/src/actions/SampleActions/index.js +37 -37
  87. package/templates/app/src/actions/index.js +65 -65
  88. package/templates/app/src/appUrls.js +19 -19
  89. package/templates/app/src/components/Alert/Alert.js +134 -134
  90. package/templates/app/src/components/Alert/Alert.module.css +79 -79
  91. package/templates/app/src/components/FreezeLayer/FreezeLayer.css +37 -37
  92. package/templates/app/src/components/FreezeLayer/FreezeLayer.js +84 -84
  93. package/templates/app/src/components/Sample/Sample.module.css +11 -11
  94. package/templates/app/src/components/Sample/SampleList.js +61 -61
  95. package/templates/app/src/components/Slider/Slider.css +41 -41
  96. package/templates/app/src/components/Slider/Slider.js +55 -55
  97. package/templates/app/src/containers/AlertContainer/index.js +15 -15
  98. package/templates/app/src/containers/AppContainer/index.js +96 -96
  99. package/templates/app/src/containers/AppContainer/index.module.css +27 -27
  100. package/templates/app/src/containers/CustomMatch/index.js +65 -65
  101. package/templates/app/src/containers/DevTools/index.js +10 -10
  102. package/templates/app/src/containers/Header/index.js +67 -67
  103. package/templates/app/src/containers/Header/index.module.css +43 -43
  104. package/templates/app/src/containers/Redirect/index.js +63 -63
  105. package/templates/app/src/containers/Redirector/index.js +47 -47
  106. package/templates/app/src/containers/SampleListContainer/ListContainer.js +42 -42
  107. package/templates/app/src/containers/SampleListContainer/ListContainer.module.css +3 -3
  108. package/templates/app/src/historyChange.js +5 -5
  109. package/templates/app/src/index.html +10 -10
  110. package/templates/app/src/index.js +24 -24
  111. package/templates/app/src/middleware/PromiseMiddleware.js +59 -59
  112. package/templates/app/src/reducers/alertData.js +11 -11
  113. package/templates/app/src/reducers/index.js +6 -6
  114. package/templates/app/src/reducers/samples.js +19 -19
  115. package/templates/app/src/store/configureStore.dev.js +51 -51
  116. package/templates/app/src/store/configureStore.js +5 -5
  117. package/templates/app/src/store/configureStore.prod.js +26 -26
  118. package/templates/app/src/util/Common.js +5 -5
  119. package/templates/app/src/util/RequestAPI.js +132 -132
  120. package/templates/docs/all.html +249 -249
  121. package/templates/docs/component.html +178 -178
  122. package/templates/docs/components.html +221 -221
  123. package/templates/docs/css/b.min.css +6 -6
  124. package/templates/docs/css/component.css +42 -42
  125. package/templates/docs/css/componentTest.css +6 -6
  126. package/templates/docs/css/hopscotch.css +585 -585
  127. package/templates/docs/css/style.css +1022 -1022
  128. package/templates/docs/impactReportTemplate.html +154 -154
  129. package/templates/docs/index.html +1501 -1501
  130. package/templates/docs/js/active-line.js +72 -72
  131. package/templates/docs/js/b.min.js +7 -7
  132. package/templates/docs/js/codemirror.js +9680 -9680
  133. package/templates/docs/js/designTokens.js +334 -334
  134. package/templates/docs/js/j.min.js +4 -4
  135. package/templates/docs/js/javascript.js +874 -874
  136. package/templates/docs/js/matchbrackets.js +145 -145
  137. package/lib/plugins/composeCommonPlugin.js +0 -30
  138. 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.UglifyCSSPlugin()];
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
 
@@ -27,7 +27,7 @@ let getUMDCSSPlugins = () => {
27
27
  }), new _miniCssExtractPlugin.default({
28
28
  filename: 'css/[name].css',
29
29
  chunkFilename: 'css/[id].css'
30
- }), new _plugins.UglifyCSSPlugin()];
30
+ }), new _plugins.MinifyPlugin()];
31
31
  return plugins;
32
32
  };
33
33
 
@@ -27,7 +27,7 @@ let getUMDComponentPlugins = isDocs => {
27
27
  }), new _miniCssExtractPlugin.default({
28
28
  filename: 'css/[name].css',
29
29
  chunkFilename: 'css/[name].css'
30
- }), new _plugins.UglifyCSSPlugin()];
30
+ }), new _plugins.MinifyPlugin()];
31
31
  return plugins;
32
32
  };
33
33
 
@@ -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
@@ -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
- compilation.chunkTemplate.hooks.renderManifest.tap(
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 {