@zohodesk/react-cli 0.0.1-exp.169.1 → 0.0.1-exp.175.0

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 (36) hide show
  1. package/.eslintrc.js +1 -0
  2. package/{CHANGELOG.md → CHANGELOG-fz.md} +0 -0
  3. package/Changelog.md +1019 -0
  4. package/README.md +17 -936
  5. package/docs/VariableConversion.md +678 -0
  6. package/lib/configs/jest.config.js +8 -10
  7. package/lib/configs/libAlias.js +10 -3
  8. package/lib/configs/resolvers.js +38 -0
  9. package/lib/configs/webpack.dev.config.js +19 -26
  10. package/lib/configs/webpack.docs.config.js +12 -19
  11. package/lib/configs/webpack.impact.config.js +13 -15
  12. package/lib/configs/webpack.prod.config.js +24 -28
  13. package/lib/constants.js +31 -0
  14. package/lib/jest/preProcessors/cssPreprocessor.js +14 -7
  15. package/lib/loaderUtils/getCSSLoaders.js +45 -8
  16. package/lib/pluginUtils/configHtmlWebpackPlugins.js +59 -0
  17. package/lib/pluginUtils/getDevPlugins.js +14 -34
  18. package/lib/pluginUtils/getProdPlugins.js +24 -42
  19. package/lib/postcss-plugins/{ExcludeRTLPlugin.js → ExcludePlugin.js} +1 -1
  20. package/lib/postcss-plugins/hoverActivePlugin.js +51 -27
  21. package/lib/postcss-plugins/variableModificationPlugin/ErrorHandler.js +37 -0
  22. package/lib/postcss-plugins/variableModificationPlugin/index.js +248 -0
  23. package/lib/postcss-plugins/variableModifier.js +244 -0
  24. package/lib/schemas/index.js +50 -10
  25. package/lib/servers/docsServerCore.js +13 -12
  26. package/lib/servers/getCliPath.js +1 -1
  27. package/lib/servers/httpsOptions.js +40 -9
  28. package/lib/servers/nowatchserver.js +12 -11
  29. package/lib/servers/server.js +14 -13
  30. package/lib/utils/getOptions.js +42 -14
  31. package/package.json +5 -34
  32. package/postpublish.js +6 -4
  33. package/templates/docs/css/style.css +1 -1
  34. package/templates/docs/index.html +9 -1
  35. package/cert/Tsicsezwild-22-23.crt +0 -37
  36. package/cert/Tsicsezwild-22-23.key +0 -27
@@ -15,10 +15,6 @@ var _lodashWebpackPlugin = _interopRequireDefault(require("lodash-webpack-plugin
15
15
 
16
16
  var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
17
17
 
18
- var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin"));
19
-
20
- var _htmlWebpackInjectAttributesPlugin = _interopRequireDefault(require("html-webpack-inject-attributes-plugin"));
21
-
22
18
  var _I18nSplitPlugin = _interopRequireDefault(require("../plugins/I18nSplitPlugin"));
23
19
 
24
20
  var _RequireVariablePublicPlugin = _interopRequireDefault(require("../plugins/RequireVariablePublicPlugin"));
@@ -29,14 +25,14 @@ var _webpack = _interopRequireDefault(require("webpack"));
29
25
 
30
26
  var _plugins = require("../plugins");
31
27
 
32
- var _common = require("../common");
33
-
34
28
  var _RtlCssPlugin = require("../plugins/RtlSplitPlugin/RtlCssPlugin");
35
29
 
30
+ var _configHtmlWebpackPlugins = require("./configHtmlWebpackPlugins");
31
+
36
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
33
 
38
- let getDevPlugins = (options, publicPath) => {
39
- let {
34
+ const getDevPlugins = (options, publicPath) => {
35
+ const {
40
36
  app: {
41
37
  tpFolder,
42
38
  folder,
@@ -68,7 +64,7 @@ let getDevPlugins = (options, publicPath) => {
68
64
  const hasEFC = newOptionForEnableEFC || prevOptionForEnableEFC;
69
65
  const cssLTRFileNameTempalte = enableRTLSplit ? 'css/[name].ltr.css' : 'css/[name].css';
70
66
  const cssRTLFileNameTempalte = 'css/[name].rtl.css';
71
- let plugins = [new _plugins.CleanUpStatsPlugin(), new _caseSensitivePathsWebpackPlugin.default(), new _webpack.default.IgnorePlugin(/^\.\/domain$/, /moment$/), new _webpack.default.DefinePlugin({
67
+ const plugins = [new _plugins.CleanUpStatsPlugin(), new _caseSensitivePathsWebpackPlugin.default(), new _webpack.default.IgnorePlugin(/^\.\/domain$/, /moment$/), new _webpack.default.DefinePlugin({
72
68
  __CLIENT__: true,
73
69
  __TEST__: false,
74
70
  __SERVER__: false,
@@ -126,7 +122,7 @@ let getDevPlugins = (options, publicPath) => {
126
122
  propertiesFolder: i18n.propertiesFolder
127
123
  }));
128
124
  } else {
129
- let i18nPath = _path.default.join(process.cwd(), context, 'i18n');
125
+ const i18nPath = _path.default.join(process.cwd(), context, 'i18n');
130
126
 
131
127
  if (_fs.default.existsSync(i18nPath)) {
132
128
  plugins.push(new _copyWebpackPlugin.default([{
@@ -146,20 +142,16 @@ let getDevPlugins = (options, publicPath) => {
146
142
  collections: true,
147
143
  shorthands: true
148
144
  }));
145
+ (0, _configHtmlWebpackPlugins.configHtmlWebpackPlugins)(plugins, {
146
+ enableChunkHash: false,
147
+ folder,
148
+ minify: false,
149
+ inject,
150
+ crossorigin,
151
+ hasEFC
152
+ });
149
153
 
150
154
  if (hasEFC) {
151
- plugins.push(new _htmlWebpackPlugin.default({
152
- chunksSortMode: 'none',
153
- filename: 'index.html',
154
- template: _path.default.join(process.cwd(), folder, 'index.html'),
155
- excludeChunks: ['efc', 'widget'],
156
- templateParameters: _common.templateParameters,
157
- scriptLoading: 'defer',
158
- inject: inject
159
- }));
160
- crossorigin && plugins.push(new _htmlWebpackInjectAttributesPlugin.default({
161
- crossorigin: 'anonymous'
162
- }));
163
155
  plugins.push(new _plugins.EFCPlugin({
164
156
  isDevelopment: true,
165
157
  i18nManifestFileName,
@@ -171,18 +163,6 @@ let getDevPlugins = (options, publicPath) => {
171
163
  localeAttr: efcLocaleAttr // outputFile: 'zohodesk-efc-sdk-latest.js',
172
164
 
173
165
  }));
174
- } else {
175
- plugins.push(new _htmlWebpackPlugin.default({
176
- chunksSortMode: 'none',
177
- filename: 'index.html',
178
- template: _path.default.join(process.cwd(), folder, 'index.html'),
179
- templateParameters: _common.templateParameters,
180
- scriptLoading: 'defer',
181
- inject: inject
182
- }));
183
- crossorigin && plugins.push(new _htmlWebpackInjectAttributesPlugin.default({
184
- crossorigin: 'anonymous'
185
- }));
186
166
  }
187
167
 
188
168
  plugins.push(new _plugins.I18NInjectIntoIndexPlugin({
@@ -21,24 +21,22 @@ 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
- var _htmlWebpackInjectAttributesPlugin = _interopRequireDefault(require("html-webpack-inject-attributes-plugin"));
27
-
28
24
  var _copyWebpackPlugin = _interopRequireDefault(require("copy-webpack-plugin"));
29
25
 
30
26
  var _plugins = require("../plugins");
31
27
 
32
- var _common = require("../common");
33
-
34
28
  var _RtlCssPlugin = require("../plugins/RtlSplitPlugin/RtlCssPlugin");
35
29
 
30
+ var _configHtmlWebpackPlugins = require("./configHtmlWebpackPlugins");
31
+
36
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
33
 
38
34
  // eslint-disable-next-line no-unused-vars
39
- let getProdPlugins = (options, publicPath = '') => {
35
+ const getProdPlugins = (options, publicPath = '') => {
40
36
  let {
41
- enableChunkHash,
37
+ enableChunkHash
38
+ } = options.app;
39
+ const {
42
40
  manifestFileName,
43
41
  bundleAnalyze,
44
42
  optimize,
@@ -56,13 +54,15 @@ let getProdPlugins = (options, publicPath = '') => {
56
54
  hasShadowDOM,
57
55
  resourceHints,
58
56
  serviceWorker,
59
- htmlTemplate: {
60
- inject
61
- },
57
+ htmlTemplate,
62
58
  tpHashMapping,
63
59
  cdnMapping,
64
60
  crossorigin
65
61
  } = options.app;
62
+ const {
63
+ inject,
64
+ minify: minifyHtmlOptions
65
+ } = htmlTemplate;
66
66
  const {
67
67
  i18n
68
68
  } = options;
@@ -79,9 +79,9 @@ let getProdPlugins = (options, publicPath = '') => {
79
79
  const hashTempalate = enableChunkHash ? '.[chunkhash:20]_' : '';
80
80
  const cssLTRFileNameTempalte = `css/[name]${hashTempalate}${enableRTLSplit ? '.ltr' : ''}.css`;
81
81
  const cssRTLFileNameTempalte = `css/[name]${hashTempalate}.rtl.css`;
82
- let isDevelopment = mode === 'prod' || mode === 'dev' || mode === 'dev-no-warn';
82
+ const isDevelopment = mode === 'prod' || mode === 'dev' || mode === 'dev-no-warn';
83
83
  enableChunkHash = !isDevelopment && enableChunkHash;
84
- let plugins = [new _caseSensitivePathsWebpackPlugin.default(), new _webpack.default.IgnorePlugin(/^\.\/locale$/, /moment$/), new _webpack.default.DefinePlugin({
84
+ const plugins = [new _caseSensitivePathsWebpackPlugin.default(), new _webpack.default.IgnorePlugin(/^\.\/locale$/, /moment$/), new _webpack.default.DefinePlugin({
85
85
  __TEST__: false,
86
86
  __DEVELOPMENT__: false,
87
87
  __LOCAL_PRODUCTION__: isDevelopment,
@@ -132,7 +132,7 @@ let getProdPlugins = (options, publicPath = '') => {
132
132
  propertiesFolder: i18n.propertiesFolder
133
133
  }));
134
134
  } else {
135
- let i18nPath = _path.default.join(process.cwd(), context, 'i18n');
135
+ const i18nPath = _path.default.join(process.cwd(), context, 'i18n');
136
136
 
137
137
  if (_fs.default.existsSync(i18nPath)) {
138
138
  plugins.push(new _copyWebpackPlugin.default([{
@@ -148,21 +148,16 @@ let getProdPlugins = (options, publicPath = '') => {
148
148
  to: `./${tpFolder}/`,
149
149
  toType: 'dir'
150
150
  }]));
151
+ (0, _configHtmlWebpackPlugins.configHtmlWebpackPlugins)(plugins, {
152
+ enableChunkHash,
153
+ folder,
154
+ inject,
155
+ minify: minifyHtmlOptions,
156
+ crossorigin,
157
+ hasEFC
158
+ });
151
159
 
152
160
  if (hasEFC) {
153
- plugins.push(new _htmlWebpackPlugin.default({
154
- chunksSortMode: 'none',
155
- filename: enableChunkHash ? 'index.[templatehash:20].html' : 'index.html',
156
- template: _path.default.join(process.cwd(), folder, 'index.html'),
157
- excludeChunks: ['efc', 'widget'],
158
- minify: false,
159
- templateParameters: _common.templateParameters,
160
- scriptLoading: 'defer',
161
- inject: inject
162
- }));
163
- crossorigin && plugins.push(new _htmlWebpackInjectAttributesPlugin.default({
164
- crossorigin: 'anonymous'
165
- }));
166
161
  plugins.push(new _plugins.EFCPlugin({
167
162
  isDevelopment,
168
163
  serverUrl: publicPath,
@@ -175,19 +170,6 @@ let getProdPlugins = (options, publicPath = '') => {
175
170
  localeAttr: efcLocaleAttr,
176
171
  cdnVariableName: cdnMapping.isCdnEnabled ? cdnMapping.variableName : null
177
172
  }));
178
- } else {
179
- plugins.push(new _htmlWebpackPlugin.default({
180
- chunksSortMode: 'none',
181
- filename: enableChunkHash ? 'index.[templatehash:20].html' : 'index.html',
182
- template: _path.default.join(process.cwd(), folder, 'index.html'),
183
- minify: false,
184
- templateParameters: _common.templateParameters,
185
- scriptLoading: 'defer',
186
- inject: inject
187
- }));
188
- crossorigin && plugins.push(new _htmlWebpackInjectAttributesPlugin.default({
189
- crossorigin: 'anonymous'
190
- }));
191
173
  }
192
174
 
193
175
  plugins.push(new _plugins.I18NInjectIntoIndexPlugin({
@@ -201,7 +183,7 @@ let getProdPlugins = (options, publicPath = '') => {
201
183
  }));
202
184
 
203
185
  if (publicPaths && !isDevelopment && !cdnMapping.isCdnEnabled) {
204
- let {
186
+ const {
205
187
  callback
206
188
  } = publicPaths;
207
189
  plugins.push(callback ? new _plugins.PublicPathCallbackPlugin({
@@ -255,7 +237,7 @@ let getProdPlugins = (options, publicPath = '') => {
255
237
  }
256
238
 
257
239
  if (!isDevelopment && serviceWorker.enableSw) {
258
- let {
240
+ const {
259
241
  filePath,
260
242
  fileName = 'sw.js',
261
243
  exitPath = '/',
@@ -4,7 +4,7 @@ var _postcss = _interopRequireDefault(require("postcss"));
4
4
 
5
5
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
6
 
7
- module.exports = _postcss.default.plugin('postcss-exclude-rtl-files', opts => {
7
+ module.exports = _postcss.default.plugin('postcss-exclude-files', opts => {
8
8
  const {
9
9
  plugins
10
10
  } = opts;
@@ -14,7 +14,8 @@ const hoverIgnoreQuery = 'Hover:ignore',
14
14
  const medHoverIgnoreQuery = 'MedHover:ignore',
15
15
  medActiveIgnoreQuery = 'MedActive:ignore',
16
16
  medHoverActiveIgnoreQuery = 'MedHoverActive:ignore';
17
- const hoverMedQuerySuffix = '(min--moz-device-pixel-ratio:0) and (hover: hover), (hover: hover)';
17
+ let hoverMedQuerySuffix = '';
18
+ let hoverNoneMedQuerySuffix = '';
18
19
  const ruleIgnoreCommentRegex = /(Hover:ignore|Active:ignore|HoverActive:ignore)/g;
19
20
  const mediaQueryIgnoreCommentRegex = /(MedHover:ignore|MedActive:ignore|MedHoverActive:ignore)/g;
20
21
 
@@ -32,9 +33,26 @@ function isHoverPresent(atrule) {
32
33
  return hoverPresent;
33
34
  }
34
35
 
35
- module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOriginal => {
36
+ function checkForUsualClass(root, sel) {
37
+ let present = false;
38
+ sel.split(',').forEach(value => {
39
+ if (value.includes('hover')) {
40
+ const valueNoHover = value.replace(':hover', '').trim();
41
+ root.walkRules(rule => {
42
+ if (rule.selector === valueNoHover) {
43
+ present = true;
44
+ }
45
+ });
46
+ }
47
+ });
48
+ return present;
49
+ }
50
+
51
+ module.exports = _postcss.default.plugin('postcss-mobile-hover', mediaQueryHoverActiveString => rootOriginal => {
36
52
  const hoverRules = [];
37
- let positionsObj = {};
53
+ const positionsObj = {};
54
+ hoverMedQuerySuffix = mediaQueryHoverActiveString.hover;
55
+ hoverNoneMedQuerySuffix = mediaQueryHoverActiveString.none;
38
56
 
39
57
  function isRuleHasIgnoreComment(index, type) {
40
58
  const prevNode = rootOriginal.nodes[index - 1];
@@ -72,8 +90,8 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
72
90
 
73
91
  function getPositionsOfHoverAndActiveMedQueries(parent) {
74
92
  const allNodes = rootOriginal.nodes;
75
- const hoverMediaQuery = `${parent.params} and all and ${hoverMedQuerySuffix}`;
76
- const hoverNoneMediaQuery = `${parent.params} and (hover: none)`;
93
+ const hoverMediaQuery = `${parent.params} and ${hoverMedQuerySuffix}`;
94
+ const hoverNoneMediaQuery = `${parent.params} and ${hoverNoneMedQuerySuffix}`;
77
95
  const positions = {
78
96
  hovMed: allNodes[positionsObj[hoverMediaQuery]],
79
97
  actMed: allNodes[positionsObj[hoverNoneMediaQuery]]
@@ -142,16 +160,16 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
142
160
  if (rule.parent.params !== undefined && !rule.parent.params.includes('hover')) {
143
161
  //console.log(hovMed, actMed);
144
162
  let newSelector = '';
145
- let {
163
+ const {
146
164
  hovMed,
147
165
  actMed
148
166
  } = getPositionsOfHoverAndActiveMedQueries(rule.parent);
149
- let hovQueries = [];
150
- let actQueries = [];
167
+ const hovQueries = [];
168
+ const actQueries = [];
151
169
  rule.selector.split(/\s*,\s*/).forEach(_subrule => {
152
- let subrule = _subrule.trim();
170
+ const subrule = _subrule.trim();
153
171
 
154
- let clone = rule.clone();
172
+ const clone = rule.clone();
155
173
 
156
174
  if (subrule.includes('hover')) {
157
175
  clone.selector = subrule;
@@ -169,13 +187,13 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
169
187
  });
170
188
 
171
189
  if (hovQueries.length > 0) {
172
- let clone = rule.clone();
190
+ const clone = rule.clone();
173
191
  clone.selector = hovQueries.join(',');
174
192
  hovMed.append(clone);
175
193
  }
176
194
 
177
195
  if (actQueries.length > 0) {
178
- let clone = rule.clone();
196
+ const clone = rule.clone();
179
197
  clone.selector = actQueries.join(',');
180
198
  actMed.append(clone.clone({
181
199
  selector: clone.selector.replace(/:hover/gi, ':active')
@@ -194,7 +212,7 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
194
212
 
195
213
  function mediaQuery(rule, index) {
196
214
  if (rule.parent.params !== undefined && !rule.parent.params.includes('hover')) {
197
- let {
215
+ const {
198
216
  hovMed,
199
217
  actMed
200
218
  } = getPositionsOfHoverAndActiveMedQueries(rule.parent);
@@ -216,9 +234,9 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
216
234
  function commaQuery(rule, index) {
217
235
  //console.log("comma" , rule.selector.split('\n'));
218
236
  let newSelector = '';
219
- let hovQueries = [];
237
+ const hovQueries = [];
220
238
  rule.selector.split(/\s*,\s*/).forEach(_subrule => {
221
- let subrule = _subrule.trim();
239
+ const subrule = _subrule.trim();
222
240
 
223
241
  if (subrule.includes('hover')) {
224
242
  // hoverRules.push({ rule: clone, index });
@@ -229,7 +247,7 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
229
247
  });
230
248
 
231
249
  if (hovQueries.length > 0) {
232
- let clone = rule.clone();
250
+ const clone = rule.clone();
233
251
  clone.selector = hovQueries.join(',');
234
252
  hoverRules.push({
235
253
  rule: clone,
@@ -238,7 +256,9 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
238
256
  }
239
257
 
240
258
  if (handleHoverAndHoverActiveIgnore(index)) {
241
- rule.selector = newSelector.substring(0, newSelector.length - 2).trim();
259
+ if (checkForUsualClass(rootOriginal, rule.selector)) {
260
+ rule.selector = newSelector.substring(0, newSelector.length - 2).trim();
261
+ }
242
262
  }
243
263
 
244
264
  if (rule.selector === '') {
@@ -248,8 +268,8 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
248
268
 
249
269
 
250
270
  rootOriginal.walkAtRules(atrule => {
251
- const hoverQuery = `${atrule.params} and all and ${hoverMedQuerySuffix}`;
252
- const activeQuery = `${atrule.params} and (hover: none)`;
271
+ const hoverQuery = `${atrule.params} and ${hoverMedQuerySuffix}`;
272
+ const activeQuery = `${atrule.params} and ${hoverNoneMedQuerySuffix}`;
253
273
 
254
274
  if (isHoverPresent(atrule)) {
255
275
  if (!positionsObj[hoverQuery] && !positionsObj[activeQuery]) {
@@ -308,13 +328,13 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
308
328
  // hover
309
329
  const hoverQuery = rootOriginal.append({
310
330
  name: 'media',
311
- params: `all and ${hoverMedQuerySuffix}`
331
+ params: `${hoverMedQuerySuffix}`
312
332
  }).last; // Create a media query targetting devices that don't support hover
313
333
  // (ie. devices where we should fall back to :active instead)
314
334
 
315
335
  const activeQuery = rootOriginal.append({
316
336
  name: 'media',
317
- params: '(hover: none)'
337
+ params: `${hoverNoneMedQuerySuffix}`
318
338
  }).last; // Loop through the hover rules and apply them to each of the media
319
339
  // queries
320
340
  // eslint-disable-next-line no-labels
@@ -355,11 +375,15 @@ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOrigi
355
375
  hoverRule.rule.remove();
356
376
  }
357
377
  }
358
- }
378
+ } // rootOriginal.walkAtRules(atrule => {
379
+ // if (
380
+ // (atrule !== undefined &&
381
+ // atrule.nodes !== undefined &&
382
+ // atrule.nodes.length === 0) ||
383
+ // atrule.nodes === undefined
384
+ // ) {
385
+ // atrule.remove();
386
+ // }
387
+ // });
359
388
 
360
- rootOriginal.walkAtRules(atrule => {
361
- if (atrule !== undefined && atrule.nodes !== undefined && atrule.nodes.length === 0 || atrule.nodes === undefined) {
362
- atrule.remove();
363
- }
364
- });
365
389
  });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ErrorHandler = void 0;
7
+
8
+ class ErrorHandler {
9
+ constructor(allowedErrs) {
10
+ this.errors = [];
11
+ this.allowedErrs = allowedErrs;
12
+ }
13
+
14
+ addError(errstr) {
15
+ this.errors.push(`{\n${errstr}\n}\n`);
16
+ }
17
+
18
+ errorFunction(errStr, type) {
19
+ const {
20
+ addError,
21
+ allowedErrs
22
+ } = this;
23
+
24
+ if (type === 'DECLARATION_IGNORED' && allowedErrs.DECLARATION_IGNORED) {
25
+ addError(errStr);
26
+ } else if (type === 'UNIT_ERROR' && allowedErrs.UNIT_ERROR) {
27
+ addError(errStr);
28
+ } else if (type === 'RANGE_ERROR' && allowedErrs.RANGE_ERROR) {
29
+ addError(errStr);
30
+ } else if (type === 'VARIABLE_PRESENT' && allowedErrs.VARIABLE_PRESENT) {
31
+ addError(errStr);
32
+ }
33
+ }
34
+
35
+ }
36
+
37
+ exports.ErrorHandler = ErrorHandler;