@schukai/monster 3.5.0 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. package/package.json +1 -1
  2. package/source/constants.mjs +4 -9
  3. package/source/constraints/abstract.mjs +4 -6
  4. package/source/constraints/abstractoperator.mjs +6 -12
  5. package/source/constraints/andoperator.mjs +3 -6
  6. package/source/constraints/invalid.mjs +3 -6
  7. package/source/constraints/isarray.mjs +6 -9
  8. package/source/constraints/isobject.mjs +4 -7
  9. package/source/constraints/namespace.mjs +1 -3
  10. package/source/constraints/oroperator.mjs +26 -25
  11. package/source/constraints/valid.mjs +3 -6
  12. package/source/data/buildmap.mjs +20 -36
  13. package/source/data/buildtree.mjs +29 -29
  14. package/source/data/datasource/namespace.mjs +1 -1
  15. package/source/data/datasource/server/restapi/writeerror.mjs +6 -6
  16. package/source/data/datasource/server/restapi.mjs +51 -65
  17. package/source/data/datasource/server/webconnect.mjs +26 -35
  18. package/source/data/datasource/server.mjs +16 -20
  19. package/source/data/datasource/storage/localstorage.mjs +8 -11
  20. package/source/data/datasource/storage/sessionstorage.mjs +8 -10
  21. package/source/data/datasource/storage.mjs +18 -22
  22. package/source/data/datasource.mjs +27 -43
  23. package/source/data/diff.mjs +20 -32
  24. package/source/data/extend.mjs +20 -14
  25. package/source/data/namespace.mjs +1 -3
  26. package/source/data/pathfinder.mjs +40 -67
  27. package/source/data/pipe.mjs +6 -10
  28. package/source/data/transformer.mjs +141 -157
  29. package/source/dom/assembler.mjs +6 -9
  30. package/source/dom/attributes.mjs +36 -48
  31. package/source/dom/constants.mjs +55 -71
  32. package/source/dom/customcontrol.mjs +16 -21
  33. package/source/dom/customelement.mjs +140 -164
  34. package/source/dom/events.mjs +17 -24
  35. package/source/dom/focusmanager.mjs +30 -48
  36. package/source/dom/locale.mjs +16 -19
  37. package/source/dom/namespace.mjs +1 -1
  38. package/source/dom/ready.mjs +7 -10
  39. package/source/dom/resource/data.mjs +38 -46
  40. package/source/dom/resource/link/namespace.mjs +1 -3
  41. package/source/dom/resource/link/stylesheet.mjs +7 -11
  42. package/source/dom/resource/link.mjs +36 -17
  43. package/source/dom/resource/namespace.mjs +1 -1
  44. package/source/dom/resource/script.mjs +23 -13
  45. package/source/dom/resource.mjs +47 -60
  46. package/source/dom/resourcemanager.mjs +36 -43
  47. package/source/dom/template.mjs +17 -24
  48. package/source/dom/theme.mjs +8 -12
  49. package/source/dom/updater.mjs +150 -196
  50. package/source/dom/util.mjs +11 -12
  51. package/source/dom/worker/factory.mjs +21 -25
  52. package/source/dom/worker/namespace.mjs +1 -1
  53. package/source/i18n/formatter.mjs +20 -24
  54. package/source/i18n/locale.mjs +40 -42
  55. package/source/i18n/namespace.mjs +1 -1
  56. package/source/i18n/provider.mjs +4 -7
  57. package/source/i18n/providers/embed.mjs +16 -26
  58. package/source/i18n/providers/fetch.mjs +30 -36
  59. package/source/i18n/translations.mjs +15 -22
  60. package/source/logging/handler/console.mjs +6 -10
  61. package/source/logging/handler.mjs +15 -18
  62. package/source/logging/logentry.mjs +8 -9
  63. package/source/logging/logger.mjs +73 -55
  64. package/source/logging/namespace.mjs +1 -1
  65. package/source/math/namespace.mjs +1 -1
  66. package/source/math/random.mjs +13 -14
  67. package/source/monster.mjs +132 -100
  68. package/source/net/namespace.mjs +1 -3
  69. package/source/net/webconnect/message.mjs +6 -8
  70. package/source/net/webconnect/namespace.mjs +1 -3
  71. package/source/net/webconnect.mjs +28 -39
  72. package/source/text/formatter.mjs +44 -55
  73. package/source/types/base.mjs +16 -26
  74. package/source/types/basewithoptions.mjs +8 -14
  75. package/source/types/binary.mjs +4 -5
  76. package/source/types/dataurl.mjs +19 -27
  77. package/source/types/global.mjs +14 -26
  78. package/source/types/id.mjs +4 -6
  79. package/source/types/is.mjs +11 -16
  80. package/source/types/mediatype.mjs +29 -44
  81. package/source/types/namespace.mjs +0 -1
  82. package/source/types/node.mjs +16 -22
  83. package/source/types/nodelist.mjs +10 -14
  84. package/source/types/noderecursiveiterator.mjs +11 -14
  85. package/source/types/observablequeue.mjs +13 -16
  86. package/source/types/observer.mjs +16 -23
  87. package/source/types/observerlist.mjs +18 -21
  88. package/source/types/proxyobserver.mjs +24 -37
  89. package/source/types/queue.mjs +8 -13
  90. package/source/types/randomid.mjs +10 -10
  91. package/source/types/regex.mjs +3 -5
  92. package/source/types/stack.mjs +4 -8
  93. package/source/types/tokenlist.mjs +24 -31
  94. package/source/types/typeof.mjs +5 -7
  95. package/source/types/uniquequeue.mjs +8 -13
  96. package/source/types/uuid.mjs +18 -25
  97. package/source/types/validate.mjs +26 -27
  98. package/source/types/version.mjs +17 -25
  99. package/source/util/clone.mjs +23 -32
  100. package/source/util/comparator.mjs +7 -15
  101. package/source/util/deadmansswitch.mjs +16 -23
  102. package/source/util/freeze.mjs +5 -7
  103. package/source/util/namespace.mjs +1 -1
  104. package/source/util/processing.mjs +33 -39
  105. package/source/util/trimspaces.mjs +17 -24
  106. package/test/cases/monster.mjs +1 -1
@@ -5,12 +5,12 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {getGlobal} from '../types/global.mjs';
9
- import {isArray, isFunction, isObject, isPrimitive} from '../types/is.mjs';
10
- import {typeOf} from "../types/typeof.mjs";
11
- import {validateObject} from "../types/validate.mjs";
8
+ import { getGlobal } from "../types/global.mjs";
9
+ import { isArray, isFunction, isObject, isPrimitive } from "../types/is.mjs";
10
+ import { typeOf } from "../types/typeof.mjs";
11
+ import { validateObject } from "../types/validate.mjs";
12
12
 
13
- export {clone}
13
+ export { clone };
14
14
 
15
15
  /**
16
16
  * With this function, objects can be cloned.
@@ -30,7 +30,6 @@ export {clone}
30
30
  * @throws {Error} unable to clone obj! its type isn't supported.
31
31
  */
32
32
  function clone(obj) {
33
-
34
33
  // typeof null results in 'object'. https://2ality.com/2013/10/typeof-null.html
35
34
  if (null === obj) {
36
35
  return obj;
@@ -57,8 +56,6 @@ function clone(obj) {
57
56
  }
58
57
 
59
58
  if (isObject(obj)) {
60
-
61
-
62
59
  // Handle Date
63
60
  if (obj instanceof Date) {
64
61
  let copy = new Date();
@@ -67,17 +64,17 @@ function clone(obj) {
67
64
  }
68
65
 
69
66
  /** Do not clone DOM nodes */
70
- if (typeof Element !== 'undefined' && obj instanceof Element) return obj;
71
- if (typeof HTMLDocument !== 'undefined' && obj instanceof HTMLDocument) return obj;
72
- if (typeof DocumentFragment !== 'undefined' && obj instanceof DocumentFragment) return obj;
67
+ if (typeof Element !== "undefined" && obj instanceof Element) return obj;
68
+ if (typeof HTMLDocument !== "undefined" && obj instanceof HTMLDocument) return obj;
69
+ if (typeof DocumentFragment !== "undefined" && obj instanceof DocumentFragment) return obj;
73
70
 
74
71
  /** Do not clone global objects */
75
72
  if (obj === getGlobal()) return obj;
76
- if (typeof globalContext !== 'undefined' && obj === globalContext) return obj;
77
- if (typeof window !== 'undefined' && obj === window) return obj;
78
- if (typeof document !== 'undefined' && obj === document) return obj;
79
- if (typeof navigator !== 'undefined' && obj === navigator) return obj;
80
- if (typeof JSON !== 'undefined' && obj === JSON) return obj;
73
+ if (typeof globalContext !== "undefined" && obj === globalContext) return obj;
74
+ if (typeof window !== "undefined" && obj === window) return obj;
75
+ if (typeof document !== "undefined" && obj === document) return obj;
76
+ if (typeof navigator !== "undefined" && obj === navigator) return obj;
77
+ if (typeof JSON !== "undefined" && obj === JSON) return obj;
81
78
 
82
79
  // Handle Proxy-Object
83
80
  try {
@@ -85,11 +82,9 @@ function clone(obj) {
85
82
  if (obj instanceof Proxy) {
86
83
  return obj;
87
84
  }
88
- } catch (e) {
89
- }
90
-
91
- return cloneObject(obj)
85
+ } catch (e) {}
92
86
 
87
+ return cloneObject(obj);
93
88
  }
94
89
 
95
90
  throw new Error("unable to clone obj! its type isn't supported.");
@@ -102,29 +97,26 @@ function clone(obj) {
102
97
  * @private
103
98
  */
104
99
  function cloneObject(obj) {
105
-
106
100
  validateObject(obj);
107
-
108
- const constructor = obj?.['constructor'];
101
+
102
+ const fkt = obj?.["constructor"];
109
103
 
110
104
  /** Object has clone method */
111
- if(typeOf(constructor)==='function') {
112
- const prototype = constructor?.prototype;
113
- if(typeof prototype==='object') {
114
- if(prototype.hasOwnProperty('getClone')&& typeOf(obj.getClone) === 'function') {
115
- return obj.getClone();
105
+ if (typeOf(fkt) === "function") {
106
+ const prototype = fkt?.prototype;
107
+ if (typeof prototype === "object") {
108
+ if (prototype.hasOwnProperty("getClone") && typeOf(obj.getClone) === "function") {
109
+ return obj.getClone();
116
110
  }
117
111
  }
118
112
  }
119
113
 
120
114
  let copy = {};
121
- if (typeof obj.constructor === 'function' &&
122
- typeof obj.constructor.call === 'function') {
115
+ if (typeof obj.constructor === "function" && typeof obj.constructor.call === "function") {
123
116
  copy = new obj.constructor();
124
117
  }
125
118
 
126
119
  for (let key in obj) {
127
-
128
120
  if (!obj.hasOwnProperty(key)) {
129
121
  continue;
130
122
  }
@@ -139,4 +131,3 @@ function cloneObject(obj) {
139
131
 
140
132
  return copy;
141
133
  }
142
-
@@ -5,14 +5,14 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {Base} from '../types/base.mjs';
9
- import {isFunction} from '../types/is.mjs';
8
+ import { Base } from "../types/base.mjs";
9
+ import { isFunction } from "../types/is.mjs";
10
10
 
11
- export {Comparator}
11
+ export { Comparator };
12
12
 
13
13
  /**
14
14
  * The comparator allows a comparison function to be abstracted.
15
- *
15
+ *
16
16
  * The following are some examples of the application of the class.
17
17
  *
18
18
  * ```
@@ -37,7 +37,6 @@ export {Comparator}
37
37
  * @memberOf Monster.Util
38
38
  */
39
39
  class Comparator extends Base {
40
-
41
40
  /**
42
41
  * create new comparator
43
42
  *
@@ -49,9 +48,9 @@ class Comparator extends Base {
49
48
  super();
50
49
 
51
50
  if (isFunction(callback)) {
52
- this.compare = callback
51
+ this.compare = callback;
53
52
  } else if (callback !== undefined) {
54
- throw new TypeError("unsupported type")
53
+ throw new TypeError("unsupported type");
55
54
  } else {
56
55
  // default compare function
57
56
 
@@ -62,9 +61,8 @@ class Comparator extends Base {
62
61
  * @return {integer} -1, 0 or 1
63
62
  */
64
63
  this.compare = function (a, b) {
65
-
66
64
  if (typeof a !== typeof b) {
67
- throw new TypeError("impractical comparison", "types/comparator.mjs")
65
+ throw new TypeError("impractical comparison", "types/comparator.mjs");
68
66
  }
69
67
 
70
68
  if (a === b) {
@@ -73,7 +71,6 @@ class Comparator extends Base {
73
71
  return a < b ? -1 : 1;
74
72
  };
75
73
  }
76
-
77
74
  }
78
75
 
79
76
  /**
@@ -99,7 +96,6 @@ class Comparator extends Base {
99
96
  return this.compare(a, b) === 0;
100
97
  }
101
98
 
102
-
103
99
  /**
104
100
  * Checks if variable `a` is greater than `b`
105
101
  *
@@ -147,11 +143,8 @@ class Comparator extends Base {
147
143
  lessThan(a, b) {
148
144
  return this.compare(a, b) < 0;
149
145
  }
150
-
151
-
152
146
  }
153
147
 
154
-
155
148
  /**
156
149
  * This is the description for the callback function used by the operator
157
150
  *
@@ -169,4 +162,3 @@ class Comparator extends Base {
169
162
  * @memberOf Monster.Util
170
163
  * @see Monster.Util.Comparator
171
164
  */
172
-
@@ -5,13 +5,13 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {internalSymbol} from "../constants.mjs";
8
+ import { internalSymbol } from "../constants.mjs";
9
9
 
10
- import {Base} from "../types/base.mjs";
11
- import {isInteger} from "../types/is.mjs";
12
- import {validateFunction, validateInteger} from "../types/validate.mjs";
10
+ import { Base } from "../types/base.mjs";
11
+ import { isInteger } from "../types/is.mjs";
12
+ import { validateFunction, validateInteger } from "../types/validate.mjs";
13
13
 
14
- export {DeadMansSwitch}
14
+ export { DeadMansSwitch };
15
15
 
16
16
  /**
17
17
  * The dead man's switch allows to set a timer which can be reset again and again within a defined period of time.
@@ -23,8 +23,7 @@ export {DeadMansSwitch}
23
23
  * @memberOf Monster.Util
24
24
  * @summary Class to be able to execute function chains
25
25
  */
26
- class DeadMansSwitch extends Base {
27
-
26
+ class DeadMansSwitch extends Base {
28
27
  /**
29
28
  * Create new dead man's switch
30
29
  *
@@ -44,18 +43,17 @@ export {DeadMansSwitch}
44
43
  * @param {Integer|undefined} [delay]
45
44
  */
46
45
  touch(delay) {
47
-
48
- if (this[internalSymbol]['isAlreadyRun'] === true) {
49
- throw new Error('has already run')
46
+ if (this[internalSymbol]["isAlreadyRun"] === true) {
47
+ throw new Error("has already run");
50
48
  }
51
49
 
52
50
  if (isInteger(delay)) {
53
- this[internalSymbol]['delay'] = delay
51
+ this[internalSymbol]["delay"] = delay;
54
52
  } else if (delay !== undefined) {
55
- throw new Error('unsupported argument')
53
+ throw new Error("unsupported argument");
56
54
  }
57
55
 
58
- clearTimeout(this[internalSymbol]['timer']);
56
+ clearTimeout(this[internalSymbol]["timer"]);
59
57
 
60
58
  initCallback.call(this);
61
59
 
@@ -67,13 +65,12 @@ export {DeadMansSwitch}
67
65
  * @private
68
66
  */
69
67
  function initCallback() {
70
-
71
68
  const self = this;
72
69
 
73
- self[internalSymbol]['timer'] = setTimeout(() => {
74
- self[internalSymbol]['isAlreadyRun'] = true;
75
- self[internalSymbol]['callback']();
76
- }, self[internalSymbol]['delay'])
70
+ self[internalSymbol]["timer"] = setTimeout(() => {
71
+ self[internalSymbol]["isAlreadyRun"] = true;
72
+ self[internalSymbol]["callback"]();
73
+ }, self[internalSymbol]["delay"]);
77
74
  }
78
75
 
79
76
  /**
@@ -88,12 +85,8 @@ function init(delay, callback) {
88
85
  callback,
89
86
  delay,
90
87
  isAlreadyRun: false,
91
- timer: undefined
88
+ timer: undefined,
92
89
  };
93
90
 
94
91
  initCallback.call(self);
95
-
96
92
  }
97
-
98
-
99
-
@@ -5,9 +5,9 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {validateObject} from '../types/validate.mjs';
8
+ import { validateObject } from "../types/validate.mjs";
9
9
 
10
- export {deepFreeze}
10
+ export { deepFreeze };
11
11
 
12
12
  /**
13
13
  * Deep freeze a object
@@ -20,9 +20,8 @@ export {deepFreeze}
20
20
  * @copyright schukai GmbH
21
21
  * @throws {TypeError} value is not a object
22
22
  */
23
- function deepFreeze(object) {
24
-
25
- validateObject(object)
23
+ function deepFreeze(object) {
24
+ validateObject(object);
26
25
 
27
26
  // Retrieve the defined property names of the object
28
27
  var propNames = Object.getOwnPropertyNames(object);
@@ -31,8 +30,7 @@ export {deepFreeze}
31
30
  for (let name of propNames) {
32
31
  let value = object[name];
33
32
 
34
- object[name] = (value && typeof value === "object") ?
35
- deepFreeze(value) : value;
33
+ object[name] = value && typeof value === "object" ? deepFreeze(value) : value;
36
34
  }
37
35
 
38
36
  return Object.freeze(object);
@@ -10,4 +10,4 @@
10
10
  * @memberOf Monster
11
11
  * @author schukai GmbH
12
12
  */
13
- const ns = {};
13
+ const ns = {};
@@ -5,20 +5,19 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {internalSymbol} from "../constants.mjs";
9
- import {Base} from "../types/base.mjs";
10
- import {getGlobalFunction} from "../types/global.mjs";
11
- import {isFunction, isInteger} from "../types/is.mjs";
12
- import {Queue} from "../types/queue.mjs";
13
- import {validateFunction, validateInteger} from "../types/validate.mjs";
8
+ import { internalSymbol } from "../constants.mjs";
9
+ import { Base } from "../types/base.mjs";
10
+ import { getGlobalFunction } from "../types/global.mjs";
11
+ import { isFunction, isInteger } from "../types/is.mjs";
12
+ import { Queue } from "../types/queue.mjs";
13
+ import { validateFunction, validateInteger } from "../types/validate.mjs";
14
14
 
15
- export {Processing}
15
+ export { Processing };
16
16
 
17
17
  /**
18
18
  * @private
19
19
  */
20
20
  class Callback {
21
-
22
21
  /**
23
22
  *
24
23
  * @param {function} callback
@@ -30,7 +29,7 @@ class Callback {
30
29
  constructor(callback, time) {
31
30
  this[internalSymbol] = {
32
31
  callback: validateFunction(callback),
33
- time: validateInteger(time ?? 0)
32
+ time: validateInteger(time ?? 0),
34
33
  };
35
34
  }
36
35
 
@@ -42,20 +41,14 @@ class Callback {
42
41
  run(data) {
43
42
  const self = this;
44
43
  return new Promise((resolve, reject) => {
45
-
46
- getGlobalFunction('setTimeout')(() => {
47
- try {
48
- resolve(self[internalSymbol].callback(data));
49
- } catch (e) {
50
- reject(e);
51
- }
52
-
53
- },
54
- self[internalSymbol].time);
55
-
56
-
57
- })
58
-
44
+ getGlobalFunction("setTimeout")(() => {
45
+ try {
46
+ resolve(self[internalSymbol].callback(data));
47
+ } catch (e) {
48
+ reject(e);
49
+ }
50
+ }, self[internalSymbol].time);
51
+ });
59
52
  }
60
53
  }
61
54
 
@@ -81,7 +74,6 @@ class Callback {
81
74
  * @summary Class to be able to execute function chains
82
75
  */
83
76
  class Processing extends Base {
84
-
85
77
  /**
86
78
  * Create new Processing
87
79
  *
@@ -98,26 +90,28 @@ class Processing extends Base {
98
90
  * @param {function} callback Callback
99
91
  * @throw {TypeError} the arguments must be either integer or functions
100
92
  */
101
- constructor() {
93
+ constructor(...args) {
102
94
  super();
103
95
 
104
96
  this[internalSymbol] = {
105
- queue: new Queue
97
+ queue: new Queue(),
106
98
  };
107
99
 
108
- let time = 0
100
+ let time = 0;
109
101
 
110
- for (const [, arg] of Object.entries(arguments)) {
102
+ if (typeof args !== "object" || args[0] === null) {
103
+ throw new TypeError("the arguments must be either integer or functions");
104
+ }
105
+
106
+ for (const [, arg] of Object.entries(args)) {
111
107
  if (isInteger(arg) && arg >= 0) {
112
108
  time = arg;
113
109
  } else if (isFunction(arg)) {
114
- this[internalSymbol].queue.add(new Callback(arg, time))
110
+ this[internalSymbol].queue.add(new Callback(arg, time));
115
111
  } else {
116
- throw new TypeError('the arguments must be either integer or functions')
112
+ throw new TypeError("the arguments must be either integer or functions");
117
113
  }
118
114
  }
119
-
120
-
121
115
  }
122
116
 
123
117
  /**
@@ -130,11 +124,10 @@ class Processing extends Base {
130
124
  * @throws {TypeError} value is not an integer
131
125
  */
132
126
  add(callback, time) {
133
- this[internalSymbol].queue.add(new Callback(callback, time))
127
+ this[internalSymbol].queue.add(new Callback(callback, time));
134
128
  return this;
135
129
  }
136
130
 
137
-
138
131
  /**
139
132
  * Executes the defined functions in order.
140
133
  *
@@ -147,10 +140,11 @@ class Processing extends Base {
147
140
  return Promise.resolve(data);
148
141
  }
149
142
 
150
- return this[internalSymbol].queue.poll().run(data).then((result) => {
151
- return self.run(result);
152
- });
153
-
143
+ return this[internalSymbol].queue
144
+ .poll()
145
+ .run(data)
146
+ .then((result) => {
147
+ return self.run(result);
148
+ });
154
149
  }
155
-
156
150
  }
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  /**
4
2
  * Copyright schukai GmbH and contributors 2022. All Rights Reserved.
5
3
  * Node module: @schukai/monster
@@ -7,12 +5,11 @@
7
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
8
6
  */
9
7
 
8
+ import { ID } from "../types/id.mjs";
9
+ import { isObject } from "../types/is.mjs";
10
+ import { validateString } from "../types/validate.mjs";
10
11
 
11
- import {ID} from "../types/id.mjs";
12
- import {isObject} from "../types/is.mjs";
13
- import {validateString} from "../types/validate.mjs";
14
-
15
- export {trimSpaces}
12
+ export { trimSpaces };
16
13
 
17
14
  /**
18
15
  * This special trim function allows to trim spaces that have been protected by a special escape character.
@@ -23,14 +20,14 @@ export {trimSpaces}
23
20
  * trimSpaces(' hello \\ ')
24
21
  * </script>
25
22
  * ```
26
- *
23
+ *
27
24
  * Hint: One stroke is escaped by the javascript interpreter, the second stroke escapes the stroke.
28
- *
25
+ *
29
26
  * ```text
30
27
  * a\ b ↦ a b
31
28
  * a\\ b ↦ a\ b
32
29
  * ```
33
- *
30
+ *
34
31
  * @license AGPLv3
35
32
  * @since 1.24.0
36
33
  * @memberOf Monster.Util
@@ -39,40 +36,36 @@ export {trimSpaces}
39
36
  * @return {string}
40
37
  * @throws {TypeError} value is not a string
41
38
  */
42
- function trimSpaces(value) {
43
-
39
+ function trimSpaces(value) {
44
40
  validateString(value);
45
41
 
46
- let placeholder = new Map;
47
- const regex = /((?<pattern>\\(?<char>.)){1})/mig;
42
+ let placeholder = new Map();
43
+ const regex = /((?<pattern>\\(?<char>.)){1})/gim;
48
44
 
49
45
  // The separator for args must be escaped
50
46
  // undefined string which should not occur normally and is also not a regex
51
- let result = value.matchAll(regex)
47
+ let result = value.matchAll(regex);
52
48
 
53
49
  for (let m of result) {
54
- let g = m?.['groups'];
50
+ let g = m?.["groups"];
55
51
  if (!isObject(g)) {
56
52
  continue;
57
53
  }
58
54
 
59
- let p = g?.['pattern'];
60
- let c = g?.['char'];
55
+ let p = g?.["pattern"];
56
+ let c = g?.["char"];
61
57
 
62
58
  if (p && c) {
63
- let r = '__' + new ID().toString() + '__';
59
+ let r = `__${new ID().toString()}__`;
64
60
  placeholder.set(r, c);
65
61
  value = value.replace(p, r);
66
62
  }
67
-
68
63
  }
69
64
 
70
65
  value = value.trim();
71
66
  placeholder.forEach((v, k) => {
72
- value = value.replace(k, '\\' + v)
73
- })
67
+ value = value.replace(k, `\\${v}`);
68
+ });
74
69
 
75
70
  return value;
76
-
77
71
  }
78
-
@@ -7,7 +7,7 @@ describe('Monster', function () {
7
7
  let monsterVersion
8
8
 
9
9
  /** don´t touch, replaced by make with package.json version */
10
- monsterVersion = new Version('3.5.0')
10
+ monsterVersion = new Version("3.7.0")
11
11
 
12
12
  let m = getMonsterVersion();
13
13