@zohodesk/react-cli 1.1.22 → 1.1.23-exp.2

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.
package/README.md CHANGED
@@ -44,6 +44,61 @@ Now to run app
44
44
 
45
45
  # Change Logs
46
46
 
47
+ # 1.1.23 (28-06-2024)
48
+
49
+ **Features**
50
+
51
+ - alias feature added for library, application and jest. To enable it , configure your `react-cli.config.js` as below
52
+
53
+ ```
54
+ {
55
+ alias: {
56
+ "@components": './src/components,
57
+ }
58
+ }
59
+ ```
60
+
61
+ - For devmapping config jsConfig.json ad below
62
+
63
+ ```
64
+ {
65
+ "compilerOptions": {
66
+ "baseUrl": ".",
67
+ "paths": {
68
+ "@components/*": [ "./src/components/*"],
69
+ }
70
+ }
71
+ }
72
+ ```
73
+
74
+ - Customized Script loading strategy added. To enabled it, configure your `react-cli.config.js` as below
75
+
76
+ ```
77
+ {
78
+ app: {
79
+ htmlTemplate: {
80
+ customScriptLoadingStrategey: {
81
+ enable: true,
82
+ options: {
83
+ async: [/.*js$/],
84
+ defer: [/^main.*\.js$/]
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ **Changes**
93
+
94
+ - Worker loading logic
95
+
96
+ # 1.1.22 (6-6-2024)
97
+
98
+ **Changes**
99
+
100
+ - Bug fix in Typescript
101
+
47
102
  # 1.1.21 (4-6-2024)
48
103
 
49
104
  - TypeScript support has been added for the application, library, and Jest.
@@ -59,6 +114,28 @@ Now to run app
59
114
  ```
60
115
  - The Memory leak issue while downloading i18n and CSS files has been fixed
61
116
 
117
+
118
+ # 1.1.20-exp.1
119
+
120
+ **Changes**
121
+
122
+ - Added memory leak fixes for script, links tags
123
+
124
+ **Feature**
125
+ - Custom Script loading strategy support for initial html script tags.
126
+
127
+ # 1.1.19-exp.18
128
+
129
+ **Changes**
130
+
131
+ - To do further build size optimization by utilizing webpack provided config.
132
+
133
+ ```
134
+ innerGraph: true,
135
+ usedExports: true,
136
+ sideEffects: true
137
+ ```
138
+
62
139
  # 1.1.20 (27-5-2024)
63
140
 
64
141
  **Feature**
@@ -18,12 +18,16 @@ const {
18
18
  babelCustomizationForLibrary: {
19
19
  babelPlugins
20
20
  },
21
- enableTypeScript
21
+ enableTypeScript,
22
+ alias
22
23
  } = (0, _utils.getOptions)();
23
24
  const isProd = mode.toLowerCase() === 'prod';
24
25
  const defaultPlugins = [[require.resolve('babel-plugin-transform-define'), isProd ? {
25
26
  __DOCS__: false
26
- } : {}], require.resolve('@babel/plugin-syntax-dynamic-import')];
27
+ } : {}], require.resolve('@babel/plugin-syntax-dynamic-import'), [require.resolve('babel-plugin-module-resolver'), {
28
+ "root": ["./"],
29
+ alias
30
+ }]];
27
31
  const resolvedPlugins = [];
28
32
  babelPlugins.forEach(plugin => {
29
33
  resolvedPlugins.push(require.resolve(plugin));
@@ -19,12 +19,16 @@ const {
19
19
  babelCustomizationForLibrary: {
20
20
  babelPlugins
21
21
  },
22
- enableTypeScript
22
+ enableTypeScript,
23
+ alias
23
24
  } = (0, _utils.getOptions)();
24
25
  const isProd = mode.toLowerCase() === 'prod';
25
26
  const defaultPlugins = [[require.resolve('babel-plugin-transform-define'), isProd ? {
26
27
  __DOCS__: false
27
- } : {}], require.resolve('@babel/plugin-syntax-dynamic-import')];
28
+ } : {}], require.resolve('@babel/plugin-syntax-dynamic-import'), [require.resolve('babel-plugin-module-resolver'), {
29
+ "root": ["./"],
30
+ alias
31
+ }]];
28
32
  const resolvedPlugins = [];
29
33
  babelPlugins.forEach(plugin => {
30
34
  resolvedPlugins.push(require.resolve(plugin));
@@ -3,12 +3,45 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.aliasPathCreation = aliasPathCreation;
6
7
  exports.libAlias = exports.jestModuleNameMapper = void 0;
8
+
9
+ var _utils = require("../utils");
10
+
11
+ var _path = _interopRequireDefault(require("path"));
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
7
15
  // the reason for alias at the time was code tree shaking
8
16
  // tree shaking was most compactable with ES module system
9
17
  // FIXME: But there is a posiblity when these package does not have lib,
10
18
  // app will work because of alias, But may be jest won't work because of not alais
11
19
  // So need to think about use alais in jest
20
+ const appPath = process.cwd();
21
+ const {
22
+ alias,
23
+ app
24
+ } = (0, _utils.getOptions)();
25
+ const {
26
+ disableES5Transpile
27
+ } = app;
28
+
29
+ function aliasPathCreation(customAlias) {
30
+ if (customAlias == null) {
31
+ return {};
32
+ }
33
+
34
+ const newAlias = {};
35
+ Object.keys(customAlias).forEach(key => {
36
+ if (customAlias[key].startsWith('.')) {
37
+ newAlias[key] = _path.default.resolve(appPath, customAlias[key]);
38
+ } else {
39
+ newAlias[key] = customAlias[key];
40
+ }
41
+ });
42
+ return newAlias;
43
+ }
44
+
12
45
  const libAlias = {
13
46
  '@zohodesk/components/lib': '@zohodesk/components/es',
14
47
  // '@zohodesk/zc-custom/lib': '@zohodesk/zc-custom/es',
@@ -31,8 +64,9 @@ const libAlias = {
31
64
  // '^@components(.*)$': '<rootDir>/src/components$1',
32
65
 
33
66
  exports.libAlias = libAlias;
34
- const jestModuleNameMapper = Object.keys(libAlias).reduce((previousValue, key) => {
35
- previousValue[`^${key}(.*)$`] = `${libAlias[key]}$1`;
67
+ const totalAlias = disableES5Transpile ? Object.assign({}, libAlias, aliasPathCreation(alias)) : aliasPathCreation(alias);
68
+ const jestModuleNameMapper = Object.keys(totalAlias).reduce((previousValue, key) => {
69
+ previousValue[`^${key}(.*)$`] = `${totalAlias[key]}$1`;
36
70
  return previousValue;
37
71
  }, {});
38
72
  exports.jestModuleNameMapper = jestModuleNameMapper;
@@ -21,6 +21,7 @@ function moduleResolver(options) {
21
21
  moduleResolvePath,
22
22
  disableES5Transpile
23
23
  } = options.app;
24
+ const customAlias = options.alias;
24
25
  let required = moduleResolvePath && (0, _requireLocalOrGlobal.requireLocal)(moduleResolvePath);
25
26
 
26
27
  if (!required) {
@@ -32,10 +33,11 @@ function moduleResolver(options) {
32
33
  }
33
34
 
34
35
  const nodeModulesPath = required ? required.nodeModulesPath : _client_packages_group.nodeModulesPath;
36
+ const totalAlias = disableES5Transpile ? Object.assign({}, _libAlias.libAlias, (0, _libAlias.aliasPathCreation)(customAlias)) : (0, _libAlias.aliasPathCreation)(customAlias);
35
37
  return {
36
38
  extensions: ['.js', '.jsx', '.ts', '.tsx'],
37
39
  modules: [nodeModulesPath, _constants.cliNodeModulesPath, 'node_modules'].filter(Boolean),
38
- alias: disableES5Transpile ? _libAlias.libAlias : {} // alias: { ...libAlias, ...clientDependenies }
40
+ alias: totalAlias // alias: { ...libAlias, ...clientDependenies }
39
41
 
40
42
  };
41
43
  }
@@ -19,32 +19,32 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
19
19
  /* import WebWorkerTemplatePlugin from 'webpack/lib/webworker/WebWorkerTemplatePlugin';
20
20
  import ExternalsPlugin from 'webpack/lib/ExternalsPlugin'; */
21
21
  const schema = {
22
- 'type': 'object',
23
- 'properties': {
24
- 'publicPath': {
25
- 'anyOf': [{
26
- 'type': 'string'
22
+ type: 'object',
23
+ properties: {
24
+ publicPath: {
25
+ anyOf: [{
26
+ type: 'string'
27
27
  }, {
28
- 'instanceof': 'Function'
28
+ instanceof: 'Function'
29
29
  }]
30
30
  },
31
- 'filename': {
32
- 'anyOf': [{
33
- 'type': 'string',
34
- 'minLength': 1
31
+ filename: {
32
+ anyOf: [{
33
+ type: 'string',
34
+ minLength: 1
35
35
  }, {
36
- 'instanceof': 'Function'
36
+ instanceof: 'Function'
37
37
  }]
38
38
  },
39
- 'chunkFilename': {
40
- 'type': 'string',
41
- 'minLength': 1
39
+ chunkFilename: {
40
+ type: 'string',
41
+ minLength: 1
42
42
  },
43
- 'esModule': {
44
- 'type': 'boolean'
43
+ esModule: {
44
+ type: 'boolean'
45
45
  }
46
46
  },
47
- 'additionalProperties': false
47
+ additionalProperties: false
48
48
  }; // eslint-disable-next-line
49
49
 
50
50
  function loader() {}
@@ -112,25 +112,40 @@ function pitch(request) {
112
112
  }
113
113
 
114
114
  function workerCode() {
115
+ if (this.workerInstance) {
116
+ return this.workerInstance;
117
+ }
118
+
115
119
  let blob;
116
120
 
117
121
  try {
118
122
  blob = new Blob([`importScripts('${this.workerUrl}');`], {
119
- 'type': 'application/javascript'
123
+ type: 'application/javascript'
120
124
  });
121
125
  } catch (e1) {
122
126
  throw new Error(e1);
123
127
  }
124
128
 
125
- let url = window.URL || window.webkitURL;
126
- let blobUrl = url.createObjectURL(blob);
127
- let worker = new Worker(blobUrl);
128
- return worker;
129
+ const url = window.URL || window.webkitURL;
130
+ const blobUrl = url.createObjectURL(blob);
131
+ this.workerInstance = new Worker(blobUrl);
132
+ return this.workerInstance;
129
133
  }
130
134
 
131
- return cb(null, `${options.esModule ? 'export default' : 'module.exports ='} {\n
135
+ return cb(null, `const workerObj ={\n
136
+ workerInstance: null, \n
132
137
  workerUrl: __webpack_public_path__ + ${JSON.stringify(entry)}, \n
133
138
  getInstance: ${workerCode} \n
134
- }`);
139
+ };\n
140
+ workerObj.getInstance();
141
+ ${options.esModule ? 'export default' : 'module.exports ='} workerObj;
142
+ `); // return cb(
143
+ // null,
144
+ // `${options.esModule ? 'export default' : 'module.exports ='} {\n
145
+ // workerInstance: null, \n
146
+ // workerUrl: __webpack_public_path__ + ${JSON.stringify(entry)}, \n
147
+ // getInstance: ${workerCode} \n
148
+ // }`
149
+ // );
135
150
  });
136
151
  }
@@ -13,6 +13,10 @@ var _htmlWebpackInjectAttributesPlugin = _interopRequireDefault(require("html-we
13
13
 
14
14
  var _common = require("../common");
15
15
 
16
+ var _utils = require("../utils");
17
+
18
+ var _CustomScriptLoadingStrategyPlugin = _interopRequireDefault(require("../plugins/CustomScriptLoadingStrategyPlugin"));
19
+
16
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
21
 
18
22
  const defaultHTMLMiniFyOption = {
@@ -26,6 +30,51 @@ const defaultHTMLMiniFyOption = {
26
30
  removeStyleLinkTypeAttributes: true,
27
31
  useShortDoctype: true
28
32
  };
33
+ const defaultScriptLoadingStrategy = 'defer';
34
+ const allowedScriptLoadingStrategies = ['blocking', 'defer', 'async', 'module'];
35
+
36
+ function isAllowedScriptLoadingStrategyUsed(scriptLoadingStategey) {
37
+ return allowedScriptLoadingStrategies.includes(scriptLoadingStategey);
38
+ }
39
+
40
+ function getScriptLoadingStrategyForStringType(scriptLoadingStategey) {
41
+ if (isAllowedScriptLoadingStrategyUsed(scriptLoadingStategey)) {
42
+ return scriptLoadingStategey;
43
+ }
44
+
45
+ return defaultScriptLoadingStrategy;
46
+ }
47
+
48
+ function getScriptLoadingStrategyForObject(scriptLoadingStategey) {
49
+ if (Object.keys(scriptLoadingStategey).length === 0) {
50
+ return defaultScriptLoadingStrategy;
51
+ }
52
+
53
+ const isAllowedScriptLoadingStrategy = Object.keys(scriptLoadingStategey).every(key => isAllowedScriptLoadingStrategyUsed(key));
54
+
55
+ if (isAllowedScriptLoadingStrategy) {
56
+ return Object.assign({}, scriptLoadingStategey);
57
+ }
58
+
59
+ console.warn('un supported script loading strategy used', scriptLoadingStategey);
60
+ return defaultScriptLoadingStrategy;
61
+ }
62
+
63
+ function getScriptLoadingStrategy(scriptLoadingStategey) {
64
+ if ((0, _utils.getTypeOf)(scriptLoadingStategey) === 'string') {
65
+ return {
66
+ [getScriptLoadingStrategyForStringType(scriptLoadingStategey)]: [/.*/]
67
+ };
68
+ }
69
+
70
+ if ((0, _utils.getTypeOf)(scriptLoadingStategey) === 'object') {
71
+ return getScriptLoadingStrategyForObject(scriptLoadingStategey);
72
+ }
73
+
74
+ return {
75
+ [defaultScriptLoadingStrategy]: [/.*/]
76
+ };
77
+ }
29
78
 
30
79
  function configHtmlWebpackPlugins(plugins, {
31
80
  enableChunkHash = false,
@@ -33,7 +82,8 @@ function configHtmlWebpackPlugins(plugins, {
33
82
  inject,
34
83
  crossorigin,
35
84
  hasEFC,
36
- minify: minifyHtmlOptions = false
85
+ minify: minifyHtmlOptions = false,
86
+ customScriptLoadingStrategey = {}
37
87
  }) {
38
88
  const optionsHtmlWebpack = {
39
89
  chunksSortMode: 'none',
@@ -44,7 +94,7 @@ function configHtmlWebpackPlugins(plugins, {
44
94
  // ? minifyHtmlOptions
45
95
  // : minifyHtmlOptions,,
46
96
  templateParameters: _common.templateParameters,
47
- scriptLoading: 'defer',
97
+ scriptLoading: defaultScriptLoadingStrategy,
48
98
  inject: inject
49
99
  };
50
100
 
@@ -56,4 +106,14 @@ function configHtmlWebpackPlugins(plugins, {
56
106
  crossorigin && plugins.push(new _htmlWebpackInjectAttributesPlugin.default({
57
107
  crossorigin: 'anonymous'
58
108
  }));
109
+
110
+ if (customScriptLoadingStrategey.enable) {
111
+ const currentScriptLoadingStrategy = getScriptLoadingStrategy(customScriptLoadingStrategey.options);
112
+
113
+ if ((0, _utils.getTypeOf)(currentScriptLoadingStrategy) === 'object') {
114
+ plugins.push(new _CustomScriptLoadingStrategyPlugin.default({
115
+ scriptLoadingStategey: currentScriptLoadingStrategy
116
+ }));
117
+ }
118
+ }
59
119
  }
@@ -33,14 +33,13 @@ var _VariableConversionCollector = _interopRequireDefault(require("../plugins/Va
33
33
 
34
34
  var _SelectorPlugin = _interopRequireDefault(require("../plugins/SelectorPlugin"));
35
35
 
36
- var _configHtmlWebpackPlugins = require("./configHtmlWebpackPlugins");
37
-
38
36
  var _EfcResourceCleanupPlugin = _interopRequireDefault(require("../plugins/EfcResourceCleanupPlugin"));
39
37
 
40
38
  var _EventsHandlingPlugin = require("../plugins/EventsHandlingPlugin");
41
39
 
42
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
41
 
42
+ // import { configHtmlWebpackPlugins } from './configHtmlWebpackPlugins';
44
43
  // import { windowsModification } from '../loaderUtils/windowsModification';
45
44
  const getDevPlugins = (options, publicPath) => {
46
45
  const {
@@ -62,7 +61,8 @@ const getDevPlugins = (options, publicPath) => {
62
61
  mode
63
62
  },
64
63
  htmlTemplate: {
65
- inject
64
+ inject,
65
+ customScriptLoadingStrategey
66
66
  },
67
67
  crossorigin
68
68
  },
@@ -161,15 +161,15 @@ const getDevPlugins = (options, publicPath) => {
161
161
  pluginsArr.push(new _lodashWebpackPlugin.default({
162
162
  collections: true,
163
163
  shorthands: true
164
- }));
165
- (0, _configHtmlWebpackPlugins.configHtmlWebpackPlugins)(pluginsArr, {
166
- enableChunkHash: false,
167
- folder,
168
- minify: false,
169
- inject,
170
- crossorigin,
171
- hasEFC
172
- });
164
+ })); // configHtmlWebpackPlugins(pluginsArr, {
165
+ // enableChunkHash: false,
166
+ // folder,
167
+ // minify: false,
168
+ // inject,
169
+ // crossorigin,
170
+ // hasEFC,
171
+ // customScriptLoadingStrategey,
172
+ // });
173
173
 
174
174
  if (hasEFC) {
175
175
  pluginsArr.push(new _plugins.EFCPlugin({
@@ -35,14 +35,13 @@ var _CustomAttributePlugin = require("../plugins/CustomAttributePlugin");
35
35
 
36
36
  var _RtlCssPlugin = require("../plugins/RtlSplitPlugin/RtlCssPlugin");
37
37
 
38
- var _configHtmlWebpackPlugins = require("./configHtmlWebpackPlugins");
39
-
40
38
  var _StatsPlugin = _interopRequireDefault(require("../plugins/StatsPlugin"));
41
39
 
42
40
  var _EfcResourceCleanupPlugin = _interopRequireDefault(require("../plugins/EfcResourceCleanupPlugin"));
43
41
 
44
42
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
45
43
 
44
+ // import { configHtmlWebpackPlugins } from './configHtmlWebpackPlugins';
46
45
  // eslint-disable-next-line no-unused-vars
47
46
  const getProdPlugins = (options, publicPath = '') => {
48
47
  let {
@@ -80,7 +79,8 @@ const getProdPlugins = (options, publicPath = '') => {
80
79
  } = options.app;
81
80
  const {
82
81
  inject,
83
- minify: minifyHtmlOptions
82
+ minify: minifyHtmlOptions,
83
+ customScriptLoadingStrategey
84
84
  } = htmlTemplate;
85
85
  const {
86
86
  i18n
@@ -172,15 +172,15 @@ const getProdPlugins = (options, publicPath = '') => {
172
172
  from: `${_path.default.join(process.cwd(), context, tpFolder)}/`,
173
173
  to: `./${tpFolder}/`,
174
174
  toType: 'dir'
175
- }]));
176
- (0, _configHtmlWebpackPlugins.configHtmlWebpackPlugins)(pluginsArr, {
177
- enableChunkHash,
178
- folder,
179
- inject,
180
- minify: minifyHtmlOptions,
181
- crossorigin,
182
- hasEFC
183
- });
175
+ }])); // configHtmlWebpackPlugins(pluginsArr, {
176
+ // enableChunkHash,
177
+ // folder,
178
+ // inject,
179
+ // minify: minifyHtmlOptions,
180
+ // customScriptLoadingStrategey,
181
+ // crossorigin,
182
+ // hasEFC
183
+ // });
184
184
 
185
185
  if (hasEFC) {
186
186
  pluginsArr.push(new _plugins.EFCPlugin({
@@ -0,0 +1,109 @@
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
+ 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
+ this.matchAndApplyCustomLoadingStrategyToScripts(tags);
102
+ callback(null, data);
103
+ });
104
+ });
105
+ }
106
+
107
+ }
108
+
109
+ exports.default = CustomScriptLoadingStrategyPlugin;
@@ -18,10 +18,10 @@ class EventsHandlingPlugin {
18
18
  fn: compilation => {
19
19
  compilation.mainTemplate.hooks.requireEnsure.tap('CustomAttributePlugin', source => {
20
20
  // const str = attributeSetTemplate(cssAttributes, 'linkTag');
21
- const sourceStr = source.replace('linkTag.onerror = function(event) {', 'linkTag.onerror = function(event) { linkTag.onerror = linkTag.onload = null');
21
+ const sourceStr = source.replace('linkTag.onerror = function(event) {', 'linkTag.onerror = function(event) { linkTag.onerror = linkTag.onload = null;');
22
22
  const replacedSourceStr = sourceStr.replace('linkTag.onload = resolve', `linkTag.onload = () => {
23
+ linkTag.onerror = linkTag.onload = null;
23
24
  resolve();
24
- linkTag.onerror = linkTag.onload = null
25
25
  };`);
26
26
  return replacedSourceStr;
27
27
  });
@@ -229,8 +229,8 @@ class I18nDownlodLogic {
229
229
  }
230
230
  var scriptTag = document.createElement("script");
231
231
  scriptTag.onload = () => {
232
- resolve();
233
232
  scriptTag.onerror = scriptTag.onload = null;
233
+ resolve();
234
234
  };
235
235
  scriptTag.onerror = function(event) {
236
236
  scriptTag.onerror = scriptTag.onload = null;
@@ -15,6 +15,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
15
15
 
16
16
  // TODO move deprecated options to separate file and manage seperately
17
17
  var _default = {
18
+ alias: null,
18
19
  unstableDepsInverse: {
19
20
  value: false,
20
21
  cli: 'unstable_deps_inverse'
@@ -322,7 +323,11 @@ var _default = {
322
323
  },
323
324
  htmlTemplate: {
324
325
  minify: null,
325
- inject: true
326
+ inject: true,
327
+ customScriptLoadingStrategey: {
328
+ enable: false,
329
+ options: null
330
+ }
326
331
  },
327
332
  removePropTypes: false,
328
333
  customChunksBaseConfig: null,
@@ -167,6 +167,20 @@ var _getComponents = _interopRequireDefault(require("./getComponents"));
167
167
 
168
168
  var _ssTestHack = _interopRequireDefault(require("./ssTestHack"));
169
169
 
170
+ var _typeCheck = require("./typeCheck");
171
+
172
+ Object.keys(_typeCheck).forEach(function (key) {
173
+ if (key === "default" || key === "__esModule") return;
174
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
175
+ if (key in exports && exports[key] === _typeCheck[key]) return;
176
+ Object.defineProperty(exports, key, {
177
+ enumerable: true,
178
+ get: function () {
179
+ return _typeCheck[key];
180
+ }
181
+ });
182
+ });
183
+
170
184
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
171
185
 
172
186
  // eslint-disable-next-line no-duplicate-imports