@zohodesk/client_build_tool 0.0.1-0.exp.0.0.3

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 (259) hide show
  1. package/.babelrc +12 -0
  2. package/.lintstagedrc +3 -0
  3. package/.vscode/settings.json +5 -0
  4. package/CHANGELOG.md +84 -0
  5. package/ConfigurationDocumentation.md +567 -0
  6. package/ContributionGuide.md +2 -0
  7. package/NOTES-Dec12.md +12 -0
  8. package/README.md +184 -0
  9. package/README_backup.md +100 -0
  10. package/TODO.md +35 -0
  11. package/cli.js +31 -0
  12. package/docs/BabelCustomizations.md +55 -0
  13. package/docs/CSSCustomPluginsDocumentation.md +71 -0
  14. package/docs/CustomChunksConfiguration.md +0 -0
  15. package/docs/EFCFileTemplate.md +0 -0
  16. package/docs/MockApi.md +61 -0
  17. package/docs/NameTemplateUtility.md +93 -0
  18. package/docs/ServiseWorkerTemplate.md +0 -0
  19. package/docs/SupportedBrowserVersions.md +61 -0
  20. package/helpDocs/check.js +7 -0
  21. package/helpDocs/commmands/build.md +0 -0
  22. package/helpDocs/commmands/start.md +0 -0
  23. package/helpDocs/examples/buildWithContentHash.md +0 -0
  24. package/helpDocs/examples/startDevServer.md +0 -0
  25. package/helpDocs/examples/startWithMockAPI.md +0 -0
  26. package/helpDocs/node18-env.md +30 -0
  27. package/helpDocs/troubleshootings/NewMachineSetup.md +71 -0
  28. package/helpDocs/troubleshootings/README.md +9 -0
  29. package/helpDocs/troubleshootings/hg_install.sh +18 -0
  30. package/helpDocs/troubleshootings/newMachineMac.sh +86 -0
  31. package/helpDocs/troubleshootings/newMachineUbundu.bash +84 -0
  32. package/lib/allCommandsConfigs.js +25 -0
  33. package/lib/commands/build/commandExecutor.js +17 -0
  34. package/lib/commands/build/config.js +12 -0
  35. package/lib/commands/build/optionsProcessor.js +35 -0
  36. package/lib/commands/build/preProcessor.js +12 -0
  37. package/lib/commands/buildEs/commandExecutor.js +33 -0
  38. package/lib/commands/buildEs/config.js +12 -0
  39. package/lib/commands/buildEs/preProcessor.js +17 -0
  40. package/lib/commands/buildLib/commandExecutor.js +33 -0
  41. package/lib/commands/buildLib/config.js +12 -0
  42. package/lib/commands/buildLib/preProcessor.js +17 -0
  43. package/lib/commands/mockserver/commandExecutor.js +43 -0
  44. package/lib/commands/mockserver/config.js +12 -0
  45. package/lib/commands/pre_process/commandExecutor.js +18 -0
  46. package/lib/commands/pre_process/config.js +12 -0
  47. package/lib/commands/start/commandExecutor.js +12 -0
  48. package/lib/commands/start/config.js +12 -0
  49. package/lib/commands/start/optionsProcessor.js +30 -0
  50. package/lib/commands/start/preProcessor.js +12 -0
  51. package/lib/commands/template/commandExecutor.js +28 -0
  52. package/lib/commands/template/config.js +12 -0
  53. package/lib/commands/version/commandExecutor.js +14 -0
  54. package/lib/commands/version/config.js +12 -0
  55. package/lib/commandsRouter.js +74 -0
  56. package/lib/index.js +12 -0
  57. package/lib/logger.js +34 -0
  58. package/lib/schemas/applyValuesToSchema/index.js +34 -0
  59. package/lib/schemas/applyValuesToSchema/isObject.js +10 -0
  60. package/lib/schemas/applyValuesToSchema/isValid.js +14 -0
  61. package/lib/schemas/cliArgsToObject.js +39 -0
  62. package/lib/schemas/defaultConfigValues.js +393 -0
  63. package/lib/schemas/defaultConfigValuesOnly.js +200 -0
  64. package/lib/schemas/deprecatedOptionsHandler.js +67 -0
  65. package/lib/schemas/getNpmVersion.js +22 -0
  66. package/lib/schemas/giveDefaultValue.js +18 -0
  67. package/lib/schemas/npmConfigToObject.js +35 -0
  68. package/lib/schemas/readOptions.js +87 -0
  69. package/lib/schemas/readOptionsForConfigFile.js +42 -0
  70. package/lib/shared/babel/addDefaultPlugins.js +15 -0
  71. package/lib/shared/babel/babelWebConfig.js +54 -0
  72. package/lib/shared/babel/babel_plugins/removeAttributesPlugin.js +23 -0
  73. package/lib/shared/babel/getBabelPlugin.js +42 -0
  74. package/lib/shared/babel/runBabelForJSFile.js +24 -0
  75. package/lib/shared/babel/runBabelForTsFile.js +30 -0
  76. package/lib/shared/bundler/webpack/common/decidePublicPath.js +57 -0
  77. package/lib/shared/bundler/webpack/common/hashUtils.js +20 -0
  78. package/lib/shared/bundler/webpack/common/libAlias.js +31 -0
  79. package/lib/shared/bundler/webpack/common/modeUtils.js +39 -0
  80. package/lib/shared/bundler/webpack/common/nameTemplates.js +105 -0
  81. package/lib/shared/bundler/webpack/common/resourceBasedPublicPath.js +21 -0
  82. package/lib/shared/bundler/webpack/configCustomLoaders.js +10 -0
  83. package/lib/shared/bundler/webpack/cssLoaders.js +16 -0
  84. package/lib/shared/bundler/webpack/custom_plugins/BundleIntegrityReport/index.js +83 -0
  85. package/lib/shared/bundler/webpack/custom_plugins/CdnChangePlugin/index.js +119 -0
  86. package/lib/shared/bundler/webpack/custom_plugins/CdnChangePlugin/webpackCustomJsUrlLoader.js +46 -0
  87. package/lib/shared/bundler/webpack/custom_plugins/CustomScriptLoadingPlugin.js +109 -0
  88. package/lib/shared/bundler/webpack/custom_plugins/EFCTemplatePlugin.js +112 -0
  89. package/lib/shared/bundler/webpack/custom_plugins/I18nNumericIndexPlugin/I18nNumericIndexHtmlInjectorPlugin.js +47 -0
  90. package/lib/shared/bundler/webpack/custom_plugins/I18nNumericIndexPlugin/I18nNumericIndexPlugin.js +190 -0
  91. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ContributionGuide.md +11 -0
  92. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nFilesEmitPlugin.js +174 -0
  93. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nKeysIdentifer.js +76 -0
  94. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nRuntimeDealerPlugin.js +223 -0
  95. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nSplit.md +95 -0
  96. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/LocaleChunkAssetsStore.js +73 -0
  97. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ModulesI18nKeysStore.js +88 -0
  98. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/README.md +25 -0
  99. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/constants.js +29 -0
  100. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/createHash.js +24 -0
  101. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/getI18nLoadingRuntimeModule.js +76 -0
  102. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/index.js +39 -0
  103. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/iterateModulesInChunk.js +50 -0
  104. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/optionsHandler.js +68 -0
  105. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/pathCreator.js +23 -0
  106. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/readI18nValues.js +29 -0
  107. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateFileName.js +43 -0
  108. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateHashHelpers.js +77 -0
  109. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/collectAstKeys.js +98 -0
  110. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/collectI18nKeys.js +66 -0
  111. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/getChunkModules.js +13 -0
  112. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/hashUtils.js +19 -0
  113. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/index.js +31 -0
  114. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/propertiesUtils.js +129 -0
  115. package/lib/shared/bundler/webpack/custom_plugins/InitialHtmlPlugin.js +60 -0
  116. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/addFilesNamesToManifestJson.js +30 -0
  117. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createInitialEntries.js +23 -0
  118. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createManifestJson.js +35 -0
  119. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/findInitialFileNames.js +18 -0
  120. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/index.js +46 -0
  121. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/removeHashFromFileName.js +18 -0
  122. package/lib/shared/bundler/webpack/custom_plugins/RTLSplitPlugin.js +1 -0
  123. package/lib/shared/bundler/webpack/custom_plugins/ResourceHintsPlugin.js +193 -0
  124. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/OverwriteCssPathForRTL.js +62 -0
  125. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtlCssPlugin.js +84 -0
  126. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtrSplit.md +34 -0
  127. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/replaceCssDirTemplate.js +27 -0
  128. package/lib/shared/bundler/webpack/custom_plugins/RuntimeResourceCleanup/index.js +73 -0
  129. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/classHandling.js +20 -0
  130. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/index.js +78 -0
  131. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/selectorWeightPrefixAdder.js +51 -0
  132. package/lib/shared/bundler/webpack/custom_plugins/SelectorWeightPlugin/windowsModification.js +16 -0
  133. package/lib/shared/bundler/webpack/custom_plugins/ServiceWorkerPlugin.js +120 -0
  134. package/lib/shared/bundler/webpack/custom_plugins/ServiceWorkerPluginUtils.js +13 -0
  135. package/lib/shared/bundler/webpack/custom_plugins/SourceMapPlugin/index.js +71 -0
  136. package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/addHashToFilePath.js +22 -0
  137. package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/index.js +55 -0
  138. package/lib/shared/bundler/webpack/custom_plugins/UglifyCSSPlugin/index.js.js +49 -0
  139. package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/ErrorHandler.js +62 -0
  140. package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/index.js +362 -0
  141. package/lib/shared/bundler/webpack/custom_plugins/custom_attribute_plugin/index.js +80 -0
  142. package/lib/shared/bundler/webpack/custom_plugins/emitAsset.js +14 -0
  143. package/lib/shared/bundler/webpack/custom_plugins/getInitialAssetsFuncTemplate.js +57 -0
  144. package/lib/shared/bundler/webpack/custom_plugins/getInitialI18nAssetsArrayStr.js +87 -0
  145. package/lib/shared/bundler/webpack/defaultVendorPatternList.js +13 -0
  146. package/lib/shared/bundler/webpack/devtoolConfig.js +13 -0
  147. package/lib/shared/bundler/webpack/entryConfig.js +28 -0
  148. package/lib/shared/bundler/webpack/externals.js +17 -0
  149. package/lib/shared/bundler/webpack/getCSSLoaders.js +29 -0
  150. package/lib/shared/bundler/webpack/getFilenameFromModule.js +24 -0
  151. package/lib/shared/bundler/webpack/jsLoaders.js +30 -0
  152. package/lib/shared/bundler/webpack/loaderConfigs/assetLoaders.js +12 -0
  153. package/lib/shared/bundler/webpack/loaderConfigs/babelLoaderConfig.js +18 -0
  154. package/lib/shared/bundler/webpack/loaderConfigs/checkIsPatternsMatchFilename.js +56 -0
  155. package/lib/shared/bundler/webpack/loaderConfigs/configHtmlTemplateLoader.js +18 -0
  156. package/lib/shared/bundler/webpack/loaderConfigs/configPostCssLoader.js +37 -0
  157. package/lib/shared/bundler/webpack/loaderConfigs/configWebWorkerLoader.js +21 -0
  158. package/lib/shared/bundler/webpack/loaderConfigs/configsAssetsLoaders.js +86 -0
  159. package/lib/shared/bundler/webpack/loaderConfigs/cssClassNameGenerate.js +65 -0
  160. package/lib/shared/bundler/webpack/loaderConfigs/getCssLoaderOptions.js +21 -0
  161. package/lib/shared/bundler/webpack/loaderConfigs/i18nIdReplaceLoaderConfig.js +94 -0
  162. package/lib/shared/bundler/webpack/loaders/i18nIdReplaceLoader.js +201 -0
  163. package/lib/shared/bundler/webpack/loaders/miniCssFallBackLoader.js +7 -0
  164. package/lib/shared/bundler/webpack/loaders/workerLoader.js +133 -0
  165. package/lib/shared/bundler/webpack/optimizationConfig.js +56 -0
  166. package/lib/shared/bundler/webpack/outputConfig.js +38 -0
  167. package/lib/shared/bundler/webpack/pluginConfigs/configBundleAnalyzer.js +40 -0
  168. package/lib/shared/bundler/webpack/pluginConfigs/configBundleIntegrityReport.js +36 -0
  169. package/lib/shared/bundler/webpack/pluginConfigs/configCSSMinifierPlugin.js +28 -0
  170. package/lib/shared/bundler/webpack/pluginConfigs/configCdnChangePlugin.js +27 -0
  171. package/lib/shared/bundler/webpack/pluginConfigs/configCopyPublicFolders.js +63 -0
  172. package/lib/shared/bundler/webpack/pluginConfigs/configCustomAttributesPlugin.js +20 -0
  173. package/lib/shared/bundler/webpack/pluginConfigs/configCustomScriptLoadingStrategyPlugin.js +76 -0
  174. package/lib/shared/bundler/webpack/pluginConfigs/configEFCTemplatePlugin.js +46 -0
  175. package/lib/shared/bundler/webpack/pluginConfigs/configEnvVariables.js +51 -0
  176. package/lib/shared/bundler/webpack/pluginConfigs/configHtmlWebpackPlugin.js +56 -0
  177. package/lib/shared/bundler/webpack/pluginConfigs/configI18nNumericIndexPlugin.js +113 -0
  178. package/lib/shared/bundler/webpack/pluginConfigs/configI18nSplitPlugin.js +41 -0
  179. package/lib/shared/bundler/webpack/pluginConfigs/configIgnorePlugin.js +16 -0
  180. package/lib/shared/bundler/webpack/pluginConfigs/configManifestJsonPlugin.js +44 -0
  181. package/lib/shared/bundler/webpack/pluginConfigs/configMiniCSSExtractPlugin.js +24 -0
  182. package/lib/shared/bundler/webpack/pluginConfigs/configProgressPlugin.js +24 -0
  183. package/lib/shared/bundler/webpack/pluginConfigs/configResourceHintsPlugin.js +21 -0
  184. package/lib/shared/bundler/webpack/pluginConfigs/configRtlCssPlugin.js +27 -0
  185. package/lib/shared/bundler/webpack/pluginConfigs/configRuntimeResourceCleanup.js +31 -0
  186. package/lib/shared/bundler/webpack/pluginConfigs/configSelectorWeightPlugin.js +28 -0
  187. package/lib/shared/bundler/webpack/pluginConfigs/configServiceWorkerPlugin.js +40 -0
  188. package/lib/shared/bundler/webpack/pluginConfigs/configSourceMapPlugin.js +20 -0
  189. package/lib/shared/bundler/webpack/pluginConfigs/configTPHashMappingPlugin.js +32 -0
  190. package/lib/shared/bundler/webpack/pluginConfigs/configVariableConversionPlugin.js +25 -0
  191. package/lib/shared/bundler/webpack/plugins.js +77 -0
  192. package/lib/shared/bundler/webpack/resolvers.js +82 -0
  193. package/lib/shared/bundler/webpack/splitChunksConfig.js +116 -0
  194. package/lib/shared/bundler/webpack/statsConfig.js +30 -0
  195. package/lib/shared/bundler/webpack/tsLoaders.js +17 -0
  196. package/lib/shared/bundler/webpack/utils/index.js +31 -0
  197. package/lib/shared/bundler/webpack/utils/object-manipulation.js +87 -0
  198. package/lib/shared/bundler/webpack/utils/updateArrayWithDefault.js +34 -0
  199. package/lib/shared/bundler/webpack/webpackBuild.js +27 -0
  200. package/lib/shared/bundler/webpack/webpackConfig.js +58 -0
  201. package/lib/shared/commands-utils/doBasicRequirementCheck.js +17 -0
  202. package/lib/shared/commands-utils/getCliPath.js +39 -0
  203. package/lib/shared/commands-utils/index.js +29 -0
  204. package/lib/shared/commands-utils/log.js +13 -0
  205. package/lib/shared/commands-utils/readArgsFormCommandLine.js +11 -0
  206. package/lib/shared/commands-utils/readOptionFormCommandLine.js +11 -0
  207. package/lib/shared/commands-utils/spawnSyncIO.js +38 -0
  208. package/lib/shared/constants.js +48 -0
  209. package/lib/shared/fileUtils/copyFile.js +38 -0
  210. package/lib/shared/fileUtils/directoryIterator.js +21 -0
  211. package/lib/shared/fileUtils/watchRun.js +112 -0
  212. package/lib/shared/postcss/custom_postcss_plugins/EmptyPlugin.js +21 -0
  213. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/constants.js +10 -0
  214. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/handleIgnores.js +66 -0
  215. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/index.js +136 -0
  216. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/insertBefore.js +32 -0
  217. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/isPreviouslyProcessed.js +20 -0
  218. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/replaceUtils.js +20 -0
  219. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/separateHoveredSelectorAndNormalSelector.js +24 -0
  220. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/specialCases.js +43 -0
  221. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/typeCheckUtils.js +52 -0
  222. package/lib/shared/postcss/custom_postcss_plugins/RTLSplitPlugin.js +139 -0
  223. package/lib/shared/postcss/custom_postcss_plugins/SelectorReplace.js +90 -0
  224. package/lib/shared/postcss/custom_postcss_plugins/ValueReplacer.js +57 -0
  225. package/lib/shared/postcss/custom_postcss_plugins/VariableModificationPlugin/index.js +347 -0
  226. package/lib/shared/postcss/filterPluginsAllowedForSpecficFile.js +55 -0
  227. package/lib/shared/postcss/getAllowedPostCssPlugins.js +30 -0
  228. package/lib/shared/postcss/getSpecificPostCssPlugin.js +58 -0
  229. package/lib/shared/postcss/runPostCssForCssFile.js +37 -0
  230. package/lib/shared/pre_process/runPreProcess.js +58 -0
  231. package/lib/shared/server/configWebpackDevMiddleware.js +41 -0
  232. package/lib/shared/server/corsHandling.js +30 -0
  233. package/lib/shared/server/getIp.js +30 -0
  234. package/lib/shared/server/getServerURL.js +36 -0
  235. package/lib/shared/server/httpsOptions.js +46 -0
  236. package/lib/shared/server/initExpressApp.js +19 -0
  237. package/lib/shared/server/initialHTMLHandling.js +99 -0
  238. package/lib/shared/server/mockApiHandler.js +67 -0
  239. package/lib/shared/server/mockServer.js +41 -0
  240. package/lib/shared/server/serveContextFiles.js +27 -0
  241. package/lib/shared/server/serverBywebpackDevMiddleware.js +35 -0
  242. package/lib/shared/server/startHttpServer.js +26 -0
  243. package/lib/shared/server/startHttpsServer.js +38 -0
  244. package/lib/shared/server/unwanted/addHttp2Server.js +41 -0
  245. package/lib/shared/server/unwanted/configWebpackDevMiddleware.js +44 -0
  246. package/lib/shared/server/unwanted/mockApiSupport.js +19 -0
  247. package/lib/shared/server/unwanted/websocketMockSetup.js +48 -0
  248. package/lib/shared/server/urlConcat.js +32 -0
  249. package/lib/shared/utils/requireLocalOrGlobal.js +81 -0
  250. package/lib/shared/utils/utils.js +1 -0
  251. package/lib/shared/utils/versionPrint.js +20 -0
  252. package/npm-shrinkwrap.json +5657 -0
  253. package/package.json +64 -0
  254. package/polyfillForOldNodeVersion.js +10 -0
  255. package/templates/app/README.MD +30 -0
  256. package/templates/app/package.json +12 -0
  257. package/templates/library/README.MD +28 -0
  258. package/templates/library/package.json +11 -0
  259. package/templates/wms/index.html +43 -0
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+
3
+ const fs = require('fs');
4
+
5
+ const path = require('path');
6
+
7
+ const {
8
+ sources,
9
+ Compilation
10
+ } = require('webpack');
11
+
12
+ const {
13
+ createHash
14
+ } = require("../I18nSplitPlugin/createHash");
15
+
16
+ const {
17
+ RawSource
18
+ } = sources;
19
+ const pluginName = 'I18nNumericIndexPlugin';
20
+
21
+ class I18nNumericIndexPlugin {
22
+ constructor(options) {
23
+ this.options = options;
24
+ this.numericMap = null;
25
+ this.numericMapPath = options.numericMapPath;
26
+ }
27
+
28
+ loadNumericMapOnce(compilation) {
29
+ if (this.numericMap) {
30
+ return this.numericMap;
31
+ }
32
+
33
+ try {
34
+ if (this.numericMapPath && fs.existsSync(this.numericMapPath)) {
35
+ const fileContent = fs.readFileSync(this.numericMapPath, 'utf-8');
36
+ const parsedData = JSON.parse(fileContent);
37
+
38
+ if (parsedData && parsedData.sortedOriginalKeys && parsedData.totalKeys !== undefined) {
39
+ this.numericMap = {
40
+ sortedOriginalKeys: parsedData.sortedOriginalKeys,
41
+ totalKeys: parsedData.totalKeys
42
+ };
43
+ compilation.logger.info(`${pluginName}: Loaded numeric map from ${this.numericMapPath}.`);
44
+ return this.numericMap;
45
+ } else {
46
+ compilation.logger.error(`${pluginName}: Invalid format in numeric map file at ${this.numericMapPath}.`);
47
+ this.numericMap = {
48
+ sortedOriginalKeys: [],
49
+ totalKeys: 0
50
+ };
51
+ }
52
+ } else {
53
+ compilation.logger.warn(`${pluginName}: Numeric map path not provided or file not found at ${this.numericMapPath}.`);
54
+ this.numericMap = {
55
+ sortedOriginalKeys: [],
56
+ totalKeys: 0
57
+ };
58
+ }
59
+ } catch (err) {
60
+ compilation.logger.error(`${pluginName}: Error loading numeric map from ${this.numericMapPath}: ${err.message}`);
61
+ this.numericMap = {
62
+ sortedOriginalKeys: [],
63
+ totalKeys: 0
64
+ };
65
+ }
66
+
67
+ return this.numericMap;
68
+ }
69
+
70
+ emitFile(compilation, baseFilenameTemplate, locale, fileContentData, jsonpFunc, typeSuffix = '') {
71
+ const fileContent = `${jsonpFunc}(${JSON.stringify(fileContentData)});`;
72
+ const source = new RawSource(fileContent);
73
+ const actualContentHash = createHash({
74
+ //
75
+ outputOptions: compilation.outputOptions,
76
+ content: fileContent
77
+ });
78
+ let processedFilenameTemplate = baseFilenameTemplate.replace(/\[locale\]/g, locale).replace(/\[name\]/g, locale).replace(/\[id\]/g, locale);
79
+ const finalFileName = compilation.getAssetPath(processedFilenameTemplate, {
80
+ locale: locale,
81
+ contentHash: actualContentHash,
82
+ hash: compilation.hash,
83
+ chunk: {
84
+ id: `i18n-${typeSuffix || 'data'}-${locale}`,
85
+ name: `${typeSuffix || 'data'}-${locale}`,
86
+ hash: actualContentHash,
87
+ contentHash: {
88
+ [this.options.moduleType || 'i18n/mini-extract']: actualContentHash
89
+ }
90
+ },
91
+ contentHashType: this.options.moduleType || 'i18n/mini-extract'
92
+ });
93
+ compilation.emitAsset(finalFileName, source);
94
+ compilation.logger.info(`${pluginName}: Emitted ${typeSuffix} i18n file for locale ${locale} to ${finalFileName}`);
95
+ }
96
+
97
+ apply(compiler) {
98
+ compiler.hooks.thisCompilation.tap(pluginName, compilation => {
99
+ compilation.hooks.processAssets.tapAsync({
100
+ name: pluginName,
101
+ stage: Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE
102
+ }, (assets, callback) => {
103
+ const {
104
+ sortedOriginalKeys,
105
+ totalKeys
106
+ } = this.loadNumericMapOnce(compilation);
107
+
108
+ if (totalKeys === 0 && (!sortedOriginalKeys || sortedOriginalKeys.length === 0)) {
109
+ compilation.logger.info(`${pluginName}: No numeric keys to process. Skipping numeric file emission.`);
110
+ }
111
+
112
+ const globallyUsedLiteralKeys = new Set();
113
+ const globallyUsedCommentKeys = new Set();
114
+
115
+ for (const module of compilation.modules) {
116
+ if (module.buildInfo) {
117
+ if (Array.isArray(module.buildInfo.loaderIdentifiedLiteralI18nKeys)) {
118
+ module.buildInfo.loaderIdentifiedLiteralI18nKeys.forEach(key => globallyUsedLiteralKeys.add(key));
119
+ }
120
+
121
+ if (Array.isArray(module.buildInfo.loaderIdentifiedCommentI18nKeys)) {
122
+ module.buildInfo.loaderIdentifiedCommentI18nKeys.forEach(key => globallyUsedCommentKeys.add(key));
123
+ }
124
+ }
125
+ }
126
+
127
+ compilation.logger.info(`${pluginName}: Globally identified Literal Keys: ${globallyUsedLiteralKeys.size}, Comment Keys: ${globallyUsedCommentKeys.size}`);
128
+ const {
129
+ locales,
130
+ allI18nObject,
131
+ numericFilenameTemplate,
132
+ dynamicFilenameTemplate,
133
+ numericJsonpFunc,
134
+ dynamicJsonpFunc
135
+ } = this.options;
136
+
137
+ if (!locales || !allI18nObject || !numericFilenameTemplate || !dynamicFilenameTemplate || !numericJsonpFunc || !dynamicJsonpFunc) {
138
+ compilation.errors.push(new Error(`${pluginName}: Missing some required options (locales, allI18nObject, filename templates, jsonp funcs).`));
139
+ return callback();
140
+ }
141
+
142
+ if (totalKeys > 0 && sortedOriginalKeys && sortedOriginalKeys.length > 0) {
143
+ for (const locale of locales) {
144
+ const localeTranslations = allI18nObject[locale] || {};
145
+ const orderedNumericTranslations = new Array(totalKeys);
146
+
147
+ for (let i = 0; i < totalKeys; i++) {
148
+ const originalKey = sortedOriginalKeys[i];
149
+
150
+ if (globallyUsedLiteralKeys.has(originalKey)) {
151
+ orderedNumericTranslations[i] = localeTranslations[originalKey] !== undefined ? localeTranslations[originalKey] : 0; // Use 0 or null as placeholder for missing keys
152
+ } else {
153
+ orderedNumericTranslations[i] = 0; // Placeholder for keys not identified as literals or not used
154
+ }
155
+ }
156
+
157
+ this.emitFile(compilation, numericFilenameTemplate, locale, orderedNumericTranslations, numericJsonpFunc, 'numeric');
158
+ }
159
+ }
160
+
161
+ if (globallyUsedCommentKeys.size > 0) {
162
+ for (const locale of locales) {
163
+ const localeTranslations = allI18nObject[locale] || {};
164
+ const dynamicKeyTranslations = {};
165
+ globallyUsedCommentKeys.forEach(originalKey => {
166
+ if (localeTranslations[originalKey] !== undefined) {
167
+ dynamicKeyTranslations[originalKey] = localeTranslations[originalKey];
168
+ } else {
169
+ dynamicKeyTranslations[originalKey] = null;
170
+ }
171
+ });
172
+
173
+ if (Object.keys(dynamicKeyTranslations).length > 0) {
174
+ this.emitFile(compilation, dynamicFilenameTemplate, locale, dynamicKeyTranslations, dynamicJsonpFunc, 'dynamic');
175
+ }
176
+ }
177
+ } else {
178
+ compilation.logger.info(`${pluginName}: No globally used comment keys found. Skipping dynamic file emission.`);
179
+ }
180
+
181
+ callback();
182
+ });
183
+ });
184
+ }
185
+
186
+ }
187
+
188
+ module.exports = {
189
+ I18nNumericIndexPlugin
190
+ };
@@ -0,0 +1,11 @@
1
+ # I18n Split Plugin ContributionGuide
2
+ we have modifyed mini-css-extract-plugin to sute our needs of i18n related extraction and downloading.
3
+ So In future may be when we need to update mini-css-extract-plugin Kindly cross check with this I18n Plugin as well.
4
+
5
+ Even not breaking change, may be just performacne update or feature update. addeding that to this plugin will be use full. Kindly consider it.
6
+
7
+ ## Thing we Ignored
8
+ * we use webpack ast hook for adding I18nDependency. So we did not need `loader.js`
9
+ * we ignore order of import in single chunk since I18n going to be download as object.
10
+ we did not need it.
11
+ *
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.I18nFilesEmitPlugin = void 0;
7
+
8
+ var _webpack = require("webpack");
9
+
10
+ var _createHash = require("./createHash");
11
+
12
+ var _pathCreator = require("./pathCreator");
13
+
14
+ var _propertiesUtils = require("./utils/propertiesUtils");
15
+
16
+ var _LocaleChunkAssetsStore = require("./LocaleChunkAssetsStore");
17
+
18
+ /* eslint-disable no-restricted-syntax */
19
+ const pluginName = 'I18nFilesEmitPlugin';
20
+ const {
21
+ RawSource
22
+ } = _webpack.sources;
23
+
24
+ class I18nFilesEmitPlugin {
25
+ constructor(options) {
26
+ this.options = options; // this.options = {
27
+ // locales: options.locales,
28
+ // chunkFilename: options.chunkFilename,
29
+ // filename: options.filename,
30
+ // allI18nObject: options.allI18nObject,
31
+ // jsonpFunc: options.jsonpFunc
32
+ // };
33
+ }
34
+
35
+ apply(compiler) {
36
+ compiler.hooks.thisCompilation.tap(pluginName, compilation => {
37
+ // Get store for cache
38
+ this.store = (0, _LocaleChunkAssetsStore.getLocaleChunkAssetsStore)(compilation);
39
+ const i18nStore = this.store;
40
+ compilation.hooks.beforeHash.tap(pluginName, () => {
41
+ i18nStore.clear();
42
+ this.createAndStoreFileContentForEveryChunkAndLocale(compilation);
43
+ });
44
+ compilation.hooks.chunkHash.tap(pluginName, (chunk, hash) => {
45
+ this.updateChunkHashForEveryLocale(chunk, hash);
46
+ });
47
+ compilation.hooks.contentHash.tap(pluginName, chunk => {
48
+ if (!i18nStore.isChunkHasI18n(chunk.id)) {
49
+ return;
50
+ }
51
+
52
+ this.emitI18nFileForEveryLocale(chunk, compilation);
53
+ });
54
+ });
55
+ }
56
+
57
+ createAndStoreFileContentForEveryChunkAndLocale(compilation) {
58
+ const {
59
+ chunks
60
+ } = compilation;
61
+ const {
62
+ locales
63
+ } = this.options;
64
+ const i18nStore = this.store;
65
+
66
+ for (const chunk of chunks) {
67
+ const i18nKeys = i18nStore.getI18nKeysForChunk(chunk);
68
+
69
+ if (!i18nKeys.length) {
70
+ // eslint-disable-next-line no-continue
71
+ continue;
72
+ }
73
+
74
+ for (const locale of locales) {
75
+ const content = this.getI18nChunkFileContent(i18nKeys, locale);
76
+ i18nStore.storeData(chunk.id, locale, {
77
+ content
78
+ });
79
+ }
80
+ }
81
+ }
82
+
83
+ updateChunkHashForEveryLocale(chunk, hash) {
84
+ const {
85
+ locales
86
+ } = this.options;
87
+ const i18nStore = this.store;
88
+
89
+ if (i18nStore.isChunkHasI18n(chunk.id)) {
90
+ for (const loc of locales) {
91
+ const content = i18nStore.getContent(chunk.id, loc);
92
+ hash.update(content);
93
+ }
94
+ }
95
+ }
96
+
97
+ emitI18nFileForEveryLocale(chunk, compilation) {
98
+ const i18nStore = this.store;
99
+ const {
100
+ locales,
101
+ chunkFilename,
102
+ filename
103
+ } = this.options;
104
+ const fileNameTemplate = chunk.canBeInitial() ? filename : chunkFilename; // const { chunks } = compilation;
105
+
106
+ for (const locale of locales) {
107
+ const content = i18nStore.getContent(chunk.id, locale);
108
+ const contentHash = (0, _createHash.createHash)({
109
+ outputOptions: compilation.outputOptions,
110
+ content
111
+ });
112
+ const {
113
+ filename
114
+ } = I18nFilesEmitPlugin.createFilenameWithHash({
115
+ compilation,
116
+ contentHash,
117
+ fileNameTemplate,
118
+ chunk,
119
+ locale
120
+ });
121
+ i18nStore.storeData(chunk.id, locale, {
122
+ contentHash,
123
+ filename
124
+ });
125
+ compilation.emitAsset(filename, new RawSource(content));
126
+ }
127
+ }
128
+
129
+ static createFilenameWithHash({
130
+ compilation,
131
+ fileNameTemplate,
132
+ chunk,
133
+ locale,
134
+ contentHash
135
+ }) {
136
+ const fileName = fileNameTemplate.replaceAll('[locale]', locale);
137
+ const filename = (0, _pathCreator.pathCreator)(fileName, compilation, {
138
+ hash: compilation.hash,
139
+ locale,
140
+ chunkName: chunk.name,
141
+ chunkId: chunk.id,
142
+ chunkHash: chunk.hash,
143
+ contentHash
144
+ });
145
+ return {
146
+ contentHash,
147
+ filename
148
+ };
149
+ }
150
+
151
+ getI18nContentForkeys(i18nKeys, locale) {
152
+ const {
153
+ allI18nObject
154
+ } = this.options;
155
+ const data = {};
156
+
157
+ for (const key of i18nKeys) {
158
+ data[key] = allI18nObject[locale][key];
159
+ }
160
+
161
+ return data;
162
+ }
163
+
164
+ getI18nChunkFileContent(i18nKeys, loc) {
165
+ const {
166
+ jsonpFunc
167
+ } = this.options;
168
+ const data = this.getI18nContentForkeys(i18nKeys, loc);
169
+ return `${jsonpFunc}(${(0, _propertiesUtils.jsonToString)(data)})`;
170
+ }
171
+
172
+ }
173
+
174
+ exports.I18nFilesEmitPlugin = I18nFilesEmitPlugin;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _utils = require("./utils");
9
+
10
+ var _LocaleChunkAssetsStore = require("./LocaleChunkAssetsStore");
11
+
12
+ /* eslint-disable max-classes-per-file */
13
+ const pluginName = 'I18nKeysIdentifier';
14
+ /**
15
+ * this plugin search the i18 keys and make it as I18nDependency.
16
+ * how it works?
17
+ * this plugin get jsResourceI18nKeys in constructor.
18
+ * we walk thought the js files AST
19
+ * if any string literal in that AST is in jsResourceI18nKeys then we consider that string as I18n key
20
+ * after the walk of AST we get some I18n keys
21
+ * then we make it as I18nDependency.
22
+ */
23
+
24
+ class I18nKeysIdentifer {
25
+ constructor({
26
+ jsResourceI18nKeys
27
+ }) {
28
+ this.jsResourceI18nKeys = jsResourceI18nKeys;
29
+ this.store = new _LocaleChunkAssetsStore.LocaleChunkAssetsStore();
30
+ }
31
+
32
+ apply(compiler) {
33
+ // const { splitChunks } = compiler.options.optimization;
34
+ // if (splitChunks) {
35
+ // if (splitChunks.defaultSizeTypes.includes('...')) {
36
+ // splitChunks.defaultSizeTypes.push(MODULE_TYPE);
37
+ // }
38
+ // }
39
+ compiler.hooks.thisCompilation.tap(pluginName, compilation => {
40
+ this.store.updateCompilation(compilation);
41
+ (0, _LocaleChunkAssetsStore.setLocaleChunkAssetsStore)(compilation, this.store);
42
+ });
43
+ compiler.hooks.normalModuleFactory.tap(pluginName, factory => {
44
+ // handler for parser
45
+ const handler = parser => {
46
+ parser.hooks.program.tap(pluginName, (ast, comments) => {
47
+ const {
48
+ module
49
+ } = parser.state; //
50
+
51
+ if (!(module && /\.jsx?$/.test(module.resource))) {
52
+ return;
53
+ } // i18n grep proper contract regex
54
+
55
+
56
+ let i18nKeys = (0, _utils.collectI18nKeysfromAST)(ast, this.jsResourceI18nKeys);
57
+ i18nKeys = i18nKeys.concat( // i18n grep proper contract regex
58
+ (0, _utils.collectI18nKeysfromComments)(comments, this.jsResourceI18nKeys));
59
+
60
+ if (i18nKeys.length) {
61
+ // console.log('i18nKeys.length', module.resource, i18nKeys);
62
+ this.store.updateModuleI18nKeys(module.resource, i18nKeys);
63
+ }
64
+ });
65
+ }; // this below hook was tapped for collect I18n Key from files and add as Dependency
66
+ // const factory = params.normalModuleFactory;
67
+
68
+
69
+ factory.hooks.parser.for('javascript/auto').tap(pluginName, handler);
70
+ factory.hooks.parser.for('javascript/dynamic').tap(pluginName, handler);
71
+ });
72
+ }
73
+
74
+ }
75
+
76
+ exports.default = I18nKeysIdentifer;
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.I18nRuntimeDealerPlugin = void 0;
7
+
8
+ var _webpack = require("webpack");
9
+
10
+ var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
11
+
12
+ var _constants = require("./constants");
13
+
14
+ var _getI18nLoadingRuntimeModule = require("./getI18nLoadingRuntimeModule");
15
+
16
+ var _templateFileName = require("./templateFileName");
17
+
18
+ var _hashUtils = require("./utils/hashUtils");
19
+
20
+ var _urlConcat = require("../../../../server/urlConcat");
21
+
22
+ var _I18nFilesEmitPlugin = require("./I18nFilesEmitPlugin");
23
+
24
+ var _LocaleChunkAssetsStore = require("./LocaleChunkAssetsStore");
25
+
26
+ var _logger = require("../../../../../logger");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ const {
31
+ RawSource
32
+ } = _webpack.sources;
33
+ const pluginName = 'I18nRuntimeDealerPlugin'; // I18nExtractPlugin.loader = require.resolve('./loader');
34
+
35
+ class I18nRuntimeDealerPlugin {
36
+ constructor(options) {
37
+ this.options = options;
38
+ }
39
+
40
+ apply(compiler) {
41
+ compiler.hooks.thisCompilation.tap(pluginName, compilation => {
42
+ // Get store for cache
43
+ this.store = (0, _LocaleChunkAssetsStore.getLocaleChunkAssetsStore)(compilation);
44
+
45
+ if (!this.options.runtime) {
46
+ return;
47
+ }
48
+
49
+ this.createI18nDownloadCodeInRuntimeFile(compilation);
50
+ this.addI18nIntoInitialHtml(compilation);
51
+ });
52
+ }
53
+
54
+ addI18nIntoInitialHtml(compilation) {
55
+ const i18nStore = this.store;
56
+
57
+ _htmlWebpackPlugin.default.getHooks(compilation).beforeAssetTagGeneration.tap(pluginName, hookOptions => {
58
+ const {
59
+ assets
60
+ } = hookOptions;
61
+ const {
62
+ templateLabel,
63
+ filename,
64
+ publicPath = '',
65
+ mainChunkName
66
+ } = this.options; // const dummyContent = '// dummy comment';
67
+
68
+ const dummyContentHash = 'dummy0content0hashes';
69
+ const entryPoint = compilation.entrypoints.get(mainChunkName);
70
+ const initialChunks = Array.from(entryPoint.chunks).filter(c => c.canBeInitial() && c.id !== c.runtime);
71
+ const initialI18nAssets = initialChunks.filter(c => i18nStore.isChunkHasI18n(c)).map(c => {
72
+ const data = _I18nFilesEmitPlugin.I18nFilesEmitPlugin.createFilenameWithHash({
73
+ compilation,
74
+ fileNameTemplate: filename,
75
+ chunk: c,
76
+ locale: templateLabel,
77
+ // NOTE: we used dummy content hash.
78
+ // Because we have no plan on use in content hash to initial I18n chunks
79
+ // So Dummy hash was being used it will not work just skip warnings
80
+ contentHash: dummyContentHash
81
+ });
82
+
83
+ return (0, _urlConcat.urlConcat)(publicPath, data.filename);
84
+ });
85
+ const allJSAssets = [...initialI18nAssets, ...assets.js].map(url => url.replaceAll('[locale]', templateLabel).replaceAll('%5Blocale%5D', templateLabel));
86
+ return {
87
+ assets: { ...assets,
88
+ js: allJSAssets
89
+ }
90
+ };
91
+ });
92
+ }
93
+
94
+ createI18nDownloadCodeInRuntimeFile(compilation) {
95
+ const {
96
+ chunkFilename,
97
+ locales,
98
+ localeVarName
99
+ } = this.options;
100
+ const chunkFilenameHasContentHash = (0, _hashUtils.hasContentHash)(chunkFilename);
101
+
102
+ const getI18nChunks = mainChunk => this.filterI18nUsedChunks(mainChunk.getAllAsyncChunks());
103
+
104
+ const I18nLoadingRuntimeModule = (0, _getI18nLoadingRuntimeModule.getI18nLoadingRuntimeModule)({
105
+ getI18nChunks
106
+ });
107
+ const enabledChunks = new WeakSet();
108
+
109
+ const chunkFilenameUrlGenerator = (i18nChunks, locale) => (0, _templateFileName.templateFileName)({
110
+ compilation,
111
+ localeVarName,
112
+ dynamicFilename: chunkFilename,
113
+ contentHashes: this.getContentHashes(locale),
114
+ chunks: i18nChunks
115
+ });
116
+
117
+ const prefixFunc = () => _constants.I18N_CHUNK_NAME_GENERATION_SEGMENT;
118
+
119
+ const handler = (entryRuntimeChunk, set) => {
120
+ if (enabledChunks.has(entryRuntimeChunk)) {
121
+ return;
122
+ }
123
+
124
+ enabledChunks.add(entryRuntimeChunk);
125
+ const {
126
+ chunkFilename,
127
+ // filename: initialFilename,
128
+ runtimeOptions
129
+ } = this.options;
130
+
131
+ if (typeof chunkFilename === 'string' && /\[(full)?hash(:\d+)?\]/.test(chunkFilename)) {
132
+ set.add(_webpack.RuntimeGlobals.getFullHash);
133
+ }
134
+
135
+ set.add(_webpack.RuntimeGlobals.publicPath);
136
+ compilation.addRuntimeModule(entryRuntimeChunk, new I18nLoadingRuntimeModule(set, {
137
+ prefixFunc: chunkFilenameHasContentHash ? prefixFunc : chunkFilenameUrlGenerator,
138
+ runtimeOptions,
139
+ chunkFilename
140
+ }));
141
+ };
142
+
143
+ compilation.hooks.runtimeRequirementInTree.for(_webpack.RuntimeGlobals.ensureChunkHandlers).tap(pluginName, handler);
144
+
145
+ if (chunkFilenameHasContentHash) {
146
+ compilation.hooks.processAssets.tap({
147
+ name: pluginName,
148
+ stage: _webpack.Compilation.PROCESS_ASSETS_STAGE_DERIVED // additionalAssets: true
149
+
150
+ }, assets => {
151
+ // eslint-disable-next-line no-underscore-dangle
152
+ const entries = compilation._getChunkGraphEntries();
153
+
154
+ function createRuntimeFilePerLocale({
155
+ locale,
156
+ runtimeFileName,
157
+ runtimeFileSourceStr,
158
+ i18nChunks
159
+ }) {
160
+ const newRuntimeName = runtimeFileName.replaceAll('[locale]', locale);
161
+ const replaceText = chunkFilenameUrlGenerator(i18nChunks, locale);
162
+ const replacedStr = runtimeFileSourceStr.replace(_constants.I18N_CHUNK_NAME_GENERATION_SEGMENT, replaceText);
163
+ compilation.emitAsset(newRuntimeName, new RawSource(replacedStr));
164
+ } // eslint-disable-next-line no-restricted-syntax
165
+
166
+
167
+ for (const entryChunk of entries) {
168
+ const i18nChunks = getI18nChunks(entryChunk);
169
+ const runtimeFileName = [...entryChunk.files][0];
170
+ const runtimeFileSourceStr = assets[runtimeFileName].source();
171
+ locales.forEach(locale => createRuntimeFilePerLocale({
172
+ locale,
173
+ entryChunk,
174
+ runtimeFileName,
175
+ runtimeFileSourceStr,
176
+ i18nChunks
177
+ })); // NOTE: we don't delete, Because of HTML plugin needs to add runtime file in html and efc
178
+ // compilation.deleteAsset(runtimeFileName);
179
+ }
180
+ });
181
+ compilation.hooks.processAssets.tap({
182
+ name: pluginName,
183
+ stage: _webpack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE // additionalAssets: true
184
+
185
+ }, () => {
186
+ // eslint-disable-next-line no-underscore-dangle
187
+ const entries = compilation._getChunkGraphEntries(); // eslint-disable-next-line no-restricted-syntax
188
+
189
+
190
+ for (const entryChunk of entries) {
191
+ const runtimeFileName = [...entryChunk.files][0] || '';
192
+
193
+ if (runtimeFileName.includes('runtime') && runtimeFileName.includes('[locale]')) {
194
+ (0, _logger.verboseLogger)('deleteAsset', runtimeFileName);
195
+ compilation.deleteAsset(runtimeFileName);
196
+ }
197
+ }
198
+ });
199
+ }
200
+ }
201
+
202
+ filterI18nUsedChunks(chunks) {
203
+ const i18nStore = this.store;
204
+ return Array.from(chunks).filter(c => i18nStore.isChunkHasI18n(c.id));
205
+ }
206
+
207
+ getContentHashes(locale) {
208
+ const i18nStore = this.store;
209
+ const contentHashes = {};
210
+ i18nStore.forEachChunkId(chunkId => {
211
+ const contentHash = i18nStore.getContentHash(chunkId, locale);
212
+
213
+ if (contentHash) {
214
+ contentHashes[chunkId] = contentHash;
215
+ }
216
+ }); // console.log({ contentHashes });
217
+
218
+ return contentHashes;
219
+ }
220
+
221
+ }
222
+
223
+ exports.I18nRuntimeDealerPlugin = I18nRuntimeDealerPlugin;