@zohodesk/client_build_tool 0.0.1

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 (248) hide show
  1. package/.babelrc +12 -0
  2. package/.lintstagedrc +3 -0
  3. package/.vscode/settings.json +5 -0
  4. package/CHANGELOG.md +9 -0
  5. package/ConfigurationDocumentation.md +401 -0
  6. package/ContributionGuide.md +2 -0
  7. package/NOTES-Dec12.md +12 -0
  8. package/README.md +91 -0
  9. package/README_backup.md +82 -0
  10. package/TODO.md +35 -0
  11. package/cli.js +31 -0
  12. package/coverage/base.css +224 -0
  13. package/coverage/block-navigation.js +87 -0
  14. package/coverage/coverage-final.json +2 -0
  15. package/coverage/coverage-summary.json +3 -0
  16. package/coverage/favicon.png +0 -0
  17. package/coverage/index.html +116 -0
  18. package/coverage/prettify.css +1 -0
  19. package/coverage/prettify.js +2 -0
  20. package/coverage/sort-arrow-sprite.png +0 -0
  21. package/coverage/sorter.js +196 -0
  22. package/coverage/updateArrayWithDefault.js.html +196 -0
  23. package/docs/CSSCustomPluginsDocumentation.md +71 -0
  24. package/docs/CustomChunksConfiguration.md +0 -0
  25. package/docs/EFCFileTemplate.md +0 -0
  26. package/docs/MockApi.md +61 -0
  27. package/docs/NameTemplateUtility.md +93 -0
  28. package/docs/ServiseWorkerTemplate.md +0 -0
  29. package/docs/SupportedBrowserVersions.md +61 -0
  30. package/helpDocs/check.js +7 -0
  31. package/helpDocs/commmands/build.md +0 -0
  32. package/helpDocs/commmands/start.md +0 -0
  33. package/helpDocs/examples/buildWithContentHash.md +0 -0
  34. package/helpDocs/examples/startDevServer.md +0 -0
  35. package/helpDocs/examples/startWithMockAPI.md +0 -0
  36. package/helpDocs/node18-env.md +30 -0
  37. package/helpDocs/troubleshootings/NewMachineSetup.md +71 -0
  38. package/helpDocs/troubleshootings/README.md +9 -0
  39. package/helpDocs/troubleshootings/hg_install.sh +18 -0
  40. package/helpDocs/troubleshootings/newMachineMac.sh +86 -0
  41. package/helpDocs/troubleshootings/newMachineUbundu.bash +84 -0
  42. package/lib/allCommandsConfigs.js +25 -0
  43. package/lib/commands/build/commandExecutor.js +17 -0
  44. package/lib/commands/build/config.js +12 -0
  45. package/lib/commands/build/errorHander.js +10 -0
  46. package/lib/commands/build/optionsProcessor.js +35 -0
  47. package/lib/commands/buildEs/commandExecutor.js +33 -0
  48. package/lib/commands/buildEs/config.js +12 -0
  49. package/lib/commands/buildLib/commandExecutor.js +33 -0
  50. package/lib/commands/buildLib/config.js +12 -0
  51. package/lib/commands/mockserver/commandExecutor.js +43 -0
  52. package/lib/commands/mockserver/config.js +12 -0
  53. package/lib/commands/start/commandExecutor.js +12 -0
  54. package/lib/commands/start/config.js +12 -0
  55. package/lib/commands/start/deprecationHandler.js +10 -0
  56. package/lib/commands/start/errorHander.js +10 -0
  57. package/lib/commands/start/optionsProcessor.js +30 -0
  58. package/lib/commands/start/postProcessor.js +10 -0
  59. package/lib/commands/start/preProcessor.js +10 -0
  60. package/lib/commands/template/commandExecutor.js +28 -0
  61. package/lib/commands/template/config.js +12 -0
  62. package/lib/commands/version/commandExecutor.js +14 -0
  63. package/lib/commands/version/config.js +12 -0
  64. package/lib/commands/version/errorHander.js +10 -0
  65. package/lib/commandsRouter.js +74 -0
  66. package/lib/index.js +12 -0
  67. package/lib/logger.js +34 -0
  68. package/lib/schemas/applyValuesToSchema/index.js +34 -0
  69. package/lib/schemas/applyValuesToSchema/isObject.js +10 -0
  70. package/lib/schemas/applyValuesToSchema/isValid.js +14 -0
  71. package/lib/schemas/cliArgsToObject.js +39 -0
  72. package/lib/schemas/defaultConfigValues.js +276 -0
  73. package/lib/schemas/defaultConfigValuesOnly.js +161 -0
  74. package/lib/schemas/deprecatedOptionsHandler.js +67 -0
  75. package/lib/schemas/getNpmVersion.js +22 -0
  76. package/lib/schemas/giveDefaultValue.js +18 -0
  77. package/lib/schemas/npmConfigToObject.js +35 -0
  78. package/lib/schemas/readOptions.js +54 -0
  79. package/lib/schemas/readOptionsForConfigFile.js +42 -0
  80. package/lib/shared/babel/babelWebConfig.js +51 -0
  81. package/lib/shared/babel/babel_plugins/removeAttributesPlugin.js +23 -0
  82. package/lib/shared/babel/defaultBabelPlugins.js +26 -0
  83. package/lib/shared/babel/runBabelForJSFile.js +24 -0
  84. package/lib/shared/bundler/webpack/common/decidePublicPath.js +52 -0
  85. package/lib/shared/bundler/webpack/common/libAlias.js +31 -0
  86. package/lib/shared/bundler/webpack/common/modeUtils.js +31 -0
  87. package/lib/shared/bundler/webpack/common/nameTemplates.js +78 -0
  88. package/lib/shared/bundler/webpack/common/resourceBasedPublicPath.js +21 -0
  89. package/lib/shared/bundler/webpack/configCustomLoaders.js +10 -0
  90. package/lib/shared/bundler/webpack/cssLoaders.js +16 -0
  91. package/lib/shared/bundler/webpack/custom_plugins/CdnChangePlugin.js +95 -0
  92. package/lib/shared/bundler/webpack/custom_plugins/EFCTemplatePlugin.js +112 -0
  93. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ContributionGuide.md +11 -0
  94. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nFilesEmitPlugin.js +172 -0
  95. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nKeysIdentifer.js +76 -0
  96. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nRuntimeDealerPlugin.js +203 -0
  97. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/I18nSplit.md +95 -0
  98. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/LocaleChunkAssetsStore.js +73 -0
  99. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/ModulesI18nKeysStore.js +88 -0
  100. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/README.md +25 -0
  101. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/constants.js +29 -0
  102. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/createHash.js +24 -0
  103. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/getI18nLoadingRuntimeModule.js +76 -0
  104. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/index.js +39 -0
  105. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/iterateModulesInChunk.js +50 -0
  106. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/optionsHandler.js +68 -0
  107. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/pathCreator.js +23 -0
  108. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/readI18nValues.js +29 -0
  109. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateFileName.js +43 -0
  110. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/templateHashHelpers.js +77 -0
  111. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/collectI18nKeys.js +66 -0
  112. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/getChunkModules.js +13 -0
  113. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/hashUtils.js +19 -0
  114. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/index.js +31 -0
  115. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/propertiesUtils.js +129 -0
  116. package/lib/shared/bundler/webpack/custom_plugins/InitialHtmlPlugin.js +54 -0
  117. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/addFilesNamesToManifestJson.js +24 -0
  118. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createInitialEntries.js +17 -0
  119. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createManifestJson.js +35 -0
  120. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/findInitialFileNames.js +18 -0
  121. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/index.js +44 -0
  122. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/removeHashFromFileName.js +18 -0
  123. package/lib/shared/bundler/webpack/custom_plugins/RTLSplitPlugin.js +1 -0
  124. package/lib/shared/bundler/webpack/custom_plugins/ResourceHintsPlugin.js +191 -0
  125. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/OverwriteCssPathForRTL.js +62 -0
  126. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtlCssPlugin.js +84 -0
  127. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/RtrSplit.md +34 -0
  128. package/lib/shared/bundler/webpack/custom_plugins/RtlSplitPlugin/replaceCssDirTemplate.js +27 -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 +110 -0
  134. package/lib/shared/bundler/webpack/custom_plugins/SourceMapPlugin/index.js +38 -0
  135. package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/addHashToFilePath.js +22 -0
  136. package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/index.js +55 -0
  137. package/lib/shared/bundler/webpack/custom_plugins/UglifyCSSPlugin/index.js.js +49 -0
  138. package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/ErrorHandler.js +62 -0
  139. package/lib/shared/bundler/webpack/custom_plugins/VariableConversionCollector/index.js +362 -0
  140. package/lib/shared/bundler/webpack/custom_plugins/emitAsset.js +14 -0
  141. package/lib/shared/bundler/webpack/custom_plugins/getInitialAssetsFuncTemplate.js +57 -0
  142. package/lib/shared/bundler/webpack/custom_plugins/getInitialI18nAssetsArrayStr.js +87 -0
  143. package/lib/shared/bundler/webpack/defaultVendorPatternList.js +13 -0
  144. package/lib/shared/bundler/webpack/entryConfig.js +28 -0
  145. package/lib/shared/bundler/webpack/externals.js +13 -0
  146. package/lib/shared/bundler/webpack/getCSSLoaders.js +27 -0
  147. package/lib/shared/bundler/webpack/getFilenameFromModule.js +24 -0
  148. package/lib/shared/bundler/webpack/getSourceMapType.js +10 -0
  149. package/lib/shared/bundler/webpack/jsLoaders.js +17 -0
  150. package/lib/shared/bundler/webpack/loaderConfigs/assetLoaders.js +12 -0
  151. package/lib/shared/bundler/webpack/loaderConfigs/babelLoaderConfig.js +18 -0
  152. package/lib/shared/bundler/webpack/loaderConfigs/checkIsPatternsMatchFilename.js +56 -0
  153. package/lib/shared/bundler/webpack/loaderConfigs/configHtmlTemplateLoader.js +18 -0
  154. package/lib/shared/bundler/webpack/loaderConfigs/configPostCssLoader.js +37 -0
  155. package/lib/shared/bundler/webpack/loaderConfigs/configWebWorkerLoader.js +21 -0
  156. package/lib/shared/bundler/webpack/loaderConfigs/configsAssetsLoaders.js +138 -0
  157. package/lib/shared/bundler/webpack/loaderConfigs/cssClassNameGenerate.js +60 -0
  158. package/lib/shared/bundler/webpack/loaderConfigs/getCssLoaderOptions.js +21 -0
  159. package/lib/shared/bundler/webpack/loaders/workerLoader.js +133 -0
  160. package/lib/shared/bundler/webpack/optimizationConfig.js +43 -0
  161. package/lib/shared/bundler/webpack/outputConfig.js +28 -0
  162. package/lib/shared/bundler/webpack/pluginConfigs/configBundleAnalyzer.js +40 -0
  163. package/lib/shared/bundler/webpack/pluginConfigs/configCSSMinifierPlugin.js +24 -0
  164. package/lib/shared/bundler/webpack/pluginConfigs/configCdnChangePlugin.js +27 -0
  165. package/lib/shared/bundler/webpack/pluginConfigs/configCopyPublicFolders.js +63 -0
  166. package/lib/shared/bundler/webpack/pluginConfigs/configEFCTemplatePlugin.js +46 -0
  167. package/lib/shared/bundler/webpack/pluginConfigs/configEnvVariables.js +36 -0
  168. package/lib/shared/bundler/webpack/pluginConfigs/configHtmlWebpackPlugin.js +56 -0
  169. package/lib/shared/bundler/webpack/pluginConfigs/configI18nSplitPlugin.js +41 -0
  170. package/lib/shared/bundler/webpack/pluginConfigs/configIgnorePlugin.js +16 -0
  171. package/lib/shared/bundler/webpack/pluginConfigs/configManifestJsonPlugin.js +32 -0
  172. package/lib/shared/bundler/webpack/pluginConfigs/configMiniCSSExtractPlugin.js +23 -0
  173. package/lib/shared/bundler/webpack/pluginConfigs/configProgressPlugin.js +24 -0
  174. package/lib/shared/bundler/webpack/pluginConfigs/configResourceHintsPlugin.js +21 -0
  175. package/lib/shared/bundler/webpack/pluginConfigs/configRtlCssPlugin.js +27 -0
  176. package/lib/shared/bundler/webpack/pluginConfigs/configSelectorWeightPlugin.js +28 -0
  177. package/lib/shared/bundler/webpack/pluginConfigs/configServiceWorkerPlugin.js +40 -0
  178. package/lib/shared/bundler/webpack/pluginConfigs/configSourceMapPlugin.js +20 -0
  179. package/lib/shared/bundler/webpack/pluginConfigs/configTPHashMappingPlugin.js +32 -0
  180. package/lib/shared/bundler/webpack/pluginConfigs/configVariableConversionPlugin.js +25 -0
  181. package/lib/shared/bundler/webpack/plugins.js +50 -0
  182. package/lib/shared/bundler/webpack/resolvers.js +81 -0
  183. package/lib/shared/bundler/webpack/splitChunksConfig.js +113 -0
  184. package/lib/shared/bundler/webpack/statsConfig.js +21 -0
  185. package/lib/shared/bundler/webpack/utils/index.js +26 -0
  186. package/lib/shared/bundler/webpack/utils/updateArrayWithDefault.js +34 -0
  187. package/lib/shared/bundler/webpack/webpackBuild.js +27 -0
  188. package/lib/shared/bundler/webpack/webpackConfig.js +56 -0
  189. package/lib/shared/commands-utils/doBasicRequirementCheck.js +17 -0
  190. package/lib/shared/commands-utils/getCliPath.js +39 -0
  191. package/lib/shared/commands-utils/index.js +29 -0
  192. package/lib/shared/commands-utils/log.js +13 -0
  193. package/lib/shared/commands-utils/readArgsFormCommandLine.js +11 -0
  194. package/lib/shared/commands-utils/readOptionFormCommandLine.js +11 -0
  195. package/lib/shared/commands-utils/spawnSyncIO.js +38 -0
  196. package/lib/shared/constants.js +45 -0
  197. package/lib/shared/fileUtils/copyFile.js +38 -0
  198. package/lib/shared/fileUtils/directoryIterator.js +21 -0
  199. package/lib/shared/fileUtils/watchRun.js +100 -0
  200. package/lib/shared/postcss/custom_postcss_plugins/EmptyPlugin.js +21 -0
  201. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/constants.js +10 -0
  202. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/handleIgnores.js +66 -0
  203. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/index.js +136 -0
  204. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/insertBefore.js +32 -0
  205. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/isPreviouslyProcessed.js +20 -0
  206. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/replaceUtils.js +20 -0
  207. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/separateHoveredSelectorAndNormalSelector.js +24 -0
  208. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/specialCases.js +43 -0
  209. package/lib/shared/postcss/custom_postcss_plugins/HoverActivePlugin/typeCheckUtils.js +52 -0
  210. package/lib/shared/postcss/custom_postcss_plugins/RTLSplitPlugin.js +139 -0
  211. package/lib/shared/postcss/custom_postcss_plugins/SelectorReplace.js +90 -0
  212. package/lib/shared/postcss/custom_postcss_plugins/ValueReplacer.js +57 -0
  213. package/lib/shared/postcss/custom_postcss_plugins/VariableModificationPlugin/index.js +343 -0
  214. package/lib/shared/postcss/filterPluginsAllowedForSpecficFile.js +55 -0
  215. package/lib/shared/postcss/getAllowedPostCssPlugins.js +30 -0
  216. package/lib/shared/postcss/getSpecificPostCssPlugin.js +58 -0
  217. package/lib/shared/postcss/runPostCssForCssFile.js +37 -0
  218. package/lib/shared/server/configWebpackDevMiddleware.js +41 -0
  219. package/lib/shared/server/corsHandling.js +21 -0
  220. package/lib/shared/server/getIp.js +30 -0
  221. package/lib/shared/server/getServerURL.js +29 -0
  222. package/lib/shared/server/httpsOptions.js +46 -0
  223. package/lib/shared/server/initExpressApp.js +19 -0
  224. package/lib/shared/server/initialHTMLHandling.js +99 -0
  225. package/lib/shared/server/mockApiHandler.js +60 -0
  226. package/lib/shared/server/mockServer.js +41 -0
  227. package/lib/shared/server/serveContextFiles.js +27 -0
  228. package/lib/shared/server/serverBywebpackDevMiddleware.js +35 -0
  229. package/lib/shared/server/startHttpServer.js +26 -0
  230. package/lib/shared/server/startHttpsServer.js +38 -0
  231. package/lib/shared/server/unwanted/addHttp2Server.js +41 -0
  232. package/lib/shared/server/unwanted/configWebpackDevMiddleware.js +44 -0
  233. package/lib/shared/server/unwanted/mockApiSupport.js +19 -0
  234. package/lib/shared/server/unwanted/websocketMockSetup.js +48 -0
  235. package/lib/shared/server/urlConcat.js +32 -0
  236. package/lib/shared/utils/requireLocalOrGlobal.js +81 -0
  237. package/lib/shared/utils/utils.js +1 -0
  238. package/lib/shared/utils/versionPrint.js +20 -0
  239. package/npm-shrinkwrap.json +14102 -0
  240. package/package.json +54 -0
  241. package/polyfillForOldNodeVersion.js +10 -0
  242. package/result.json +1 -0
  243. package/templates/app/README.MD +30 -0
  244. package/templates/app/package.json +12 -0
  245. package/templates/library/README.MD +28 -0
  246. package/templates/library/package.json +11 -0
  247. package/templates/wms/index.html +43 -0
  248. package/unittest/index.html +37 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isI18nFile = void 0;
7
+ exports.nameTemplates = nameTemplates;
8
+
9
+ var _modeUtils = require("./modeUtils");
10
+
11
+ // nameTemplate.js
12
+ // NOTE: these below code can be done in js,
13
+ // we did copy paste in order to avoid unnecessary confusion
14
+ // NOTE: array[0] is dev mode file templates and array[1] is prod mode file templates
15
+ const templates = {
16
+ html: ['index.html', 'index.[contenthash].html'],
17
+ js: ['js/[name].js', 'js/[name].[contenthash].js'],
18
+ chunkjs: ['js-chunks/[name].js', 'js-chunks/[name].[contenthash].js'],
19
+ i18njs: ['i18n-chunks/[locale]/[name].i18n.js', 'i18n-chunks/[locale]/[name].[chunkhash].i18n.js'],
20
+ i18nchunkjs: ['i18n-chunks/[locale]/[name].i18n.js', // 'i18n-chunks/[locale]/[name].[chunkhash].i18n.js'
21
+ 'i18n-chunks/[locale]/[name].[contenthash].i18n.js'],
22
+ i18nmanifest: ['i18n-manifest.json', 'i18n-manifest.json'],
23
+ workerjs: ['js/[name].js', 'js/[name].[contenthash].js'],
24
+ css: ['css/[name].css', 'css/[name].[contenthash].css'],
25
+
26
+ /**
27
+ * NOTE: when you change (cssdir) this line it will have affect on Below files will be affected
28
+ * custom_plugins/RtlSplitPlugin/*
29
+ * pluginConfigs/configMiniCSSExtractPlugin.js
30
+ * pluginConfigs/configRtlCssPlugin.js
31
+ * */
32
+ cssdir: ['css/[name].[dir].css', 'css/[name].[contenthash].[dir].css'],
33
+ image: ['images/[name][ext]', 'images/[name].[contenthash][ext]'],
34
+ font: ['fonts/[name][ext]', 'fonts/[name].[contenthash][ext]'],
35
+ svg: ['fonts/[name][ext]', 'fonts/[name].[contenthash][ext]'],
36
+ audio: ['fonts/[name][ext]', 'fonts/[name].[contenthash][ext]'],
37
+ video: ['videos/[name][ext]', 'videos/[name].[contenthash][ext]']
38
+ };
39
+
40
+ function createNameTemplate(name, useHash) {
41
+ // const ext = `${useHash ? '.[hash:20]' : ''}[ext]`;
42
+ return useHash ? name[1] : name[0];
43
+ }
44
+
45
+ const devModeContentHashAllowedTypes = {
46
+ image: true,
47
+ font: true,
48
+ svg: true,
49
+ audio: true,
50
+ video: true
51
+ };
52
+
53
+ function nameTemplates(type, options) {
54
+ const {
55
+ enableChunkHash,
56
+ mode
57
+ } = options;
58
+ const templateName = templates[type];
59
+
60
+ if (!templateName) {
61
+ throw Error(`specified type not valid Type: ${type}`);
62
+ }
63
+
64
+ let useHash = enableChunkHash;
65
+
66
+ if ((0, _modeUtils.isDevelopmentMode)(mode) && enableChunkHash && !devModeContentHashAllowedTypes[type]) {
67
+ useHash = false;
68
+ }
69
+
70
+ return createNameTemplate(templateName, useHash);
71
+ } // export function cssDirNameTemplate(dir, options) {
72
+ // return nameTemplates('cssdir', options).replace(/\[dir\]/g, dir);
73
+ // }
74
+
75
+
76
+ const isI18nFile = url => url.endsWith('.i18n.js');
77
+
78
+ exports.isI18nFile = isI18nFile;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.publicPathAsExpression = publicPathAsExpression;
7
+ exports.resourceBasedPublicPath = resourceBasedPublicPath;
8
+
9
+ // const publicPaths = {
10
+ // };
11
+ function resourceBasedPublicPath(resoruceType, options) {
12
+ return options.publicPath;
13
+ }
14
+
15
+ function publicPathAsExpression(resoruceType, options) {
16
+ if (resoruceType === 'i18n') {
17
+ return options.i18nChunkSplit.localeVarName;
18
+ }
19
+
20
+ return JSON.stringify(options.publicPath);
21
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.configCustomLoaders = configCustomLoaders;
7
+
8
+ function configCustomLoaders(options) {
9
+ return options.customLoaders;
10
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cssLoaders = cssLoaders;
7
+
8
+ var _getCSSLoaders = require("./getCSSLoaders");
9
+
10
+ function cssLoaders(options) {
11
+ return [{
12
+ test: /\.css$/,
13
+ // exclude: /\.module\.css$/,
14
+ use: (0, _getCSSLoaders.getCSSLoaders)(options)
15
+ }];
16
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
9
+
10
+ var _nameTemplates = require("../common/nameTemplates");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ // import { RuntimeGlobals, RuntimeModule } from 'webpack';
15
+ // import { Template } from 'webpack';
16
+ const pluginName = 'CdnChangePlugin'; // const MODULE_TYPE = 'css/mini-extract';
17
+ // class CdnChangeRuntimePlugin extends RuntimeModule {
18
+ // constructor(compiler, { variableName }) {
19
+ // super('cdn loading', 10);
20
+ // this.variableName = variableName;
21
+ // }
22
+ // generate() {
23
+ // return `${RuntimeGlobals.getChunkCssFilename} = function(chunkId) {
24
+ // const cssCdnUrl = window[${this.variableName}] || chunkId;
25
+ // return cssCdnUrl;
26
+ // }`;
27
+ // }
28
+ // }
29
+
30
+ class CdnChangePlugin {
31
+ constructor(options) {
32
+ this.createSeparateSMap = options.createSeparateSMap;
33
+ this.i18nTemplate = options.i18nTemplate || '{{__I18N_CDN__}}';
34
+ this.variableName = options.variableName || '__CSS_CDN__';
35
+ this.cssTemplate = options.cssTemplate || '{{__CSS_CDN__}}';
36
+ this.jsTemplate = options.jsTemplate || '{{__JS_CDN__}}';
37
+ }
38
+
39
+ apply(compiler) {
40
+ // compiler.hooks.thisCompilation.tap(pluginName, compilation => {
41
+ // const enabledChunks = new WeakSet();
42
+ // const handler = (entryRuntimeChunk, set) => {
43
+ // if (enabledChunks.has(entryRuntimeChunk)) {
44
+ // return;
45
+ // }
46
+ // enabledChunks.add(entryRuntimeChunk);
47
+ // set.add(RuntimeGlobals.getFullHash);
48
+ // set.add(RuntimeGlobals.getChunkCssFilename);
49
+ // compilation.addRuntimeModule(
50
+ // entryRuntimeChunk,
51
+ // new CdnChangeRuntimePlugin(set, {
52
+ // compiler,
53
+ // variableName: this.variableName
54
+ // })
55
+ // );
56
+ // };
57
+ // compilation.hooks.runtimeRequirementInTree
58
+ // .for(RuntimeGlobals.ensureChunkHandlers)
59
+ // .tap(pluginName, handler);
60
+ // });
61
+ compiler.hooks.compilation.tap(pluginName, compilation => {
62
+ _htmlWebpackPlugin.default.getHooks(compilation).beforeAssetTagGeneration.tap(pluginName, (data, cb) => {
63
+ const {
64
+ createSeparateSMap
65
+ } = this; // eslint-disable-next-line no-param-reassign
66
+
67
+ data.assets = { ...data.assets,
68
+ css: data.assets.css.map(css => `${this.cssTemplate}${css}`),
69
+ js: data.assets.js.map(js => {
70
+ if (createSeparateSMap && !(0, _nameTemplates.isI18nFile)(js)) {
71
+ js = js.replace('js/', `{{--js-smap}}js/`); //eslint-disable-line
72
+ }
73
+
74
+ return `${(0, _nameTemplates.isI18nFile)(js) ? this.i18nTemplate : this.jsTemplate}${js}`;
75
+ })
76
+ };
77
+ cb && cb(null, data);
78
+ });
79
+ });
80
+ }
81
+
82
+ }
83
+
84
+ var _default = CdnChangePlugin; // Cdn Change Plugin for runtime chunks???
85
+
86
+ /**
87
+ * the filename of the script part of the chunk
88
+ */
89
+ // exports.getChunkScriptFilename = "__webpack_require__.u";
90
+ // /**
91
+ // * the filename of the css part of the chunk
92
+ // */
93
+ // exports.getChunkCssFilename = "__webpack_require__.k";
94
+
95
+ exports.default = _default;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EFCTemplatePlugin = void 0;
7
+
8
+ var _fs = require("fs");
9
+
10
+ var _logger = require("../../../../logger");
11
+
12
+ var _LocaleChunkAssetsStore = require("./I18nSplitPlugin/LocaleChunkAssetsStore");
13
+
14
+ var _constants = require("../../../constants");
15
+
16
+ var _getInitialAssetsFuncTemplate = require("./getInitialAssetsFuncTemplate");
17
+
18
+ const INITIAL_ASSETS_TEMPLATE = '// <--getInitialAssets-->';
19
+ const PUBLIC_PATH_TEMPLATE = '"<--publicPath-->"';
20
+ const pluginName = 'EFCTemplatePlugin';
21
+
22
+ class EFCTemplatePlugin {
23
+ constructor(options = {}) {
24
+ const {
25
+ i18nFileNameTemplate,
26
+ entryPointName,
27
+ outputFile,
28
+ version,
29
+ publicPath,
30
+ templateFilePath
31
+ } = options;
32
+ this.options = options;
33
+ this.templateFilePath = (0, _constants.joinWithAppPath)(templateFilePath);
34
+ this.i18nFileNameTemplate = i18nFileNameTemplate;
35
+ this.publicPath = publicPath; // NOTE: this logic may be needed for i18n splitted file name with contenthash cases
36
+ // this.i18nManifestFileName = options.i18nManifestFileName;
37
+ // IMPORTANT: here we merging options from package.json and options via constructor
38
+ // So when debugging consider this as well
39
+ // this.options = Object.assign({}, efcOptions, options);
40
+
41
+ this.entryPointName = entryPointName || 'efc';
42
+ this.outputFile = outputFile.replace('[version]', version);
43
+ } // NOTE: this logic may be needed for i18n splitted file name with contenthash cases
44
+ // getI18nManifest(compilation) {
45
+ // const i18nManifestFile =
46
+ // compilation.assets[this.options.i18nManifestFileName];
47
+ // if (i18nManifestFile) {
48
+ // const manifest = JSON.parse(i18nManifestFile.source());
49
+ // return manifest;
50
+ // }
51
+ // return {};
52
+ // }
53
+ // eslint-disable-next-line class-methods-use-this
54
+
55
+
56
+ templateReplacer(entryPoint, compilation) {
57
+ const {
58
+ enableRTLSplit
59
+ } = this.options; // const i18nManifest = this.getI18nManifest(compilation);
60
+
61
+ const initialAssetsFuncTemplate = (0, _getInitialAssetsFuncTemplate.getInitialAssetsFuncTemplate)({
62
+ entryPoint,
63
+ compilation,
64
+ enableRTLSplit,
65
+ i18nStore: this.store,
66
+ chunkSplitEnable: this.options.chunkSplitEnable,
67
+ i18nFileNameTemplate: this.i18nFileNameTemplate,
68
+ functionName: 'getInitialAssets'
69
+ });
70
+ const templateStr = (0, _fs.readFileSync)(this.templateFilePath).toString();
71
+ return templateStr.replace(INITIAL_ASSETS_TEMPLATE, initialAssetsFuncTemplate).replace(PUBLIC_PATH_TEMPLATE, this.publicPath);
72
+ }
73
+
74
+ apply(compiler) {
75
+ const {
76
+ RawSource
77
+ } = compiler.webpack.sources;
78
+ compiler.hooks.thisCompilation.tap(pluginName, compilation => {
79
+ // Get store for cache
80
+ this.store = (0, _LocaleChunkAssetsStore.getLocaleChunkAssetsStore)(compilation);
81
+ });
82
+ compiler.hooks.thisCompilation.tap(pluginName, compilation => {
83
+ compilation.hooks.processAssets.tap({
84
+ name: pluginName,
85
+ stage: compilation.PROCESS_ASSETS_STAGE_DERIVED
86
+ }, () => {
87
+ const {
88
+ entryPointName,
89
+ outputFile
90
+ } = this;
91
+ const entryPoint = compilation.entrypoints.get(entryPointName);
92
+
93
+ if (!entryPoint) {
94
+ return;
95
+ }
96
+
97
+ if (!(0, _fs.existsSync)(this.templateFilePath)) {
98
+ (0, _logger.errorLogger)(`EFC Template file not exists ${this.templateFilePath}`);
99
+ return;
100
+ }
101
+
102
+ const source = new RawSource(this.templateReplacer(entryPoint, compilation));
103
+ compilation.emitAsset(outputFile, source);
104
+ (0, _logger.messageLogger)('The EFC embedded code was created successfully..!!!');
105
+ (0, _logger.messageLogger)(`The EFC SDK File name ${outputFile}`);
106
+ });
107
+ });
108
+ }
109
+
110
+ }
111
+
112
+ exports.EFCTemplatePlugin = EFCTemplatePlugin;
@@ -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,172 @@
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
+ chunkId: chunk.id,
140
+ chunkHash: chunk.hash,
141
+ contentHash
142
+ });
143
+ return {
144
+ contentHash,
145
+ filename
146
+ };
147
+ }
148
+
149
+ getI18nContentForkeys(i18nKeys, locale) {
150
+ const {
151
+ allI18nObject
152
+ } = this.options;
153
+ const data = {};
154
+
155
+ for (const key of i18nKeys) {
156
+ data[key] = allI18nObject[locale][key];
157
+ }
158
+
159
+ return data;
160
+ }
161
+
162
+ getI18nChunkFileContent(i18nKeys, loc) {
163
+ const {
164
+ jsonpFunc
165
+ } = this.options;
166
+ const data = this.getI18nContentForkeys(i18nKeys, loc);
167
+ return `${jsonpFunc}(${(0, _propertiesUtils.jsonToString)(data)})`;
168
+ }
169
+
170
+ }
171
+
172
+ 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;