@zohodesk/client_build_tool 0.0.6-exp.4 → 0.0.6-exp.41

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 (74) hide show
  1. package/coverage/coverage-final.json +1 -3
  2. package/coverage/coverage-summary.json +2 -4
  3. package/coverage/index.html +21 -51
  4. package/coverage/{bundler/webpack/custom_postcss_plugins/HoverActivePlugin/specialCases.js.html → updateArrayWithDefault.js.html} +67 -55
  5. package/lib/commands/buildEs/commandExecutor.js +7 -2
  6. package/lib/commands/buildLib/commandExecutor.js +7 -2
  7. package/lib/schemas/defaultConfigValues.js +17 -1
  8. package/lib/shared/babel/babelWebConfig.js +4 -1
  9. package/lib/shared/babel/runBabelForTsFile.js +1 -2
  10. package/lib/shared/bundler/webpack/common/decidePublicPath.js +5 -0
  11. package/lib/shared/bundler/webpack/common/nameTemplates.js +13 -9
  12. package/lib/shared/bundler/webpack/custom_plugins/{CdnChangePlugin.js → CdnChangePlugin/index.js} +25 -5
  13. package/lib/shared/bundler/webpack/custom_plugins/CdnChangePlugin/webpackCustomJsUrlLoader.js +46 -0
  14. package/lib/shared/bundler/webpack/custom_plugins/CustomScriptLoadingPlugin.js +110 -0
  15. package/lib/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/getI18nLoadingRuntimeModule.js +1 -1
  16. package/lib/shared/bundler/webpack/custom_plugins/InitialHtmlPlugin.js +4 -0
  17. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/addFilesNamesToManifestJson.js +8 -2
  18. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createInitialEntries.js +7 -1
  19. package/lib/shared/bundler/webpack/custom_plugins/ManifestJsonPlugin/createManifestJson.js +1 -1
  20. package/lib/shared/bundler/webpack/custom_plugins/ResourceHintsPlugin.js +1 -0
  21. package/lib/shared/bundler/webpack/custom_plugins/ServiceWorkerPlugin.js +5 -1
  22. package/lib/shared/bundler/webpack/custom_plugins/ServiceWorkerPluginUtils.js +13 -0
  23. package/lib/shared/bundler/webpack/custom_plugins/SourceMapPlugin/index.js +16 -1
  24. package/lib/shared/bundler/webpack/custom_plugins/TPHashMappingPlugin/index.js +1 -1
  25. package/lib/shared/bundler/webpack/custom_plugins/getInitialAssetsFuncTemplate.js +4 -4
  26. package/lib/shared/bundler/webpack/devtoolConfig.js +4 -1
  27. package/lib/shared/bundler/webpack/loaderConfigs/cssClassNameGenerate.js +6 -1
  28. package/lib/shared/bundler/webpack/optimizationConfig.js +14 -1
  29. package/lib/shared/bundler/webpack/pluginConfigs/configCSSMinifierPlugin.js +5 -1
  30. package/lib/shared/bundler/webpack/pluginConfigs/configCustomScriptLoadingStrategyPlugin.js +76 -0
  31. package/lib/shared/bundler/webpack/pluginConfigs/configManifestJsonPlugin.js +25 -13
  32. package/lib/shared/bundler/webpack/pluginConfigs/configMiniCSSExtractPlugin.js +2 -1
  33. package/lib/shared/bundler/webpack/plugins.js +3 -1
  34. package/lib/shared/bundler/webpack/resolvers.js +2 -1
  35. package/lib/shared/bundler/webpack/tsLoaders.js +7 -14
  36. package/lib/shared/bundler/webpack/utils/index.js +6 -1
  37. package/lib/shared/fileUtils/watchRun.js +1 -1
  38. package/lib/shared/server/getServerURL.js +9 -2
  39. package/npm-shrinkwrap.json +412 -7328
  40. package/package.json +1 -1
  41. package/result.json +1 -1
  42. package/unittest/index.html +35 -33
  43. package/coverage/addFilesNamesToManifestJson.js.html +0 -148
  44. package/coverage/bundler/webpack/custom_plugins/AddManifestJson/addFilesNamesToManifestJson.js.html +0 -148
  45. package/coverage/bundler/webpack/custom_plugins/AddManifestJson/createInitialEntries.js.html +0 -136
  46. package/coverage/bundler/webpack/custom_plugins/AddManifestJson/createManifestJson.js.html +0 -181
  47. package/coverage/bundler/webpack/custom_plugins/AddManifestJson/findInitialFileNames.js.html +0 -133
  48. package/coverage/bundler/webpack/custom_plugins/AddManifestJson/index.html +0 -146
  49. package/coverage/bundler/webpack/custom_plugins/AddManifestJson/index.js.html +0 -199
  50. package/coverage/bundler/webpack/custom_plugins/AddManifestJson/removeHashFromFileName.js.html +0 -127
  51. package/coverage/bundler/webpack/custom_plugins/VariableConversionCollector/ErrorHandler.js.html +0 -346
  52. package/coverage/bundler/webpack/custom_plugins/VariableConversionCollector/index.html +0 -116
  53. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/constants.js.html +0 -94
  54. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/handleIgnores.js.html +0 -259
  55. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/index.html +0 -236
  56. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/index.js.html +0 -442
  57. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/insertBefore.js.html +0 -154
  58. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/isPreviouslyProcessed.js.html +0 -142
  59. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/replaceUtils.js.html +0 -127
  60. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/separateHoveredSelectorAndNormalSelector.js.html +0 -139
  61. package/coverage/bundler/webpack/custom_postcss_plugins/HoverActivePlugin/typeCheckUtils.js.html +0 -193
  62. package/coverage/bundler/webpack/custom_postcss_plugins/SelectorReplace.js.html +0 -292
  63. package/coverage/bundler/webpack/custom_postcss_plugins/ValueReplacer.js.html +0 -223
  64. package/coverage/bundler/webpack/custom_postcss_plugins/VariableModificationPlugin/index.html +0 -116
  65. package/coverage/bundler/webpack/custom_postcss_plugins/VariableModificationPlugin/index.js.html +0 -1126
  66. package/coverage/bundler/webpack/custom_postcss_plugins/index.html +0 -131
  67. package/coverage/bundler/webpack/loaderConfigs/getSpecificPostCssPlugin.js.html +0 -247
  68. package/coverage/bundler/webpack/loaderConfigs/index.html +0 -116
  69. package/coverage/createInitialEntries.js.html +0 -136
  70. package/coverage/dummy.js.html +0 -238
  71. package/coverage/index.js.html +0 -169
  72. package/coverage/isObject.js.html +0 -94
  73. package/coverage/isValid.js.html +0 -106
  74. package/coverage/removeHashFromFileName.js.html +0 -127
@@ -7,14 +7,20 @@ exports.default = void 0;
7
7
 
8
8
  var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
9
9
 
10
- var _nameTemplates = require("../common/nameTemplates");
10
+ var _webpack = require("webpack");
11
11
 
12
- var _modeUtils = require("../common/modeUtils");
12
+ var _nameTemplates = require("../../common/nameTemplates");
13
+
14
+ var _modeUtils = require("../../common/modeUtils");
15
+
16
+ var _webpackCustomJsUrlLoader = _interopRequireDefault(require("./webpackCustomJsUrlLoader"));
13
17
 
14
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
19
 
16
20
  // import { RuntimeGlobals, RuntimeModule } from 'webpack';
21
+ // eslint-disable-next-line import/extensions
17
22
  // import { Template } from 'webpack';
23
+ // eslint-disable-next-line import/extensions
18
24
  const pluginName = 'CdnChangePlugin'; // const MODULE_TYPE = 'css/mini-extract';
19
25
  // class CdnChangeRuntimePlugin extends RuntimeModule {
20
26
  // constructor(compiler, { variableName }) {
@@ -33,7 +39,7 @@ class CdnChangePlugin {
33
39
  constructor(options) {
34
40
  this.createSeparateSMap = options.createSeparateSMap;
35
41
  this.i18nTemplate = options.i18nTemplate || '{{__I18N_CDN__}}';
36
- this.variableName = options.variableName || '__CSS_CDN__';
42
+ this.variableName = options.variableName || 'window.__SMAP_PATH__';
37
43
  this.cssTemplate = options.cssTemplate || '{{__CSS_CDN__}}';
38
44
  this.jsTemplate = options.jsTemplate || '{{__JS_CDN__}}';
39
45
  this.mode = options.mode || 'prod';
@@ -71,8 +77,12 @@ class CdnChangePlugin {
71
77
  data.assets = { ...data.assets,
72
78
  css: data.assets.css.map(css => `${this.cssTemplate}${css}`),
73
79
  js: data.assets.js.map(js => {
74
- if (((0, _modeUtils.isProductionMode)(mode) || createSeparateSMap) && !(0, _nameTemplates.isI18nFile)(js)) {
75
- js = js.replace('js/', `{{--js-smap}}js/`); //eslint-disable-line
80
+ if ((0, _modeUtils.isProductionMode)(mode) && createSeparateSMap && !(0, _nameTemplates.isI18nFile)(js)) {
81
+ if (js.includes('smap')) {
82
+ js = js.replace('smap/js/', `{{--js-smap}}js/`); //eslint-disable-line
83
+ } else {
84
+ js = js.replace('js/', `{{--js-smap}}js/`); //eslint-disable-line
85
+ }
76
86
  }
77
87
 
78
88
  return `${(0, _nameTemplates.isI18nFile)(js) ? this.i18nTemplate : this.jsTemplate}${js}`;
@@ -80,6 +90,16 @@ class CdnChangePlugin {
80
90
  };
81
91
  cb && cb(null, data);
82
92
  });
93
+
94
+ compilation.hooks.runtimeRequirementInTree.for(_webpack.RuntimeGlobals.getChunkScriptFilename).tap(pluginName, (chunk, set) => {
95
+ if (typeof compilation.outputOptions.chunkFilename === 'string' && /\[(full)?hash(:\d+)?\]/.test(compilation.outputOptions.chunkFilename)) {
96
+ set.add(_webpack.RuntimeGlobals.getFullHash);
97
+ }
98
+
99
+ compilation.addRuntimeModule(chunk, // eslint-disable-next-line new-cap
100
+ new _webpackCustomJsUrlLoader.default('javascript', 'javascript', _webpack.RuntimeGlobals.getChunkScriptFilename, chunk => chunk.filenameTemplate || (chunk.canBeInitial() ? compilation.outputOptions.filename : compilation.outputOptions.chunkFilename), false, this.variableName));
101
+ return true;
102
+ });
83
103
  });
84
104
  }
85
105
 
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _GetChunkFilenameRuntimeModule = _interopRequireDefault(require("webpack/lib/runtime/GetChunkFilenameRuntimeModule"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ // import { RuntimeGlobals, RuntimeModule, Template } from 'webpack';
13
+ // const GetChunkFilenameRuntimeModule = require('webpack/lib/runtime/GetChunkFilenameRuntimeModule');
14
+ // import GetChunkFilenameRuntimeModule from 'webpack/lib/runtime/GetChunkFilenameRuntimeModule';
15
+ // const first = set => {
16
+ // const entry = set.values().next();
17
+ // return entry.done ? undefined : entry.value;
18
+ // };
19
+ class CustomizedGetChunkFilenameRuntimeModule extends _GetChunkFilenameRuntimeModule.default {
20
+ /**
21
+ * @param {string} contentType the to use the content hash for
22
+ * @param {string} name kind of filename
23
+ * @param {string} global function name to be assigned
24
+ * @param {function(Chunk): string | FilenameFunction} getFilenameForChunk functor to get the filename or function
25
+ * @param {boolean} allChunks when false, only async chunks are included
26
+ */
27
+ constructor(contentType, name, global, getFilenameForChunk, allChunks, variableName) {
28
+ super(contentType, name, global, getFilenameForChunk, allChunks);
29
+ this.contentType = contentType;
30
+ this.global = global;
31
+ this.getFilenameForChunk = getFilenameForChunk;
32
+ this.allChunks = allChunks;
33
+ this.dependentHash = true;
34
+ this.variableName = variableName;
35
+ }
36
+
37
+ generate() {
38
+ const sourceCode = super.generate().toString();
39
+ const replaceCode = sourceCode.replaceAll('"js-chunks/', `${this.variableName} + "js-chunks/`);
40
+ return replaceCode;
41
+ }
42
+
43
+ }
44
+
45
+ var _default = CustomizedGetChunkFilenameRuntimeModule;
46
+ exports.default = _default;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CustomScriptLoadingStrategyPlugin = void 0;
7
+
8
+ var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ const pluginName = 'CustomScriptLoadingStrategyPlugin';
13
+
14
+ class CustomScriptLoadingStrategyPlugin {
15
+ constructor({
16
+ scriptLoadingStategey
17
+ } = {}) {
18
+ this.scriptLoadingStrategy = scriptLoadingStategey;
19
+ this.tagNamesToMatch = ['script'];
20
+ }
21
+
22
+ getFileNameFromTagSrc(src) {
23
+ const fileNameArr = src.split('/');
24
+ return fileNameArr[fileNameArr.length - 1];
25
+ }
26
+
27
+ addAttributestToTag(tag, attributes) {
28
+ tag.attributes = Object.assign({}, tag.attributes, attributes);
29
+ }
30
+
31
+ matchFileName(tag, fileName) {
32
+ return fileName.test(this.getFileNameFromTagSrc(tag.attributes.src));
33
+ }
34
+
35
+ blockingStrategy(tag) {
36
+ delete tag.attributes.defer;
37
+ delete tag.attributes.async;
38
+ }
39
+
40
+ deferStrategy(tag) {
41
+ delete tag.attributes.async;
42
+ }
43
+
44
+ asyncStrategy(tag) {
45
+ delete tag.attributes.defer;
46
+ }
47
+
48
+ moduleStrategy(tag) {
49
+ this.deferStrategy(tag);
50
+ }
51
+
52
+ matchStrategy(scriptLoadingStrategy, tag) {
53
+ if (scriptLoadingStrategy === 'blocking') {
54
+ this.blockingStrategy(tag);
55
+ }
56
+
57
+ if (scriptLoadingStrategy === 'defer') {
58
+ this.deferStrategy(tag);
59
+ }
60
+
61
+ if (scriptLoadingStrategy === 'async') {
62
+ this.asyncStrategy(tag);
63
+ }
64
+
65
+ if (scriptLoadingStrategy === 'module') {
66
+ this.moduleStrategy(tag);
67
+ }
68
+ }
69
+
70
+ matchAndApplyCustomLoadingStrategyToScripts(tags) {
71
+ Object.keys(this.scriptLoadingStrategy).forEach(scriptLoadingStrategy => {
72
+ const filesToMatch = this.scriptLoadingStrategy[scriptLoadingStrategy];
73
+ tags.forEach(tag => {
74
+ if (this.tagNamesToMatch.includes(tag.tagName) && tag.attributes.src) {
75
+ const isFileMatch = filesToMatch.some(fileName => this.matchFileName(tag, fileName));
76
+
77
+ if (isFileMatch) {
78
+ this.matchStrategy(scriptLoadingStrategy, tag);
79
+ this.addAttributestToTag(tag, {
80
+ [scriptLoadingStrategy]: true
81
+ });
82
+ }
83
+ } // filesToMatch.forEach(fileName => {
84
+ // if (!this.matchFileName(tag, fileName)) {
85
+ // return;
86
+ // }
87
+ // this.matchStrategy(scriptLoadingStrategy, tag);
88
+ // this.addAttributestToTag(tag, fileName, {
89
+ // [scriptLoadingStrategy]: true
90
+ // });
91
+ // });
92
+
93
+ });
94
+ });
95
+ }
96
+
97
+ apply(compiler) {
98
+ compiler.hooks.compilation.tap(pluginName, compilation => {
99
+ _htmlWebpackPlugin.default.getHooks(compilation).alterAssetTagGroups.tapAsync(pluginName, (data, callback) => {
100
+ const tags = [...data.bodyTags, ...data.headTags];
101
+ console.log(tags, 'dummy');
102
+ this.matchAndApplyCustomLoadingStrategyToScripts(tags);
103
+ callback(null, data);
104
+ });
105
+ });
106
+ }
107
+
108
+ }
109
+
110
+ exports.CustomScriptLoadingStrategyPlugin = CustomScriptLoadingStrategyPlugin;
@@ -65,7 +65,7 @@ function getI18nLoadingRuntimeModule({
65
65
  return _webpack.Template.asString([`${prefixFunc(i18nChunks)}`, `var createI18nScriptTag = ${runtimeTemplate.basicFunction('chunkId, fullsrc, resolve, reject', ['var scriptTag = document.createElement("script");', attributes ? _webpack.Template.asString(Object.entries(attributes).map(entry => {
66
66
  const [key, value] = entry;
67
67
  return `scriptTag.setAttribute(${JSON.stringify(key)}, ${JSON.stringify(value)});`;
68
- })) : '', scriptType ? `scriptTag.type = ${JSON.stringify(scriptType)};` : '', `var onScriptComplete = ${runtimeTemplate.basicFunction('event', ['// avoid mem leaks.', 'scriptTag.onerror = scriptTag.onload = null;', 'if (event.type === \'load\') {', _webpack.Template.indent(['resolve();']), '} else {', _webpack.Template.indent(['var errorType = event && (event.type === \'load\' ? \'missing\' : event.type);', 'var realSrc = event && event.target && event.target.src || fullsrc;', 'var err = new Error("Loading I18N chunk " + chunkId + " failed.\\n(" + realSrc + ")");', 'err.code = "I18N_CHUNK_LOAD_FAILED";', 'err.type = errorType;', 'err.request = realSrc;', 'scriptTag.parentNode.removeChild(scriptTag)', 'reject(err);']), '}'])}`, 'scriptTag.onerror = scriptTag.onload = onScriptComplete;', 'scriptTag.src = fullsrc;', crossOriginLoading ? _webpack.Template.asString(['if (scriptTag.src.indexOf(window.location.origin + \'/\') !== 0) {', _webpack.Template.indent(`scriptTag.crossOrigin = ${JSON.stringify(crossOriginLoading)};`), '}']) : '', insertRoot && insertPlace || _webpack.Template.asString(['document.head.appendChild(scriptTag);']), 'return scriptTag;'])};`, `var findI18nScriptTag = ${runtimeTemplate.basicFunction('src, fullsrc', ['var existingScriptTags = document.getElementsByTagName("script");', 'for(var i = 0; i < existingScriptTags.length; i++) {', _webpack.Template.indent(['var tag = existingScriptTags[i];', 'var dataSrc = tag.getAttribute("data-src") || tag.getAttribute("src");', 'if((dataSrc === src || dataSrc === fullsrc)) return tag;']), '}', 'var existingStyleTags = document.getElementsByTagName("style");', 'for(var i = 0; i < existingStyleTags.length; i++) {', _webpack.Template.indent(['var tag = existingStyleTags[i];', 'var dataSrc = tag.getAttribute("data-src");', 'if(dataSrc === src || dataSrc === fullsrc) return tag;']), '}'])};`, `var loadI18nScriptTag = ${runtimeTemplate.basicFunction('chunkId', `return new Promise(${runtimeTemplate.basicFunction('resolve, reject', [`var src = ${_webpack.RuntimeGlobals.require}.miniI18nF(chunkId);`, `var fullsrc = ${_webpack.RuntimeGlobals.publicPath} + src;`, 'if(findI18nScriptTag(src, fullsrc)) return resolve();', 'createI18nScriptTag(chunkId, fullsrc, resolve, reject);'])});`)}`, '// object to store loaded I18N chunks', 'var installedI18nChunks = {', _webpack.Template.indent(
68
+ })) : '', '__webpack_require__.nc && scriptTag.setAttribute("nonce", __webpack_require__.nc)', scriptType ? `scriptTag.type = ${JSON.stringify(scriptType)};` : '', `var onScriptComplete = ${runtimeTemplate.basicFunction('event', ['// avoid mem leaks.', 'scriptTag.onerror = scriptTag.onload = null;', 'if (event.type === \'load\') {', _webpack.Template.indent(['resolve();']), '} else {', _webpack.Template.indent(['var errorType = event && (event.type === \'load\' ? \'missing\' : event.type);', 'var realSrc = event && event.target && event.target.src || fullsrc;', 'var err = new Error("Loading I18N chunk " + chunkId + " failed.\\n(" + realSrc + ")");', 'err.code = "I18N_CHUNK_LOAD_FAILED";', 'err.type = errorType;', 'err.request = realSrc;', 'scriptTag.parentNode.removeChild(scriptTag)', 'reject(err);']), '}'])}`, 'scriptTag.onerror = scriptTag.onload = onScriptComplete;', 'scriptTag.src = fullsrc;', crossOriginLoading ? _webpack.Template.asString(['if (scriptTag.src.indexOf(window.location.origin + \'/\') !== 0) {', _webpack.Template.indent(`scriptTag.crossOrigin = ${JSON.stringify(crossOriginLoading)};`), '}']) : '', insertRoot && insertPlace || _webpack.Template.asString(['document.head.appendChild(scriptTag);']), 'return scriptTag;'])};`, `var findI18nScriptTag = ${runtimeTemplate.basicFunction('src, fullsrc', ['var existingScriptTags = document.getElementsByTagName("script");', 'for(var i = 0; i < existingScriptTags.length; i++) {', _webpack.Template.indent(['var tag = existingScriptTags[i];', 'var dataSrc = tag.getAttribute("data-src") || tag.getAttribute("src");', 'if((dataSrc === src || dataSrc === fullsrc)) return tag;']), '}', 'var existingStyleTags = document.getElementsByTagName("style");', 'for(var i = 0; i < existingStyleTags.length; i++) {', _webpack.Template.indent(['var tag = existingStyleTags[i];', 'var dataSrc = tag.getAttribute("data-src");', 'if(dataSrc === src || dataSrc === fullsrc) return tag;']), '}'])};`, `var loadI18nScriptTag = ${runtimeTemplate.basicFunction('chunkId', `return new Promise(${runtimeTemplate.basicFunction('resolve, reject', [`var src = ${_webpack.RuntimeGlobals.require}.miniI18nF(chunkId);`, `var fullsrc = ${_webpack.RuntimeGlobals.publicPath} + src;`, 'if(findI18nScriptTag(src, fullsrc)) return resolve();', 'createI18nScriptTag(chunkId, fullsrc, resolve, reject);'])});`)}`, '// object to store loaded I18N chunks', 'var installedI18nChunks = {', _webpack.Template.indent(
69
69
  /** @type {string[]} */
70
70
  chunk.ids.map(id => `${JSON.stringify(id)}: 0`).join(',\n')), '};', '', `${_webpack.RuntimeGlobals.ensureChunkHandlers}.miniI18n = ${runtimeTemplate.basicFunction('chunkId, promises', [`var i18nChunks = ${JSON.stringify(chunkMap)};`, 'if(installedI18nChunks[chunkId]) promises.push(installedI18nChunks[chunkId]);', 'else if(installedI18nChunks[chunkId] !== 0 && i18nChunks[chunkId]) {', _webpack.Template.indent([`promises.push(installedI18nChunks[chunkId] = loadI18nScriptTag(chunkId).then(${runtimeTemplate.basicFunction('', 'installedI18nChunks[chunkId] = 0;')}, ${runtimeTemplate.basicFunction('e', ['delete installedI18nChunks[chunkId];', 'throw e;'])}));`]), '}'])};`, '']);
71
71
  }
@@ -37,6 +37,10 @@ class InitialHtmlPlugin {
37
37
  const headTags = [];
38
38
  const bodyTags = [];
39
39
  data.headTags.forEach(tag => {
40
+ Object.assign(tag.attributes, {
41
+ nonce: '{{--CSP-nonce}}'
42
+ });
43
+
40
44
  if (tag.tagName === 'link') {
41
45
  headTags.push(tag);
42
46
  } else {
@@ -5,8 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.addFilesNamesToManifestJson = addFilesNamesToManifestJson;
7
7
 
8
+ var _path = _interopRequireDefault(require("path"));
9
+
8
10
  var _removeHashFromFileName = require("./removeHashFromFileName");
9
11
 
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
10
14
  function addFilesNamesToManifestJson({
11
15
  manifestJson,
12
16
  option,
@@ -15,9 +19,11 @@ function addFilesNamesToManifestJson({
15
19
  }) {
16
20
  const json = manifestJson;
17
21
  Object.keys(assets).forEach(filename => {
22
+ const fileName = _path.default.parse(filename).base;
23
+
18
24
  if (option.test(filename)) {
19
- const filenameNameWithoutHash = (0, _removeHashFromFileName.removeHashFromFileName)(filename, hashDigestLength);
20
- json[filenameNameWithoutHash] = filename;
25
+ const filenameNameWithoutHash = (0, _removeHashFromFileName.removeHashFromFileName)(fileName, hashDigestLength);
26
+ json[filenameNameWithoutHash] = fileName;
21
27
  }
22
28
  });
23
29
  return json;
@@ -5,11 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createInitialEntriesForManifestJson = createInitialEntriesForManifestJson;
7
7
 
8
+ var _path = _interopRequireDefault(require("path"));
9
+
8
10
  var _removeHashFromFileName = require("./removeHashFromFileName");
9
11
 
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
10
14
  function createInitialEntriesForManifestJson(initialFileNames, hashLength) {
11
15
  const initialEntries = {};
12
- initialFileNames.forEach(fileName => {
16
+ initialFileNames.forEach(filename => {
17
+ const fileName = _path.default.parse(filename).base;
18
+
13
19
  const filenameNameWithoutHash = (0, _removeHashFromFileName.removeHashFromFileName)(fileName, hashLength);
14
20
  initialEntries[filenameNameWithoutHash] = fileName;
15
21
  });
@@ -22,7 +22,7 @@ function createManifestJson({
22
22
  if (option.needInitialEntries) {
23
23
  const initialFileNames = (0, _findInitialFileNames.findInitialFileNames)(compilation);
24
24
  const initialEntries = (0, _createInitialEntries.createInitialEntriesForManifestJson)(initialFileNames, hashDigestLength);
25
- manifestJson.initialEntries = initialEntries;
25
+ manifestJson.entryFiles = initialEntries;
26
26
  }
27
27
 
28
28
  const outputJson = (0, _addFilesNamesToManifestJson.addFilesNamesToManifestJson)({
@@ -117,6 +117,7 @@ class ResourceHintsRuntimePlugin extends _webpack.RuntimeModule {
117
117
  let link = document.createElement("link");
118
118
  link.href = href;
119
119
  link.rel = rel;
120
+ __webpack_require__.nc && link.setAttribute("nonce", __webpack_require__.nc)
120
121
  if(href.endsWith(".css")) {
121
122
  link.as="style";
122
123
  } else if (href.endsWith(".js")) {
@@ -15,6 +15,8 @@ var _replaceCssDirTemplate = require("./RtlSplitPlugin/replaceCssDirTemplate");
15
15
 
16
16
  var _getInitialAssetsFuncTemplate = require("./getInitialAssetsFuncTemplate");
17
17
 
18
+ var _ServiceWorkerPluginUtils = require("./ServiceWorkerPluginUtils");
19
+
18
20
  const pluginName = 'ServiceWorkerPlugin';
19
21
 
20
22
  class ServiceWorkerPlugin {
@@ -83,8 +85,10 @@ class ServiceWorkerPlugin {
83
85
 
84
86
  [...compilation.chunks].filter(c => !this.isInitialChunk(c)).forEach(chunk => {
85
87
  allChunkUrls = [...allChunkUrls, ...chunk.files];
88
+ allI18nAssets.push((0, _ServiceWorkerPluginUtils.getI18nFileUrlPathTemplate)(compilation, chunk, this.i18nFileNameTemplate, '@locale@'));
86
89
  });
87
90
  allChunkUrls = allChunkUrls.filter(fileName => !fileName.endsWith('.map'));
91
+ allChunkUrls = allChunkUrls.map(fileName => fileName.replace('smap/', ''));
88
92
 
89
93
  if (enableRTLSplit) {
90
94
  allChunkUrls = (0, _replaceCssDirTemplate.replaceCssDirTemplateMapper)(allChunkUrls, _getInitialAssetsFuncTemplate.cssDirTemplate);
@@ -93,7 +97,7 @@ class ServiceWorkerPlugin {
93
97
  const mod = templateContent.replace(this.replaceText, `
94
98
  ${initialAssetsFuncTemplate}
95
99
 
96
- let initialAssetsObj = getInitialAssets({ lang: langLocale, dir: cssDir });
100
+ let initialAssetsObj = getInitialAssets();
97
101
 
98
102
  let initialAssets = initialAssetsObj.i18n.concat(
99
103
  initialAssetsObj.css,
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getI18nFileUrlPathTemplate = getI18nFileUrlPathTemplate;
7
+
8
+ function getI18nFileUrlPathTemplate(compilation, chunk, filenameTemplate, localeTemplate) {
9
+ const urlpath = compilation.getPath(filenameTemplate, {
10
+ chunk
11
+ });
12
+ return urlpath.replace('[locale]', localeTemplate);
13
+ }
@@ -13,7 +13,7 @@ function checkSmapFilePattern(assetName) {
13
13
  }
14
14
 
15
15
  function skipRuntimeFiles(assetName) {
16
- return !assetName.includes('runtime') || !assetName.includes('[locale]');
16
+ return !assetName.includes('[locale]');
17
17
  }
18
18
 
19
19
  const pluginName = 'SplitSourceMapPlugin'; // Purpose:
@@ -45,6 +45,21 @@ class SourceMapPlugin {
45
45
  }
46
46
  });
47
47
  });
48
+ compilation.hooks.processAssets.tap({
49
+ name: pluginName,
50
+ stage: _webpack.Compilation.PROCESS_ASSETS_STAGE_DERIVED // additionalAssets: true
51
+
52
+ }, assets => {
53
+ Object.keys(assets).forEach(assetName => {
54
+ if (assetName.includes('runtime') && skipRuntimeFiles(assetName)) {
55
+ const runtimeAssetCode = assets[assetName].source();
56
+ const newAssetName = `smap/${assetName}`;
57
+ compilation.emitAsset(newAssetName, new RawSource(runtimeAssetCode));
58
+ }
59
+
60
+ ;
61
+ });
62
+ });
48
63
  });
49
64
  }
50
65
 
@@ -29,7 +29,7 @@ class TPHashMappingPlugin {
29
29
 
30
30
  getFiles() {
31
31
  const hashMapping = {};
32
- this.fileMappings.filter(f => f.enable).forEach(fileInfo => {
32
+ this.fileMappings.forEach(fileInfo => {
33
33
  const filePath = _path.default.join(this.tpFolder, fileInfo.filePath);
34
34
 
35
35
  if (_fs.default.existsSync(filePath)) {
@@ -46,11 +46,11 @@ function getInitialAssetsFuncTemplate({
46
46
  chunkSplitEnable,
47
47
  i18nFileNameTemplate
48
48
  });
49
- const initialAssetsFuncTemplate = `function ${functionName}({ lang, dir}) {
49
+ const initialAssetsFuncTemplate = `function ${functionName}() {
50
50
  return {
51
- js: ${JSON.stringify(initialJsFiles)}.map(urlPath => urlPath.replace(/@locale@/g, lang)),
52
- css: ${JSON.stringify(initialCssFiles)}${enableRTLSplit ? '.map(urlPath => urlPath.replace(/@dir@/g, dir))' : ''},
53
- i18n: ${initialI18nAssets},
51
+ js: ${JSON.stringify(initialJsFiles)}.map(urlPath => urlPath.replace('smap/', '')),
52
+ css: ${JSON.stringify(initialCssFiles)},
53
+ i18n: ${initialI18nAssets}
54
54
  }
55
55
  }`;
56
56
  return initialAssetsFuncTemplate;
@@ -5,6 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.devtoolConfig = devtoolConfig;
7
7
 
8
+ // eslint-disable-next-line consistent-return
8
9
  function devtoolConfig(options) {
9
- return options.devtool;
10
+ if (options.createSeparateSMap) {
11
+ return options.devtool;
12
+ }
10
13
  }
@@ -51,7 +51,12 @@ var _default = options => {
51
51
 
52
52
  const fileNameWithoutExt = _path.default.parse(relativePath).name;
53
53
 
54
- const cleanFileName = fileNameWithoutExt.replace(/-/g, '_').toLowerCase();
54
+ let cleanFileName = fileNameWithoutExt.replace(/-/g, '_').toLowerCase();
55
+
56
+ if (cleanFileName.endsWith('.module')) {
57
+ cleanFileName = cleanFileName.slice(0, -7);
58
+ }
59
+
55
60
  const suitableBlob = getSuitableBlob(customizations, resourcePath);
56
61
  return suitableBlob.replaceAll('[local]', localName).replaceAll('[prefix]', classNamePrefix).replaceAll('[filename]', cleanFileName).replaceAll('[hash]', getHash(`${relativePath}-${localName}`, 10));
57
62
  };
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.optimizationConfig = optimizationConfig;
7
7
 
8
+ var _terserWebpackPlugin = _interopRequireDefault(require("terser-webpack-plugin"));
9
+
8
10
  var _nameTemplates = require("./common/nameTemplates");
9
11
 
10
12
  var _hashUtils = require("./custom_plugins/I18nSplitPlugin/utils/hashUtils");
@@ -13,6 +15,8 @@ var _configCSSMinifierPlugin = require("./pluginConfigs/configCSSMinifierPlugin"
13
15
 
14
16
  var _splitChunksConfig = require("./splitChunksConfig");
15
17
 
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
16
20
  function optimizationConfig(options) {
17
21
  const {
18
22
  changeRuntimeChunkChar
@@ -31,10 +35,19 @@ function optimizationConfig(options) {
31
35
  const suffix = // chunkSplitEnable ? '_[locale]' : '';
32
36
  chunkSplitEnable && chunkFilenameHasContentHash ? '_[locale]' : '';
33
37
  const char = changeRuntimeChunkChar;
38
+ const excludeList = options.optimization.jsExcludePath;
34
39
  return {
35
40
  splitChunks: (0, _splitChunksConfig.splitChunksConfig)(options),
36
41
  minimizer: [// For webpack@5 you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line
37
- '...', (0, _configCSSMinifierPlugin.configCSSMinifierPlugin)(options)].filter(Boolean),
42
+ // '...',
43
+ excludeList !== '' ? new _terserWebpackPlugin.default({
44
+ exclude: excludeList,
45
+ extractComments: false // Do not extract comments to .LICENSE.txt files
46
+
47
+ }) : new _terserWebpackPlugin.default({
48
+ extractComments: false // Do not extract comments to .LICENSE.txt files
49
+
50
+ }), (0, _configCSSMinifierPlugin.configCSSMinifierPlugin)(options)].filter(Boolean),
38
51
  moduleIds: 'named',
39
52
  runtimeChunk: {
40
53
  name: entrypoint => `runtime${char}${entrypoint.name}${suffix}`
@@ -14,11 +14,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
14
14
  // import UglifyCSSPlugin from '../custom_plugins/UglifyCSSPlugin';
15
15
  // eslint-disable-next-line no-unused-vars
16
16
  function configCSSMinifierPlugin(options) {
17
+ const excludeList = options.optimization.cssExcludePath;
18
+
17
19
  if ((0, _modeUtils.isNotProduction)(options)) {
18
20
  return null;
19
21
  } // return null;
20
22
  // return new UglifyCSSPlugin();
21
23
 
22
24
 
23
- return new _cssMinimizerWebpackPlugin.default();
25
+ return excludeList !== '' ? new _cssMinimizerWebpackPlugin.default({
26
+ exclude: excludeList
27
+ }) : new _cssMinimizerWebpackPlugin.default();
24
28
  }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.configCustomScriptLoadingStrategyPlugin = configCustomScriptLoadingStrategyPlugin;
7
+
8
+ var _CustomScriptLoadingPlugin = require("../custom_plugins/CustomScriptLoadingPlugin");
9
+
10
+ var _utils = require("../utils");
11
+
12
+ const defaultScriptLoadingStrategy = 'defer';
13
+ const allowedScriptLoadingStrategies = ['blocking', 'defer', 'async', 'module'];
14
+
15
+ function isAllowedScriptLoadingStrategyUsed(scriptLoadingStategey) {
16
+ return allowedScriptLoadingStrategies.includes(scriptLoadingStategey);
17
+ }
18
+
19
+ function getScriptLoadingStrategyForStringType(scriptLoadingStategey) {
20
+ if (isAllowedScriptLoadingStrategyUsed(scriptLoadingStategey)) {
21
+ return scriptLoadingStategey;
22
+ }
23
+
24
+ return defaultScriptLoadingStrategy;
25
+ }
26
+
27
+ function getScriptLoadingStrategyForObject(scriptLoadingStategey) {
28
+ if (Object.keys(scriptLoadingStategey).length === 0) {
29
+ return defaultScriptLoadingStrategy;
30
+ }
31
+
32
+ const isAllowedScriptLoadingStrategy = Object.keys(scriptLoadingStategey).every(key => isAllowedScriptLoadingStrategyUsed(key));
33
+
34
+ if (isAllowedScriptLoadingStrategy) {
35
+ return Object.assign({}, scriptLoadingStategey);
36
+ }
37
+
38
+ console.warn('un supported script loading strategy used', scriptLoadingStategey);
39
+ return defaultScriptLoadingStrategy;
40
+ }
41
+
42
+ function getScriptLoadingStrategy(scriptLoadingStategey) {
43
+ if ((0, _utils.getTypeOf)(scriptLoadingStategey) === 'string') {
44
+ return {
45
+ [getScriptLoadingStrategyForStringType(scriptLoadingStategey)]: [/.*/]
46
+ };
47
+ }
48
+
49
+ if ((0, _utils.getTypeOf)(scriptLoadingStategey) === 'object') {
50
+ return getScriptLoadingStrategyForObject(scriptLoadingStategey);
51
+ }
52
+
53
+ return {
54
+ [defaultScriptLoadingStrategy]: [/.*/]
55
+ };
56
+ }
57
+
58
+ function configCustomScriptLoadingStrategyPlugin(options) {
59
+ const {
60
+ customScriptLoadingStrategey
61
+ } = options;
62
+
63
+ if (customScriptLoadingStrategey) {
64
+ const currentScriptLoadingStrategy = getScriptLoadingStrategy(customScriptLoadingStrategey.options);
65
+
66
+ if ((0, _utils.getTypeOf)(currentScriptLoadingStrategy) === 'object') {
67
+ return new _CustomScriptLoadingPlugin.CustomScriptLoadingStrategyPlugin({
68
+ scriptLoadingStategey: currentScriptLoadingStrategy
69
+ });
70
+ } else {
71
+ return null;
72
+ }
73
+ } else {
74
+ return null;
75
+ }
76
+ }
@@ -9,24 +9,36 @@ var _ManifestJsonPlugin = require("../custom_plugins/ManifestJsonPlugin");
9
9
 
10
10
  function configManifestJsonPlugin(options) {
11
11
  const {
12
- manifestJson
13
- } = options;
12
+ enable,
13
+ i18nManifestJson,
14
+ licenseManifest
15
+ } = options.manifestJson;
14
16
 
15
- if (!manifestJson.enable) {
17
+ if (!enable) {
16
18
  return null;
17
19
  }
18
20
 
19
- return new _ManifestJsonPlugin.AddFileToManifestJson([{
21
+ const params = [{
20
22
  outputJsonFileName: 'manifest.json',
21
23
  test: f => !/\.i18n\.js$|\.LICENSE\.txt$|\.map$/.test(f),
22
24
  needInitialEntries: true
23
- }, {
24
- outputJsonFileName: 'i18nManifest.json',
25
- test: f => /\.i18n\.js$/g.test(f),
26
- needInitialEntries: false
27
- }, {
28
- outputJsonFileName: 'licenseManifest.json',
29
- test: f => /\.LICENSE\.txt$/g.test(f),
30
- needInitialEntries: false
31
- }]);
25
+ }];
26
+
27
+ if (i18nManifestJson) {
28
+ params.push({
29
+ outputJsonFileName: 'i18nManifest.json',
30
+ test: f => /\.i18n\.js$/g.test(f),
31
+ needInitialEntries: false
32
+ });
33
+ }
34
+
35
+ if (licenseManifest) {
36
+ params.push({
37
+ outputJsonFileName: 'licenseManifest.json',
38
+ test: f => /\.LICENSE\.txt$/g.test(f),
39
+ needInitialEntries: false
40
+ });
41
+ }
42
+
43
+ return new _ManifestJsonPlugin.AddFileToManifestJson(params);
32
44
  }
@@ -15,7 +15,8 @@ function configMiniCSSExtractPlugin(options) {
15
15
  const {
16
16
  enableRTLSplit
17
17
  } = options.css.plugins.rtlSplit;
18
- const cssLTRFileNameTempalte = enableRTLSplit ? (0, _nameTemplates.nameTemplates)('cssdir', options) : (0, _nameTemplates.nameTemplates)('css', options);
18
+ const cssLTRFileNameTempalte = enableRTLSplit ? (0, _nameTemplates.nameTemplates)('cssdir', options) : (0, _nameTemplates.nameTemplates)('css', options); // eslint-disable-next-line no-undef
19
+
19
20
  return new _miniCssExtractPlugin.default({
20
21
  filename: cssLTRFileNameTempalte,
21
22
  chunkFilename: cssLTRFileNameTempalte