@zohodesk/react-cli 0.0.1-exp.175.1 → 0.0.1-exp.176.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (250) hide show
  1. package/.eslintignore +7 -7
  2. package/.eslintrc.js +180 -180
  3. package/.prettierrc +6 -6
  4. package/README.md +1025 -1028
  5. package/bin/cli.js +482 -482
  6. package/cert/Tsicsezwild-22-23.crt +37 -37
  7. package/cert/Tsicsezwild-22-23.key +27 -27
  8. package/docs/CustomChunks.md +26 -26
  9. package/docs/DevStart.md +18 -18
  10. package/docs/HoverActive.md +12 -12
  11. package/docs/InstallNode.md +28 -28
  12. package/docs/SelectorWeight.md +6 -0
  13. package/docs/TODOS.md +10 -10
  14. package/docs/ValueReplacer.md +60 -60
  15. package/docs/VariableConversion.md +719 -678
  16. package/docs/warnings_while_install.txt +35 -35
  17. package/files/eslintrc.js +62 -62
  18. package/files/prettierrc.js +3 -3
  19. package/lib/babel/cmjs-plugins-presets.js +4 -0
  20. package/lib/babel/es-plugins-presets.js +4 -0
  21. package/lib/common/getEntries.js +10 -0
  22. package/lib/common/getPublicPathConfig.js +6 -0
  23. package/lib/common/index.js +5 -0
  24. package/lib/common/splitChunks.js +13 -2
  25. package/lib/common/sslcertUpdater.js +17 -6
  26. package/lib/common/templateParameters.js +2 -0
  27. package/lib/common/testPattern.js +21 -10
  28. package/lib/common/valueReplacer.js +15 -0
  29. package/lib/configs/jest.config.js +9 -0
  30. package/lib/configs/libAlias.js +2 -4
  31. package/lib/configs/webpack.component.umd.config.js +5 -0
  32. package/lib/configs/webpack.css.umd.config.js +13 -5
  33. package/lib/configs/webpack.dev.config.js +36 -2
  34. package/lib/configs/webpack.docs.config.js +21 -1
  35. package/lib/configs/webpack.impact.config.js +19 -1
  36. package/lib/configs/webpack.prod.config.js +37 -3
  37. package/lib/hooks/docsProptypeHook.js +7 -3
  38. package/lib/jest/commitedFilesResult.js +45 -3
  39. package/lib/jest/coverageCollector.js +11 -0
  40. package/lib/jest/jsonMaker.js +6 -0
  41. package/lib/jest/preProcessors/cssPreprocessor.js +8 -0
  42. package/lib/jest/preProcessors/jsPreprocessor.js +2 -0
  43. package/lib/jest/preProcessors/otherFilesPreprocessor.js +3 -0
  44. package/lib/jest/result.js +22 -0
  45. package/lib/jest/run.js +17 -6
  46. package/lib/jest/setup.js +57 -5
  47. package/lib/loaderUtils/configsAssetsLoaders.js +44 -34
  48. package/lib/loaderUtils/getCSSLoaders.js +35 -20
  49. package/lib/loaderUtils/getDevJsLoaders.js +8 -0
  50. package/lib/loaderUtils/index.js +3 -0
  51. package/lib/loaderUtils/windowsModification.js +11 -0
  52. package/lib/loaders/docsLoader.js +7 -0
  53. package/lib/loaders/docsPropsLoader.js +7 -3
  54. package/lib/loaders/fileBountryLoader.js +2 -0
  55. package/lib/loaders/fileLoader.js +22 -11
  56. package/lib/loaders/scriptInstrumentLoader.js +13 -5
  57. package/lib/loaders/selectorMappingLoader.js +25 -7
  58. package/lib/loaders/workerLoader.js +29 -13
  59. package/lib/middlewares/HMRMiddleware.js +26 -13
  60. package/lib/middlewares/SSTMiddleware.js +3 -0
  61. package/lib/pluginUtils/configHtmlWebpackPlugins.js +9 -3
  62. package/lib/pluginUtils/getDevPlugins.js +68 -22
  63. package/lib/pluginUtils/getDocsPlugins.js +10 -1
  64. package/lib/pluginUtils/getLibraryImactPlugins.js +5 -4
  65. package/lib/pluginUtils/getLibraryPlugins.js +5 -0
  66. package/lib/pluginUtils/getProdPlugins.js +77 -28
  67. package/lib/pluginUtils/getServerPlugins.js +5 -0
  68. package/lib/pluginUtils/getUMDCSSPlugins.js +7 -0
  69. package/lib/pluginUtils/getUMDComponentPlugins.js +7 -0
  70. package/lib/pluginUtils/index.js +8 -0
  71. package/lib/plugins/CdnChangePlugin.js +14 -0
  72. package/lib/plugins/CleanupStatsPlugin.js +5 -0
  73. package/lib/plugins/EFCPlugin.js +34 -23
  74. package/lib/plugins/EFCPlugin.md +6 -6
  75. package/lib/plugins/EFCTemplatePlugin.js +32 -23
  76. package/lib/plugins/I18NInjectIntoIndexPlugin.js +38 -12
  77. package/lib/plugins/I18nSplitPlugin/I18nDebugPlugin.js +17 -12
  78. package/lib/plugins/I18nSplitPlugin/I18nDependency.js +10 -4
  79. package/lib/plugins/I18nSplitPlugin/I18nDownlodLogic.js +77 -46
  80. package/lib/plugins/I18nSplitPlugin/I18nFilesEmitter.js +59 -44
  81. package/lib/plugins/I18nSplitPlugin/I18nKeysIdentifer.js +30 -21
  82. package/lib/plugins/I18nSplitPlugin/I18nSplit.md +95 -95
  83. package/lib/plugins/I18nSplitPlugin/README.md +25 -25
  84. package/lib/plugins/I18nSplitPlugin/index.js +80 -70
  85. package/lib/plugins/I18nSplitPlugin/utils/collectI18nKeys.js +12 -2
  86. package/lib/plugins/I18nSplitPlugin/utils/getI18nFileUrlPathTemplate.js +1 -0
  87. package/lib/plugins/I18nSplitPlugin/utils/getI18nKeysFormModules.js +5 -0
  88. package/lib/plugins/I18nSplitPlugin/utils/hashUtils.js +6 -0
  89. package/lib/plugins/I18nSplitPlugin/utils/index.js +4 -0
  90. package/lib/plugins/I18nSplitPlugin/utils/propertiesUtils.js +20 -2
  91. package/lib/plugins/ManifestPlugin.js +17 -0
  92. package/lib/plugins/ModuleStatsPlugin.js +23 -0
  93. package/lib/plugins/OptimizeJSPlugin.js +7 -0
  94. package/lib/plugins/PublicPathCallbackPlugin.js +10 -0
  95. package/lib/plugins/PublicPathChangePlugin.js +36 -4
  96. package/lib/plugins/ReportGeneratePlugin.js +30 -4
  97. package/lib/plugins/RequireVariablePublicPlugin.js +6 -0
  98. package/lib/plugins/ResourceHintsPlugin.js +27 -20
  99. package/lib/plugins/RtlSplitPlugin/OverwriteCssPathForRTL.js +17 -12
  100. package/lib/plugins/RtlSplitPlugin/RtlCssPlugin.js +22 -15
  101. package/lib/plugins/RtlSplitPlugin/RtrSplit.md +30 -30
  102. package/lib/plugins/RtlSplitPlugin/replaceCssDirTemplate.js +5 -2
  103. package/lib/plugins/ScriptInstrumentPlugin.js +7 -0
  104. package/lib/plugins/SelectorPlugin.js +97 -0
  105. package/lib/plugins/ServiceWorkerPlugin.js +29 -13
  106. package/lib/plugins/ShadowDOMSupportPlugin.js +40 -3
  107. package/lib/plugins/SourceMapHookPlugin.js +9 -0
  108. package/lib/plugins/TPHashMappingPlugin.js +19 -5
  109. package/lib/plugins/UglifyCSSPlugin.js +9 -0
  110. package/lib/plugins/UnusedFilesFindPlugin.js +35 -2
  111. package/lib/plugins/VariableConversionCollector.js +322 -0
  112. package/lib/plugins/composeCommonPlugin.js +30 -0
  113. package/lib/plugins/index.js +19 -0
  114. package/lib/plugins/libraryImpactPlugin.js +32 -0
  115. package/lib/plugins/webpackwatchrunplugin.js +5 -0
  116. package/lib/postcss-plugins/ExcludePlugin.js +4 -0
  117. package/lib/postcss-plugins/RTLSplitPlugin.js +37 -24
  118. package/lib/postcss-plugins/ValueReplacer.js +6 -9
  119. package/lib/postcss-plugins/__test__/hoverActivePlugin.spec.js +3 -0
  120. package/lib/postcss-plugins/__test__/test1Input.css +38 -38
  121. package/lib/postcss-plugins/__test__/test1Output.css +38 -38
  122. package/lib/postcss-plugins/hoverActivePlugin.js +69 -33
  123. package/lib/postcss-plugins/variableModificationPlugin/ErrorHandler.js +42 -13
  124. package/lib/postcss-plugins/variableModificationPlugin/index.js +216 -141
  125. package/lib/postcss-plugins/variableModifier.js +20 -13
  126. package/lib/schemas/index.js +23 -4
  127. package/lib/servers/clusterHubServer.js +10 -0
  128. package/lib/servers/devBuild.js +24 -13
  129. package/lib/servers/docsServer.js +2 -0
  130. package/lib/servers/docsServerCore.js +21 -0
  131. package/lib/servers/getCliPath.js +9 -0
  132. package/lib/servers/helpServer.js +5 -0
  133. package/lib/servers/httpsOptions.js +4 -0
  134. package/lib/servers/impactServer.js +34 -2
  135. package/lib/servers/mockserver.js +9 -0
  136. package/lib/servers/nowatchserver.js +34 -12
  137. package/lib/servers/scrServer.js +20 -13
  138. package/lib/servers/server.js +35 -7
  139. package/lib/servers/ssServer.js +16 -0
  140. package/lib/sh/pre-commit.sh +34 -34
  141. package/lib/sh/reportPublish.sh +45 -45
  142. package/lib/templates/CoverageScriptTemplate.js +14 -0
  143. package/lib/templates/WMSTemplate.js +12 -6
  144. package/lib/utils/babelPresets.js +2 -0
  145. package/lib/utils/buildstats.html +148 -148
  146. package/lib/utils/clean.js +8 -2
  147. package/lib/utils/copy.js +6 -0
  148. package/lib/utils/copyTimezones.js +8 -0
  149. package/lib/utils/createEventStream.js +4 -0
  150. package/lib/utils/cssClassNameGenerate.js +19 -3
  151. package/lib/utils/cssURLReplacer.js +25 -0
  152. package/lib/utils/dependencyPostPublish.js +9 -0
  153. package/lib/utils/fileUtils.js +26 -0
  154. package/lib/utils/folderIterator.js +10 -0
  155. package/lib/utils/getComponents.js +21 -0
  156. package/lib/utils/getCurrentBranch.js +5 -0
  157. package/lib/utils/getDependenciesImpactList.js +21 -0
  158. package/lib/utils/getHash.js +7 -0
  159. package/lib/utils/getIp.js +2 -0
  160. package/lib/utils/getOptions.js +39 -14
  161. package/lib/utils/getServerURL.js +7 -0
  162. package/lib/utils/index.js +47 -2
  163. package/lib/utils/init.js +1 -0
  164. package/lib/utils/initPreCommitHook.js +29 -6
  165. package/lib/utils/jsonHelper.js +19 -2
  166. package/lib/utils/libraryImpactConfig.js +2 -0
  167. package/lib/utils/lint/addScripts.js +5 -2
  168. package/lib/utils/lint/checkExistingConfig.js +12 -3
  169. package/lib/utils/lint/copyConfigs.js +3 -0
  170. package/lib/utils/lint/index.js +9 -0
  171. package/lib/utils/lint/lintScripts.js +1 -0
  172. package/lib/utils/lint/lintSetup.js +4 -3
  173. package/lib/utils/lint/lintStagedPreCommitHook.js +1 -0
  174. package/lib/utils/lint/question.js +7 -0
  175. package/lib/utils/lintReporter.js +20 -0
  176. package/lib/utils/mailSender.js +7 -0
  177. package/lib/utils/pullOrigin.js +4 -0
  178. package/lib/utils/reinstallDependencies.js +28 -0
  179. package/lib/utils/removeAttributes.js +7 -0
  180. package/lib/utils/repoClone.js +27 -2
  181. package/lib/utils/request.js +12 -0
  182. package/lib/utils/resultSchema.json +73 -73
  183. package/lib/utils/rtl.js +16 -4
  184. package/lib/utils/setEnvVariables.js +2 -0
  185. package/lib/utils/ssTestHack.js +10 -0
  186. package/lib/utils/switchBranch.js +4 -0
  187. package/lib/utils/urlConcat.js +4 -0
  188. package/lib/utils/useExitCleanup.js +10 -9
  189. package/npm8.md +9 -9
  190. package/package.json +146 -146
  191. package/postpublish.js +6 -6
  192. package/templates/app/.eslintrc.js +140 -140
  193. package/templates/app/README.md +12 -12
  194. package/templates/app/app/index.html +24 -24
  195. package/templates/app/app/properties/ApplicationResources_en_US.properties +1 -1
  196. package/templates/app/app/properties/i18nkeys.json +3 -3
  197. package/templates/app/docs/all.html +69 -69
  198. package/templates/app/mockapi/index.js +18 -18
  199. package/templates/app/package.json +37 -37
  200. package/templates/app/src/actions/SampleActions/index.js +37 -37
  201. package/templates/app/src/actions/index.js +65 -65
  202. package/templates/app/src/appUrls.js +19 -19
  203. package/templates/app/src/components/Alert/Alert.js +134 -134
  204. package/templates/app/src/components/Alert/Alert.module.css +79 -79
  205. package/templates/app/src/components/FreezeLayer/FreezeLayer.css +37 -37
  206. package/templates/app/src/components/FreezeLayer/FreezeLayer.js +84 -84
  207. package/templates/app/src/components/Sample/Sample.module.css +11 -11
  208. package/templates/app/src/components/Sample/SampleList.js +61 -61
  209. package/templates/app/src/components/Slider/Slider.css +41 -41
  210. package/templates/app/src/components/Slider/Slider.js +55 -55
  211. package/templates/app/src/containers/AlertContainer/index.js +15 -15
  212. package/templates/app/src/containers/AppContainer/index.js +96 -96
  213. package/templates/app/src/containers/AppContainer/index.module.css +27 -27
  214. package/templates/app/src/containers/CustomMatch/index.js +65 -65
  215. package/templates/app/src/containers/DevTools/index.js +10 -10
  216. package/templates/app/src/containers/Header/index.js +67 -67
  217. package/templates/app/src/containers/Header/index.module.css +43 -43
  218. package/templates/app/src/containers/Redirect/index.js +63 -63
  219. package/templates/app/src/containers/Redirector/index.js +47 -47
  220. package/templates/app/src/containers/SampleListContainer/ListContainer.js +42 -42
  221. package/templates/app/src/containers/SampleListContainer/ListContainer.module.css +3 -3
  222. package/templates/app/src/historyChange.js +5 -5
  223. package/templates/app/src/index.html +10 -10
  224. package/templates/app/src/index.js +24 -24
  225. package/templates/app/src/middleware/PromiseMiddleware.js +59 -59
  226. package/templates/app/src/reducers/alertData.js +11 -11
  227. package/templates/app/src/reducers/index.js +6 -6
  228. package/templates/app/src/reducers/samples.js +19 -19
  229. package/templates/app/src/store/configureStore.dev.js +51 -51
  230. package/templates/app/src/store/configureStore.js +5 -5
  231. package/templates/app/src/store/configureStore.prod.js +26 -26
  232. package/templates/app/src/util/Common.js +5 -5
  233. package/templates/app/src/util/RequestAPI.js +132 -132
  234. package/templates/docs/all.html +249 -249
  235. package/templates/docs/component.html +178 -178
  236. package/templates/docs/components.html +221 -221
  237. package/templates/docs/css/b.min.css +6 -6
  238. package/templates/docs/css/component.css +42 -42
  239. package/templates/docs/css/componentTest.css +6 -6
  240. package/templates/docs/css/hopscotch.css +585 -585
  241. package/templates/docs/css/style.css +1022 -1022
  242. package/templates/docs/impactReportTemplate.html +154 -154
  243. package/templates/docs/index.html +1501 -1501
  244. package/templates/docs/js/active-line.js +72 -72
  245. package/templates/docs/js/b.min.js +7 -7
  246. package/templates/docs/js/codemirror.js +9680 -9680
  247. package/templates/docs/js/designTokens.js +334 -334
  248. package/templates/docs/js/j.min.js +4 -4
  249. package/templates/docs/js/javascript.js +874 -874
  250. package/templates/docs/js/matchbrackets.js +145 -145
@@ -4,49 +4,59 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
7
8
  var _webpack = require("webpack");
9
+
8
10
  var _I18nKeysIdentifer = _interopRequireDefault(require("./I18nKeysIdentifer"));
11
+
9
12
  var _hashUtils = require("./utils/hashUtils");
13
+
10
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- /**
12
- * this plugin for the download i18n files
13
- * So, if need to downoad i18n in browser this plugin handle that
14
- *
15
- *
16
- * this plugin works
17
- * how it works?
18
- * this plugin hook the requireEnsure method and we write logic for current compiled file download logic
19
- *
20
- * hinds:-
21
- * requireEnsure method was loader for all js chunk's ,
22
- * which means if we use dynamic import then this function will create script tag for that dynamic resource
23
- * so every dynamic js chunk will load by this function,
24
- * So we update this function with when dynamic jschunk call the nour code also execute
25
- *
26
- * some thing missing in this definetion
27
- *
28
- */
29
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
+ *
33
+ */
30
34
  // import { REGEXP_HASH, REGEXP_CHUNKHASH } from './utils/hashUtils';
35
+ const pluginName = 'DownloadLogicOfI18n'; // const pluginName = 'i18n-plugin';
31
36
 
32
- const pluginName = 'DownloadLogicOfI18n';
33
- // const pluginName = 'i18n-plugin';
34
37
  const MODULE_TYPE = 'json/i18n';
38
+
35
39
  const ltype = locale => `${MODULE_TYPE}/${locale}`;
40
+
36
41
  function hashesWithLength(hashes, length) {
37
42
  const shortChunkHashMap = {};
43
+
38
44
  for (let key of Object.keys(hashes)) {
39
45
  if (typeof hashes[key] === 'string') {
40
46
  shortChunkHashMap[key] = hashes.slice(0, length);
41
47
  }
42
48
  }
49
+
43
50
  return shortChunkHashMap;
44
51
  }
52
+
45
53
  function getContentHashMaxLength(filenameTemplate) {
46
54
  let length = 0;
47
55
  let matches = filenameTemplate.match(_hashUtils.REGEXP_CONTENTHASH);
56
+
48
57
  for (let match of matches) {
49
58
  let tem = match.match(/\d+/);
59
+
50
60
  if (tem) {
51
61
  length = Math.max(parseInt(tem[0]), length);
52
62
  } else {
@@ -54,8 +64,10 @@ function getContentHashMaxLength(filenameTemplate) {
54
64
  break;
55
65
  }
56
66
  }
67
+
57
68
  return length;
58
69
  }
70
+
59
71
  class I18nDownlodLogic {
60
72
  constructor({
61
73
  filenameTemplate,
@@ -70,53 +82,67 @@ class I18nDownlodLogic {
70
82
  localeVarName
71
83
  };
72
84
  }
85
+
73
86
  getShortContentHashes(chunk, hashLength) {
74
87
  let allContenHashes = {};
75
88
  const chunkMaps = chunk.getChunkMaps();
76
89
  this.locales.forEach(locale => {
77
90
  allContenHashes[locale] = chunkMaps.contentHash[ltype(locale)];
78
91
  });
92
+
79
93
  if (!length) {
80
94
  return allContenHashes;
81
95
  }
96
+
82
97
  let shortContentHashMap = {};
98
+
83
99
  for (const locale of this.locales) {
84
100
  shortContentHashMap[locale] = hashesWithLength(allContenHashes[locale], hashLength);
85
101
  }
102
+
86
103
  return shortContentHashMap;
87
104
  }
105
+
88
106
  getI18nChunkObject(mainChunk) {
89
107
  const obj = {};
108
+
90
109
  for (const chunk of mainChunk.getAllAsyncChunks()) {
91
110
  if (_I18nKeysIdentifer.default.isChunkHasI18n(chunk)) {
92
111
  obj[chunk.id] = 1;
93
112
  }
94
113
  }
114
+
95
115
  return obj;
96
116
  }
117
+
97
118
  addDownloadLogicOfI18nInMainTemplate(mainTemplate) {
98
119
  mainTemplate.hooks.localVars.tap(pluginName, (source, mainChunk) => {
99
120
  const chunkMap = this.getI18nChunkObject(mainChunk);
121
+
100
122
  if (!Object.keys(chunkMap).length) {
101
123
  return source;
102
124
  }
125
+
103
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')), '};']);
104
127
  });
105
128
  mainTemplate.hooks.requireEnsure.tap(pluginName, (source, mainChunk, hash) => {
106
- /**
107
- * for Information this is tapped in mainTemplate ,
108
- * So this hooks argument chunk is main chunk means entry chunk mostly.
109
- * 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,
110
133
  */
111
134
  const chunkMap = this.getI18nChunkObject(mainChunk);
135
+
112
136
  if (!Object.keys(chunkMap).length) {
113
137
  return source;
114
138
  }
115
- /**
116
- * chunkMaps has
117
- * @property {Object} hash [it has key as chunk id and value as chunkHash ]
118
- * @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 ]
119
143
  */
144
+
145
+
120
146
  const chunkMaps = mainChunk.getChunkMaps();
121
147
  const {
122
148
  crossOriginLoading
@@ -125,18 +151,19 @@ class I18nDownlodLogic {
125
151
  filenameTemplate,
126
152
  localeVarName = 'document.documentElement.lang'
127
153
  } = this.options;
128
- const i18nSrcPath = mainTemplate.getAssetPath(JSON.stringify(filenameTemplate).replace(/\[locale\]/gi, '"+ locale +"'),
129
- // "i18n-chunk/[locale]/[name].[chunkhash].js"
154
+ const i18nSrcPath = mainTemplate.getAssetPath(JSON.stringify(filenameTemplate).replace(/\[locale\]/gi, '"+ locale +"'), // "i18n-chunk/[locale]/[name].[chunkhash].js"
130
155
  {
131
156
  hash: `" + ${mainTemplate.renderCurrentHashCode(hash)} + "`,
132
157
  hashWithLength: length => `" + ${mainTemplate.renderCurrentHashCode(hash, length)} + "`,
133
158
  chunk: {
134
159
  id: '" + chunkId + "',
135
160
  hash: `" + ${JSON.stringify(chunkMaps.hash)}[chunkId] + "`,
161
+
136
162
  hashWithLength(length) {
137
163
  const shortChunkHashMap = hashesWithLength(chunkMaps.hash, length);
138
164
  return `" + ${JSON.stringify(shortChunkHashMap)}[chunkId] + "`;
139
165
  },
166
+
140
167
  // contentHash: contentHashMap,
141
168
  // contentHashWithLength: contentHashLengthMap,
142
169
  contentHash: {
@@ -149,31 +176,33 @@ class I18nDownlodLogic {
149
176
  },
150
177
  contentHashType: MODULE_TYPE
151
178
  });
152
-
153
- /** IDEA:
154
- * as my suggestion ignore this `jsop` approch,
155
- * Because json parse is faster then js parse.
156
- * 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
157
183
  */
158
184
 
159
185
  const buf = [];
160
- /*
161
- if (REGEXP_HASH.test(filenameTemplate)) {
162
- buf.push(
163
- `var hash = ${mainTemplate.renderCurrentHashCode(hash)};`
164
- );
165
- }
166
- if (REGEXP_CHUNKHASH.test(filenameTemplate)) {
167
- buf.push(`var chunkHashes = ${JSON.stringify(chunkMaps.hash)};`);
168
- }
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
+ }
169
195
  */
196
+
170
197
  if ((0, _hashUtils.hasContentHash)(filenameTemplate)) {
171
198
  const hashLength = getContentHashMaxLength(filenameTemplate);
172
199
  const contentHashes = this.getShortContentHashes(mainChunk, hashLength);
173
200
  buf.push(_webpack.Template.asString(['// all i18n files contentHash ', `var i18nContentHashes = ${JSON.stringify(contentHashes)};`, '', 'if (!i18nContentHashes[locale]) {', ' console.warn("this locale is "+locale + " not has support")', ' return;', '}', 'if (!i18nContentHashes[locale][chunkId]) {', ' console.warn("this chunkId is " + chunkId + " does not have \'"+locale+"\' locale chunk")', ' return;', '}']));
174
201
  buf.push('var contentHash = i18nContentHashes[locale][chunkId]');
175
202
  }
203
+
176
204
  const hashUtils = _webpack.Template.asString(buf);
205
+
177
206
  const publicPath = this.publicPath ? JSON.stringify(this.publicPath) : `${mainTemplate.requireFn}.p`;
178
207
  return _webpack.Template.asString([source, `
179
208
  (function() {
@@ -187,8 +216,7 @@ class I18nDownlodLogic {
187
216
  } else if(installedI18nChunks[chunkId] !== 0 && i18nChunks[chunkId]) {
188
217
  promises.push(installedI18nChunks[chunkId] = new Promise(function(resolve, reject) {
189
218
  var srcPath = (${i18nSrcPath});
190
- ${''
191
- // TODO: I think this is the area for download chunk of i18n we can
219
+ ${'' // TODO: I think this is the area for download chunk of i18n we can
192
220
  // change mainTemplate.requireFn as our cdn server urls !!!
193
221
  // and we can change the i18n download logic here
194
222
  }
@@ -223,6 +251,7 @@ class I18nDownlodLogic {
223
251
  })()`]);
224
252
  });
225
253
  }
254
+
226
255
  apply(compiler) {
227
256
  compiler.hooks.thisCompilation.tap(pluginName, compilation => {
228
257
  const {
@@ -231,5 +260,7 @@ class I18nDownlodLogic {
231
260
  this.addDownloadLogicOfI18nInMainTemplate(mainTemplate);
232
261
  });
233
262
  }
263
+
234
264
  }
265
+
235
266
  exports.default = I18nDownlodLogic;
@@ -4,19 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
7
8
  var _webpackSources = require("webpack-sources");
9
+
8
10
  var _utils = require("./utils");
11
+
9
12
  var _getI18nKeysFormModules = _interopRequireDefault(require("./utils/getI18nKeysFormModules"));
13
+
10
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- /**
12
- * this plugin was creating the chunk specific i18n chunk's.
13
- */
14
15
 
16
+ /**
17
+ * this plugin was creating the chunk specific i18n chunk's.
18
+ */
15
19
  // this plugin's kick starter is apply method
16
-
17
20
  const pluginName = 'I18nFilesEmitter';
18
21
  const MODULE_TYPE = 'json/i18n';
22
+
19
23
  const i18ntype = locale => `${MODULE_TYPE}/${locale}`;
24
+
20
25
  class I18nFilesEmitter {
21
26
  constructor({
22
27
  allI18nObject,
@@ -27,12 +32,13 @@ class I18nFilesEmitter {
27
32
  }) {
28
33
  this.locales = locales;
29
34
  this.allI18nObject = allI18nObject;
30
- this.filenameTemplate = filenameTemplate;
31
- // this.filenameTemplate = "i18n-chunk/[locale]/[name].js"
35
+ this.filenameTemplate = filenameTemplate; // this.filenameTemplate = "i18n-chunk/[locale]/[name].js"
36
+
32
37
  this.jsonpFunc = jsonpFunc;
33
38
  this.prevHashes = {};
34
39
  this.i18nManifestFileName = i18nManifestFileName;
35
40
  }
41
+
36
42
  emitAsset(compilation, filename, source, info) {
37
43
  // NOTE: info support available since webpack v4.40.0 https://webpack.js.org/api/stats/#asset-objects
38
44
  if (!compilation.emitAsset) {
@@ -40,9 +46,9 @@ class I18nFilesEmitter {
40
46
  } else {
41
47
  compilation.emitAsset(filename, source, info);
42
48
  }
43
- }
49
+ } // this method for create object and assign value for i18nkeys
50
+
44
51
 
45
- // this method for create object and assign value for i18nkeys
46
52
  getI18nObjectByLocale(i18nKeys, locale) {
47
53
  const data = {};
48
54
  i18nKeys.forEach(key => {
@@ -50,10 +56,10 @@ class I18nFilesEmitter {
50
56
  });
51
57
  return data;
52
58
  }
59
+
53
60
  getTemplateString(i18nKeys, locale) {
54
61
  let i18nObject = this.getI18nObjectByLocale(i18nKeys, locale);
55
- return `${this.jsonpFunc}(${(0, _utils.jsonToString)(i18nObject)});`;
56
- // return `${this.jsonpFunc}(JSON.parse(${JSON.stringify(jsonToString(i18nObject))}));`;
62
+ return `${this.jsonpFunc}(${(0, _utils.jsonToString)(i18nObject)});`; // return `${this.jsonpFunc}(JSON.parse(${JSON.stringify(jsonToString(i18nObject))}));`;
57
63
  }
58
64
 
59
65
  renderI18nLocaleChunk(chunk, locale, i18nKeys) {
@@ -71,6 +77,7 @@ class I18nFilesEmitter {
71
77
  hash: chunk.contentHash[i18ntype(locale)]
72
78
  };
73
79
  }
80
+
74
81
  emitI18nFilesForChunk(chunk, compilation) {
75
82
  const i18nKeys = (0, _getI18nKeysFormModules.default)(chunk.modulesIterable);
76
83
  const manifestForChunk = {
@@ -78,12 +85,14 @@ class I18nFilesEmitter {
78
85
  hasI18n: false,
79
86
  hasChanges: false
80
87
  };
88
+
81
89
  if (!i18nKeys.length) {
82
90
  // why it is not checked as 0
83
91
  return manifestForChunk;
84
92
  }
85
- manifestForChunk.hasI18n = true;
86
- // const locales = ['en_US'];
93
+
94
+ manifestForChunk.hasI18n = true; // const locales = ['en_US'];
95
+
87
96
  this.locales.forEach(locale => {
88
97
  const result = this.renderI18nLocaleChunk(chunk, locale, i18nKeys, compilation);
89
98
  const {
@@ -95,31 +104,34 @@ class I18nFilesEmitter {
95
104
  } = result;
96
105
  const filePath = compilation.getPath(filenameTemplate, pathOptions);
97
106
  manifestForChunk.assets[locale] = filePath;
107
+
98
108
  if (this.prevHashes[identifier] === hash) {
99
109
  return;
100
110
  }
111
+
101
112
  manifestForChunk.hasChanges = true;
102
113
  this.prevHashes[identifier] = hash;
103
114
  this.emitAsset(compilation, filePath, render(), {
104
115
  locale,
105
116
  chunkId: chunk.id,
106
117
  chunkName: chunk.name
107
- });
108
- // compilation.assets[filePath] = render();
118
+ }); // compilation.assets[filePath] = render();
109
119
  });
110
-
111
120
  return manifestForChunk;
112
121
  }
122
+
113
123
  emitI18nAssert(compilation) {
114
124
  let manifest = {};
115
125
  let needEmitManifest = false;
116
126
  compilation.chunks.forEach(chunk => {
117
127
  const manifestForChunk = this.emitI18nFilesForChunk(chunk, compilation);
128
+
118
129
  if (manifestForChunk.hasI18n) {
119
130
  manifest[chunk.id] = manifestForChunk.assets;
120
131
  needEmitManifest = needEmitManifest || manifestForChunk.hasChanges;
121
132
  }
122
133
  });
134
+
123
135
  if (needEmitManifest) {
124
136
  const manifestSource = new _webpackSources.RawSource(JSON.stringify(manifest));
125
137
  this.emitAsset(compilation, this.i18nManifestFileName, manifestSource, {
@@ -127,42 +139,45 @@ class I18nFilesEmitter {
127
139
  });
128
140
  }
129
141
  }
142
+
130
143
  apply(compiler) {
131
- /*
132
- compiler.hooks.thisCompilation.tap(pluginName, compilation => {
133
- compilation.mainTemplate.hooks.renderManifest.tap(
134
- pluginName,
135
- (result, { chunk }) => {
136
- this.renderChunk(result, compilation, chunk);
137
- }
138
- );
139
- compilation.chunkTemplate.hooks.renderManifest.tap(
140
- pluginName,
141
- (result, { chunk }) => {
142
- this.renderChunk(result, compilation, chunk);
143
- }
144
- );
145
- });
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
+ });
146
159
  */
147
160
  // this below hook was tapped for create asssets(file) for chunk specific i18nChunk Files
148
161
  compiler.hooks.emit.tap(pluginName, compilation => {
149
162
  this.emitI18nAssert(compilation);
150
163
  });
151
164
  }
152
-
153
- /*
154
- renderChunk(result, compilation, chunk) {
155
- const i18nKeys = getI18nKeysFormModules(chunk.modulesIterable);
156
- // TODO: need to discuss with vimal ji can we chose this place for add i18n locale files ????
157
- // IDEA: we chose this place for add i18n locale files ????
158
- if (i18nKeys.length > 0) {
159
- Object.keys(this.allI18nObject).forEach(locale => {
160
- result.push(
161
- this.renderI18nLocaleChunk(chunk, locale, i18nKeys, compilation)
162
- );
163
- });
164
- }
165
- }
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
+ }
166
178
  */
179
+
180
+
167
181
  }
182
+
168
183
  exports.default = I18nFilesEmitter;
@@ -4,37 +4,43 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
7
8
  var _utils = require("./utils");
9
+
8
10
  var _I18nDependency = require("./I18nDependency");
11
+
9
12
  var _NullFactory = _interopRequireDefault(require("webpack/lib/NullFactory"));
13
+
10
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- const pluginName = 'I18nKeysIdentifer';
12
15
 
13
- /**
14
- * this plugin search the i18 keys and make it as I18nDependency.
15
- * how it works?
16
- * this plugin get jsResourceI18nKeys in constructor.
17
- * we walk throught the js files AST
18
- * if any string literal in that AST is in jsResourceI18nKeys then we consider that string as I18n key
19
- * after the walk of AST we get some I18n keys
20
- * then we make it as I18nDependency.
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.
21
25
  */
26
+
22
27
  class I18nKeysIdentifer {
23
28
  constructor(jsResourceI18nKeys) {
24
29
  this.jsResourceI18nKeys = jsResourceI18nKeys;
25
30
  }
31
+
26
32
  defineConfigarationForI18nDependency(compilation) {
27
33
  compilation.dependencyFactories.set(_I18nDependency.I18nDependency, new _NullFactory.default());
28
34
  compilation.dependencyTemplates.set(_I18nDependency.I18nDependency, new _I18nDependency.I18nDependencyTemplate());
29
35
  }
36
+
30
37
  addI18nDependency(module, i18nKeys) {
31
38
  const identifier = `i18n ${module.resource}`;
32
39
  const dep = new _I18nDependency.I18nDependency({
33
40
  identifier,
34
41
  i18nKeys
35
42
  }, module.context, 0);
36
- module.addDependency(dep);
37
- // console.log('module', i18nKeys, identifier);
43
+ module.addDependency(dep); // console.log('module', i18nKeys, identifier);
38
44
  }
39
45
 
40
46
  apply(compiler) {
@@ -42,23 +48,23 @@ class I18nKeysIdentifer {
42
48
  // this below hook was tapped for we use I18nDependency
43
49
  // so we must define module factory for I18nDependency
44
50
  // and we must define how it import statement look like I18nDependencyTemplate
45
- this.defineConfigarationForI18nDependency(compilation);
51
+ this.defineConfigarationForI18nDependency(compilation); // handler for parser
46
52
 
47
- // handler for parser
48
53
  let handler = parser => {
49
54
  parser.hooks.program.tap(pluginName, (ast, commmets) => {
50
55
  const {
51
56
  module
52
- } = parser.state;
53
- //
57
+ } = parser.state; //
58
+
54
59
  if (!(module && /\.jsx?$/.test(module.resource))) {
55
60
  return;
56
- }
57
- // i18n grep proper contract regex
61
+ } // i18n grep proper contract regex
62
+
63
+
58
64
  let i18nKeys = (0, _utils.collectI18nKeysfromAST)(ast, this.jsResourceI18nKeys);
59
- i18nKeys = i18nKeys.concat(
60
- // i18n grep proper contract regex
65
+ i18nKeys = i18nKeys.concat( // i18n grep proper contract regex
61
66
  (0, _utils.collectI18nKeysfromComments)(commmets, this.jsResourceI18nKeys));
67
+
62
68
  if (i18nKeys.length) {
63
69
  // console.log(
64
70
  // 'i18nKeys.length',
@@ -68,17 +74,19 @@ class I18nKeysIdentifer {
68
74
  this.addI18nDependency(module, i18nKeys);
69
75
  }
70
76
  });
71
- };
77
+ }; // this below hook was tapped for collect I18n Key from files and add as Deppenensy
72
78
 
73
- // this below hook was tapped for collect I18n Key from files and add as Deppenensy
74
79
 
75
80
  const factory = params.normalModuleFactory;
76
81
  factory.hooks.parser.for('javascript/auto').tap(pluginName, handler);
77
82
  factory.hooks.parser.for('javascript/dynamic').tap(pluginName, handler);
78
83
  });
79
84
  }
85
+
80
86
  }
87
+
81
88
  exports.default = I18nKeysIdentifer;
89
+
82
90
  I18nKeysIdentifer.isChunkHasI18n = function (chunk) {
83
91
  for (const module of chunk.modulesIterable) {
84
92
  for (const dep of module.dependencies) {
@@ -87,5 +95,6 @@ I18nKeysIdentifer.isChunkHasI18n = function (chunk) {
87
95
  }
88
96
  }
89
97
  }
98
+
90
99
  return false;
91
100
  };