@zohodesk/react-cli 0.0.1-test.148.3 → 1.0.0-exp.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 (180) hide show
  1. package/.eslintignore +7 -7
  2. package/.eslintrc.js +180 -183
  3. package/.prettierrc +6 -0
  4. package/{CHANGELOG.md → CHANGELOG-fz.md} +0 -0
  5. package/Changelog.md +1019 -0
  6. package/README.md +1161 -678
  7. package/bin/cli.js +483 -392
  8. package/docs/CustomChunks.md +26 -0
  9. package/docs/DevServerPort.md +39 -0
  10. package/docs/DevStart.md +18 -0
  11. package/docs/HoverActive.md +12 -0
  12. package/docs/InstallNode.md +28 -0
  13. package/docs/SelectorWeight.md +6 -0
  14. package/docs/TODOS.md +10 -0
  15. package/docs/ValueReplacer.md +60 -0
  16. package/docs/VariableConversion.md +724 -0
  17. package/docs/warnings_while_install.txt +35 -0
  18. package/files/eslintrc.js +62 -62
  19. package/files/prettierrc.js +3 -3
  20. package/lib/common/getEntries.js +9 -6
  21. package/lib/common/index.js +6 -6
  22. package/lib/common/splitChunks.js +60 -12
  23. package/lib/common/sslcertUpdater.js +59 -0
  24. package/lib/common/testPattern.js +69 -0
  25. package/lib/common/valueReplacer.js +55 -0
  26. package/lib/configs/jest.config.js +18 -8
  27. package/lib/configs/libAlias.js +38 -0
  28. package/lib/configs/resolvers.js +40 -0
  29. package/lib/configs/webpack.css.umd.config.js +4 -4
  30. package/lib/configs/webpack.dev.config.js +59 -54
  31. package/lib/configs/webpack.docs.config.js +74 -59
  32. package/lib/configs/webpack.docs1.config.js +122 -0
  33. package/lib/configs/webpack.impact.config.js +54 -50
  34. package/lib/configs/webpack.prod.config.js +72 -47
  35. package/lib/constants.js +31 -0
  36. package/lib/hooks/docsEntry.js +18 -0
  37. package/lib/jest/preProcessors/cssPreprocessor.js +16 -7
  38. package/lib/loaderUtils/configsAssetsLoaders.js +117 -0
  39. package/lib/loaderUtils/getCSSLoaders.js +89 -21
  40. package/lib/loaderUtils/index.js +4 -4
  41. package/lib/loaderUtils/windowsModification.js +11 -0
  42. package/lib/loaders/fileBountryLoader.js +17 -0
  43. package/lib/loaders/scriptInstrumentLoader.js +2 -2
  44. package/lib/loaders/selectorMappingLoader.js +75 -0
  45. package/lib/loaders/workerLoader.js +9 -9
  46. package/lib/pluginUtils/configHtmlWebpackPlugins.js +60 -0
  47. package/lib/pluginUtils/getDevPlugins.js +70 -45
  48. package/lib/pluginUtils/getDocsPlugins.js +21 -10
  49. package/lib/pluginUtils/getLibraryImactPlugins.js +23 -0
  50. package/lib/pluginUtils/getProdPlugins.js +74 -58
  51. package/lib/pluginUtils/index.js +12 -12
  52. package/lib/plugins/CdnChangePlugin.js +16 -2
  53. package/lib/plugins/EFCPlugin.js +52 -20
  54. package/lib/plugins/EFCPlugin.md +6 -0
  55. package/lib/plugins/EFCTemplatePlugin.js +151 -0
  56. package/lib/plugins/I18NInjectIntoIndexPlugin.js +4 -4
  57. package/lib/plugins/I18nSplitPlugin/I18nDownlodLogic.js +38 -38
  58. package/lib/plugins/I18nSplitPlugin/I18nFilesEmitter.js +30 -30
  59. package/lib/plugins/I18nSplitPlugin/I18nKeysIdentifer.js +8 -8
  60. package/lib/plugins/I18nSplitPlugin/I18nSplit.md +95 -86
  61. package/lib/plugins/I18nSplitPlugin/README.md +25 -25
  62. package/lib/plugins/I18nSplitPlugin/index.js +57 -57
  63. package/lib/plugins/I18nSplitPlugin/utils/hashUtils.js +2 -2
  64. package/lib/plugins/I18nSplitPlugin/utils/propertiesUtils.js +1 -1
  65. package/lib/plugins/ManifestPlugin.js +8 -0
  66. package/lib/plugins/RequireVariablePublicPlugin.js +30 -0
  67. package/lib/plugins/ResourceHintsPlugin.js +17 -17
  68. package/lib/plugins/RtlSplitPlugin/RtlCssPlugin.js +6 -6
  69. package/lib/plugins/RtlSplitPlugin/RtrSplit.md +30 -0
  70. package/lib/plugins/SelectorPlugin.js +97 -0
  71. package/lib/plugins/ServiceWorkerPlugin.js +13 -9
  72. package/lib/plugins/SourceMapHookPlugin.js +9 -3
  73. package/lib/plugins/TPHashMappingPlugin.js +4 -4
  74. package/lib/plugins/VariableConversionCollector.js +352 -0
  75. package/lib/plugins/composeCommonPlugin.js +30 -0
  76. package/lib/plugins/index.js +36 -36
  77. package/lib/plugins/libraryImpactPlugin.js +14 -2
  78. package/lib/postcss-plugins/{ExcludeRTLPlugin.js → ExcludePlugin.js} +1 -1
  79. package/lib/postcss-plugins/RTLSplitPlugin.js +13 -13
  80. package/lib/postcss-plugins/ValueReplacer.js +46 -0
  81. package/lib/postcss-plugins/__test__/hoverActivePlugin.spec.js +22 -0
  82. package/lib/postcss-plugins/__test__/test1Input.css +39 -0
  83. package/lib/postcss-plugins/__test__/test1Output.css +39 -0
  84. package/lib/postcss-plugins/hoverActivePlugin.js +389 -0
  85. package/lib/postcss-plugins/variableModificationPlugin/ErrorHandler.js +60 -0
  86. package/lib/postcss-plugins/variableModificationPlugin/index.js +307 -0
  87. package/lib/postcss-plugins/variableModifier.js +244 -0
  88. package/lib/schemas/index.js +173 -11
  89. package/lib/servers/devBuild.js +102 -0
  90. package/lib/servers/docsServerCore.js +16 -18
  91. package/lib/servers/getCliPath.js +28 -0
  92. package/lib/servers/httpsOptions.js +49 -0
  93. package/lib/servers/nowatchserver.js +206 -0
  94. package/lib/servers/server.js +114 -82
  95. package/lib/sh/pre-commit.sh +34 -34
  96. package/lib/sh/reportPublish.sh +45 -45
  97. package/lib/templates/linterConstant.js +1 -1
  98. package/lib/utils/buildstats.html +148 -148
  99. package/lib/utils/cssClassNameGenerate.js +9 -2
  100. package/lib/utils/cssURLReplacer.js +30 -43
  101. package/lib/utils/getCurrentBranch.js +1 -1
  102. package/lib/utils/getDependenciesImpactList.js +14 -12
  103. package/lib/utils/getFileType.js +49 -0
  104. package/lib/utils/getOptions.js +118 -10
  105. package/lib/utils/index.js +44 -20
  106. package/lib/utils/jsonHelper.js +12 -3
  107. package/lib/utils/reinstallDependencies.js +1 -1
  108. package/lib/utils/repoClone.js +16 -4
  109. package/lib/utils/resultSchema.json +73 -73
  110. package/lib/utils/rtl.js +19 -2
  111. package/lib/utils/useExitCleanup.js +55 -0
  112. package/npm8.md +9 -0
  113. package/package.json +121 -142
  114. package/postpublish.js +8 -0
  115. package/result.json +1 -0
  116. package/templates/app/.eslintrc.js +140 -140
  117. package/templates/app/README.md +12 -12
  118. package/templates/app/app/index.html +24 -24
  119. package/templates/app/app/properties/ApplicationResources_en_US.properties +1 -1
  120. package/templates/app/app/properties/i18nkeys.json +3 -3
  121. package/templates/app/docs/all.html +69 -69
  122. package/templates/app/mockapi/index.js +18 -18
  123. package/templates/app/package.json +37 -37
  124. package/templates/app/src/actions/SampleActions/index.js +37 -37
  125. package/templates/app/src/actions/index.js +65 -65
  126. package/templates/app/src/appUrls.js +19 -19
  127. package/templates/app/src/components/Alert/Alert.js +134 -134
  128. package/templates/app/src/components/Alert/Alert.module.css +79 -79
  129. package/templates/app/src/components/FreezeLayer/FreezeLayer.css +37 -37
  130. package/templates/app/src/components/FreezeLayer/FreezeLayer.js +84 -84
  131. package/templates/app/src/components/Sample/Sample.module.css +11 -11
  132. package/templates/app/src/components/Sample/SampleList.js +61 -61
  133. package/templates/app/src/components/Slider/Slider.css +41 -41
  134. package/templates/app/src/components/Slider/Slider.js +55 -55
  135. package/templates/app/src/containers/AlertContainer/index.js +15 -15
  136. package/templates/app/src/containers/AppContainer/index.js +96 -96
  137. package/templates/app/src/containers/AppContainer/index.module.css +27 -27
  138. package/templates/app/src/containers/CustomMatch/index.js +65 -65
  139. package/templates/app/src/containers/DevTools/index.js +10 -10
  140. package/templates/app/src/containers/Header/index.js +67 -67
  141. package/templates/app/src/containers/Header/index.module.css +43 -43
  142. package/templates/app/src/containers/Redirect/index.js +63 -63
  143. package/templates/app/src/containers/Redirector/index.js +47 -47
  144. package/templates/app/src/containers/SampleListContainer/ListContainer.js +42 -42
  145. package/templates/app/src/containers/SampleListContainer/ListContainer.module.css +3 -3
  146. package/templates/app/src/historyChange.js +5 -5
  147. package/templates/app/src/index.html +10 -10
  148. package/templates/app/src/index.js +24 -24
  149. package/templates/app/src/middleware/PromiseMiddleware.js +59 -59
  150. package/templates/app/src/reducers/alertData.js +11 -11
  151. package/templates/app/src/reducers/index.js +6 -6
  152. package/templates/app/src/reducers/samples.js +19 -19
  153. package/templates/app/src/store/configureStore.dev.js +51 -51
  154. package/templates/app/src/store/configureStore.js +5 -5
  155. package/templates/app/src/store/configureStore.prod.js +26 -26
  156. package/templates/app/src/util/Common.js +5 -5
  157. package/templates/app/src/util/RequestAPI.js +132 -132
  158. package/templates/docs/a.html +13 -0
  159. package/templates/docs/all.html +249 -249
  160. package/templates/docs/component.html +178 -178
  161. package/templates/docs/components.html +221 -221
  162. package/templates/docs/css/b.min.css +6 -6
  163. package/templates/docs/css/component.css +42 -42
  164. package/templates/docs/css/componentTest.css +6 -6
  165. package/templates/docs/css/hopscotch.css +585 -585
  166. package/templates/docs/css/style.css +1022 -1022
  167. package/templates/docs/docsEntry.js +14 -0
  168. package/templates/docs/docsRoot.js +3 -0
  169. package/templates/docs/impactReportTemplate.html +154 -154
  170. package/templates/docs/index.html +1501 -1493
  171. package/templates/docs/js/active-line.js +72 -72
  172. package/templates/docs/js/b.min.js +7 -7
  173. package/templates/docs/js/codemirror.js +9680 -9680
  174. package/templates/docs/js/designTokens.js +334 -334
  175. package/templates/docs/js/j.min.js +4 -4
  176. package/templates/docs/js/javascript.js +874 -874
  177. package/templates/docs/js/matchbrackets.js +145 -145
  178. package/unittest/index.html +37 -0
  179. package/cert/cert.pem +0 -105
  180. package/cert/key.pem +0 -30
@@ -21,22 +21,26 @@ var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plu
21
21
 
22
22
  var _I18nSplitPlugin = _interopRequireDefault(require("../plugins/I18nSplitPlugin"));
23
23
 
24
- var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
25
-
26
24
  var _copyWebpackPlugin = _interopRequireDefault(require("copy-webpack-plugin"));
27
25
 
28
- var _plugins = require("../plugins");
26
+ var _VariableConversionCollector = _interopRequireDefault(require("../plugins/VariableConversionCollector"));
27
+
28
+ var _SelectorPlugin = _interopRequireDefault(require("../plugins/SelectorPlugin"));
29
29
 
30
- var _common = require("../common");
30
+ var _plugins = require("../plugins");
31
31
 
32
32
  var _RtlCssPlugin = require("../plugins/RtlSplitPlugin/RtlCssPlugin");
33
33
 
34
+ var _configHtmlWebpackPlugins = require("./configHtmlWebpackPlugins");
35
+
34
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
37
 
36
38
  // eslint-disable-next-line no-unused-vars
37
- let getProdPlugins = (options, publicPath = '') => {
39
+ const getProdPlugins = (options, publicPath = '') => {
38
40
  let {
39
- enableChunkHash,
41
+ enableChunkHash
42
+ } = options.app;
43
+ const {
40
44
  manifestFileName,
41
45
  bundleAnalyze,
42
46
  optimize,
@@ -45,6 +49,7 @@ let getProdPlugins = (options, publicPath = '') => {
45
49
  enableSMapHook,
46
50
  tpFolder,
47
51
  folder,
52
+ mainEntryHtmlFile,
48
53
  outputFolder,
49
54
  context,
50
55
  enableSMap,
@@ -52,14 +57,21 @@ let getProdPlugins = (options, publicPath = '') => {
52
57
  mode
53
58
  },
54
59
  hasShadowDOM,
60
+ cssVariableReplacementConfig,
61
+ plugins: pluginObject,
62
+ // exclude,
63
+ selectorWeightConfig,
55
64
  resourceHints,
56
65
  serviceWorker,
57
- htmlTemplate: {
58
- inject
59
- },
66
+ htmlTemplate,
60
67
  tpHashMapping,
61
- cdnMapping
68
+ cdnMapping,
69
+ crossorigin
62
70
  } = options.app;
71
+ const {
72
+ inject,
73
+ minify: minifyHtmlOptions
74
+ } = htmlTemplate;
63
75
  const {
64
76
  i18n
65
77
  } = options;
@@ -69,15 +81,16 @@ let getProdPlugins = (options, publicPath = '') => {
69
81
  const {
70
82
  hasEFC: newOptionForEnableEFC,
71
83
  nameScope: efcNameSpace,
84
+ templateFilePath,
72
85
  localeAttr: efcLocaleAttr
73
86
  } = options.efc;
74
87
  const hasEFC = newOptionForEnableEFC || prevOptionForEnableEFC;
75
88
  const hashTempalate = enableChunkHash ? '.[chunkhash:20]_' : '';
76
- const cssLTRFileNameTempalte = `css/[name]${hashTempalate}.ltr.css`;
89
+ const cssLTRFileNameTempalte = `css/[name]${hashTempalate}${enableRTLSplit ? '.ltr' : ''}.css`;
77
90
  const cssRTLFileNameTempalte = `css/[name]${hashTempalate}.rtl.css`;
78
- let isDevelopment = mode === 'prod' || mode === 'dev' || mode === 'dev-no-warn';
91
+ const isDevelopment = mode === 'prod' || mode === 'dev' || mode === 'dev-no-warn';
79
92
  enableChunkHash = !isDevelopment && enableChunkHash;
80
- let plugins = [new _caseSensitivePathsWebpackPlugin.default(), new _webpack.default.IgnorePlugin(/^\.\/locale$/, /moment$/), new _webpack.default.DefinePlugin({
93
+ const pluginsArr = [new _caseSensitivePathsWebpackPlugin.default(), new _webpack.default.IgnorePlugin(/^\.\/locale$/, /moment$/), new _webpack.default.DefinePlugin({
81
94
  __TEST__: false,
82
95
  __DEVELOPMENT__: false,
83
96
  __LOCAL_PRODUCTION__: isDevelopment,
@@ -93,7 +106,7 @@ let getProdPlugins = (options, publicPath = '') => {
93
106
  }), new _plugins.ResourceHintsPlugin(), new _plugins.UglifyCSSPlugin()];
94
107
 
95
108
  if (enableRTLSplit) {
96
- plugins.push(new _RtlCssPlugin.RtlCssPlugin({
109
+ pluginsArr.push(new _RtlCssPlugin.RtlCssPlugin({
97
110
  templateLabel: options.css.templateLabel,
98
111
  disableMiniFiySelector: options.css.disableMiniFiySelector,
99
112
  dirVarName: options.css.dirVarName,
@@ -104,11 +117,11 @@ let getProdPlugins = (options, publicPath = '') => {
104
117
  }
105
118
 
106
119
  const i18nManifestFileName = 'i18n-manifest.json';
107
- /**
108
- * NOTE:
109
- * this file name ext .i18n.js added
110
- * Because, in service worker they maintain cache as file name based
111
- * So, to make differce we added .i18n.js ext.
120
+ /**
121
+ * NOTE:
122
+ * this file name ext .i18n.js added
123
+ * Because, in service worker they maintain cache as file name based
124
+ * So, to make differce we added .i18n.js ext.
112
125
  */
113
126
 
114
127
  const i18nFileNameTemplate = 'i18n-chunk/[locale]/[name].[chunkhash].i18n.js';
@@ -116,7 +129,7 @@ let getProdPlugins = (options, publicPath = '') => {
116
129
  // const i18nFileNameTemplate = 'i18n-chunk/[locale]/[name]_.js';
117
130
 
118
131
  if (i18n.chunkSplitEnable) {
119
- plugins.push(new _I18nSplitPlugin.default({
132
+ pluginsArr.push(new _I18nSplitPlugin.default({
120
133
  jsResource: i18n.jsResource,
121
134
  localeVarName: i18n.localeVarName,
122
135
  jsonpFunc: i18n.jsonpFunc,
@@ -128,10 +141,10 @@ let getProdPlugins = (options, publicPath = '') => {
128
141
  propertiesFolder: i18n.propertiesFolder
129
142
  }));
130
143
  } else {
131
- let i18nPath = _path.default.join(process.cwd(), context, 'i18n');
144
+ const i18nPath = _path.default.join(process.cwd(), context, 'i18n');
132
145
 
133
146
  if (_fs.default.existsSync(i18nPath)) {
134
- plugins.push(new _copyWebpackPlugin.default([{
147
+ pluginsArr.push(new _copyWebpackPlugin.default([{
135
148
  from: `${i18nPath}/`,
136
149
  to: enableChunkHash ? './i18n/[name].[hash:20]_.[ext]' : './i18n/[name]_.[ext]',
137
150
  toType: 'template'
@@ -139,27 +152,27 @@ let getProdPlugins = (options, publicPath = '') => {
139
152
  }
140
153
  }
141
154
 
142
- tpFolder && plugins.push(new _copyWebpackPlugin.default([{
155
+ tpFolder && pluginsArr.push(new _copyWebpackPlugin.default([{
143
156
  from: `${_path.default.join(process.cwd(), context, tpFolder)}/`,
144
157
  to: `./${tpFolder}/`,
145
158
  toType: 'dir'
146
159
  }]));
160
+ (0, _configHtmlWebpackPlugins.configHtmlWebpackPlugins)(pluginsArr, {
161
+ enableChunkHash,
162
+ folder,
163
+ mainEntryHtmlFile,
164
+ inject,
165
+ minify: minifyHtmlOptions,
166
+ crossorigin,
167
+ hasEFC
168
+ });
147
169
 
148
170
  if (hasEFC) {
149
- plugins.push(new _htmlWebpackPlugin.default({
150
- chunksSortMode: 'none',
151
- filename: enableChunkHash ? 'index.[templatehash:20].html' : 'index.html',
152
- template: _path.default.join(process.cwd(), folder, 'index.html'),
153
- excludeChunks: ['efc', 'widget'],
154
- minify: false,
155
- templateParameters: _common.templateParameters,
156
- scriptLoading: 'defer',
157
- inject: inject
158
- }));
159
- plugins.push(new _plugins.EFCPlugin({
171
+ pluginsArr.push(new _plugins.EFCPlugin({
160
172
  isDevelopment,
161
173
  serverUrl: publicPath,
162
174
  i18nFileNameTemplate,
175
+ templateFilePath,
163
176
  i18nManifestFileName,
164
177
  entryPointName: 'efc',
165
178
  // outputFile: 'zohodesk-efc-sdk-latest.js',
@@ -167,19 +180,9 @@ let getProdPlugins = (options, publicPath = '') => {
167
180
  localeAttr: efcLocaleAttr,
168
181
  cdnVariableName: cdnMapping.isCdnEnabled ? cdnMapping.variableName : null
169
182
  }));
170
- } else {
171
- plugins.push(new _htmlWebpackPlugin.default({
172
- chunksSortMode: 'none',
173
- filename: enableChunkHash ? 'index.[templatehash:20].html' : 'index.html',
174
- template: _path.default.join(process.cwd(), folder, 'index.html'),
175
- minify: false,
176
- templateParameters: _common.templateParameters,
177
- scriptLoading: 'defer',
178
- inject: inject
179
- }));
180
183
  }
181
184
 
182
- plugins.push(new _plugins.I18NInjectIntoIndexPlugin({
185
+ pluginsArr.push(new _plugins.I18NInjectIntoIndexPlugin({
183
186
  // Because we will handle cdn url in CdnChangePlugin
184
187
  publicPath: cdnMapping.isCdnEnabled ? '' : i18nPublicPath,
185
188
  isDevelopment,
@@ -190,10 +193,10 @@ let getProdPlugins = (options, publicPath = '') => {
190
193
  }));
191
194
 
192
195
  if (publicPaths && !isDevelopment && !cdnMapping.isCdnEnabled) {
193
- let {
196
+ const {
194
197
  callback
195
198
  } = publicPaths;
196
- plugins.push(callback ? new _plugins.PublicPathCallbackPlugin({
199
+ pluginsArr.push(callback ? new _plugins.PublicPathCallbackPlugin({
197
200
  callback
198
201
  }) : new _plugins.PublicPathChangePlugin({
199
202
  publicPaths,
@@ -202,24 +205,24 @@ let getProdPlugins = (options, publicPath = '') => {
202
205
  }
203
206
 
204
207
  if (cdnMapping.isCdnEnabled) {
205
- plugins.push(new _plugins.CdnChangePlugin(cdnMapping));
208
+ pluginsArr.push(new _plugins.CdnChangePlugin(cdnMapping));
206
209
  }
207
210
 
208
- plugins.push(new _lodashWebpackPlugin.default({
211
+ pluginsArr.push(new _lodashWebpackPlugin.default({
209
212
  collections: true,
210
213
  shorthands: true
211
214
  }));
212
- hasShadowDOM && plugins.push(new _plugins.ShadowDOMSupportPlugin());
215
+ hasShadowDOM && pluginsArr.push(new _plugins.ShadowDOMSupportPlugin());
213
216
 
214
217
  if (!isDevelopment) {
215
- enableSMap && enableSMapHook && plugins.push(new _plugins.SourceMapHookPlugin());
216
- optimize && plugins.push(new _plugins.OptimizeJSPlugin());
217
- plugins.push(new _plugins.ManifestPlugin({
218
+ enableSMap && enableSMapHook && pluginsArr.push(new _plugins.SourceMapHookPlugin());
219
+ optimize && pluginsArr.push(new _plugins.OptimizeJSPlugin());
220
+ pluginsArr.push(new _plugins.ManifestPlugin({
218
221
  fileName: manifestFileName
219
222
  }));
220
223
 
221
224
  if (bundleAnalyze) {
222
- plugins.push(new _webpackBundleAnalyzer.BundleAnalyzerPlugin({
225
+ pluginsArr.push(new _webpackBundleAnalyzer.BundleAnalyzerPlugin({
223
226
  analyzerMode: 'static',
224
227
  generateStatsFile: true,
225
228
  openAnalyzer: false,
@@ -236,7 +239,7 @@ let getProdPlugins = (options, publicPath = '') => {
236
239
  }
237
240
 
238
241
  if (tpHashMapping && tpHashMapping.length > 0) {
239
- plugins.push(new _plugins.TPHashMappingPlugin({
242
+ pluginsArr.push(new _plugins.TPHashMappingPlugin({
240
243
  fileMappings: tpHashMapping,
241
244
  tpFolder: `${_path.default.join(process.cwd(), context, tpFolder)}/`
242
245
  }));
@@ -244,7 +247,7 @@ let getProdPlugins = (options, publicPath = '') => {
244
247
  }
245
248
 
246
249
  if (!isDevelopment && serviceWorker.enableSw) {
247
- let {
250
+ const {
248
251
  filePath,
249
252
  fileName = 'sw.js',
250
253
  exitPath = '/',
@@ -255,7 +258,7 @@ let getProdPlugins = (options, publicPath = '') => {
255
258
  throw new Error('File Path required for service worker plugin');
256
259
  }
257
260
 
258
- plugins.push(new _plugins.ServiceWorkerPlugin({
261
+ pluginsArr.push(new _plugins.ServiceWorkerPlugin({
259
262
  filePath: _path.default.join(process.cwd(), filePath),
260
263
  i18nFileNameTemplate,
261
264
  fileName: fileName,
@@ -265,7 +268,20 @@ let getProdPlugins = (options, publicPath = '') => {
265
268
  }));
266
269
  }
267
270
 
268
- return plugins;
271
+ if (pluginObject.cssVariableReplacement) {
272
+ pluginsArr.push(new _VariableConversionCollector.default({
273
+ cssVariableReplacementConfig
274
+ }));
275
+ }
276
+
277
+ if (pluginObject.selectorWeight) {
278
+ pluginsArr.push(new _SelectorPlugin.default({
279
+ selectorWeightConfig
280
+ }));
281
+ } // plugins.push(new VariableConversionCollector({}));
282
+
283
+
284
+ return pluginsArr;
269
285
  };
270
286
 
271
287
  var _default = getProdPlugins;
@@ -9,34 +9,28 @@ Object.defineProperty(exports, "getDevPlugins", {
9
9
  return _getDevPlugins.default;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "getProdPlugins", {
13
- enumerable: true,
14
- get: function () {
15
- return _getProdPlugins.default;
16
- }
17
- });
18
12
  Object.defineProperty(exports, "getDocsPlugins", {
19
13
  enumerable: true,
20
14
  get: function () {
21
15
  return _getDocsPlugins.default;
22
16
  }
23
17
  });
24
- Object.defineProperty(exports, "getServerPlugins", {
18
+ Object.defineProperty(exports, "getLibraryPlugins", {
25
19
  enumerable: true,
26
20
  get: function () {
27
- return _getServerPlugins.default;
21
+ return _getLibraryPlugins.default;
28
22
  }
29
23
  });
30
- Object.defineProperty(exports, "getLibraryPlugins", {
24
+ Object.defineProperty(exports, "getProdPlugins", {
31
25
  enumerable: true,
32
26
  get: function () {
33
- return _getLibraryPlugins.default;
27
+ return _getProdPlugins.default;
34
28
  }
35
29
  });
36
- Object.defineProperty(exports, "getUMDComponentPlugins", {
30
+ Object.defineProperty(exports, "getServerPlugins", {
37
31
  enumerable: true,
38
32
  get: function () {
39
- return _getUMDComponentPlugins.default;
33
+ return _getServerPlugins.default;
40
34
  }
41
35
  });
42
36
  Object.defineProperty(exports, "getUMDCSSPlugins", {
@@ -45,6 +39,12 @@ Object.defineProperty(exports, "getUMDCSSPlugins", {
45
39
  return _getUMDCSSPlugins.default;
46
40
  }
47
41
  });
42
+ Object.defineProperty(exports, "getUMDComponentPlugins", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _getUMDComponentPlugins.default;
46
+ }
47
+ });
48
48
 
49
49
  var _getDevPlugins = _interopRequireDefault(require("./getDevPlugins"));
50
50
 
@@ -7,11 +7,19 @@ exports.default = void 0;
7
7
 
8
8
  var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
9
9
 
10
+ var _utils = require("../utils");
11
+
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
13
 
12
14
  const MODULE_TYPE = 'css/mini-extract';
13
15
 
14
- const isI18nFile = url => url.endsWith(".i18n.js");
16
+ const isI18nFile = url => url.endsWith('.i18n.js');
17
+
18
+ const {
19
+ app: {
20
+ enableSMap
21
+ }
22
+ } = (0, _utils.getOptions)();
15
23
 
16
24
  class CdnChangePlugin {
17
25
  constructor(options) {
@@ -50,7 +58,13 @@ class CdnChangePlugin {
50
58
  _htmlWebpackPlugin.default.getHooks(compilation).beforeAssetTagGeneration.tapAsync('CdnChangePlugin', (data, cb) => {
51
59
  data.assets = Object.assign({}, data.assets, {
52
60
  css: data.assets.css.map(css => `${this.cssTemplate}${css}`),
53
- js: data.assets.js.map(js => `${isI18nFile(js) ? this.i18nTemplate : this.jsTemplate}${js}`)
61
+ js: data.assets.js.map(js => {
62
+ if (enableSMap && !isI18nFile(js)) {
63
+ js = js.replace('js/', `{{--js-smap}}js/`); //eslint-disable-line
64
+ }
65
+
66
+ return `${isI18nFile(js) ? this.i18nTemplate : this.jsTemplate}${js}`;
67
+ })
54
68
  });
55
69
  cb(null, data);
56
70
  });
@@ -17,6 +17,8 @@ var _I18nKeysIdentifer = _interopRequireDefault(require("./I18nSplitPlugin/I18nK
17
17
 
18
18
  var _replaceCssDirTemplate = require("./RtlSplitPlugin/replaceCssDirTemplate");
19
19
 
20
+ var _EFCTemplatePlugin = _interopRequireDefault(require("./EFCTemplatePlugin"));
21
+
20
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
23
 
22
24
  // import { getShortI18nAssets } from './I18nSplitPlugin/utils/hashUtils';
@@ -34,24 +36,28 @@ const {
34
36
  efc: efcOptios
35
37
  } = cliOptions;
36
38
  const {
37
- createSDkFile
39
+ createSDkFile,
40
+ cdnStatement
38
41
  } = efcOptios;
39
42
 
40
43
  class EFCPlugin {
41
44
  constructor(options = {}) {
42
45
  this.isDevelopment = options.isDevelopment;
46
+ this.templateFilePath = options.templateFilePath;
43
47
  this.serverUrl = options.serverUrl;
44
- this.i18nFileNameTemplate = options.i18nFileNameTemplate; // this.i18nManifestFileName = options.i18nManifestFileName;
45
-
46
- this.options = Object.assign({}, options); // this.options.i18nManifestFileName = options.i18nManifestFileName;
48
+ this.i18nFileNameTemplate = options.i18nFileNameTemplate; // NOTE: this logic may be needed for i18n splited file name with contenthash cases
49
+ // this.i18nManifestFileName = options.i18nManifestFileName;
50
+ // IMPORTANT: here we mergeing optionds from pacakge.json and options via constructor
51
+ // So when debugging consider this as well
47
52
 
53
+ this.options = Object.assign({}, efcOptios, options);
48
54
  this.options.entryPointName = options.entryPointName || 'efc';
49
55
  this.options.outputFile = efcOptios.outputFile.replace('[version]', efcOptios.version);
50
56
  this.options.nameScope = options.nameScope || 'EFComponents';
51
- const localeAttr = this.options.localeAttr || 'efc-locale';
52
- const cssDirAttr = this.options.cssDirAttr || 'efc-css-dir';
53
- const localeDefaultValue = this.options.localeAttr || 'en_US';
54
- const cssDirDefaultValue = this.options.cssDirAttr || 'ltr';
57
+ const localeAttr = this.options.localeAttr || 'data-efc-locale';
58
+ const cssDirAttr = this.options.cssDirAttr || 'data-efc-dir';
59
+ const localeDefaultValue = this.options.localeDefaultValue || 'en_US';
60
+ const cssDirDefaultValue = this.options.cssDirDefaultValue || 'ltr';
55
61
  this.options.localeStatement = options.localeStatement || // Statment 1: return langEle && langEle.getAttribute('${localeAttr}') || 'en_US';
56
62
  // Statment 2: return langEle ? langEle.getAttribute('${localeAttr}') : 'en_US';
57
63
  // We are using statement1 not statment2,
@@ -64,7 +70,7 @@ class EFCPlugin {
64
70
  let dirEle = document.querySelector('[${cssDirAttr}]');
65
71
  return dirEle && dirEle.getAttribute('${cssDirAttr}') || '${cssDirDefaultValue}';
66
72
  })();`;
67
- } // NOTE: this logic may be needed for contenthash cases
73
+ } // NOTE: this logic may be needed for i18n splited file name with contenthash cases
68
74
  // getI18nManifest(compilation) {
69
75
  // const i18nManifestFile =
70
76
  // compilation.assets[this.options.i18nManifestFileName];
@@ -123,20 +129,35 @@ class EFCPlugin {
123
129
  ${enableRTLSplit ? `const cssDir = ${cssDirStatement};` : ''}
124
130
  const prod = !${this.isDevelopment};
125
131
  let cdnVariableName = "${cdnVariableName}";
126
- let assetURLs = {
127
- //hook
128
- js: ${JSON.stringify(jsPath || serverUrl)},
129
- css: ${JSON.stringify(cssPath || serverUrl)},
130
- i18n: ${JSON.stringify(i18nJsPath || serverUrl)}
131
- };
132
+
133
+ function getAssetUrl(ext) {
134
+ ${cdnStatement ? `
135
+ return (() => {
136
+ let fu = (${cdnStatement});
137
+ return typeof fu === "function" ? fu(ext) : fu;
138
+ })();` : ''}
139
+
140
+ ${publicPaths.callback ? `return (${publicPaths.callback})(ext)` : ''}
141
+
142
+ let assetURLs = {
143
+ //hook
144
+ js: ${JSON.stringify(jsPath || serverUrl)},
145
+ css: ${JSON.stringify(cssPath || serverUrl)},
146
+ i18n: ${JSON.stringify(i18nJsPath || serverUrl)}
147
+ };
148
+
149
+ return assetURLs[ext];
150
+
151
+ }
152
+
132
153
 
133
154
  window.desk_urls={}
134
- window.desk_urls.staticDomain = 'https:' + assetURLs.js + '/';
155
+ window.desk_urls.staticDomain = 'https:' + getAssetUrl('js') + '/';
135
156
  if (prod && cdnVariableName) {
136
- window["${cdnVariableName}"] = 'https:' + assetURLs.css + '/';
157
+ window["${cdnVariableName}"] = 'https:' + getAssetUrl('css') + '/';
137
158
  }
138
159
 
139
- let initalI18nAssets = ${initalI18nAssets}.map(urlpath => "${i18nJsPath}/"+ urlpath);
160
+ let initalI18nAssets = ${initalI18nAssets};
140
161
  let initialAssets = initalI18nAssets.concat(${JSON.stringify(enableRTLSplit ? filteredInitialFiles.map(filePath => (0, _replaceCssDirTemplate.replaceCssDirTemplate)(filePath, cssDirTemplate)) : filteredInitialFiles)});
141
162
 
142
163
  let loadAsset = (id, type, url) => {
@@ -148,12 +169,12 @@ class EFCPlugin {
148
169
  switch(type) {
149
170
  case 'script':
150
171
  case 'i18n':
151
- el.src = (type === 'i18n'? assetURLs.i18n : assetURLs.js)+'/'+url
172
+ el.src = (type === 'i18n'? getAssetUrl('i18n') : getAssetUrl('js'))+'/'+url
152
173
  el.defer = 'defer';
153
174
  document.body.appendChild(el);
154
175
  break;
155
176
  case 'link':
156
- el.href = assetURLs.css+'/'+url${enableRTLSplit ? `.replace(${JSON.stringify(cssDirTemplate)}, cssDir)` : ''}
177
+ el.href = getAssetUrl('css')+'/'+url${enableRTLSplit ? `.replace(${JSON.stringify(cssDirTemplate)}, cssDir)` : ''}
157
178
  el.rel = 'stylesheet';
158
179
  document.head.appendChild(el);
159
180
  break;
@@ -184,6 +205,17 @@ class EFCPlugin {
184
205
  apply(compiler) {
185
206
  if (!createSDkFile) {
186
207
  return;
208
+ } //console.log('this.templateFilePath', this.templateFilePath, this.options);
209
+
210
+
211
+ if (this.templateFilePath) {
212
+ new _EFCTemplatePlugin.default({
213
+ templateFilePath: this.templateFilePath,
214
+ publicPath: this.serverUrl,
215
+ i18nFileNameTemplate: this.i18nFileNameTemplate,
216
+ entryPointName: this.options.entryPointName
217
+ }).apply(compiler);
218
+ return;
187
219
  }
188
220
 
189
221
  compiler.hooks.emit.tap('EFCPlugin', compilation => {
@@ -0,0 +1,6 @@
1
+ # EFC Plugin
2
+
3
+ In EFC plugin we are create sdk file for efc related purpose
4
+
5
+
6
+ # document will be soon
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _webpackSources = require("webpack-sources");
9
+
10
+ var _utils = require("../utils");
11
+
12
+ var _path = _interopRequireDefault(require("path"));
13
+
14
+ var _fs = require("fs");
15
+
16
+ var _getI18nFileUrlPathTemplate = require("./I18nSplitPlugin/utils/getI18nFileUrlPathTemplate");
17
+
18
+ var _I18nKeysIdentifer = _interopRequireDefault(require("./I18nSplitPlugin/I18nKeysIdentifer"));
19
+
20
+ var _replaceCssDirTemplate = require("./RtlSplitPlugin/replaceCssDirTemplate");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ // import { getShortI18nAssets } from './I18nSplitPlugin/utils/hashUtils';
25
+ const cliOptions = (0, _utils.getOptions)();
26
+ const {
27
+ i18n: {
28
+ chunkSplitEnable
29
+ },
30
+ css: {
31
+ enableRTLSplit
32
+ },
33
+ efc: efcOptios
34
+ } = cliOptions;
35
+ const {
36
+ createSDkFile
37
+ } = efcOptios; // for smap relate changes
38
+ // CdnChangePlugin
39
+ // SourceMapHookPlugin
40
+
41
+ class EFCTemplatePlugin {
42
+ constructor(options = {}) {
43
+ // console.log(' templateFilePath ', process.cwd(), options.templateFilePath, templateFilePath);
44
+ this.templateFilePath = _path.default.join(process.cwd(), options.templateFilePath); // console.log(' templateFilePath ', this.templateFilePath);
45
+
46
+ this.i18nFileNameTemplate = options.i18nFileNameTemplate;
47
+ this.publicPath = options.publicPath; // NOTE: this logic may be needed for i18n splited file name with contenthash cases
48
+ // this.i18nManifestFileName = options.i18nManifestFileName;
49
+ // IMPORTANT: here we mergeing optionds from pacakge.json and options via constructor
50
+ // So when debugging consider this as well
51
+ // this.options = Object.assign({}, efcOptios, options);
52
+
53
+ this.entryPointName = options.entryPointName || 'efc';
54
+ this.outputFile = efcOptios.outputFile.replace('[version]', efcOptios.version);
55
+ } // NOTE: this logic may be needed for i18n splited file name with contenthash cases
56
+ // getI18nManifest(compilation) {
57
+ // const i18nManifestFile =
58
+ // compilation.assets[this.options.i18nManifestFileName];
59
+ // if (i18nManifestFile) {
60
+ // const manifest = JSON.parse(i18nManifestFile.source());
61
+ // return manifest;
62
+ // }
63
+ // return {};
64
+ // }
65
+
66
+
67
+ getI18nAssetsStr(entryPoint, compilation) {
68
+ // NOTE: we have used lang variable inside
69
+ if (!chunkSplitEnable) {
70
+ let i18nAsstes = {};
71
+ let i18nFiles = Object.keys(compilation.assets).filter(assert => assert.indexOf(`i18n${_path.default.sep}`) !== -1); //hook for i18n url contains i18n/ may cause problem
72
+
73
+ i18nAsstes = i18nFiles.reduce((res, i18nFilePath) => {
74
+ let fileName = i18nFilePath.replace(`i18n${_path.default.sep}`, '');
75
+ let splittedFileName = fileName.split('.');
76
+ res[splittedFileName[0]] = i18nFilePath;
77
+ return res;
78
+ }, {});
79
+ return `[${JSON.stringify(i18nAsstes)}[lang]]`;
80
+ }
81
+
82
+ let initalI18nAssets = entryPoint.chunks.filter(chunk => _I18nKeysIdentifer.default.isChunkHasI18n(chunk)).map(chunk => (0, _getI18nFileUrlPathTemplate.getI18nFileUrlPathTemplate)(compilation, chunk, this.i18nFileNameTemplate, '@locale@'));
83
+ return `${JSON.stringify(initalI18nAssets)}.map(urlpath => urlpath.replace(/@locale@/g, lang))`;
84
+ }
85
+
86
+ templateReplacer(entryPoint, compilation) {
87
+ const cssDirTemplate = '@dir@'; // const i18nManifest = this.getI18nManifest(compilation);
88
+
89
+ const initialFiles = entryPoint.getFiles();
90
+ const filteredInitialFiles = initialFiles.filter(file => /\.(css|js)$/.test(file));
91
+ const initialJsFiles = filteredInitialFiles.filter(file => /\.js$/.test(file));
92
+ let initialCssFiles = filteredInitialFiles.filter(file => /\.css$/.test(file));
93
+
94
+ if (enableRTLSplit) {
95
+ initialCssFiles = initialCssFiles.map(filePath => (0, _replaceCssDirTemplate.replaceCssDirTemplate)(filePath, cssDirTemplate));
96
+ } // const i18nAssets = getShortI18nAssets(
97
+ // entryPoint.chunks,
98
+ // i18nManifest,
99
+ // '' // i18nJsPath
100
+ // );
101
+
102
+
103
+ const initalI18nAssets = this.getI18nAssetsStr(entryPoint, compilation, '' // i18nJsPath
104
+ );
105
+ let templateStr = (0, _fs.readFileSync)(this.templateFilePath).toString();
106
+ return templateStr.replace('((\'getInitalAssets\'))', `function getInitalAssets(assetsType, lang) {
107
+ if (assetsType === "js") {
108
+ return ${JSON.stringify(initialJsFiles)}
109
+ }
110
+ if (assetsType === "css") {
111
+ return ${JSON.stringify(initialCssFiles)}
112
+ }
113
+ if (assetsType === "i18n") {
114
+ return ${initalI18nAssets};
115
+ }
116
+ return [];
117
+ }`).replace('((\'@dir@\'))', '\'@dir@\'').replace('((\'publicPath\'))', this.publicPath).replace('((\'@locale@\'))', '\'@locale@\'');
118
+ }
119
+
120
+ apply(compiler) {
121
+ if (!createSDkFile) {
122
+ return;
123
+ }
124
+
125
+ compiler.hooks.emit.tap('EFCTemplatePlugin', compilation => {
126
+ const {
127
+ entryPointName,
128
+ outputFile
129
+ } = this;
130
+ const entryPoint = compilation.entrypoints.get(entryPointName);
131
+
132
+ if (!entryPoint) {
133
+ return;
134
+ }
135
+
136
+ if (!(0, _fs.existsSync)(this.templateFilePath)) {
137
+ console.error(`EFC Template file not exists ${this.templateFilePath}`);
138
+ return;
139
+ }
140
+
141
+ const source = new _webpackSources.RawSource(this.templateReplacer(entryPoint, compilation));
142
+ compilation.assets[outputFile] = source; // console.log('EFCTemplatePlugin working');
143
+ // eslint-disable-next-line no-console
144
+
145
+ console.log('The EFC embedded code was created successfully..!!!');
146
+ });
147
+ }
148
+
149
+ }
150
+
151
+ exports.default = EFCTemplatePlugin;
@@ -116,10 +116,10 @@ class I18NInjectIntoIndexPlugin {
116
116
  i18nObj = i18nFiles.reduce((res, next) => {
117
117
  let fileName = next.replace(`i18n${_path.default.sep}`, '');
118
118
  let splittedFileName = fileName.split('.');
119
- /* if (this.isDevelopment) {
120
- res[splittedFileName[0]] = `${this.publicPath}/i18n/${fileName}`;
121
- } else {
122
- res[splittedFileName[0]] = fileName;
119
+ /* if (this.isDevelopment) {
120
+ res[splittedFileName[0]] = `${this.publicPath}/i18n/${fileName}`;
121
+ } else {
122
+ res[splittedFileName[0]] = fileName;
123
123
  } */
124
124
 
125
125
  res[splittedFileName[0]] = `${this.publicPath}/i18n/${fileName}`;